ソフトウェア開発全工程での不具合数を推測する Rayleighモデル (レイリーモデル)  前編:ソフトウェア用モデルの導出

マネックス証券 小田切貴秀です。
以前書いたエンジニアブログ 
信頼度成長曲線の成り立ちを思い出してみた(前編)
信頼度成長曲線の成り立ちを思い出してみた(後編)
いまだにアクセス頂いているようです。本当にありがとうございます。
 上記のブログの中で
開発フェーズ間(基本設計、詳細設計…)各工程での不具合出現件数から、本番リリース後の不具合を推定する理論をいつか書けたら。。。」と書きました。今回はその話をしようと思います。

 天下り的にモデル式を出すのでは、その先に進みづらいと思います。元となるWeibull分布(ワイブル分布)の説明から始め、Rayleigh分布(レイリー分布)の説明までを前編で行い、次回以降ではRayleigh分布をソフトウェアに適用した時の直感的なイメージ、開発プロジェクトへの適用例(架空プロジェクトです。)を書きたいと思います。

1. はじめに

 今回、説明するのは、開発全工程に適用する推定モデルについてです。ソフトウェア信頼性で使う場合、Rayleigh分布(レイリー分布)またはその応用型が使われることが多いようです。Webで検索すると、レイリー確率分布の式が天下り式に与えられていることが多く、「式があるのでとりあえず適用してみた」風の記事も見受けます。「もったいないな。」と。信頼度成長曲線もそうですが、式の成り立ちイメージを知ると理解も進むと思います。今回は、推測を交えて書き、私の理解を説明したいと思います。

 最近は少し遠ざかっているので、最新の議論に適合していない部分があるかもしれません。お気づきの際はご指摘いただけると幸いです。

2. まずは、元となるWeibull分布(ワイブル分布)から理解

 ググると見るのが、「Rayleigh分布(レイリー分布)は、Weibull分布(ワイブル分布)の特殊型です。」のような表現です。何を言っているのかさっぱりわからないですよね。「ワイブル分布」も「特殊型」も、言われても判らないです。なので、まず、ワイブル分布から説明したいと思います。

2-1. ワイブル分布は累積分布型から理解

2-1-1 いきなり式だけ出されても...

 出てくる式をウェブでよくみる順番にまず書いてみます。

ワイブル分布の確率密度関数 

ワイブル確率密度関数

ワイブル累積分布関数 

ワイブル累積分布関数

これだけ見ると、なかなか判らないですよね。

2-1-2 そもそもワイブル分布って何?

 ワイブル分布はハードウェアの時間に経過による劣化現象を統計的に処理・説明するためなどに利用されています。同じ不具合の検出ということでソフトウェアにも適用し研究されています。ワイブル分布をググると、上記の様にいきなり確率密度関数(言い換えると瞬間、瞬間の故障発生率)を先に、出しているものをよくみかけます。

 ワイブル分布は累積分布関数から攻める方がイメージを掴みやすいと思います。累積分布が数式で表せたら、その数式を時間で微分すると確率密度関数が導出できます。(位置情報を時間で微分すると速度が出るイメージです。)

2-2 ワイブル累積分布のイメージ説明

2-2-1 ワイブル分布を使ってやりたいこと

 初期故障を取り除くために加速試験を実施している途中の測定結果があるとします(左図)。いつまで試験をしたらよさそうでしょうか。そんなとき、測定結果をモデル式に当てはめて、将来を推測したくなります(右図)。

この測定結果から

このような推定曲線を引きたい

 以前のロジスティックモデルゴンペルツモデルは、テストフェーズを対象とした話でした。今回のモデルはプロジェクトの全工程での推計です。従ってこのモデルでは、基本設計、詳細設計…システムテスト、本番リリースと不具合を計測していくと想像して下さい。要件定義から計測の場合もあります。ですから、ソフトウェアに今回説明のモデルを適用するには、開発当初からレビュー指摘などの不具合を記録する必要があります。

2-2-2 まずは近似曲線を描く

 ワイブル分布は、1939年に提案されたとのことです。コンピュータの発達する前のことです。大体使える式もイメージできます。皆さんEXCELでグラフを書いた時、近似曲線を選んだことがありますでしょうか。同じ感じで近似を実施すると思いましょう。

 適用する数式にはどんなものが良いでしょうか。思いつく条件は、

  1. 累積故障数は、時間と共に単調に増加する。(時間経過中に故障数が減ってしまう⇒試験中に勝手に直る を意味します。感覚的に合いませんね。)
  2. 時間を大きくしていっても発散しない。(100個でテストしているのに、数式上t⇒∞ としたとき 故障数が1億個とか∞になったら、扱いにくい。)
  3. 時間的にa)滑らかに変化し、b)全期間に渡って、1本の式で表せる。[ a)滑らかに変化⇒微分可能⇒確率密度関数(時間毎の不具合発生頻度)も導出しやすい。b)1本の式⇒条件分岐を気にすることが減る。条件分岐は、高校の数学の面倒な手順を思い出してしまいます。]

 これを考えると、数式的に扱いやすい近似曲線は、以下の3つくらいでしょうか。 (以下、時間と共に変化するので、変数はtと書きます。)

  1. 指数関数を用いた形式を式中に用いる  
  2. 時間の累乗を用いた形式を式中に用いる
  3. 対数を用いた形式を式中に用いる

 最初の条件を満たすものは、(最終的に 個不具合が存在するとして) 時間に関する直感的な基本形として、

が浮かびます。(ワイブル先生の論文は、あらゆる分布関数は、と書けるとする仮定から始まるものがあります。難しい議論は置いて、まずは前述の式から始めます。)下図では、例として  で推定カーブを描いてみました。

近似式の当てはめ

ここから、応用を考えます。
応用1)時間に応じて早く変化するもの、遅く変化するものを考慮するには、時間tを固有の定数cで割って

とすれば良いですね。例として、

 に対して、いくつかの  (=0.5, 1, 2)でグラフを書いてみます。
同一グラフ上では異なる形状に見えますが、” t/c “が同じ値になる場所を揃えると、当たり前ですが、同じ形になっています。

cを用いて横軸を調整


応用2)次に形状の変形を入れたいとします。簡単にできそうなのは時間の部分(t/c)の累乗を取って、

   c.f. 変更前は、

とすれば、形が変わります。こちらも例として、

に対して、c=1, 4、m = 0.5, 1, 2 で、プロットしてみたのが、以下の図です。cによって時間軸の位置、mによって形状が変わるのが判ると思います。 

ワイブル累積分布関数のパラメータの効果

ちなみに、  ならば、  です。従って、mがどのような値をとっても、cが同じ値ならば、F(t)の値は、 のところで、一点で交わっています。

 
基本式から、応用1応用2の適用で、 

ワイブル累積分布関数


の出来上がり。基本式から2つの応用でたどり着きました。ここで用いたパラメータc, m, k(=総不具合数)でデータをフィッティングします。最近は、EXCELで簡単に最適化できます。cだけではなく、も整数以外も取れるので、連続的に変化が可能です。

2-3. ワイブル分布確率密度関数を累積分布型から導出

 ワイブル累積分布関数を、時間で微分すると、ワイブル分布の確率密度関数がでます。
 ワイブル分布の確率密度関数 ⇒ ワイブル累積分布関数の時間微分
 

 最初から、この関数を「ワイブル確率密度は以下で表せる」と、天下り式に与えると、「なんだ?!この式??どうやって出たの?わかんない!」と、怯えてしまいますが、累積分布側の基本形から考えると、「こんな感じかぁ。」と障壁がうーんと下がったのではないでしょうか。

 また、これまでの話から、cをスケールパラメータ(時間のスケールが変わりますね。) mを形状パラメータ(時間項の重みづけがされ、形状が変わりますね。)というのも、直感的にわかるのではないでしょうか。信頼度成長曲線でも同じでしたが、測定結果に合うようにパラメータを求めます。

 モノづくりの世界では、製品により作りの複雑さが異なるので、製品ごとにフィッティングしパラメータを求めます。結果として、途中経過の状態から将来が推定ができることになります。信頼度成長曲線の場合と同じです。以上が、ワイブル分布の概念の説明です。
 どうでしょうか。天下り的に、

ワイブル分布の確率密度関数PDF: f(t)は、以下で定義されます。

ワイブル分布の確率密度関数

と1行目に書かれるよりは、大分障壁が下がったのではないでしょうか?

3. Rayleigh分布(レイリー分布)について

3.1 Rayleigh分布(レイリー分布)は、Weibull分布(ワイブル分布)の特殊型とは

 Rayleigh分布は、上記のワイブル分布のm=2の特殊形です。「ああ、形状パラメータmを2に固定した特殊形!」と理解できます。ワイブル分布からパラメータが一つ消えました。スケールパラメータ c だけが残りました。「ソフトウェア開発という目で見れば形状は同一で、案件毎にリリースまでの時間が異なるイメージか!」と思うのではないでしょうか。に2を代入した式を下に示します。

Rayleigh累積分布関数 

Rayleigh分布の確率密度関数 

 c=1 かつ横軸をt/cにして、累積 確率密度 を表したグラフは以下になります。

 

レイリー分布


 何故 2 かですが、本などには「経験的に2であることを見出した。」とあります。測定結果から、見出したということです。(その後の文献によっては、レイリー分布では合わないので、の値を調整している資料もあります。) 

 時系列でみると、どこかのフェーズのタイミングで不具合出現のピークが出たあとは、不具合が減っていく特徴があります。

 折角なので、Rayleighモデルに関する初期の論文を入手して読んでみました。*1

 入手した理由ですが、式の成立ちから考えると横軸は時間と解釈できますが、今まで斜め読みに読んだ資料の中では、式の意味付けのために横軸に開発フェーズ(基本設計、詳細設計、...)を取っているようにするものもありました。私の読んだものは、横軸にプロジェクトが始まってからの時間(週単位、月単位など)にしているものでした。昔作ったグラフでも問題なかったと確認でき、少し安心しました。  

 気が付いたら、長文になっていました。次回以降では微分された数式(レイリー分布)について、直感的な式のイメージや開発プロジェクトへの適用例について説明したいと思います。また、お会い致しましょう。

 

参考文献:
1. ソフトウェア品質知識体系ガイド -SQuBOK Guide-(第2版) SQuBOK策定部会 著, 2014

 最初に ソフトウェアへのRayleigh分布の適用を知ったのは、2007年刊の第1版ででしたが、第2版の方が記述が充実しています。まもなく第3版が出るようです。 

2. ソフトウェア品質工学の尺度とモデル Kan,Stephen H.【著】/古山 恒夫/富野 寿【監訳】, 2004

 上記の本が参照していた文献(和訳本)です。手元にありますが、今ではもう15年以上前の本でした。 

3.Trachtenberg, M., "Discovering How to Ensure Software Reliability" RCA Engineer, Jan./Feb. 1982, pp.53-57

 2の本が参照していた論文の一つです。30年前の論文ですね。 

4.Wiener-Ehrlich, W. K., J. R. Hamrick, and V. F. Rupolo, "Modelling Software Behavior in Terms of a Formal Life Cycle Curve: Implications for Software Maintenance," IEEE Trans. on Software Engineering, Vol. SE-10, 1984, pp.376-383

 同上
5. WALODDI WEIBULL, "A Statistical Distribution Function of Wide Applicability"  ASME Journal of Applied Mechanics, Transactions of the American Society Of Mechanical Engineers, Sep 1951, pp 293 – 297

 ワイブル分布の説明です。最初は、1939年の本のようですが入手できないので、私こちらを読みました。

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

*1:論文ですが、IEEEの文献はインターネット経由で購入すると、たった数ページで1通$33もすることが判りました。どうしようかと困っていましたが、ちょうど去年大学に合格した子供が興味を持ってくれて、該当の論文を大学の図書館で入手してくれました。コロナで遠隔授業が続く中、授業料を少し取り戻した気がしました(www)。