質問

バックグラウンドます:

私はアトメルAVRのatmega2560で使用した大きめのプロジェクトを開発しています。このプロジェクトは、ハードウェアベースの機能(7 SPIデバイス、2 I2C、2つのRS485 MODBUSポート、アナログおよびデジタルI / Oの多く)が多く含まれています。私は、必要なデータにアクセスするためのインタフェースを備えたメインアプリケーションループを提供し、これらのデバイスのすべてのための「ドライバ」を開発しました。

質問:

私が開発していたプロジェクトは、最終的に満たすSIL規格になります。

私は、コードをテストし、コードカバレッジの良好なレベルを提供できるようにしたいです。しかし、私は私がこのようなテストフレームワークを設定する必要がありますどのように始めるために任意の情報を見つけることができません。

のアイデアは、私は将来のバグ修正と機能追加は、彼らがコードを破るかどうかを確認するためにテストされることを可能にする自動テストのスイートを持つことができるということです。事は、私はコードがチップ上でテストすることができますどのように理解していないです。

私は、デバイス上のI / Oを監視するためのハードウェアを必要とし、外部機器を接続しエミュレートしますか?提供することができる任意のポインタは非常に高く評価されるだろう。

- スティーブ

役に立ちましたか?

解決

これは非常に良い質問です - 組込み開発者のための共通の関心事。関係として残念ながら、ほとんどの組み込み開発者は、あなたがいるだけで、実際のハードウェア上でコードをテストするようではありません。別の答えが指摘したようにしかし、これは基本的には、コードではなく、コーナー/エラー例だけ名目機能をテストすることができます。

この問題に対する単一でシンプルな解決策はありません。いくつかのガイドラインや技術は、比較的良い仕事をするために、しかし、存在します。

まず、各層にコードを分離します。即ち、の関数呼び出しの - 一層「は、ハードウェア依存しない」であるべきです。直接HWレジスタに書き込むユーザーに聞かないでください。 HWと他の(下)層を扱っています。この層は、より高いレベルをテストするために、「嘲笑」することができます。低いレベルは本当にHWせずにテストすることはできませんが、それは問題ではありませんので、多くの場合、深いHWとの統合を必要とする変更するつもりはない。

A「テストハーネスは、」「偽」は、具体的にテストするためのより低いレベルで、すべてのハイレベルのHWに依存しないコードになります。これは正しいと間違った機能のためのHWデバイスをシミュレートするため、あなたがPC上で自動テストを実行できるようにすることができます。

他のヒント

実際のハードウェア上またはに対してユニットテストを実行しないでください。必ずI / Oインタフェースをモック。そうでなければ、あなたがいないシミュレートエラー条件が、より重要なのは、あなたが成功するためのテストに頼ることができないことができます。

だから、何が必要あなたが独立してテストすることができ、様々な部分にあなたのアプリケーションを分割することです。シミュレータ(またはモック)あなたはこれらのテストのために必要と開発のPC上でそれらを実行することを、すべてのハードウェアます。

それはあなたのコードおよびドライバと葉あなたのほとんどをカバーする必要があります。ハードウェアなしで可能な作業のようにドライバのコードの大部分として作るようにしてください。休息のために、あなたは、ハードウェア上で実行コードを作成する方法を理解する必要があります。これは通常、あなたがこの(のように「あなたのテストを自動的にこの作業を行うことができません」)脆いですので、あなたは、ハードウェアを準備した後、手動でこれらのテストを実行する必要があります信号への対応などの外部機器とのテストベッドを作成しなければならないことを意味します。

Vectorcast のコードカバレッジとハードウェア上でユニットテストを実行するための商業的なツールである。

あなたはJTAGコネクタを持っていますか?あなたは、チップ上でシミュレートエラー条件にJTAGを使用することができます。

私は、タスクを分離することが好きです。たとえば、ときに私は私のアトメルAVR私はその後、私はそれのためのユニットテストを作成、::ブロックし、代わりにAVR GCCコンパイラの定期的なGCCコンパイラとそれをコンパイルし、すべてのコードでそれを書いたために循環バッファを作りました。私は(例えばuint8_t)で動作するように望んでいたことを、適切なデータ型を提供するために、特殊なヘッダファイルを使用していました。私はAVR Studioに上固定コードを取り、それを統合し、その後、それらを固定し、ユニットテストでエラーを発見しました。その後、私は使用便利なコード(すなわち、UARTデータ出力レジスタに押し込み、バッファオフ1つのバイトをポップ、APPENDのprintf関数のバッファに文字列定数、など)に、バッファを合わせて支援機能とISRのを書きました。その後、私は確かに私のISRや関数が呼び出されていたことを確認するためにAVRシミュレータを使用し、右のデータがレジスタに現れたという。その後、私はチップ上にそれをプログラムし、それは完全に働きました。

私は非常にコードのデバッグ機能を好む::私はいつでも私ができる上記の方法を使用するように、ブロックはAVR Studioに比べて。私は、私は通常、ハードウェアのみを扱ってることができないとき。たとえば、私は自動的に方形波を生成し、タイマーを持っています。私は何ができる最高はピンビットがシミュレータでtwiddledされていたことがわかりました。その後、私はちょうど範囲をフックアップして確認しなければならなかった。

私は問題をデバッグするとき、マルチレベルのアプローチを使用したいです。例えば、クロックに第一層は、「クロックピンにプローブを入れて、そこに信号がありますかどうかを確認」です。ない場合は、のuC上のピンをプローブと信号を探します。その後、私は特定のレジスタの値を見て、彼らがすることになっているものであることを確認することができます私のUARTの一つでデバッグインタフェースをコード化されました。それが動作しないのであれば次のステップは、「レジスタ値を呼び出し、それが正しいです確認してください。」です

あなたのデバッグを計画しているときは常に先の4つのステップまたはそう思うようにしてください。ここでは+ 5Vがあるはずですが、何が存在しない場合は?ピンをトグルし、それはそれを変更するかどうかを確認する方法インターフェイスのデバッグへの書き込み。何がうまくいかない場合は?ドゥ何か他のもの、などなどなどあなたがに実行するポイントを取得「I HAVE NO IDEAの理由はここDANG THING DOES NOT WORK !!!!」うまくいけば、あなたは、事前にその理由を把握します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top