先日、ソフトウェアの不具合修正の手順という記事を書きましたが、その続きです。
不具合対策を検討するときには、モデリングしながらすすめると頭の中が整理しやすくなります。
モデリング手法
モデリング手法としては、TOCfe(教育のためのTOC)の中で紹介されているロジックブランチを使用します。
#ロジックブランチ
ロジックブランチを簡単に説明します。
下の図を見てください。
これは、もし"B"ならば"A"になる という図です。
Bには原因が入り、Aには結果が入ります。
これは、もし"B"ならば"A"になる or もし"C"ならば"A"になるという図です。
BとCには原因が入り、Aには結果が入ります。
これは、もし"B"かつ、もし"C"ならば"A"になるという図です。
BとCには原因が入り、Aには結果が入ります。
2つ目と違うのは、BとC両方の原因があったときにAになるということです。
不具合対策検討方法
さて、上記の図示方法で、不具合原因を探っていくとどうなるのかを紹介します。
ソフトウェアの不具合修正の手順の順序で紹介していきますが、記載している不具合原因などは適当に書いるためあまり深くは考えないでください。
1.不具合を再現させる
とりあえず、どうやってでも良いので不具合を再現させてみます。
すると、直接不具合に関係している原因は何か分かっていませんが、下記のように図示することが出来ます。原因はもっとたくさん思いつくかもしれません。
原因になりそうなことをすべて書き出しておきます。
2.不具合の再現性の向上施策を検討する
次に、上記の図を整理していきます。
不具合が再現した時に原因だと思われている事項を一つ一つ検証していき、関係ない物は除外するなどして整理していきます。
その中で、更に不具合原因の因果関係が整理されることもあるかもしれません。
この図は、もし"アクセスが集中している"まらば"CPU負荷が高くなる" さらに、もし"CPU負荷が高い"ならば"不具合Aが発生する"という図になります。
こういった因果関係などを整理して、不具合の原因を探っていきます。
3.不具合の対策の検討
次に不具合対策の検討です。
上記の2.不具合の再現性の向上施策を検討する にて不具合の原因を整理して結果下記のようになったとします。
この図で示しているのは、不具合Aが発生するのは3つの複合原因によって発生しているということです。
不具合Aが発生しているのは、"ネットワークの回線品質が良くない" and "CPUの負荷が高い" and "その他、該当プロセスにコーディングミスがある" ためだと考える事ができます。
これらは、andで繋がっているため、3つのうちどれか一つを最低でも修正すれば不具合は発生しなくなるわけです。
そのため、この図が正しいとした場合、不具合の対策方法としては下記の3つが考えられます。
- ネットワークの回線品質を良くする
- CPUの負荷を減らせるようにする
- コーディングミスを修正する
実際の対策方法としては、コーディングミスの修正になるかもしれません。
しかし、もし他の選択肢が取れる場合はソースコードを修正しなくても良いということになるかもしれません。
レガシーなシステムなどでは、ソースコードを修正することによる影響範囲等の特定はかなり難しくなります。そのため、不具合対策の対策方法を複数考えておけるということはとても大切なことになります。
参考
TOCfEの思考プロセスについては考える力をつける3つの道具の本を参考にしてください。