継続的インテグレーション
CIは、テスト駆動開発の実践を通して書かれた自動化されたユニットテストと組み合わせて使用することを意図している。これは、メインラインにコミットする前に、開発者のローカル環境ですべてのユニットテストを実行し、通過させることによって行われる。これにより、ある開発者の進行中の作業が他の開発者のコピーを壊してしまうことを防ぐことができる。必要に応じて、フィーチャートグルなどを使用してコミット前に部分的に完成した機能を無効にすることができる。
継続的インテグレーションは、次のようなメリットを生み出すことを目的としている。
インテグレーションバグは早期に発見され、小さな変更セットのため追跡が容易になる。これにより、プロジェクトのライフサイクルにわたって時間とコストの両方を節約することができる。
リリース日の土壇場の混乱を避けることができる。
単体テストが失敗した場合やバグが発生した場合、開発者がデバッグせずにコードベースをバグのない状態に戻す必要がある場合、少数の変更しか失われない(統合は頻繁に発生するため)。
テスト、デモ、リリースの目的で「現在の」ビルドを常に利用可能にする。
頻繁にコードをチェックインすることで、開発者はモジュール化された複雑さの少ないコードを作成するようになる。
継続的な自動テストには、次のようなメリットがある。
頻繁に行われる自動テストの規律を強化
ローカルな変更によるシステム全体への影響を即座にフィードバック
自動テストとCIから生成されたソフトウェアメトリクス(コードカバレッジ、コードの複雑さ、機能の完全性のメトリクスなど)は、機能的で高品質なコードの開発に開発者を集中させ、チームの勢いを高めるのに役立つ。