2017-12-07 7 views
0

私は単体テストの概念を初めて使いました。現在、私はそれをより快適にしようとしています。マイクロコントローラでタイマ機能のユニットテストを行う方法

私は、Cで書かれたマイクロコントローラ用のタイマドライバでユニットテストをしなければなりません。今、関数のユニットテストは、別の関数の結果に依存すべきではないと聞きました。私の問題は、これらの条件でタイマーを停止するはずの関数をどのようにテストすることができますか?タイマーを開始する必要はありませんか、それを初期化する必要があります!

ユニットテストをどのレベルで検討する必要があるかを知りたいと思います。 1つの機能レベル(この場合、上記の問題が発生します)か、それともドライバ自体のレベルですか(この場合、1つのユニットテストでドライバの複数の機能を使用できます)。

このテーマについての経験が豊富な人からの感想を聞いてみたいと思いますが、今はどこにも行きません。

+0

以下の回答/コメントと同様に、機能のためには、少なくとも通常のユースケースでは機能をテストする必要がありますが、おそらく通常のユースケースからの設計に依存します。だから通常のユースケースは、タイマーを起動してその機能を準備する(時間を読む)ために、タイマーを起動して初期化する必要があります。しかし、time関数を読み込んでも、タイマーが初期化されていないことが検出された場合は、タイマーを初期化せずにテストし、正しく検出するかどうかを確認する必要があります。 –

答えて

1

次のように私はこれに近づくでしょう:

をあなたはそれがそのインターフェイスに付着し、それがある場合は、パラメータのアウトオブバウンド値を(処理することを確認するために独立してそれぞれの機能をテストすることができます要件は、発信者がそれを境界外と呼ぶことではないという要件である)。

各機能についてコード検査を行うこともできます。

次に、上位レベルのルーチンからユニット全体を単体テストできます:初期化と設定(ここでは範囲外の条件を処理する必要があります)彼らは正しく呼ばれています。

ハードウェア関連の要素については、シミュレートすることも、テスト専用のハードウェア環境(テストハーネス、テストベッド)を作成することもできます。

+0

ご返信ありがとうございます。最初のステップでは、各関数を個別にテストするときに、関数が入力の境界をどのように処理するかだけに焦点を当てますが、関数**が実際に行っていることを見ていませんか?たとえば、最初にtimer_initを指定せずにtimer_startを起動しても、タイマーは起動しません。 –

+0

「外側」(インターフェースの振る舞い)と「内側」(機能)をテストする2つの部分として見てください。あなたのケースではパート2は私のステップ1で実行できないので、そうしないでください。しかし、まだそれをテストする必要があるので、必要に応じて特殊なテストベッドを含む他のステップを実行する必要があります(そして、可能な限り予算が設定されています...) –

+0

これは少し不明瞭です。 –

0

タイマドライバをテストするための唯一の正しい方法はかなりあります:

  • は、ドライバのすべての機能を使用してテストケースのアプリケーションを記述します。ドライバコードそのものはそのままにしておいてください。
  • 注釈/文書に関する重要なテストパラメータ:クロック速度、クロック精度。つまり、どのクロックソースがタイマーハードウェアからクロックを取得しているか、どのくらい高速で、どの程度の精度が期待できるのでしょうか?あなたはおそらく、適切な水晶発振器に対してドライバをテストし、内蔵のRC発振器ではテストしたくないでしょう。そうすれば、クロックの不正確さを排除し、ドライバの待ち時間を知ることができます。システム・クロック内の内部PLL/FLLにも一定の不正確さがあります。
  • テストアプリケーションでは、タイマが停止すると予想される場合は、GPIOピンをいくつか設定してください。おそらく、ドライバがどのように書き込まれたかによって、コールバック関数から発生します。
  • 実際の時間をオシロスコープで測定します。これは必須ですが、あなたはそのようなコードを使わずにテストすることはできません。期間。

これ以上はありません。オプションで、より詳細なテストが必要な場合は、コードカバレッジのいくつかの方法を組み込んで、ドライバコードのすべての部分がある時点で実行されているかどうかを確認することもできます。

+0

私はドライバの初期化の面で非常に重点を置いていたので、精度の重要性をほとんど忘れてしまった...それを思い出してくれてありがとう!私は別の質問があります:あなたはタイマーの1つだけをテストし、他のタイマーはすべて同じ「等価クラス」にあると言うでしょうか、あるいはすべてのタイマーをテストしますか? –

関連する問題