組込みソフトウェアテスト

(おそらくより実際には)1:組込みソフトウェア開発プロセスでは、一般的には、テストを過ごし、3の比率をコーディングの時間を費やしました。この比率ではテストは平均的な人にとって非常に重要であるものをソフトウェアに関係なく、あなたのプログラミングとテストのレベルと減少し、しかしを改善します。何年も前に、Oracleへの組み込みのより深い理解を持っているために、開発者は、そのような質問を:どのように私は知っているし、それを行う際に、最後に私のシステムを理解することができますか? 

  Oracleのこの問題ビット驚いに直面して、一度にそう誰も頼まないため、そして現代的な組み込み開発者は、周りの最も尋ねたのほとんどは、「コンパイラは何が最善か」、「どのように私はプログラムの実行を高速化することができます」およびその他の表面的な問題。だから、この異常な問題に直面したが、Oracleの成熟した悪質だった、と慎重に彼の返事を喜ば:だけ連続してレベルを向上させることができることを理解する上で、深行くし続けるので、ご質問は、非常に深い非常に成熟しています。また、Oracleは、プログラマの献身を奨励するために、組み込みソフトウェアの開発とテストの10点のヒントは、彼に言いました:

   1、ツールを使用する方法を知ってい
   た初期のメモリの問題、
   、3コードの最適化の深い理解
   、干し草の山の中であなたの針を聞かせていない4を
   5、問題の再現と切り分け
   後退し、6
   テストの整合性を判断するために、7を
   8に、改善されたコードの品質の手段時間節約
   9を、それを見つけ、それを分析、それを解決する
   10、初心者の心を使用して
 
、業界ではこれらの10個のヒントが普及、多くの人々が恩恵を受ける。本論文では、上の起動するには、これらの10個のヒントに焦点を当てています。
 

1.ツールを使用する方法を知っています

  組込みシステムは、通常、信頼性の比較的高い要求されています。組込みシステムのセキュリティ失敗は深刻な経済的損失につながる可能性による大量生産にも非セキュリティシステム、悲惨な結果につながる可能性があります。これは厳密なテスト、検証、検証の組み込みソフトウェアを含む組込みシステムを必要とします。ソフトウェア及びマイクロプロセッサ制御の様々な組み込み機器の使用、ドアますます複雑組込みソフトウェアのようなより多くの領域がより迅速かつ効果的なテストがより重要になります。

  修復ツールを必要に応じて、優秀なプログラマーは、巧みにソフトウェアのさまざまなツールを使用することができるはずです。さまざまなツールは、異なるスコープを持つさまざまな機能を持っています。これらのツールを使用して、あなたはそれが終わり何の外の世界でそれを占有どのリソース、あなたのシステムがやっている参照して物事に対処することができます。簡単なツールを介して取得することができ、あなたの問題は、数日間押し下げすることができるしてみましょうが、残念ながらあなただけ知りません。では、なぜこれほど多くの人々は常にそれがあったテストツールを使用するために死に半分を投げた後だと思うしていますか?多くの理由は、2つあります。一つは恐怖であり、他方が不活性です。恐怖コードに追加テストハーネスまたはテストモジュールが新しいエラーを導入する可能性を持つスキルが必要なので、彼らは常に絶えずだけ無駄に、コードを再コンパイル変更することによって、バグを解消したいと考えていたいので。彼らはprintfの簡単なテスト方法などを使用することに慣れているので、怠惰です。ここではいくつかの組み込み一般的に使用されるテストツールです。

  ソースレベルデバッガ[ソース・レベル・デバッガ]
  これは、一般に、ブレークポイントの設定、デバッガシングルステップ又はマルチステップのデバッグを提供するメモリ・テスト、変数ビューおよび他の機能、最も基本的かつ効果的な埋め込みデバッグデバッグ方法です。VxWorksのTornadoIIはこの1つに所属してGDBを提供するような。

  印刷ショー[printf関数]のためのシンプルで実用的なツール
  のprintf印刷または最も柔軟でシンプルなデバッグツールであると見積もら他の同様の表示ツール。印刷コード中に変数を使用すると、コード実行の状況を知らせることができます。しかし、通常のコード実行のprintf干渉が比較的大きい(典型的にはより長いのprintf CPU時間)、慎重に使用しなければならない、印刷を制御するためのプリントスイッチを設定することが好ましいです。

  .ICEまたはJTAGデバッガ[インサーキットエミュレータ]
  ICEは、CPUコアデバイスをエミュレートするために使用され、それは演算部、CPUリアルタイム検出の内部動作の正常動作を妨げることはできません。複雑な条件付きブレークポイント、高度なリアルタイム追跡、パフォーマンスの分析、およびこれらの機能のポート分析は、それが提供することができます:デスクトップのデバッグ・ソフトウェアが提供するように。ICEは、一般的に特別なCPU、共同と呼ばれる外部(ボンドアウト)CPUを持っています。これは、パッケージのCPUを開放し、特別な接続により、CPUは内部信号にアクセスすることができ、これらの信号は、「見」されていないCPUにカプセル化されています。組み合わせて使用するワークステーション上のソフトウェアをデバッグするときと強力な、ICEは、あなたが見つけることができる最も包括的なデバッグ機能を提供することができます。フルスピードで動作することはできません;高価同様に、CPUのすべてを言う、これらの外国人の共同CPUは別の角度から新しいCPUでタイムリーアウトになることはほとんどありません、外のCPUと組み合わせることができません。しかし、ICEはまた、いくつかの欠点を持っています置き換え。JTAG(ジョイントテストアクショングループ)もともとはICと回路接続を監視するために開発されたが、デバッグのサポートを含む、この拡張シリアルインタフェースを使用したが。.ROMモニタ[ROMモニタ]

  .ROMモニタ【ROMモニタ】
   ROMモニタは、小さなプログラムROM内に常駐する組み込みシステム、およびワークステーションのシリアル接続または通信ネットワークのデバッグソフトウェアによって実行されます。これは安価な方法、もちろん、最もローエンドの技術です。これは、通信ポートやメモリ空間の少量に加えて、他には特別なハードウェアを必要としませんが必要です。そして、次の機能を提供します。コードのダウンロード、実行制御、ブレークポイント、前進シングルステップ、および観察、レジスタを変更し、メモリ。オペレーティングソフトウェアのROMモニタの一部は、アプリケーションが実行されている場合にのみなので、それが動作します。あなたはCPUとアプリケーションの状態を確認したい場合は、アプリケーションを停止し、再びROMモニタを入力する必要があります。

  .DATAモニタ[データモニタ]は
  、モニタのみ指定した変数の内容を表示することができないCPUを停止しない場合には、さらに収集することがあり、ディスプレイは各グラフィック形式のプロセス変数を変えます。

  .OSモニタ[OSモニタ]
  オペレーティング・システム・モニターは、タスク切り替え、トランシーバセマフォ、イベント割り込みなどの情報を表示することができます。一方で、これらのモニタは、イベントやご連絡には時間との関係を示すことができ、一方で、また、セマフォ、デッドロックの診断優先順位の逆転を提供し、レイテンシやその他の問題を中断することができます。

  パフォーマンス解析ツール[プロファイラ]は
  そこに最後にCPUの消費量をテストするために使用することができます。プロファイラツールは、あなたがどこローカルニーズのシステム、CPU使用率と最適化のボトルネックを知ることができます。

  メモリテストツール[メモリTeseter]は
  、メモリリーク、メモリの断片化、メモリの破損やその他の問題として、メモリ使用量の問題を見つけることができます。あなたが断続的に発生する問題のいくつかの予測不可能なシステムを見つけたりした場合は、メモリテストツールCECEが表示さ使用する必要があります。

  ラントラッカー[実行トレーサー]
  CPUを表示するには、ように呼び出すとしたときのパラメータは、何であるか、呼び出している人、の機能を実行します。このツールは、主にテストコードロジックのために使用され、これらの例外は、多数のイベントに見出すことができます。

  オーバーレイツール[カバレッジテスター]
  メインディスプレイコードのこれらのCPU固有の実装、そしてあなたは、コードがブランチに実行されていないことを知ってみましょう。これは、コードの品質と役に立たないコードの除去を向上させることができます。

  .GUIテストツール【GUIテスター】
  対話するためのグラフィカル・ユーザ・インターフェースのいくつかのフォームを有する多くの組み込みアプリケーション、ルートシステムの性能の一部はユーザ入力に応答して掘るのに十分な時間を試験します。GUIテストツールの開発環境は、スクリプトツールとしてテストケースを実行することができ、その機能は、テストプロセス(のRationalツールロボットとマーキュリーのLoadRunnerのを設定し、後で分析や比較のために画面をつかむと管理、記録および再生の操作が含まれますそれは)優れた代表的なものです。多くの組み込み機器は、GUIを持っていないが、この方法は、テスト対象のコードの変更が必要になるかもしれないが、多くの場合、GUIのテストスクリプトを実行するための組み込み機器用にインストルメントすることができますが、時間機能テストおよび回帰テストを保存します。

  自家製のツール[ホームメイドテスター]
  組み込みアプリケーションでは、時々 、特定の目的のために、あなたはいくつかのテストの目的を達成するために、独自のツールを作成する必要があります。私は会社がバグのいくつかの隠された深いを見つけるために、大きな助けを会議テスト映像のデータフローと変更で重要なツールを録画したビデオストリームを用意していました。
 

2.初期のメモリの問題を発見します

  メモリリーク、メモリの断片化とメモリ破損:メモリの問題大きな損害、トラブルシューティングが容易ではないが、三種類があります。メモリの問題について態度は早期発見と、つまり、明確でなければならない「治療」。ソフトウェアの設計、メモリリーク、「名声」では、主としてメモリの継続的な割り当てに、最大は時間の経過とともに、システムがメモリ不足に、タイムリーにリリースすることはできません。時には慎重なプログラミング後にベテランメモリリークに直面するだろう。テストしたメモリリークが一般的な隠された深いメモリリークという友人の深い経験を推定されており、コードを読んで見つけることは困難です。いくつかのメモリリークでも図書館の間で発生する可能性があります。これ自体は、ライブラリのバグにそうであるプログラマが適切に誤用によって引き起こされるそれらのインタフェース文書を理解していなかったので、それも可能性があります。

  多くの場合、メモリリークのほとんどは検出できませんが、偶発故障として表示されることがあります。プログラマは、ハードウェアの問題この現象に責任を置く傾向があります。ユーザーはシステムの非常に高い安定性がない場合は、システムを再起動し、問題ではない、大きな、システムの安定性上のユーザが高い場合しかし、その後、この障害は、ユーザーが製品の信頼を失わせる可能性があり、また、あなたのプロジェクトであることを意味しますプロジェクトの失敗。巨大なメモリリークの害に、今、この問題を解決するための多くのツールがあります。これらのツールは、ルックアップするか、コードブロック、メモリガベージコレクション、ライブラリの再利用、追跡し、メモリリークの問題を見つけるために他の技術によって参照されていません。各ツールの長所と短所が、一般的に、無良いよりも良いと。要するに、開発者は、メモリリークの問題、可能なトラブルをテストするために責任を負わなければなりません。

  メモリより深いメモリの断片化は、隠されたリークが発生します。連続メモリの割り当てと解放すると、メモリは常にメモリの大きな塊を申請する必要が失敗する可能性があるとき、時間をかけて、破片を形成し、メモリの小さな塊に分けます。システムメモリが十分に大きい場合には、スティックは時間がかかりますが、最終的に割り当ての失敗の運命を逃れます。ダイナミックアロケーションを使用するシステムでは、メモリの断片化が頻繁に発生します。現時点ではこの問題を解決するには、犯人原因メモリの断片である人を見つけると対応する部分を改善するために最も効果的なツールの表示システムのメモリ使用量を使用することです。

  組み込みアプリケーションで動的メモリ管理の問題なので、多くの企業は、単にmalloc関数/自由無効にすることはありませんトラブルです。  

  RAMメモリの破損が境界配列アクセスの外に、書き込みメモリは、その上のポインタの計算誤差、スタックアドレスクロスボーダーのアクセスとがリリースされているされている最も深刻な結果、主な理由です。システム障害によって引き起こされる。このメモリ破損を見つけるのはランダムと難しいです、ここ数の調査のためのツールを提供しています。

  あなたはメモリ管理ユニットを使用する場合は一言で言えば、あなたは解放されて割り当てられ、そのような人としてのその使用の規則に慎重かつ厳格に遵守しなければなりません。


コード最適化の3の深い理解  

  組み込みシステムのコード効率が非常に重要であるため、システムの安定性について話しました、人々は、よりリアルタイムでスピードを考えるでしょう。あなたは、各最適化されたコードは、ソフトウェア開発者がスキルを持っている必要があります埋め込まれている方法を知っています。女の子と同じように、減量のように、少なくともあなたは、彼女がそれを失う重量を失うために薬や機器を購入するためには、削減の必要性に最もあった場所を知っています。本当の必要性が見つけるための場所を最適化して、コードの対応する部分を最適化するために、右の薬を処方することを前提とした目に見える、コードの最適化。適切であれば、各タスクのCPU使用率などの諸条件を記録することができる(内蔵ツールフル機能IDEを提供するいくつかのパフォーマンス分析ツール、)前述のプロファイルは、各タスクの優先度が割り当てられ、データのコピーであります何回、何回プログラムは、ネットワークトランシーバと呼ばれているかどうか、ディスクにアクセスするには、テストコードはすでにように閉じられ、されています。

  十分がないリアルタイムシステムの性能しかし、プロファイル解析ツール。一方で、人々は、プロファイルは、このような状況には影響しないと思われるので、プロファイルツール自体は、大きなCPUを取りながら、プロファイルツールは、多くの場合、CPUの後にシステムに枯渇している問題である使用します。ハイゼンベルグ効果、システムテストの実行を変更するには、多かれ少なかれ任意の手段によると、これはまた、プロファイラに適用されます!要するに、あなたが乾燥するためにどのように最後に何をしたかCPU知っておく必要があります前提とした動作効率を向上させます。

4.干し草の山の中で自分自身の針を聞かせてはいけません

  干し草の山で針が1つのデバッグのためだけの鮮やかなメタファーです。当社グループは、多くの場合、誰かがあなたのコードをデバッグしている自分自身にそのたわごとを言うのを聞きます!そうでない場合は他の誰かが1日、同じグループが同じたわごと彼のコードであってもよい、コードは彼によって書かれていないので、彼がいる限り、彼はこの種のコードを書かないとバグだらけのコードをたわごとするのに十分な理由を持っていることが理解されます。なぜ、干し草の山、それに針のだろうか?その針が海それに陥る理由は、それは確かに海に少し針でしたか?それは確かに不注意や性急な聖歌でした。あなたが見つけるのはとても難しい針文句を言うときに、あなたは急いで捨てる自分自身であると思います。あなたは死に半分をデバッグするとき同様に、あなたは厳密な仮定やアルゴリズムの正しさのいくつかを検出しなかった、良いコーディング設計仕様に準拠していない可能性がありますショートカットを追求するために良好な反射でなければならなかったと思ったときに、いくつかは存在しないかもしれませんコードの問題は、それに署名マーク?

  あなたが本当に自分を刺し見つける前に防止するためには、海の低下を固定する必要がある場合、あなたは、このような摩耗安全手袋として、いくつかの予防の仕事をしなければなりません。同様に、問題の最良のソースを公開してキャプチャすることができるようにするために、我々はより包括的なエラートラッキングコードを設計することができます。どのようにそれを行うには?可能な限り、コールが失敗した各機能との取引を行うために、ポインタを含め、各パラメータの入力および出力の妥当性をチェックするだけでなく、多すぎても少なすぎても、プロシージャを呼び出すかどうかを検出します。バグトラッキングは、あなたはおそらくで針アウトの位置です知ることができます。


5.問題を再現し、単離  

  あなたは干し草の山の海でピンドロップを置くが、失われていない場合、それはより簡単にする必要があります。少なくとも私たちは多くの作品の中にわらを置くことができるので、作品によって作品を見つけることができます。分離方法の使用の独立した大規模なプロジェクトのモジュールのために、多くの場合、バグとは、最終的な方法に対する深い隠されています。断続的な問題が発生した場合、我々はそれを再現し、問題を再現するには、あなたがこれらの条件を活用することができ、次回の準備をするためにそれを記録するために、全体のプロセスを再現する方法を見つける必要があります。あなたはそれらの条件が記録問題を再現するために使用することができることを確信しているならば、我々は問題を特定するために始めることができます。どのようにそれを分離?我々はいくつかの可能性のある問題を#ifdefを使用し、独立したコードをシャットダウンすることができ、システムは、問題を再現するために、まだできるポイントに最小化されます。あなたはまだ問題を特定できない場合、の「ツールボックス」を開く必要があります。ICEは、表示または変更データを不審な変数を監視しようとすることができ、あなたはパラメータを渡すなど、関数呼び出しの場合を取得するために追跡ツールを使用することができます。クラッシュやメモリスタックオーバーフローの問題かどうかを確認してください。


隠れ家へ6.  

  自ら森の中で失われたハンター作るないようにするために、彼はしばしば自分自身いつかは迷子たときに出てこれらのマークに基づいて方法を見つけるために準備するために木にタグの一部を流しました。問題の後に役立つ試運転未来の過去のトラックレコードのコードを変更。ある日、あなたが最後に変更された時間は、プログラムが突然長期後に死亡した場合、あなたの最初の反応は、最後に変更する前に、私はそれのために、これで終わりで何かを変更するには、この時間が良好であることです。それでは、どのようにそれを修正し、最後に、この相対を検出するには?SCSまたはVCSと呼ばれるはい、コード管理システムバージョン管理システム(並行バージョン管理、CVSは、VCSの進化版です)。そして、ダウンで、以前のバージョンチェックの現在のテストバージョンを比較します。比較ツールは、ツールや他のより強力な比較ツール、などBeyondCompareやExamDiffを運ぶSCS / VCS / CVS diffのかもしれません。比較すると、すべての不審なコードを解析するためのコードに対するすべての変更の記録は、問題を引き起こす可能性があります。


7.完全性試験を決定します  

  どのようにあなたはどのように完全なテストにそれを知っていますか?カバレッジテスト(カバレッジテストは)この質問に答えることができます。カバレッジテストツールを使用すると、これらのコードの実行を最後にCPUを伝えることができます。グッドカバレッジ・ツールは、通常、コードの40%、約20%は問題ではありませんあなたを伝えることができますが、他はバグが存在してもよいです。テスト・カバレッジ・ツールは異なるレベルを有する、ユーザは、自分のニーズに応じたレベルを選択することができます。でもあなたは、あなたのユニットテストは非常に包括されているとデッドコードが存在しない、カバレッジ・ツール、またはあなたのためにいくつかの潜在的な問題を指摘することができます確信している場合は、次のコードを見て:(i>は= 0 &&(almostAlwaysZero == 0 ||(最後の=場合almostAlwaysZeroが非ゼロの場合、最後の=私の割り当てをスキップする場合はI)))、これはあなたが期待するものではないかもしれません。この問題は、簡単に条件テスト・カバレッジ・ツール機能で見つけることができます。要するに、カバレッジテストは、コードの品質を向上させるために有用です。 


8.コードの品質を向上させ、時間を節約することを意味

  研究では、80%以上は、以下の分野で使用されているため、ソフトウェアの開発を示している:それらのコードをデバッグ(単体テスト)および他の関連デバッグシステム全体(システムテスト)悪化のそれらのコード(モジュール間テスト)試運転。それはあなたがバグを見つけるために、10〜200倍の時間を費やす必要があり、そして冒頭にこのバグを見つけるのは非常に簡単であり得ることです。あなたはバグがシステム全体のパフォーマンスに大きな影響はありませんが、あなたがそれらを表示させることができ部分に影響を与える可能性がある場合でも、重い代償を支払うことになるかもしれない小さなバグ。だから我々は良いコーディングを開発する必要があり、テストは、コードのデバッグを短縮するために、より高いコードの品質を意味しています。 


それを見つけ、それを分析、それを解決9.  

  この世界は万能薬では石膏ではありません。カバレッジ・ツールは、その後に有用でなく、場所がカバーされていない、メモリがどんなに良いモニターするだけでなく、時間を見つけることはできません。ときに強力な再び、無力もプロファイル。隠された問題のいくつかは深く、すべてがそのルーツであったことがないかもしれない場合でも意味、そして我々が行うことができますパターンや異常を発見するために、外部の現象やデータ出力の一部によって実証され、これらの問題を介して行われ排出します。異常たら、解決されるまで、徹底的に、そのルーツを理解し、バックアップしてください。


10.使用して思考初心者  

  誰かがかつて言った:「いくつかのものは、初心者の心の中で、様々な状況であってもよいし、専門家の心の中に一つの可能​​性があります。」時には、いくつかの簡単な質問には非常に複雑で、非常に複雑で、他のいくつかのシンプルなシステム設計になり、それがためにあなたのものであり、「専門家の思考。」あなたが問題で困惑している場合は、おそらく彼らはあなたの予想外のインスピレーションを与えることができ、あなたの質問とあなたの友人、あるいはあなたの犬の話を入れ、出て、コンピュータの電源を切ります。概要:組み込みデバッグが芸術です。私はあなたが成功したいならば、あなたは知恵、経験を持っているとツールを使用する方法を知っている必要があり、他の芸術を望んでいました。限り、我々は同様にこれらの10件のヒントのOracleを理解できるように、私たちは組み込みテストで成功できると信じています。

ます。https://www.cnblogs.com/dujian/archive/2011/12/01/2270396.htmlで再現

おすすめ

転載: blog.csdn.net/weixin_34150503/article/details/93253249