見出し画像

バグ曲線:バグのないプログラムは存在しない

 バグとは、プログラムが思った通りに動かないときの原因です。バグの語源は虫です。バグを取ることをデバッグといいます。時間がなくて焦っているときとか、酔っ払ってプログラミングしたときなどによく発生します。あと、バグのないプログラムは存在しない、とも言われています。
 プログラム開発の現場では、いくつバグが出たかを毎日数えて、横軸に日付、縦軸にバグ数の累積をプロットした曲線を描きます。たいていS字カーブになり、落ちついてきたら、まあこんなもんでいいでしょう、という判断をします。この曲線を信頼度成長曲線(通称バグ曲線)といいます。
 下記の図は私が開発したあるプログラムのバグ曲線です。この累積カーブはバグの数と、追加コードの数を合わせたものです。とあるおじさんが、追加コードとバグを一緒にするな、と顔を真っ赤にして怒るのを見たことがあります。怒られたのは私ですが。でも、両者は厳密には分類できないと思います。追加コードには、ユーザの要望などに応えるために新しい機能を追加するものもあれば、不具合が起こってしまう可能性を抑えるためのものもあります。
 バグとは意図に反して動作してしまう原因のことです。不具合が起こってしまう可能性を放置しておくのは、プログラマーの意図に反します。したがって、両者を合算することは合理的だと思います。まあ、こんなめんどくさいこと言っても理解してもらえそうにないおじさんだったので、黙っていましたが。
 下記の図の例では、2014年頃にバグの累積数が平坦になって一旦落ち着いています。この時点でプログラムは完成していて、いろんな人に使ってもらっていました。その後、2015年の末あたりに、ヘビーユーザーが現れて、想定していなかったプログラムの限界を超えるような使い方や、新しい要望が多数寄せられました。その格闘は1年くらい続きます。そのおかげで、プログラムの機能や用途が飛躍的に広がりました。プログラムは開発する人と使う人で一緒に完成されていくものです。ついでに本稿を書き始めてからの文字数の推移もグラフ化してみました。

バグ曲線

図 バグ曲線(信頼度成長曲線)の例

バグ曲線(原稿)

図 原稿の文字数の推移

 これは、COVID-19で見慣れた新規感染者数のグラフを累積にしたものと同じです。平坦になると新規感染者数が抑えられていて、収束したといえます。同じようにバグもなくなったとみなします。ですが、検査をしないと新規感染者数が出てこないのと同様に、プログラムも十分なテストをしないと、そもそもバグを発見することはできません。

4. バグ曲線


この記事が気に入ったらサポートをしてみませんか?