2009-05-13 4 views
6

ユニットテスト用の最適なポリシーは何ですか?ユニットテストビルドファイル

私が尋ねる理由は、私の会社は、信頼性の高い組込み機器を生産です。ソフトウェアパッチは、顧客に何千もの費用がかかるため、オプションではありません。このため、私たちは非常に厳密なコード品質手続き(単体テスト、コードレビュー、トレーサビリティなど)を持っています。これらの手順は、ビルドファイルに適用されています(autotoolsを知っている必要がある場合、私は同情を期待しています)。

Uh ...プロジェクトは、ビルドファイルをレビューし、単体テストとしてマークします。

は、もっと良い方法があるように持っています。アイデア?

答えて

6

ここでダース以上のプラットフォーム間で大規模なコードベース(コードの行数百万)を構築するときに我々が撮影したアプローチです。

  • Makefileの変更は、ビルドチームによって確認されます。これらの人々は、ビルド環境で人がしがちなエラーを知っています。ビルドが壊れたときにそれが正しいと感じる人は、問題を見つける意欲を持っています。
  • Makefileのに行くために必要なものを最小化するので、エラーの少ない機会があります。私たちはmakeの上にMakefileを生成するレイヤーを持っています。開発者はタグを使って上位のファイルに指定しなければなりません。たとえば、与えられたターゲットは共有ライブラリまたは単体テストです。通常、ターゲットは1行に定義され、生成されたMakefileには複数の設定/ターゲットが作成されます。 sconsのようなビルドツールでも、プラットフォーム固有の詳細なようなものを抽象化してターゲットを非常にシンプルにすることができます。
  • ビルドツールのユニットテスト。このツールはPerlで書かれているので、PerlのTest::Moreユニットテストフレームワークを使用して、上位レベルのファイルで正しいMakefileが生成されることを確認します。代わりにsconsのようなものを使用した場合は、their testing frameworkを使用します。
  • 夜間ビルド/テストスクリプトのユニットテスト。各プラットフォームで夜間にビルドを開始し、静的解析ツールを実行し、ユニットテストを実行し、機能テストを実行し、すべての結果を中央データベースに報告する一連のスクリプトを用意しています。主にsh/bash/ksh/etcのユニットテストフレームワークshunit2を使用して、さまざまなスクリプトを個別にテストします。
  • ビルド/テストプロセスのエンドツーエンドテスト。私は生産コードではなく小さなソースツリーで動作するエンドツーエンドのテストに取り組んでいます。後者はビルドに数時間かかることがあるためです。これらのテストは、主に、コードカバレッジツールをアップグレードしたり、ビルドスクリプトを変更した後でも、ビルドターゲットが引き続き機能し、結果を中央データベースに報告することを目的としています。私のプロジェクトで
-2

ビルドファイルは非常に頻繁に変更されません。さらに、以前のプロジェクトのビルドファイルを再利用することもできます(一部の変数を変更するだけで、わかりやすいセクションに移行できました)。ビルドファイルを単体テストする必要はありません。それは他のプロジェクトでは違うかもしれません。

2

既知のバージョンのソフトウェア(またはビルドの観点から見て簡単なコード)をビルドファイルにコンパイルして、新しいビルドツールで得られた結果と期待される結果を比較します(検証済みのバージョンビルドツールの)。