7

私は最近、実装の 90% を完了した後、テスト中に 100% のブランチ カバレッジを実証する必要があると判断した非常に大規模な C++ プロジェクトに取り組み始めました。プロジェクトは組み込みプラットフォーム (Green Hills Integrity) でホストされています。同様の環境でコード カバレッジ製品を使用した StackOverflow の他のユーザーからの提案や経験を探しています。これらの種類のツールに関する肯定的および否定的なコメントに興味があります。

4

4 に答える 4

5

100% の支店カバレッジ? 特に一部のブランチ (たとえば、ステート マシンの case ステートメントのデフォルト) を実行できないようにする必要があるため、これはかなりの要件です。いくつかの例外があると思いますが、そうでない場合は、開始する前にカバレッジ テストで実行できることと実行できないことを理解する必要があるかもしれません。

組み込みシステムのほとんどのカバレッジ テストは、実際には PC 上で実行されます。コードが移植され、マイクロコントローラーの特定の側面がソフトウェアでエミュレートされ、Bullseyeまたは別の同様の PC コード カバレッジ ユーティリティが実行されます。これが行われる理由は、マイクロコントローラーとコンパイラー/デバッガー/テスト環境が多すぎて、それぞれのコード カバレッジ ツールを開発できないためです。

特定の組み込みプラットフォーム用のコード カバレッジ ツールが存在する場合、PC プラットフォーム用に開発されたものほど強力で、構成可能で、使いやすく、バグがありません。プロセッサには、追加のデバッグ コードをファームウェアに挿入せずに適切なコード カバレッジを実行するために必要なトレース機能 (ハイエンド エミュレーション ハードウェアなし) がないことがよくあります。リアルタイムシステム。

ハードウェア固有のコードを抽象化できる限り、コードの移植はそれほど難しくありません (そして、C++ を適切に使用しているので、それは簡単なはずですよね? ;-D )。遭遇する最大の問題は型です。型は、C よりも C++ でより適切に指定されていますが、依然としていくつかの問題を引き起こします。types.h または同様の設定を使用して、使用する各型とその解釈方法をコンパイラに正確に伝えるようにしてください。

その後、PC でコア ロジックをテストする街に行くことができます。そのために必要なソフトウェア エミュレーションの開発に関心がある場合は、低レベルのハードウェア ドライバーをテストすることもできますが、タイミングの問題は多少面倒になる可能性があります。

MxVDevなどのソフトウェア テスト ツールは、マイクロコントローラーのエミュレーションの多くを実行し、タイミングの問題にも役立ちますが、そのような助けがあったとしても、多少の作業は必要です。

システム自体でこれを行う必要がある場合は、カバレッジ機能を備えたプロセッサ用のエミュレーターを購入する必要があります。これは安価な提案ではありません (多くのエミュレーターは、ツールとエミュレーション ハードウェアのフル セットで 30,000 ドル以上かかります)。自動車産業や航空宇宙産業などの信頼性の高い環境で使用される多くのツールの 1 つです。

-アダム

免責事項: 私は MxVDev を作成する会社で働いています。

于 2008-10-16T03:11:55.113 に答える
3

これまで、単体テストとコード カバレッジにCantatavectorcastを使用してきました。また、Greenhills ツールも使用しており、これらのツールは両方とも greenhills 開発ツールで動作します。ほとんどのテストを PPC シミュレーターで実行し、ハードウェアに依存するテストのみを JTAG ポッドを介してターゲット ハードウェアで実行します。Canatata と Vector のキャストは非常によく似ており、catata の方が使いやすく、機能もわずかに多くなっていますが、小さな追加機能がユーザー エクスペリエンスに大きな違いをもたらします。

一般に、高レベルのブランチ カバレッジを達成したい場合は、テスト容易性のためにコードを設計する必要があります。テストすればするほど、テスト可能なコードを書くことについて学ぶことができます。

また、エンディアンが原因で、PC テストと組み込みテストで問題が発生しましたが、これはハードウェア レイヤーの問題にすぎません。

さらに、これらのツールは RTCA/DO-178B 規格の認定を受けています。

于 2008-11-07T07:54:11.123 に答える
2

Adam と同様に、埋め込みコードを PC ベースのハーネスに移植し、ほとんどのカバレッジとプロファイリングをそこで行います。AutomatedQA AQTime と Compuwares DevPartner を使用しましたが、どちらも優れた製品です。

カバレッジ ob-board を実行する必要がある場合は、インストルメント化されたバージョンのソースを作成するカバレッジ プロファイラーを使用する必要があります。これを行うために利用できる商用ツールとオープンソース ツールの両方がありますが、IMO では、多くの作業が追加されますが、あまり利益はありません。

すべてのエラー ハンドラーと例外ハンドラーにアクセスするには、多くのフォールト インジェクションが必要になるため、100% のカバレッジは野心的です。IMO、これはオンボードよりもハーネスで行う方が簡単です.

また、100% のコード カバレッジを要求した人には、100% のコード カバレッジが100% のテスト カバレッジとは決して一致しないことを指摘する価値があります。たとえば、次の関数を考えてみましょう。

int div(int a, int b)
{
return (a/b);
}

100% のコード カバレッジでは、この関数を 1 回呼び出すだけで済みます。100% のテスト カバレッジでは、さらに多くの呼び出しが必要になります。私自身のテスト戦略では、自動化されたテストケースを開発して許容レベルのテスト カバレッジを実現し、コード カバレッジ ツールを純粋にテストされていない領域を探す補助として使用しています。ある程度はテストの予算に依存します。私にとって、100% のコード カバレッジは、それが提供するものに対してコストがかかりすぎます。

于 2008-10-16T07:21:27.187 に答える
0

SD C++ テスト カバレッジを参照してください。これは、C++ のさまざまな方言 (ANSI、GNU、MS...) 用の (ブランチ) テスト カバレッジ ツールのファミリであり、フットプリントが非常に小さく、簡単に実行できるため、実際の組み込みシステム ハードウェアでもうまく機能します。収集したテスト カバレッジ データをエクスポートする方法。実際の組み込みハードウェアに依存しない GUI カバレッジ表示があり、完全なカバレッジ レポートの概要も生成されます。

[私は、これらのツールを提供する会社のプリンシパルです。]

于 2010-05-01T10:28:01.323 に答える