私はソフトウェアエンジニアであり、ファームウェアテストエンジニアとして採用される予定です。ファームウェアのテストに使用される、市場で入手可能ないくつかのソフトウェアツールについて知りたいだけです。それらを述べ、ファームウェアに提供するテストの種類について少し説明していただけますか?前もって感謝します。
3 に答える
テストにはさまざまな形式があり、さまざまな段階で実行できます。コードを作成する前の設計検証とは別に、コードテストは、単体テスト、統合テスト、システムテスト、および受け入れテストに分割できます(ただし、正確な条件とステージ数は非常に大きくなる可能性があります)。Vモデルでは、これらは要件と設計開発の段階に水平方向に対応します。また、開発と保守では、回帰テストを実行する場合があります。他の変更が適用されても、修正されたバグが修正されたままであることを確認します。
ツールに関する限り、これらは静的分析と動的分析に分けることができます。静的ツールは実行せずにソースコードを分析しますが、動的分析は実行中のコードの動作に関係します。一部の(高価な)ツールは「抽象実行」を実行します。これは、実際の実行なしで実行中にコードがどのように失敗するかを決定する静的分析手法です。このアプローチは計算コストが高くなりますが、従来の動的分析よりもはるかに多くの実行パスと変数状態を処理できます。
静的分析の最も単純な形式はコードレビューです。人間にあなたのコードを読ませること。SmartBearのCodeCollaboratorなど、この表面上は手動のプロセスでも支援するツールがあります。同様に、動的分析の最も単純な形式は、デバッガーでコードをステップ実行するか、さまざまなテストシナリオでコードを実行することです。前者はユニットの開発とデバッグ中にプログラマーが行うことができますが、後者は受け入れテストまたは統合テストに適しています。
コードレビューをうまく行うと、大量のエラー、特に設計エラーを取り除くことができますが、プログラミング言語の微妙なセマンティクスまたは難解なセマンティクスによって引き起こされる特定のタイプのエラーを見つけるには、それほど効率的ではありません。この種のエラーは、 GimpelのPC-LintやFlexeLintツールなどの静的分析ツールやProgramming ResearchのQAツールを使用した自動検出に役立ちますが、コンパイラの警告レベルを高く設定したり、複数のコンパイラでコンパイルしたりするなどの低コストのアプローチもあります。使える。
動的分析ツールには、コードカバレッジ分析、コードパフォーマンスプロファイリング、メモリ管理分析、境界チェックなど、さまざまな形式があります。
ハイエンドのツール/ベンダーには、Coverity、PolySpace(抽象分析ツール)、Cantata、LDRA、Klocworkなどがあります。下端(価格では、必ずしも有効ではない)には、PC-LintやTessyなどのツール、さらにはオープンソースのスプリント(Cのみ)、および多数の単体テストツールがあります。
これが私が役に立つと思ったいくつかのファームウェアテストテクニックです...
PCでのユニットテスト。つまり、ファームウェアから関数を抽出し、より高速なプラットフォームでコンパイルしてテストします。これにより、たとえば、関数を徹底的にテストできますが、その場で非常に時間がかかります。
フリーランニングのハードウェアタイマーを使用して、ファームウェア割り込みハンドラーを計測します。開始時と終了時のティック、および割り込みのカウント。各割り込みハンドラの最小および最大の頻度と期間を追跡します。このデータは、レートモノトニック分析または期限単調分析を行うために使用できます。
Modbus RTUなどの標準プロトコルを使用して、ステータスデータの配列をオンデマンドで利用できるようにします。これは、構成および検証データに使用できます。
自動ビルドプロセスを使用して、ファームウェアのバージョン番号をコードにビルドします。たとえば、ソースコードリポジトリからバージョン情報を取得します。#3を使用してバージョン番号を利用できるようにします。
lintまたは別の静的分析ツールを使用します。lintおよび-Wallを使用したコンパイラからのゼロ警告を要求します。
ファームウェアのCRCをコードに埋め込み、実行時にチェックする手段を使用して、ビルドツールを拡張します。
ストレステストが便利だと思いました。これは通常、システムに短時間で多くの入力を与え、それがどのように処理されるかを確認することを意味します。入力は可能性があります
- 処理するデータが多いファイル。例として、警報装置で分析する必要のある波動データを含むファイルがあります。
- 別のマシンで実行されているアプリケーションが受信したデータ。たとえば、ランダムなタッチスクリーンを生成するプログラムは、データを押して解放し、それをデバッグポートのデバイスに送信します。
これらのタイプのテストは、多くのバグを取り除くことができます(特に、パフォーマンスが重要であり、制限されているシステムでは)。優れたロギングシステムは、ストレステストによって発生したエラーの原因を追跡する必要がある場合にも適しています。