継続的インテグレーション ( CruiseControl など)はいつプロジェクトに値を追加しますか?
次のような要素を実行します
継続的インテグレーションによって付加される価値に違いをもたらしますか、それとも常にトラブルに値するものですか?
プロジェクトを始める一人でも価値があると思います。早く設定すればするほど簡単になり、悩みや悩みが多かったときに心配したり望んだりする時間を短縮できます。
最初からでも、コードがチェックインされるたびにすべての単体テスト(存在する場合でも)が実行されることを確認します。それ以外の場合は、毎回自分でそれらを実行することに依存しているので、忘れてしまいます。
私の経験では、最近CC.NetやJenkinsなどを使用するのは簡単なので、待つ価値はありません。ソース管理と同じレベルの必要性に近づけました。
編集:最初は、継続的に「統合」することは少なく、継続的に「構築」することになりますが、より多くのバージョンと人々が関与するようになると、それは真の継続的な統合になります。
私見、それは常にトラブルの価値があります。単体テストがなく、統合がプロジェクトをチェックアウトしてビルドするだけの場合でも、まだ先に進んでいます。 CIビルドが成功した場合は、どの馬鹿でもコードをチェックアウトしてビルドできます。これはおそらく、地球上のソフトウェアプロジェクトの85%を先導します。
また、価値はプロジェクトの規模に応じて変わると主張します。
ゲインは、それを何に使用するかによって異なります。テストを使用すると、機能などを壊すかどうかがわかりますが、これに関係なく、常に1つの利益が得られます。
ロボットがゼロからソースコードをビルドしたため、現在の状態のソースコードがビルドされるかどうかがわかります。
誰かがそれを壊した場合、あなたはそれを直ぐに学ぶことができるので、それを修正することができます。
それだけでも多くの価値があります。残りはすべて追加です。
継続的な統合には、自動化されたプロセスと同じくらいの価値があります。
プロジェクトには、自動化された堅固な基盤が必要です[〜#〜] and [〜#〜]反復可能なプロセス。以下が自動化され、確定的であることを確認する必要があります。
- 単体テストの数
- 変更が行われる頻度
- 支店開発
- チームサイズ
これらはすべて、CIシステムの潜在的な価値に直角です。それらは、システムの実装方法、システムが必要とするリソースの数に影響を与える可能性がありますが、価値には影響しません。それは、CIの価値が自動化されたプロセスを頻繁かつ自動的に実行することにあり、それによってエラーがより速く発生するためです。
ビルドサーバーの使用を開始したときに解消された最大の問題は、リリース直前のパニックであり、どの依存関係がソース管理にチェックインされなかったか、どのプロジェクトがコンパイルを停止したかなど、あらゆる種類の細かい詳細を学ぶことです。どのプロジェクトが実行を停止するテストを持っているか、最近のどの変更が統合テストを壊したか(実際にサーバーにヒットしたり、Webブラウザーを駆動したりする遅いテスト)
ビルドサーバー(私の場合はTeamCity)の使用に費やした時間は、最初のリリースで簡単に返済されました。
-単体テストの数
適切に記述された単体テストは、コンパイルにかかる時間で実行され、コンパイル後のステップとして追加できます。したがって、これはビルダーサーバーを使用するための引数ではありません。開発者が通常、コンパイル後のステップとして単体テストを設定しないという事実は、それについての良い議論です。また、遅い統合テストがある場合、ビルドサーバーはこれらを毎晩、一晩実行しても問題ありませんが、ビルドサーバーがそれらを実行していない限り、遅い統合テストへの投資を取り戻すことはできません。手動で遅い統合テストを頻繁に開始します。
-変更が行われる頻度
コードが頻繁に変更されない場合は、実行する必要のあるユニットテストアセンブリなどを忘れます。コードが頻繁に変更される場合は、ハサミで安全に実行できることを確認するために、頻繁にコンパイルおよびテストを実行する必要があります。 (迅速な変更=人的ミスが多く、ビルドサーバーがそれらをより速く検出できるほど、はさみで実行できる速度が速くなります)
-ブランチ開発
ソースコントロールやビルドサーバーなどを配置する前は、一般に、分岐は何かを精神的に追跡するためのオーバーヘッドになると考えていました。そのため、ビルドサーバーなしでブランチ開発を行うのが簡単か難しいかは本当にわかりません。チームはビルドサーバーを使用してブランチ開発を試みる可能性が高いと思います。
-チームサイズ
ソース管理があれば、開発者が災害でチェックすることについて落ち着くことができます-それを元に戻すことはできますが、それを知ることができるのはビルドサーバーです。
この値は、チームとプロジェクトの規模に応じて変化します。また、複雑さに応じて拡張されます。単体テスト、統合/システムテスト、静的分析、メトリックの生成、パッケージ化、展開など、さまざまなプロセスを実行する場合、プロセスの複雑さが増します。これらを自動化することは、1人のチーム(私のような)であっても、より小さなプロジェクトに取り組んでいる場合でも、大きな利益になります。