News and Views 2013 Spring / Vol. 5: 上流設計&組込み

コードカバレッジ工数の落とし穴 - いかに自動化を導入するか

シミュレーションにおけるコードカバレッジは、ASICやSoC、ASSPなどの開発において数多くのプロジェクトチームが導入しています。例えば、「ラインカバレッジやブランチカバレッジについては100%、エクスプレッション・カバレッジについても100%、ただし未達の場合には何故未達なのかの説明記述をプロジェクトで使用するレポート内に残さなくてはいけない」など、シミュレーションの運用に関する規約を定めているプロジェクトチームや企業もあります。しかし、このコードカバレッジを測定し、目標カバレッジを達成するための労力が膨大な作業になってきました。コードカバレッジの測定そのものは簡単ですが、複数のリグレッションテストの結果を集約し、またテストする必要のない箇所の解析(ウェイバー解析)や、カバレッジホールをターゲットとしたテスト作成に、多くの工数が必要となっています。

カバレッジに関する労力

図1. あるプロジェクトにおけるステートメント・カバレッジ達成の様子図1. あるプロジェクトにおけるステートメント・カバレッジ達成の様子

図1は、あるプロジェクトにおけるステートメント・カバレッジ達成の様子を示しています。実労働週が進むにつれて、始めのうちは順調にカバレッジが上がりますが、プロジェクトが経過するにつれて、100%達成が難しくなってきます。この難しさの要因は2つあります。

1つは、設計が複雑なためにカバレッジホールとなっているターゲットに対して、どのようなディレクテッド・テストのパターンを与えれば良いかの判断とパターンの作成が非常に困難になっているということです。バス上に書き出した値を一旦FIFOで受けて、そのFIFOが読み出されるタイミングを見極めてデータを読み出し、次にそのデータをアドレスとするフレームバッファからデータを読み込み処理する、というようなパターンを作成するのは決して容易な作業ではありません。

もう1つは、テスト除外対象の解析であるウェーバー解析です。ウェーバー解析は、再利用するIPブロックのあるモードを使用しないためにテストの対象から除外したり、同時に起こり得ない信号の組合せやステートマシンの遷移により、実機においてもそれ以上コードが活性化されないような部分を解析する作業です。カバレッジではテスト対象から除外しますが、この除外もHDLファイルのコード行番号による指定が一般的です。設計変更や修正が続くなかで、この除外指定を一緒に管理するのは簡単な作業ではありません。

前出のプロジェクトでは、このウェーバー解析に270人週、カバレッジホールをターゲットとしたパターンの記述に180人週要したと言います。合計で実に約9人年の工数となります。

フォーマル解析の応用

フォーマル解析技術は、1990年代に、特に最先端プロセッサの開発企業で採用されたプロパティ・チェッキングに端を発しています。ただし当時はプロパティやアサーションの記述言語はアカデミックであり、ツールのユーザもエキスパートに限定されていました。ツールや言語の習得に時間とコストを要するため、それが投資として見合うほんの僅かなプロセッサ開発企業のみが使用できたのです。それが2000年代に入り、解決できる問題のスコープを狭め、例えば接続性の検証など、限定された領域において自動化されたアプリケーションとして使用されるようになりました。

コードカバレッジとフォーマル解析

図 2. Questa CoverCheckによるコードカバレッジの自動化図 2. Questa CoverCheckによるコードカバレッジの自動化

Questa CoverCheckは、コードカバレッジの完全なクロージャを目指すフローに対して、その多くの工程をフォーマル解析技術によって自動化するソリューションです。シミュレーション技術とフォーマル解析技術を補完させ合うソリューションです。図2にある各ステップについて説明しましょう。

1. 到達不可能な領域を特定
まず、フォーマル解析エンジンを用いて、どのようなテストパターンを用いても、絶対に達することができない領域を特定します。これはフォーマル解析技術が得意とする分野です。

2. シミュレーションのカバレッジ指標を改善
絶対に達することができない領域をカバレッジ除外として指定してシミュレーションすることで、カバレッジが改善されます。カバレッジはすべての対象を分母とし、実行された部分を分子とする網羅率です。ここでは分母から到達不可能な部分を除外することでカバレッジを改善します。

3. シミュレーションのカバレッジをフィードバック
到達不可能な領域を除外して測定したカバレッジ情報をフィードバックします。これにより、デザインとしては到達不可能な領域を除外したものの、まだテストパターンの不足が原因で発生しているカバレッジの抜け(カバレッジホール)が特定できます。

4. カバレッジホールをターゲットにしたテスト生成のガイド
カバレッジホールが特定できたら、それをターゲットとしてテストパターンを作成する必要があります。前出の通り、カバレッジホールとなっているターゲットに対して、どのようなディレクテッド・テストのパターンを与えれば良いかの見極めが困難になっています。ここで、さらにフォーマル解析技術の1つである反証技術を使用し、どのようにしたらそのターゲットに到達することができるかを、波形を用いてガイドします。1つのステートに到達するパターンは複数存在することがありますが、反証技術では最も効率的なパターンを探索、表示します。

コードカバレッジの測定自体は簡単です。しかし複数のリグレッションテストのカバレッジデータをマージし、複雑なデザインの到達不可能な領域を特定してカバレッジ対象から除外する作業や、さらに設計変更や改修に関する除外指定のメンテナンスには莫大な労力が必要とされます。またカバレッジホールをターゲットとするディレクテッド・テストのパターン作成やランダムテストの調整も、大規模で複雑なデザインでは膨大な労力を必要とします。Questa CoverCheckは、まさにこの工程のほとんどを自動化します。元々テストの品質指標として誕生したコードカバレッジは、テストの抜けを知る上では有効ですが、設計そのものの品質を示す指標ではありません。自動化できる部分は自動化し、検証エンジニアは機能カバレッジやバグハンティングなど、より付加価値の高い工程に時間を割くべきでしょう。

カバレッジ・クロージャのより具体的な使用感についてはこちら

今すぐダウンロード