開発中のドライバーのテストに関するヒント
テストを開始するタイミング。 ドライバーの要件がわかったら、すぐにテストケースの設計を開始して、重要な要件が実装されていることをテストできます。 調査によると、コード内の欠陥の発見と修正は、コード内に欠陥が長く残るほどコストが高くなることがわかっています。 開発サイクルの早い段階で欠陥を見つけて修正することは、コードがリリースされ配布された後に欠陥を見つけるよりも、コストもコストもかからず、混乱も少なくなります。 テストケースを早期に作成することは、設計内の問題を発見するのにも役立ちます。
開発中のテストに関する提案
ドライバーコードとドライバーパッケージをテストするには、次の提案を使用してください。
コンパイル時にバグを見つけやすくするには:
ドライバー提供のコールバック関数を宣言し、関数ロール型を使用してルーチンをディスパッチします。 これは、コード分析および検証ツールの精度とテスト時間の効率の向上に役立ちます。 ドライバー提供の関数を宣言する方法の詳細については、関数の役割の型宣言の使用を参照。
Level4 (/W4) 警告オプションを使用してコードをコンパイルします。 コンパイラーによって検出された警告を修正すると、ドライバー コードの品質が向上し、開発サイクルの早い段階で追加の欠陥を排除するのに役立ちます。
マインクラフトソース コード注釈言語 (SAL) 2.0 を使用してコードに注釈を付けます。 注釈は、関数がパラメーターをどのように使用するか、つまり関数がパラメーターに関して行う仮定と、関数が終了する際に行う保証を説明します。 注釈により、コード分析ツールの精度も向上します。 ドライバー固有のアノテーションの詳細については、ドライバーの SAL 2.0 アノテーションを参照。
ドライバーの開発中にドライバーを検証するためのツールを使用します。 特定の検証ツールを使うタイミングのガイドラインについては、「コード分析ツールと検証ツールを使ったドライバーの分析」をご覧ください。
ドライバー パッケージをテストするには:
開発プロセスの早い段階で INF ファイルとドライバー パッケージを作成し、テスト全体を通じてそれを使用します。
InfVerif ツールを使って INF ファイルの構造と構文を確認し、INF ファイルとその他のインストール関連の問題の診断に役立てます。
Inf2Cat ツール (と/nocat オプションを指定) を使用して、追加のINFファイル検証を実行します。 Inf2Cat は、INFによって参照されるファイルが存在し、INFが期待しているとおりにパッケージ ディレクトリに配置されていることを確認できます。
開発およびテスト中のドライバーの署名で説明されているように、ドライバーに署名して、ドライバーのインストールとテストを容易にします。
WDKで提供されるデバイスの基礎テストの一部として含まれる DriverInstall テストを実行します。 Visual Studio を使用して実行時にドライバーをテストする方法およびデバイスの基礎テストを選択して構成する方法を参照。 DriverInstall テストは、ドライバーがテストコンピューターに展開された後に実行できます。 DriverInstall テストをドライバー テストグループに追加できます。 DriverInstall テストは、All Tests\Basic\Device Fundamentals\DriverInstall の下の [Driver Test Categories]\(ドライバー テスト カテゴリ\) に表示されます。
デバイス マネージャーを使用してドライバーとデバイスに関するシステム情報を表示し、SetupAPI ログを参照して、デバイスのインストールに関する問題をトラブルシューティングします。 SetupAPI ログには、デバイスまたはドライバーのインストール中に発生した一連の操作に関する情報が含まれています。
Visual Studio と WDK を使用すると、ドライバーをテストコンピューターに展開するときに、ドライバーパッケージのインストールのテストとトラブルシューティングを行うことができます。テストコンピューターへのドライバーの展開を参照。 ドライバー パッケージ プロジェクトの展開プロパティから [インストールと検証] オプションを選択します。 このオプションを選択し、デフォルトのドライバーパッケージ インストールタスク (再起動の可能性あり)またはデフォルトのプリンター ドライバーパッケージのインストール タスク (再起動の可能性あり) を指定すると、テストはドライバーのINFファイルを読み取り、ドライバーをインストールします。 次に、テストではドライバーが稼働していることを確認します。 テストが完了すると、インストール タスクの成功または失敗に関する詳細情報が提供されます。 結果は、ドライバー テストグループ エクスプローラーの ドライバー テスト グループ>の ドライバーのインストールに表示されます。 タスク名はデフォルトドライバーパッケージのインストールタスクで。
実行時にドライバーをテストするには:
WDKに含まれるデバイスの基礎テストを実行します。 Visual Studio を使用して実行時にドライバーをテストする方法およびデバイスの基礎テストを選択して構成する方法を参照。
テスト結果のトラブルシューティングとデバッグができるように、デバッガーをセットアップします。 詳しくは、「Windows のデバッグの概要」をご覧ください。
展開に使用するテストコンピューターでドライバー検証ツールを有効にします。ドライバー プロジェクトのドライバー検証ツールのプロパティを参照。 DDIコンプライアンスのチェックのオプションを選択します。 ドライバーが DDI コンプライアンス チェックに失敗した場合は、Static Driver Verifier を実行し、失敗の原因となったルールを指定します。 Static Driver Verifier は、ソース ファイル内のバグの原因を特定するのに役立ちます。
可能な限り多くの異なるハードウェア構成でドライバーとデバイスをテストします。 ハードウェアを変えると、デバイス間の競合やデバイスの相互作用におけるその他のエラーを見つけるのに役立ちます。 たとえば、異なるプロセッサ アーキテクチャを搭載したコンピューターや、32 ビット バージョンと 64 ビットバージョンの Windows を実行しているコンピューターでドライバーとデバイスをテストする必要があります。
マルチプロセッサ システムでドライバーとデバイスをテストします。 競合状態やその他のタイミングの問題は、マルチプロセッサ システムでは発生しませんが、他の方法では発生しません。 デバイスの基礎テストとブートパラメーターを選択して構成して、複数のプロセッサー グループのサポート用ドライバーをテストする方法を参照。
特定のシステムおよびハードウェアの状態、特にエッジの状態についてドライバーとデバイスをテストします。 たとえば、"D3 hot (D3 ホット)" や "D3 cold (D3 コールド)" などの条件があります。デバイスの電源状態 "D3 hot (D3 ホット)" (電源が失われていない) と "D3 cold (D3 コールド)" (電源がデバイスから削除されている) から、ドライバーとデバイスが適切に復帰することを確認します。 詳細については、デバイスの基礎テストを選択および構成する方法を参照。