機能安全に触れる機会があり、技術・手法群についてもとても勉強になりそうであったため、一つずつ理解していきたい
IEC 61508-3:2010 附属表A
IEC 61508-3:2010 附属表Aにおいて、要求安全度水準に従って採用すべき技術・手法が規定されている。
以下の表はIEC 61508-3:2010 附属表Aより引用
https://kikakurui.com/c0/C0508-3-2014-01.html
評価 | 説明 |
---|---|
HR | この安全度水準には、技法又は手段を使用することを強く推奨する。この技法又は手段を使用しない場合は、使用しない理論的根拠について、附属書Cを参照して安全計画時に詳述しなければならず、またアセッサと合意しなければならない。 |
R | この安全度水準には、HR推奨より低い推奨事項としての技法又は手段が望ましい。 |
— | 技法又は手段を使用することに関しては、推奨も反対もしない。 |
NR | この安全度水準には、技法又は手段を使用することを積極的には推奨しない。この技法又は手段を使用する場合は、使用する理論的根拠について、附属書Cを参照して安全計画時に詳述しなければならず、またアセッサと合意することが望ましい。 |
表A.4−ソフトウェア設計及び開発−詳細設計(7.4.5及び7.4.6参照)
https://kikakurui.com/c0/C0508-3-2014-01.html
技術及び手段(a) | 参考文献 | SIL 1 | SIL 2 | SIL 3 | SIL 4 |
1a 構造化手法(b) | IEC 61508-7のC.2.1 | HR | HR | HR | HR |
1b 準形式手法(b) | 表B.7 | R | HR | HR | HR |
1c 形式的設計手法及び精緻化手法(b) | IEC 61508-7のC.2.2及びC.2.4 | – – – | R | R | HR |
2 コンピュータ支援設計ツール | IEC 61508-7のB.3.5 | R | R | HR | HR |
3 防御的プログラミング | IEC 61508-7のC.2.5 | – – – | R | HR | HR |
4 モジュラーアプローチ | 表B.9 | HR | HR | HR | HR |
5 設計及びコーディング基準 | 表B.1<br>IEC 61508-7のC.2.6 | R | HR | HR | HR |
6 構造化プログラミング | IEC 61508-7のC.2.7 | HR | HR | HR | HR |
7 信頼性確認/検証済ソフトウェア要素の使用<br>(使用可能な場合) | IEC 61508-7のC.2.10 | R | HR | HR | HR |
8 ソフトウェア安全要求仕様とソフトウェア設計との<br>間の前方トレーサビリティ | IEC 61508-7のC.2.11 | R | R | HR | HR |
IEC 61508-7:2010
IEC 61508-7:2010にて防衛的プログラミングは以下の定義が示されている
C.2.5 防御的プログラミング
注記 この技術及び手法は,JIS C 0508-3の表A.4で引用されている。
目的:プログラムの実行中に異常な制御フロー,データフロー又はデータ値を検出し,これらに対して事前に決めた認容できる方法で対応するプログラムを作成する。
説明:プログラミング中,制御又はデータ異常がないかどうかをチェックするために,多くの技術を用いることができる。これらの技術は,誤ったデータ処理の可能性を低減するために,システムのプログラミング中,最初から最後まで系統的に適用することができる。
防御的技術には,二つの重なり合うエリアがある。固有のエラーセーフ ソフトウェアは,これ自体の設計上の欠点を包容するように設計する。これらの欠点は,設計若しくはコーディングの間違い又は誤った要求事項による場合がある。幾つかの防衛的技術を,次に示す。
− 変数は,範囲をチェックすることが望ましい。
− 可能な場合,値は確からしさをチェックすることが望ましい。
− 手順のためのパラメータは,プロシジャー入口において,型,サイズ及び範囲をチェックすることが望ましい。これらの最初の三つの推奨事項は,プログラムが取り扱う数値が,プログラム機能及び変数の物理的意味の両面から妥当なものであることを確実にするための手助けとなる。
読取専用パラメータと読み書きパラメータとは,分離することが望ましく,これらへのアクセスをチェックすることが望ましい。関数は,全てのパラメータを読取専用として扱うことが望ましい。文字列定数は,書込可能でないことが望ましい。このことは,偶発的な上書き又は変数の誤用を検出する手助けとなる。
フォールトトレラントソフトウェアは,これ自体の環境における故障を“予期”するか,又は公称条件若しくは期待条件の範囲外で用いた場合,事前に定めた方法で動くように設計する。技術としては,次の事項を含む。
− 物理的重要性をもつ入力変数及び中間変数は,確からしさについてチェックすることが望ましい。
− 出力変数の影響を,チェックすることが望ましく,そのチェックは,できる限り,関連システム状態変化の直接的観察によることが望ましい。
− ソフトウェアは,予期されるハードウェアの存在及びアクセス可能性の両方を含む,ソフトウェアの構成をチェックすることが望ましく,さらに,ソフトウェア自体が完全であることをチェックすることが望ましい。このことは,保全手順後の完全性を維持するために特に重要である。 防御的プログラミング技術の幾つか,例えば,制御フローシーケンスチェックは,外部故障にも対処する。参考文献: Software Engineering for Real-time Systems. J. E. Cooling, Pearson Education, 2003, ISBN 0201596202, 9780201596205 Dependability of Critical Computer Systems: Guidelines Produced by the European Workshop on Industrial Computer Systems, Technical Committee 7 (EWICS TC7, Systems Reliability, Safety, and Security). Elsevier Applied Science, 1989, ISBN 1851663819, 9781851663811
詳説
プログラミングにおいて一般的なベストプラクティスを同様のことを述べているので特筆すべきような事項はありませんが、敢えていえば、
意図しない状態での動作を防止するために、
入力・出力の確からしさをvalidationしなさい
ということになります。