2

継続的インテグレーションに関する私の知識を検証するために、この質問があります。私が理解していることによると、継続的インテグレーションは、ビルドにバグやエラー [赤信号] があるかどうかをできるだけ早く確認するのに役立ちます。

すべての開発者が TDD について知っていると思います。彼らはサーバーに何かをプッシュする前に常にテストを行います。これは、プッシュされる前にプッシュされたコードを渡す必要があることを意味します。つまり、常に青信号が表示されているため、ci サーバーはもう必要ありません。

私の質問は、開発において常にTDDのルールに従う優れたチームがある場合、ciサーバーが必要ですか?

4

3 に答える 3

5

CIサーバーが何をしているかによります。中央のソースコードリポジトリにコミットする前に、すべての開発者にすべての単体テストをローカルで実行させることもできますが、開発者はどの単体テストを実行するかをどのように知るのでしょうか。それらすべて、およびすべての統合テスト、UIテストなどを実行する必要があります。これは、多数のテストで長い時間がかかる可能性があります。

通常、CIサーバーは、より長い統合テストを一晩実行して、重大な変更が導入されているかどうかを確認するように構成されます。

また、見落としているCIサーバーのもう1つの重要な機能は、ソースコードの実際の構築です。新しいファイルをコミットするのを忘れたか、ソースコードが構築中の開発環境について作成しているという仮定があるために、ソースコードリポジトリに変更をコミットするときにビルドエラーが発生することはよくあります。

たとえば、プログラムファイルディレクトリにインストールされているサードパーティのライブラリを参照している可能性があります。これは、サードパーティのライブラリがインストールされているため、すべての開発者のマシンで正常にビルドされますが、ビルドサーバーでは、ビルドが失敗するため、不正な参照が検出されます。

また、CIサーバーでビルドとコミットのテストを実行すると、統合の問題がより迅速に明らかになるだけでなく、コミットの直後にチーム内のすべての開発者に通知できるため、問題の原因がすぐにわかります。

于 2013-02-21T22:03:23.393 に答える
4

すべてのチームが継続的インテグレーションを行う必要がありますが、これは CI サービスが必要だという意味ではありません。これについては、James Shore による古典的な投稿があります。

継続的インテグレーションは態度であり、ツールではありません

したがって、サーバーがなくても、その姿勢があれば、CI の大きなメリットを得ることができます。とはいえ、CI サーバーが役立つ理由は数多くあります。

  1. 人間は間違いやすいものであり、たとえ最善の意図を持っていても、常に物事を正しく行うとは限りません。サーバーは自動化されており、予測可能です。
  2. サーバーは、一般的な開発者ワークステーションよりもクリーンな環境でビルドを実行します。これにより、展開/出荷するまで気付かない問題を浮き彫りにすることができます。
  3. 複数のプラットフォームをサポートしている場合、優れた CI サーバーはそれらすべてを簡単にテストできます。
  4. 統合テストが多数あり、単体テストよりも遅くなる可能性がある場合、すべての開発者にすべての事前チェックインを実行するよう要求するのは面倒な場合があります。代わりに、高速なユニット + スモーク テストを実行して問題の 99% を検出し、CI サーバーに完全なスイートを実行させることができます。
  5. サーバーは、時間の経過に伴う傾向を示すビルド履歴を維持できます。これは、たとえば、ドリフト分析 (パフォーマンスの傾向を確認する) に最適です。
  6. CI サーバーは、サーバーごとに異なる多くの追加機能を提供します (リリース ビルドのサポート、柔軟なスケジューリング、通知、並列ビルドなど)。

要約すると、CI の主な利点を得るためにサーバーは必要ありません。しかし、適切なサーバー ソフトウェアからは、関連する多くの利点を得ることができます。

于 2013-02-22T06:12:37.710 に答える
1

まず、すべてのプロジェクトでTDDを購入できるかどうかは疑問です。TDDは高価であり、多くの場合、開発者は機能を直接コーディングして、より単純な単体テストであってもテストを忘れることを好みます。TDDを実際に適用すると、機能の問題が検出されますが、多くの異なるコンポーネントが統合された大規模なプロジェクトのフルスケールである必要はありません。簡単な例は、機能している各ピースをグループ化することですが、同じAPIに揃えられたピースを使用できません(間違ったバージョンのライブラリを使用しました...)。完全な製品ビルドがあると、統合に関連する問題を見つけるのに役立ちます。継続的に使用すると、導入時に問題を見つけるのに役立ちます。単体テストは各機能またはサブ機能に個別に焦点を当てているため、単体テストではこれらの問題を検出できない場合があります。

于 2013-02-21T22:00:34.397 に答える