継続的な統合に関連するオーバーヘッドがあります。たとえば、セットアップ、再トレーニング、認識アクティビティ、データの問題であることが判明した「バグ」を修正するための停止、懸念事項のプログラミングスタイルの強制などです。
継続的インテグレーションは、どの時点でそれ自体に費用がかかりますか?
編集:これらは私の発見でした
セットアップは、VSSまたはTFSから読み取り、Nantを備えたCruiseControl.Netでした。
失敗のいくつかの理由を以下に示しますが、これらはセットアップとは関係ありません。
調査コスト:赤信号の原因がコード、データ品質、またはインフラストラクチャの問題(ネットワークの問題、ソース管理からのタイムアウトの読み取り、サードパーティサーバーなど)の真の論理的不整合によるものかどうかの調査にかかった時間ダウンなど)
インフラストラクチャに対する政治的コスト:テスト実行の各メソッドに対して「インフラストラクチャ」チェックを実行することを検討しました。ビルドサーバーを交換する以外、タイムアウトの解決策はありませんでした。赤テープが邪魔になり、サーバーの交換はありませんでした。
単体テストの修正コスト:データ品質の問題が原因の赤信号は、誤って記述された単体テストの指標になる可能性があります。そのため、データに依存する単体テストは書き直され、不良データによる赤信号の可能性を減らしました。多くの場合、ユニットテストを正確に実行できるように、必要なデータがテスト環境に挿入されました。データをより堅牢にすると、このデータに依存している場合、テストはより堅牢になります。もちろん、これはうまくいきました!
カバレッジコスト、つまり、既存のコードの単体テストの記述:単体テストカバレッジの問題がありました。単体テストのないメソッドが何千もありました。そのため、それらを作成するにはかなりの工数が必要になります。これはビジネスケースを提供するには難しすぎるため、今後、新しいパブリックメソッドにはユニットテストを使用することにしました。単体テストを行わなかったものは、「潜在的に赤外線」と呼ばれました。ここで重要な点は、静的メソッドは、特定の静的メソッドがどのように失敗したかを一意に判断する方法の重要なポイントであったということです。
オーダーメイドのリリースのコスト:Nantスクリプトはこれまでのところのみです。たとえば、EPiServer、CMS、またはUI指向のデータベース展開用のCMS依存ビルドにはあまり役立ちません。
これらは、1時間ごとのテスト実行と夜間のQAビルドのためにビルドサーバーで発生した問題の種類です。ビルドマスターはリリース時にこれらのタスクを手動で実行できるため、特にワンマンバンドと小さなビルドでこれらが不要であることを楽しませます。したがって、シングルステップビルドは、私の経験ではCIの使用を正当化するものではありません。より複雑なマルチステップビルドについてはどうですか?これらは、特にNantスクリプトなしでは、構築するのが面倒です。したがって、作成したとしても、これらはもはや成功しませんでした。赤信号の問題を修正するコストは、利益を上回りました。最終的に、開発者は興味を失い、赤信号の妥当性を疑問視しました。
公平に試してみましたが、CIは高価であり、単に仕事を終わらせるのではなく、周辺で多くの作業をしていると思います。アラームシステムを導入および保守するよりも、大規模なプロジェクトを大量に作成しない経験豊富な開発者を採用する方が、費用対効果が高くなります。
これらの開発者が去っても、これは事実です。優れた開発者が辞めるかどうかは問題ではありません。彼が従うプロセスにより、要件仕様、設計仕様を記述し、コーディングガイドラインに準拠し、コードが読みやすくなるようにコメントすることが保証されます。これはすべて見直されます。これが発生していない場合、彼のチームリーダーは仕事をしていません。これは、マネージャーなどが引き受ける必要があります。
CIが機能するためには、単体テストを作成し、完全なカバレッジを維持し、大規模なシステムの機能するインフラストラクチャを確保するだけでは不十分です。
結論:リリース前にできるだけ多くのバグを修正することがビジネスの観点からも望ましいかどうか疑問に思うかもしれません。CIには、顧客がUATで特定できる少数のバグをキャプチャするための多くの作業が含まれます。または、保証期間が期限切れになった場合、クライアントサービス契約の一部として会社が修正の支払いを受けることができます。