ステップあたりのバグ数の確率分布

1Kステップあたりx個のバグが検出されるべきという基準があって、それを元に品質管理をするという手法があります。これ自体は古いやり方だなとは思いますが、否定することもできません。

多分何かを仮定して品質というのを見積もろうとしているのでしょうが、それをはっきりさせていないところは納得感を下げます。

1kステップあたりのバグ数というのがあってバグ数がステップ数に比例すると考えているということは、きっと二項分布を仮定しているのでしょう。1行書いたらコインを投げて裏表がでるように一定の確率で間違えるというのを仮定しているのだと思います。この仮定はコードの複雑さとかを無視してしまっているので厳密には間違っているだろうけれど、そんなに悪い仮定ではないと思います。複雑な仮定を持ち込むよりはシンプルな仮定で突き進んだほうが実用上は良いことも多いです。

しかし、2項分布を仮定するなら、バグの数の上限値・下限値を基準から±30%等と規模によらず一律に決めるのは変です。バグの数の上限値・下限値を決めるのは、QCの7つ道具でいうところの「管理図」の発想でしょう。だが、上限値・下限値はロットあたりの不良品数とかに決めるもので、比べるロット数は揃っています。10個で1ロットのものと、100000個で1ロットのものの不良品率のばらつきは同じではないです。1ロット100000個で見た時より、1ロット10個でみたときの方が不良品率のばらつきは大きい。10個作って1個不良品がまじることもままあるでしょう。しかし、1ロット100000個で10000個不良品が出たらこれは異常です。同様に、10行コードと100000行のコードのバグ率の上限値・下限値を同じにするのは変に思えます。

LOC (line of code)をn, バグの割合をpとして、2項分布を仮定するとバグの期待値はnp、分散はnp(1-p)となります。つまり、バグの数はLOCに比例するが、バグ数のばらつきはLOCの平方根に比例します。*1

したがって、バグ数の上限・下限の基準はLOCによって変えないと理屈にあわなくなります。規模を4倍にしたら、管理基準を2倍厳しくしないといけない。

とはいっても、2項分布の仮定がすでに誤っているというか、本当にサイコロを振ったように確率分布で決まるなら管理の必要がない。特に理屈なく上限値・下限値を決めていいと思う。変な理屈は実用上はない方がいいかもしれない。*2

図解入門ビジネスQC七つ道具がよ~くわかる本 (How‐nual Business Guide Book)

図解入門ビジネスQC七つ道具がよ~くわかる本 (How‐nual Business Guide Book)

*1:ちなみにnが十分多ければポアソン分布をに近くなるでしょう。

*2:実用ってつまらね!!