組み込みソフトウェア・テスト・クライシスの「傾向と対策」 ――「品質」をつねに念頭に置きながらソフトウェアを開発する
●欠陥の修正がほかの場所に悪影響を与えていないか
システムが要求どおりに動作することは,どのようにして証明できるのでしょう.これは,それほど難しいことではありません.そのシステムが使用されるときの要件を抽出し,そのとおりに操作して,期待する結果が出ればよいのです.
では,システムの欠陥に対して対策を施したとき,その対策が問題を解決し,同時にそれ以外の動作に悪影響を与えていないことはどのようにすれば証明できるのでしょうか.発生する問題に100%の再現性がある場合は,同じ条件下で問題が発生しないかどうかを確認することで,その対策の有効性を判断できます.
再現性が低い場合はどうでしょう.再現性が低くても,再現のしかたに特徴があれば(例えば,問題発生時の信号のタイミングが決まっている),ある程度時間はかかるものの,そのタイミングと同じタイミングで問題が起こらないことを確認することで,その対策の有効性を判断できます.ただし,これは対策の効果を確認しているのであって,それ以外の動作に悪影響を与えていないことを保証するものではありません.
ソフトウェアは,ある制御とある制御の間の依存関係がハードウェアほど明確ではありません.見つかった欠陥に対する対策を施すためにソフトウェアの変更を行ったとき,問題の起こった機能以外についても新たな問題や制約が生じていないかどうかを確認する必要があります.
では,何をもって上述のような2次障害が起こらないことを保証するのでしょう.すべてのテストをやり直せば証明したことになりますが,変更のたびにテストを繰り返せるほど時間にも予算にも余裕はないはずです.したがって,通常は,設計内容と実装内容から影響範囲を予測して,その影響範囲の機能や性能を再チェックします.