見出し画像

エンジニアと生成AI№14(設計上の留意点№2)

 前回の生成AIが回答した制御装置のトラブル原因の2番目に挙げた「プログラムの不具合」について更に掘り下げたいと思います。
 今回も、この回答結果からトラブルシューティングから逆算した設計ポイントについて考えています。
 ソフトウェア開発については、アジャイル開発が主流になっていますが、制御装置ではアジャイル開発は馴染まず、モジュール開発で考えていきます。

質問
「制御装置に想定されるトラブルのうちプログラムの不具合として何が考えられるか」

回答
「制御装置におけるプログラムの不具合はさまざまな原因により発生する可能性があります。以下に、プログラムの不具合として考えられる一般的なトラブルをいくつか挙げてみます。」

1.論理エラー(Logic Errors):プログラムの論理が正しくない場合、期待される結果が得られない可能性があります。例えば、条件分岐やループが正しく設計されていない場合などがこれに当たります。
2.構文エラー(Syntax Errors): プログラムが正しい構文に従っていない場合、コンパイルや実行時にエラーが発生します。これは通常、簡単に見つけやすく修正できるエラーです。
【考えられる設計ポイント】
原因:論理設計ミス
対応:コンパイラ、構文チェッカ等でエラー検出で検出できるエラーはさておき、コレラで検出されないエラーについて考えてみます。エラーを予防することは困難で、一定の確率で発生します。従ってエラー検出が重要になり、テスト時のパラメータの条件が重要になります。
   ①数値の幅(最大値、標準値、最小値、異常値etc)
   ②数値の組み合わせ(入替、逆条件etc)
   ③時間条件(同時発生・輻輳、発生時入替etc)
注記:テスト項目だけでなく条件を変えることで検出精度を向上させることができます。

3.メモリ関連の問題:メモリリーク(Memory Leak)やメモリの適切な解放が行われない場合、プログラムの実行中にメモリが不足する可能性があります。
4.入力データの不備:不正な入力や予期せぬ入力がプログラムに与えられた場合、エラーが発生する可能性があります。適切な入力検証が行われていない場合、これが原因となります。
【考えられる設計ポイント】
対応:3項、4項については、設計経験が大きく影響します。従って2項と同様に検出精度の向上がポイントになります。

5.外部ライブラリやモジュールの不具合:プログラムが依存している外部のライブラリやモジュールが不具合を抱えている場合、それがプログラム全体の不具合の原因となります。
【考えられる設計ポイント】
対応:事前対応は困難で、2項と同様に検出精度の向上がポイントになります。

6.並行処理の問題:マルチスレッドやマルチプロセスのプログラムでは、同時に複数の処理が行われるため、適切な同期が取られていない場合に競合状態やデッドロックが発生する可能性があります。
【考えられる設計ポイント】
対応:設計時に並列処理の条件等を網羅することは困難で、2項と同様に検出精度の向上がポイントになります。③項の時間条件の設定が重要になります。

7.更新やパッチの不備:プログラムが定期的にアップデートされないか、アップデート時に不具合が生じた場合、新しいバージョンで問題が発生する可能性があります。
【考えられる設計ポイント】
対応:設計ポイントではなく、運用管理の課題になります。

 こうしてみると、プログラムの不具合については、設計の対応より検出精度向上がポイントになります。完璧なデバックなど存在しませんので検証ノウハウの蓄積が望まれます。

 次回は、3番目の通信障害について考えていきます。

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