見出し画像

はじめての機能安全(その9)


9. 機能安全テスト技術

9.1 機能安全におけるテスト

製品やシステムのテストは、品質を確保するためのプロセスの一部であり、ハードウェアとソフトウェアの設計や開発において欠かせないものです。また、機能安全におけるテストは製品やシステムが要件と設計仕様を満たし、想定される状況下に安全に機能することを確認するために必要です。

テスト設計は、テストケースを作成するプロセスであり、ハードウェアとソフトウェアの動作を確認するための入力値、操作、出力値を特定します。テストケースは、要求仕様や仕様書に基づいて作成され、可能な限り全ての条件を網羅するように設計します。テスト設計では、テストカバレッジと呼ばれる指標を使用します。ソフトウェアのテストカバレッジは、テストがカバーするコードの割合を示し、ステイトメントカバレッジ、ブランチカバレッジ、コンディションカバレッジなどがあります。実際にはこれらのカバレージを100%にすることが不可能な場合があります。その場合は、リスク分析や優先度付けに基づいて重要な条件を選択し、テストケースを作成します。テストケースの作成は、人手で行う場合もありますが、自動化することで作業効率を改善することができます。

テスト実行は、テストケースを実際に実行し、製品やシステムの動作を確認するプロセスです。テストケースがすべてパスした場合、システムは機能安全要件を満たすことが期待されます。テスト実行は、手動で行う場合もありますが、自動化することで作業効率を改善、さらに人的ミスやバイアスを防止することができます。

テスト報告は、テストの結果を文書化するプロセスであり、テスト結果とテストカバレージの情報を提供します。欠陥とその原因の報告や修正、再テストに必要な情報を提供します。テスト報告には、テストの目的や範囲、被テスト製品またはシステムのバージョン、テストに用いた設備や環境、テスト作業者名、テスト結果、テスト実施日、欠陥の詳細、再テストの要件、テスト完了の承認などが含まれます。

機能安全のテストにおいては、テストの品質を確保するために、テスト設計やテスト実行において、専門家によるレビュー、コードカバレッジの分析、欠陥報告の管理などが実施されます。また、プルーフテストという特別な種類のテストも行われます。プルーフテストとは市場にリリースされた製品やシステムの安全関連系を定期的に動作させ、障害が検出されることを確認するテストのことです。このテストにより製品またはシステムの安全関連系に付与されているSILが満たされているかを確認できます。SILが満たされない場合は、ハードウェアの修理またはハードウェア部品の交換などを行います。さらに、機能安全規格にある要求に基づいてテストしたかどうかの証拠を残しておく必要があります。

9.2 機能安全におけるソフトウェアのテスト

機能安全におけるソフトウェアのテストは、機能安全を確保するために行われる重要な活動です。さらに、機能安全認証を取得するためにも必要な活動です。機能安全認証とは、製品やシステムが国際的な規格や規則に従って開発されたことを証明するものです。また、ソフトウェア開発ライフサイクルに応じてさまざまな種類のテストがあります。これらのテストは、システムや製品が予期された通りだけでなく、予期しない状況でも安全に動作することを確認することを目的としています。
機能安全におけるソフトウェアのテストは、以下のような種類があります。

  • 単体テスト(Unit Testing):

ソフトウェアの個々の部分をテストするためのものであり、通常はモジュール単位で行われます。このテストでは、ソフトウェアの関数やプロシージャなどの単一の機能をテストし、問題を特定することができます。例えば、ソフトウェアのモジュールで使用される変数や関数名や引数が仕様書と一致するか。同じく定数やメッセージが仕様書と一致するか。関数の引数数の組み合わせに対して結果が正しいかなどです。

  • 結合テスト(Integration Testing):

ソフトウェアの異なる部分を組み合わせて、システム全体としての動作をテストするためのものであり、通常はモジュールやサブシステムの組み合わせ単位で行われます。このテストでは、異なる部分を組み合わせた場合の問題を特定することができます。例えば、モジュールやサブシステム間のインタフェースが正しく設定されているか、さらにデータの受け渡しが正常に行われるか。データを受け渡すタイミングが適切か。システムとしてこれらのデータが一貫しているかなどです。

  • システムテスト(System Testing):

ソフトウェアがシステム全体としての要件を満たすかどうかをテストするためのものであり、通常はハードウェアや他のソフトウェアのコンポーネントを含めて行われます。このテストでは、システムの動作に関する問題を特定することができます。例えば、ユーザからの要求に基づくシナリオに基づいた機能、性能テスト、想定される環境でのテストがあります。

  • 可用性テスト(Availability Testing):

ソフトウェアが予期された期間中に常に利用可能であることを確認するためのものです。このテストでは、システムの稼働時間や再起動時間などのパラメータをテストし、問題を特定することができます。例えば、次に説明する耐久性テストでの稼働時間のテストと、障害発生からの回復時間やデータの損失などをパラメータとしてテストして問題がないか確認します。

  • 耐久性テスト(Durability Testing):

システムが長期間にわたって安定して動作することを確認するためのものです。このテストでは、長時間の連続稼働や負荷テストなどを行い、システムの信頼性や耐久性を確認することができます。例えば、以下のようなテストを行いメモリーリークやパフォーマンスの低下などの問題がないかを確認します。

アプリケーションに対して、実際のプロセス数やピーク時の負荷を想定した負荷をかけて、連続稼働させます。
メモリ、通信チャネル、CPUに対して、大量のデータやトランザクションを処理させて、メモリ容量やCPU使用率などを監視します。
ネットワークや通信機器に対して、高速なデータ転送や多数の接続要求を発生させて、通信品質や安定性を評価します。

機能安全におけるソフトウェアのテストでは、以下の点に特に注意する必要があります。

  • テスト設計の正確性:

テストは、システムが安全に動作することを確認するために実施されるため、テストの設計には正確さが求められます。テストケースは、要件に基づいて十分にカバーされている必要があります。

  • テストケースの網羅性:

テストケースは、可能な限り広範囲にわたって実施する必要があります。これにより、システムの各部分が十分にテストされ、問題を特定することができます。

  • テスト環境の正確性:

テストは、本番環境とは異なる環境で実施されるため、テスト環境が正確であることが求められます。また、本番環境と同等の負荷をかけることができる必要があります。

  • テスト結果の正確性:

テスト結果は、正確に記録され、分析される必要があります。このようにして、問題を正確に特定し、解決策を見つけることができます。

  • 安全性評価:

テストは、システムが安全であることを確認するために実施されます。しかし、テストだけで安全性を保証することはできません。そのため、ソストウェアだけでなくシステムとしての安全性についての評価や検証も必要です。

9.3 機能安全におけるハードウェアのテスト

ハードウェアが安全かつ正常に動作することを確認するための試験が実施されます。以下に、代表的なハードウェアのテスト手法を紹介します。

  • 機能テスト(Functional Testing):

ハードウェアの機能を正常に実行できるかどうかを確認するためのテストです。例えば、ボタンやスイッチの動作確認や、入力信号に対する出力信号の確認などが含まれます。

  • 負荷テスト(Load Testing):

ハードウェアが規定された負荷条件下でも正常に動作するかどうかを確認するためのテストです。例えば、高温・低温、高湿度、振動、衝撃、加速度、電圧変動、電磁波などの条件下でのテストが含まれます。製品またはシステムが属する分野により、これらのテストに関する国内外の規格があり、それらを遵守する必要があります。

  • 耐久性テスト(Durability Testing):

ハードウェアが長期間にわたって安定して動作することを確認するためのテストです。例えば、長期間にわたる負荷テストや、高温・低温環境下でのテストなどが含まれます。

  • 信頼性テスト(Reliability Testing):

ハードウェアが規定された時間・回数の使用後にも正常に動作することを確認するためのテストです。例えば、繰り返しの負荷テストや、高温・低温環境下でのテスト、寿命テストなどが含まれます。

  • 安全性テスト(Safety Testing):

ハードウェアが安全かつ正常に動作することを確認するためのテストです。例えば、電気的な安全性、機械的な安全性、放射線や放電の安全性、環境汚染などの安全性を確認するテストが含まれます。

  • 環境テスト(Environmental Testing):

ハードウェアが規定された環境条件下でも正常に動作するかどうかを確認するためのテストです。例えば、高温・低温、高湿度、振動、衝撃、加速度、電圧変動、電磁波などの条件下でのテストが含まれます。

  • 設計審査(Design Review):

ハードウェアの設計書を詳細にレビューし、設計上の欠陥や不備を発見するための手法です。設計審査では、設計書の正確性や明確性、規定に適合しているかどうか、品質保証や製造性などがチェックされます。

  • ハードウェアのシミュレーション(Hardware Simulation):

ハードウェアを実際に組み立てる前に、コンピュータ上でシミュレーションすることで、機能、動作、タイミング、そして安全性や設計仕様の信頼性を確認することができます。

  • 故障モード影響解析(FMEA: Failure Mode and Effect Analysis):

ハードウェアの部品や機能において、故障が発生した場合にそれがどのような影響を与えるかを評価する手法です。FMEAにより、故障が発生した場合のリスクを低減するための対策が考慮されます。
FMEAでは、安全側故障(故障が発生しても、危険な状態にならない)と危険側故障(故障が起きた場合、危険状態になる)の識別と、危険側故障については、検知してリスクを低減可能な対策が取られたか、検知不可で危険状態になる恐れがあるかどうかを解析します。設計フェーズで危険側の検知不可故障を可能な限りゼロにする必要があります。

  • ハードウェアの自己診断(Built-In Self-Test: BIST):

ハードウェアに組み込まれたテスト機能により、自己診断を行い、異常が発生した場合はその部分を特定して、適切な対処を行うことができます。ハザードの発生頻度または故障率を考慮して、起動時または稼働時に行う診断があります。

これらのハードウェアのテスト手法は、機能安全において重要な役割を果たしています。また、ハードウェアのテストは、ソフトウェアと同様に、設計・開発の初期段階から開始され、そのフェーズで実施されることが重要です。

コラム:ChatGPTとの対話9

テスト工数が大きいことは知られていますが、機能安全に関わる部分のテスト工数についてChatGPTと対話してみました。

質問1:安全関連系のテスト工数比率

質問2:安全関連系テスト工数の削減方法

この記事が気に入ったらサポートをしてみませんか?