組み込みハードウェアの一部のデバイス ドライバーの単体テストを作成する必要がある状況があります。コードはかなり古くて大きく、残念ながら多くのテストがありません。現時点で可能なテストは、OS を完全にコンパイルしてデバイスにロードし、実際のシナリオで使用して「動作する」ことを確認することだけです。個々のコンポーネントをテストする方法はありません。
ここで、組み込みデバイスの単体テストについて議論している素敵なスレッドに出くわしました。そこから多くの情報を取得しました。もう少し具体的に言って、そのようなシナリオでデバイス ドライバーをテストするための「ベスト プラクティス」があるかどうか尋ねたいと思います。問題のボードが通信しているデバイスをシミュレートできるとは思わないので、おそらく実際のハードウェア自体でテストする必要があります。
これを行うことで、ドライバーの単体テスト カバレッジ データを取得し、開発者がテストを作成してドライバーのカバレッジを向上させることができるようになることを願っています。
私が思いつくのは、OS 上で動作する組み込みアプリケーションを作成し、ドライバー コードを実行してから、結果をテスト ハーネスに送り返すことです。このデバイスには、コードを実行できるように、おそらくテスト PC からアプリケーションを駆動するために使用できるインターフェイスがいくつかあります。
他の提案や洞察は非常に高く評価されます。
更新: 正確な用語ではないかもしれませんが、単体テストと言うときは、OS + ドライバー全体をコンパイルしてデバイスにロードすることなく、コードをテスト/実行できることを意味していました。もしそうしなければならないとしたら、私はそれを統合/システムテストと呼んでいます。
問題は、私たちが持っているハードウェアが限られており、開発者がバグの修正などに使用することが多いことです。1 つを専用にして、CI サーバーと自動テストが行われるマシンに接続したままにしておくことは、まったく問題ないかもしれません。この段階。そのため、実際にすべてをビルドしてデバイスにアップロードすることなく、ドライバーをテストする方法を探しています。
概要
以下の優れた回答に基づいて、問題に取り組む合理的な方法は、IOCTL を使用してドライバー機能を公開し、組み込みデバイスのアプリケーション空間にテストを記述して、実際にドライバー コードを実行することだと思います。
また、シリアルまたは USB 経由でドライバーを実行できる API を公開するデバイスのアプリケーション スペースに小さなプログラムを配置することも理にかなっています。ハードウェアとテストを実行します。
プロジェクトが開始されたばかりであれば、テストをほとんど PC レベルで実行できるように、コンポーネントを分離する方法をより細かく制御できると思います。コーディングはすでに完了しており、テスト ハーネスとケースをシステムに後付けしようとしているという事実を考えると、上記のアプローチがより実用的だと思います。
回答ありがとうございます。