過去 20 年間で、モバイル、スマートデバイス、IoT、クラウドなどのテクノロジーの進歩により、何百万もの新しいアプリケーションが生み出されました。高い品質と予測性を備えたアプリケーションを迅速に開発するために、企業のソフトウェア開発プロセスは進化しています。2000 年代初頭、「軽量」なアジャイル ソフトウェア開発が普及し始めました。アジャイルとは、共同作業、継続的な計画、継続的なテストを重視した反復型ソフトウェア開発プロセスです。
継続的インテグレーションと継続的デリバリー (CI/CD) は、アジャイル手法の延長線上にあり、主にコードの統合およびテストとソフトウェア配布の自動化に必要なツールやプロセスに焦点を当てたものです。CI/CD は、アプリケーションの開発と配布の高速化を可能にするものとして広く利用されています。
継続的インテグレーション (CI) とは
継続的インテグレーションとは、開発者が自分のコードを 1 日に数回、共有メインラインに統合する開発手法です。少しずつコードを開発し、統合することには、いくつかのメリットがあります。各コードのインクリメントはメインラインから大きく乖離したものではないため、マージを迅速に行え、エラーが発生しにくく、欠陥の検出も非常に簡単です。CI ワークフローでは、開発者はまず新規または変更済みのコードをローカルでテストし (上図の手順 1)、次にコードをメインラインに統合し (手順 2)、最後に CI ビルド (手順 3) と自動テスト (手順 4) に正常に合格したことを検証します。開発者は、次のタスクに移る前に、ビルドやテストの失敗に対処します。
継続的デリバリー (CD) とは
CI ビルドと自動テストが正常に完了したら、チームはそのソフトウェアを実稼働環境に自動的にリリースすることを決定できます。このように、リリースプロセス全体を自動化する手法を、継続的デリバリーと呼びます (上図の手順 5)。CI は CD を導入するための必要条件ですが、ビジネスニーズに応じて CD を導入しない場合もあります。
CI/CD のメリット
CI や CI/CD を導入する主なメリットは次のとおりです。
- リスクの軽減 - 少しずつ開発し、配布することで、プロジェクトのリスクを軽減します。
- コミュニケーションの向上 – コード変更はすべてコードのメインライン上で行われるため、コードの共有と共同作業が促進されます。
- 高速化と高い費用効率 - 変更を少しずつ進めることでコードのマージに必要な時間と労力が削減され、欠陥の検出と修正も容易になります。
- 生産性の向上 - プロセスが完全に自動化されているため、手動テストなど、時間がかかりエラーが発生しやすい手作業が不要になります。
- 一貫性と品質の向上 - 自動テストは、予測可能性、再現性、および信頼性の高いアウトプットを実現します。
静的コード解析が CI に不可欠な理由
静的コード解析ツールは、プログラムを実行せずにコードを調べることで、コードの欠陥を検出します。静的コード解析が CI に不可欠である理由は、次のとおりです。
- 同時実行、データフロー、動的メモリ、数値的欠陥など、数百種類もの欠陥を非常に効率的に特定します。
- 開発サイクルの初期段階、つまりコードの記述時や変更時に即座に欠陥を検出します。
- MISRA C®、MISRA C++、JSF++ などのコーディング規約や、カスタム命名規則への準拠を検証します。
- セキュリティ脆弱性を検出し、CERT® C、CERT C++、ISO 17961、MISRA C:2012 Amendment 1 などのセキュリティ標準に準拠しているかどうかを確認します。
- 形式的手法を使用して、オーバーフロー、ゼロ除算、範囲外の配列アクセス、その他のランタイムエラーがないことを証明します。
Polyspace® 静的コード解析製品は、CI で動作するように設計されており、Jenkins™ や Bamboo などの CI ツールを使用して簡単に自動化できます。
Polyspace Code Prover™ は、形式的手法を使用して、起こりうるすべての制御フローとデータフローにおいて重大なランタイムエラーが発生しないことを証明します。コード証明は、CI ビルドテスト (上記 CI ワークフロー図の手順 4) と統合することで、ソフトウェアのロバスト性をテストできます。
Polyspace Bug Finder™ は、コーディングルール違反、セキュリティ脆弱性、その他数百種類のバグをチェックし、コードメトリクスを計算します。開発者は、コードの送信前に Polyspace Bug Finder を使用して欠陥を検出し、コーディング規約への準拠を確認できます (例: 上記 CI ワークフロー図の手順 1)。Polyspace Bug Finder は、CI ビルドテスト (上図の手順 4) と統合して、アプリケーション全体の解析を行うこともできます。
Polyspace 製品の詳細と CI に統合する方法については、以下のページをご覧ください。