Magnolia Tech

いつもコードのことばかり考えている人のために。

2つ目のバグを見つけるためになにをすればいいか

バグを一つ見つけたら、たぶんあと30個は潜んでる、知っているんだ


バグに関して一番難しいのは、「正しくバグレポートを書くこと」ではないかと思う。

  • なぜそれがバグと思われるのか?
  • 何と比較しているのか?仕様書?思い込みではない根拠は?
  • 本来の期待する挙動は何なのか?
  • 再現するためのコードや条件は何か?
  • 改修の優先度や期限はいつか?

など……誤りを誤りと特定し、他の人に納得させるためには正確な情報と、それを表現する文章力が求められる。GitHubのissueのテンプレートの仕組みが年々整備されていくのをみても、いかに自由に書かせても正しく書けないか、よく分かる。

この辺りは最初の頃にシニアなエンジニアに散々直されて覚えていくものだと思う。


さて、次に難しいのは「2つ目のバグを見つけること」ではないか。見つけたバグは直すしかない。しかし、きっとマネージャーはそのバグレポートに対して、次の言葉を発するはずだ。

「他に類似のバグは無いの?調べた?」

そう、バグは一つ有れば、たいてい同じ原因で混入した類似のバグが、2つ目、3つ目とさらに潜んでいる可能性が高い。

そしてたいていバグは偏在しているので(当たり前だけど、バグは自然発生しないので、満遍なく分布するはずがない)、正しい観点に従って調査しないと探すのに無限の時間がかかってしまう。

ではどうやって二つ目のバグを見つけるか?その方法は極論すると3つではないか。

  • 直接原因に着目する 参照したドキュメントが間違っていた、仕様の解釈を誤っていた、レビューの指摘が間違ってた……間違いの原因が特定されれば、同じプロセスで作られた箇所にはどうようのバグが潜んでいる可能性が高い……そして、この手の原因は、作り込んだ本人であれば容易に思いつく

本人が思い付かないものはたいてい一貫性か、整合性の欠如だ。ただ、これらは既存の成果物だけを見てもなかなか抽出・特定ができず、検証のための成果物を作る必要がある。

  • 一貫性に着目する バグの内容が、”同じでなければならない要素”が同じでない場合、やはり”同じでなければならない要素”を全部抜き出し、”同じになっているか”検証する。

  • 整合性に着目する 例えば状態遷移の考慮漏れなどは、そもそも設計の整合性が積み上げられてないことが原因なので、状態遷移図やデータパターン図を書き出して確認する

そして、最後にこれがやってくる。

  • とにかく全部見直す 一番効果は低く、方法論でも無いのが「全部見直す」……これでバグが見つかることも当然あるが、観点が定まらず効率は悪い……これが単に説明責任上の行為にならないように注意する必要がある……ただし、上位のエンジニアを連れてくる口実にはなるかもね:)

2つ目のバグを見つけるのは、全体を把握し、プロセスの適切性や、一貫性、整合性が担保されていなければならないポイントを掴む必要がある。


なお、一つ目のバグを特定し、レポートし、修正し、管理し、未来において類似のバグを発生させないための教訓を残す方法については、名著『デバッグの理論と実践』という本が有ります。ちょっと厚いなーとは思いますが、全部網羅されてて、エクササイズには良い本です。半年くらいかけてでも読みましょう。