バグ報告などを整理、確認していると、最近のリリースに大きなバグが3つもあることが判明した。すぐに原因を調べて解決せねばならない。
バグのうち1つは配列のインデックス変数が正しく初期化されなないときに起こっていた。初期化に失敗するとPCが固まってしまい、一旦電源を切らないといけなくなる。初期化ルーチンの順番を変えることで簡単に修正できた。
2番めのバグは、マジックナンバーによるものだ。定義した文字列ではなく数字を直接書いていた個所があったために動作がおかしくなっていた。
装置の駆動方向を格納する変数directionがあり、
if (direction == FORWARD) { moveForward(); } else { moveBackward(); }
のように判別をしている。定数FORWARDは
#define FORWARD 0 #define BACKWARD 1
のように以前は定義されていたのが、その後
#define FORWARD 1 #define TOWARD 0 #define BACKWARD -1
のように変更された。このためFORWARDのかわりに 0 をdirectionに代入していた場所で駆動方向が逆になるという不具合が起こってしまった。なんでマジックナンバーを使ってしまったのかさっぱり分からない。小人の仕業か?
3番めは、測定終了時に正しく初期位置に戻らないというバグで、続けて測定を開始すると予想と違う場所で測定が開始されてしまう。単に初期位置に戻る処理が抜けていたのだが、これまたなぜそうなってしまったのかは分からない。
いずれにしてもそれなりのテストやレビューで防げたバグだろう。この夏にテスト要員を無くされた影響が的面に出たと言える。この装置のように、操作に熟練を要する場合に、テスト要員を確保するのは難しい。テストをすることのできる人はえてして有能なので他の仕事に駆り出されることが多く、地味なテストは軽視されることが多い。経営側の品質管理に対する意識改革も必要だろう。