14

大規模な自動化された統合テストスイートの「問題」があります。構築時間は合理的ですが(< 1時間)、テストは通常​​6時間以上かかります。ナイトリービルド対継続的インテグレーション:ロングランニング自動テスト

ビルド実行時にテストされたこの大きな機能のチャンクを持つことは素晴らしいことですが、ソースツリーを「常にビルド可能」な状態に保つのに非常に役立つことがわかっている。

私は、相違点を詳しく説明したthis oneのようなディスカッションスレッドを検討しました。

これは、いくつかの質問に私をリード:

  1. は、CIのディクテーションをないか、統合テストの自動化対ユニットをお勧めしますか?過去にユニットオンリーしか聞いたことはありませんが、クイック検索でそのような記述(または論理的根拠)を見つけられません。

  2. ビルド+自動化されたテスト時間/比率を組み合わせてチームの有効CIを得るための良い「ベストプラクティス」は何ですか?私の腸は、これが最悪の場合として< 2時間でなければならないと、そしておそらく< 1時間が本当に効果的であると私に伝えます。理論的には、テストを並行して実行し、おそらく2時間以内にテストを実行する可能性がありますが、これはまだ3時間実行されます。

  3. 長時間実行するNightly Builds + Integration TestからCIへの最善の方法は何ですか?私は、統合テストを続けている夜間ビルドと組み合わせて、いくつかの骨格ユニットテストだけでCIビルドを考えています。

どれツーリング勧告は、いくつかのものがここにあります

+0

更新 - アイテム1-3は対処されましたが、ツーリング推奨はありませんでした。 CruiseControl.NETは明らかな選択です - C#/ C++ Windowsのみのコードベースを検討する価値のあるものはどれですか? – holtavolt

+0

ちょうどこれにつまずいた。私たちはWindows C#のために[Jenkins](http://jenkins-ci.org/)を試しています。また、TeamCityとBamboo – KCD

答えて

13

は、ほとんどのプロジェクトのために、しかし、10分ビルドのXP ガイドラインは、妥当な範囲内で完全に です。私たちの 近代プロジェクトのほとんどがこれを達成しています。それは の価値があります。 は、すべて 分になると、ビルド時間が短縮されます。 はコミットする度に各開発者 に保存される分です。 CI は頻繁にコミットする必要があるため、多くの時間が になります。

出典: http://martinfowler.com/articles/continuousIntegration.html#KeepTheBuildFast

それが6時間を要しないのはなぜ?いくつのテストがありますか?ユニットテストと統合テストの比率はどのくらいですか?あなたは積極的にもっと多くの統合テストを持っているか、あなたの単体テストは本当に単体ではありません。あなたのユニットテストはDBに触れていますか?これは問題かもしれません。

6時間は、長い長さ時間です。上記の記事にはいくつかのヒントがあります。

+0

Fowlerの記事へのリンクありがとうございます。はい - 私たちのテストベッドは、ほぼ完全に統合されたテストです。これは明らかに問題の一部です(そして、私はチームを説得したいと思っており、マネジメントは変化に投資する価値があります)。 – holtavolt

+3

テストの優先順位付けがあります。少なくとも、チームに優先順位1、2、3のスイートをテストし、CIでプライオリティ1のテストを実行するように説得することはできますか?もちろん、これは、適切なカバレッジを確保するために、テストチームが一定の祝福されたビルドに対して残りのテストを定期的に(毎日)実行する必要があることを意味します。ガイドラインとして、Pri1テストは、主要なシナリオ/統合テストの小さなセットであり、失敗した場合、ビルドが一般的にトーストであり、主要機能が利用できないことを意味します。 – nithins

+0

テストがCIで実行されていない場合、破損した場合、誰も分かりません。あなたがそれを実行していない場合は、それを削除してください、少なくともあなたは自分自身に正直である。 – time4tea

4

(WindowsのみのC#/ C++コードベース)も歓迎されています。

通常、ビルド数は&単位テストを実行するコンパイル、それを実行してローカルの受け入れテストを実行するテスト、統合テストを実行するビルドです。

あなたは確かにではありませんは、すべてを行う単一のビルドが必要です。

あなたのビルド時間はかなり長く聞こえます。ここでのポイントは、速いに何かが間違っているというフィードバックを与えることです。私はあなたのプロジェクトについてはあまりよく分かりませんが、コンパイルと単体テストを2〜3分で作成するようにしてください。非常に大規模なプロジェクトを除いて、これは完全に達成可能です。単体テストに時間がかかる場合は、その理由を尋ねる時間です。

6時間も非常に長い時間です。あなたのテストが正しいものをテストしていることは確かですか?広範囲のスコープテストがあまりにも多いですか?あなたはあなたのテストコードで非同期をよくモデル化していないという事実を補うためにどこでも "sleep()"を使っていますか?

Jez Humblesの書籍「Continuous Delivery」を入手して、ユニットインテグレーションテストの作成方法としてGrowing Object Oriented Softwareを見てください。 GOOSはJavaを実装言語として使用しますが、すべての概念は同じです。

+0

を見てください - ユニットテストはすばやく行われるはずです! - あなたは1分以内に数千の単位テストを実行できるはずです。 – time4tea

+0

はい - 私はこれらがCIの意図であることを理解しています。私は現在、ユニットテストではなく*統合テスト*を実行していることを強調します。これらの統合テストは広範囲に及んでおり、バグが見つかって固定されているため、これらのケースをカバーする新しいテストが追加されています(例えば、回帰テストが混在しています)。 – holtavolt

+1

さて、確かに - あなたはどれくらいありますか?彼らはどのようなものをカバーしていますか?どのくらいの重複がありますか?そこには睡眠があるの?どうしてそんなに長くかかるの?あなたはバグをどういう意味ですか?テスターはうまくいかないUATの何かを見つけたら、バグを報告しますか?バグではなく未完成のフィーチャーなので、より低いレベルのテストを書いてください.... – time4tea

関連する問題