信頼度成長曲線の成り立ちを思い出してみた(前編)

f:id:monex_engineer:20190318165158j:plain
こんにちは。
最近こちらの会社に参りました、システム開発部の小田切と申します。

私の担当する開発が結合テストフェーズに入りました。

結合テストフェーズでは、横軸にテスト時間、縦軸に累積バグ発見数をとったグラフを作成することがあり、信頼度成長曲線と呼んでいます。S字のカーブを描くことが多いです。

形状について考察した理論があり、以下に挙げる2つが基本のモデルと解釈しています。会社によっては40年も前から、以下のどちらかやその拡張式を用いて、バグの発生状況を推定・評価しているところがあります。しかしながら、学校の授業では行わない内容の為、一部の方にしか知られていない事実もあります。

また、先に結論の式だけを提示されて、難しいと敬遠されることも多いので、昔勉強したその成り立ちを今一度書いてみようと思いました。

 

1) ロジスティック曲線モデル式

f:id:monex_engineer:20190318154218p:plain
もともとは、1800年代に人口増加のモデルとして考案された式

2) ゴンペルツ曲線モデル式

f:id:monex_engineer:20190318154240p:plain
同じくもともとは、1800年代に年齢と死亡率の関係を表した式


今回は、上記の式がどのような仮定で出てきたかの説明をしていきたいと思います。

終結果の式だけでそれぞれのパラメータを変化させると、どのように変化するかを示すサイトなどもありますが、それぞれの式が導出される微分方程式とセットにしてイメージしておく方が、より良い対応ができると思います。どのような考えで、不具合検出に対応しているかも説明したいと思います。

紙面の長さの関係から、今回はまず、ロジステック曲線モデルについて説明していきます。

ロジスティック曲線モデル

ロジスティック方程式は、1800年代に生物の個体数の変化の様子を表す数理モデルとして始まったのですが、応用として累積バグの変化の様子を表すモデルとして用いられています。


 最初に挙げた式では関数として判りやすいように、変数が発見バグ数 , 時間が となっていますが、今後は、式をイメージしやすくするため、発見バグ数を Bug 、時間を として表現してみます。


考えは単純です。バグの総数を 個(定数)として、
バグ発生の伸び率 d(Bug)/dt / (Bug) は、
未発見のバグ k - Bug に比例するとする考えです。

 バグ発生の伸び率とは、バグの時間当たりの発見率 d(Bug)/dtを、現在発見のBug数で割ったものと定義します。

比例定数を w とすると、
 f:id:monex_engineer:20190318155601p:plain

と、すごく簡単な式になっている事が判ります。
なんと、バグ発生の伸び率がバグ数の一次式で減少しているだけの式です。

α= k * w とおいて、この微分方程式を解くと、最初に挙げた

f:id:monex_engineer:20190318155800p:plain

が得られます。上記の式をよく見ると、 

を無限大にするとm * exp(-α*t) が 0 に近づくことで、分母が1になり、Bug (発見バグ数)が、k (バグ総数)に近づいていくことが判ります。

f:id:monex_engineer:20190318153111p:plain


先ほどの方程式は、
f:id:monex_engineer:20190318155933p:plain

とも書けます。この式では、バグ発見の増加率 d(Bug)/dt は、Bugの発見数に比例する項と、発見バグ数が大きくなるほど増加率を減らす項 1 - Bug/k の積に比例すると読めます。初めの頃は、Bug/kが0に近いため、Bugに比例した発見率となり、発見バグ数が k に近づくと、d(Bug)/dtは、0に近づき、Bug=k で遂に0となり、これ以上 Bugが増加しないこともイメージできます。

 
 mは先ほどの微分方程式の初期条件を与えることで決まります。しかしながら、 t=0 とすると、Bug=k / (1+m) となり、0にはなりません。テスト開始時に既にBugが発見されている事に数式上はなっていますね。

テスト前から既知のバグがあるとわかってテストを始めるのは、実態と合っているような気もしたり。。。。


さて、考えのもととなった微分方程式を見て、信頼度成長曲線のひとつのロジスティック曲線モデルが少し身近になった気がしたでしょうか。

私は信頼度成長曲線を開発で用いた後、しばらくして、元の微分方程式を見ました。こんな簡単なモデルであの難しそうな式がでたのかと驚き、かつロジスティック曲線への親しみがわいた気になりました。ゴンペルツ曲線も同じです。

ここまで書いて、昔々、私が大学生の授業で受けた教授の言葉を思い出しました。

『日本の教科書には、光は直進性があるので、影は光源と反対側にできます。』
と記述することが多いが、
アメリカの教科書には、影は光源と反対側にできています。従って、光には直進性があることが判ります。』と書かれている。

アメリカの方がより良い説明だと思う。
(昔のことで国名の記憶があやふやですが、イギリスかもしれません。)

 

与えられた理論をそのまま使用するのではなく、現象・事実から理論が生まれていることを再認識しようということですね。

皆さんも、与えられたものの起源を振返らず、こういうものだと信じていることがありませんか?チコちゃんにも叱られてしまいます。
今の環境は、開発を行っていても、今までが何となくということを振り返ることのできる会社と思っています。
これを読んでなるほどと思った方、うちに来ませんか?

次回はゴンペルツ曲線について、その元となった考えを説明したいと思います。導出方法がロジステック曲線モデルとは違った概念で、これもまた興味深いです。

 

私が昔勉強し、今回参考にした本(微分方程式の出ていた本)は、以下です。
改めてみると1981年発行でした。

参考文献:
 ソフトウェアの品質評価法(統計的管理へのアプローチ)
 三觜 武 著  日科技連出版社 1981年刊

ということで、顔写真も私の80年代の写真を使用してみました。 

 

田切 貴秀システム開発部 開発グループ エンジニア