C++test -C/C++対応自動テストツール-
継続的インテグレーション(CI)とParasoft製品の統合
注目を集める継続的インテグレーション
近頃、継続的インテグレーション(Continuous Integrationを略してCIと表現されます)が注目を集めています。これにはどのような背景があるのでしょうか。また、私たちのソフトウェア開発という業務にとって、CIとはどのような意味を持つのでしょうか。
ソフトウェア開発において、つぎのような問題が発生することがあります。
ソフトウェア開発において、つぎのような問題が発生することがあります。
- 手戻りが起きる
- 直したはずの不具合が再発する
- 過去のバージョンでビルドができない
- 手作業によるミス
これらの問題には、バージョン管理の問題、単体テストが不十分、自動化できる作業を手作業でやっているなど、様々な原因が隠れています。その上、これらの問題が発覚するのはプロジェクト終盤で、リリースが迫ったプロジェクトは混乱に陥ります。インテグレーションを実行して初めて顕在化する問題が多いため、このようなことが起きてしまうのです。
継続的インテグレーション(CI)が生まれた背景にはアジャイル開発があります。とりわけ、エクストリームプログラミング(XP)では、できるだけ早く顧客(ステークフォルダ)からフィードバックを得るために、いつでも動くソフトウェアを用意するという考えがあります。そのため、イテレーション(反復)開発を行い、結果としてインテグレーションは早い段階から繰り返し行われます。インテグレーションからフィードバックを受け取ったら迅速にこれを反映し、新たなフィードバックを得ることが重要だからです。インテグレーションの回数は必然的に多くなります。
このサイクルを維持するためには、自動化された仕組みが必要です。エクストリームプログラミング(XP)から継続的インテグレーションが生まれてきた背景はここにあります。いつでも検証可能な動くソフトウェアを得るためには、自動化されたインテグレーションが欠かせません。また、この仕組みによって品質の作り込みも行われるのです。
それでは、継続的インテグレーションは、エクストリームプログラミング(XP)を取り入れていない組織にとって関係のないものでしょうか。そうではありません。エクストリームプログラミング(XP)は問題解決のアプローチであり、そのプラクティスとして生まれた継続的インテグレーションも同様です。ソフトウェア開発の現場では、選択した開発手法に関わらず共通の問題が存在します。継続的インテグレーションを取り入れることは、多くのプロジェクトが抱える問題をも解決できるため、注目を集めているのです。
継続的インテグレーション(CI)が生まれた背景にはアジャイル開発があります。とりわけ、エクストリームプログラミング(XP)では、できるだけ早く顧客(ステークフォルダ)からフィードバックを得るために、いつでも動くソフトウェアを用意するという考えがあります。そのため、イテレーション(反復)開発を行い、結果としてインテグレーションは早い段階から繰り返し行われます。インテグレーションからフィードバックを受け取ったら迅速にこれを反映し、新たなフィードバックを得ることが重要だからです。インテグレーションの回数は必然的に多くなります。
このサイクルを維持するためには、自動化された仕組みが必要です。エクストリームプログラミング(XP)から継続的インテグレーションが生まれてきた背景はここにあります。いつでも検証可能な動くソフトウェアを得るためには、自動化されたインテグレーションが欠かせません。また、この仕組みによって品質の作り込みも行われるのです。
それでは、継続的インテグレーションは、エクストリームプログラミング(XP)を取り入れていない組織にとって関係のないものでしょうか。そうではありません。エクストリームプログラミング(XP)は問題解決のアプローチであり、そのプラクティスとして生まれた継続的インテグレーションも同様です。ソフトウェア開発の現場では、選択した開発手法に関わらず共通の問題が存在します。継続的インテグレーションを取り入れることは、多くのプロジェクトが抱える問題をも解決できるため、注目を集めているのです。
構成管理への継続的なコミットから始める
継続的インテグレーションが効果的だといっても、どの頻度で行うのが理想的でしょうか。手始めとしては、日に一度、週に一度といった定期的な実行も考えられます。よりよい方法はあるでしょうか。
これを考えるためにはワークフローを振り返り、最初の統合はどこで行われるかを考えてみます。複数の開発者、チームの成果物であるソースコードは統合されることが前提です。もちろん、規模に関係なく、ソースコードはあらゆる意味で統合されることが前提です。他の開発者が作成したプログラム、サードパーティ製ライブラリは自身のソースコードと統合することによって意味をなすのではないでしょうか。みなさんの環境ではソースコードはどのように管理されているでしょうか。現在では、多くのプロジェクトが、Subversion、CVS,などのバージョン管理システムや構成管理システムを利用していると思います。これらのリポジトリ、もしくはコミットが、最初の統合ポイントといえます。つまり、このときがもっとも早いインテグレーションすべきタイミングです。
リポジトリに何らかの変更が加えられたら、ビルド、テストを行い、変更による問題が混入していないことを確認するのが理想的です。この一連のプロセスを継続的に行うことで、問題が混入してもすぐに対応することができます。
これを考えるためにはワークフローを振り返り、最初の統合はどこで行われるかを考えてみます。複数の開発者、チームの成果物であるソースコードは統合されることが前提です。もちろん、規模に関係なく、ソースコードはあらゆる意味で統合されることが前提です。他の開発者が作成したプログラム、サードパーティ製ライブラリは自身のソースコードと統合することによって意味をなすのではないでしょうか。みなさんの環境ではソースコードはどのように管理されているでしょうか。現在では、多くのプロジェクトが、Subversion、CVS,などのバージョン管理システムや構成管理システムを利用していると思います。これらのリポジトリ、もしくはコミットが、最初の統合ポイントといえます。つまり、このときがもっとも早いインテグレーションすべきタイミングです。
リポジトリに何らかの変更が加えられたら、ビルド、テストを行い、変更による問題が混入していないことを確認するのが理想的です。この一連のプロセスを継続的に行うことで、問題が混入してもすぐに対応することができます。
図 1 構成管理を中心としたCIイメージ















