1
第 8 章
ソフトウェアの信頼性測定と
予測
2011 年 12 月 3 日
らち
TEF 東海メトリクス勉強会 第 9 回
たまに良い結果をもたらすモデルはあるが、普遍的にひどいモデルも多い。 常に性格であると信頼できるモデルなど存在しない。 ステファン・カン
2
8.1 なぜソフトウェアの信頼性の研究と予測
が必要か
私「すべての欠陥の99%を削減することは無理な目標であ る」と上司も納得。しかし上司は、
上司「最初の 6 ヶ月間の稼動で99.99%の信頼度が欲し い」という。
さて、あなたはどう答え、何をするべきだろうか?
私「だから、さっき欠陥の99%を削減することは無理だから
、 6 ヶ月間ノントラブルで動かすことはできない!」
上司「では、どうしたら 6 ヶ月間ノントラブルで稼動させる ことができるか、考えて欲しい」
私「・・・」
みなさんは、いかがでしょうか?
3
8.2 信頼性とは何か
ソフトウェアの信頼度の定義
「ソフトウェアシステムが所定の環境のもと、特定の期間内 に故障することなく機能する確率である」
ポイントは、
確率:
絶対的でなく、確率的な現象や予測について述べればよい
故障することなく:
故障の定義を決めてしまえばよい
(例:保守員を呼ばなければならないよう な事象)
特定の環境のもと:
環境を特定してよい (例: OS=XP メモリ = 8 GB )
特定の期間内:
期間を決めてよい (例: 2 秒間だけ)
補足: 決めてよい=顧客と合意すればよい
6 ヶ月間の稼動で99.99%の信頼度←故障の定義と環境を決めちゃえばいいね。
4
8.3 障害と故障
7 章の復習
障害はシステムに存在する欠陥である
故障は運用時に障害箇所が実行されて、要求されたパフ ォーマンスを発揮できない状態である。
欠陥メトリクスは障害を測定する。 信頼性メトリクスは故障を測定する。
つまり、
欠陥のあるコードが実行されなければ。MTBFは無限 大に近づき、ソフトウェアの可用性は100%になる システム起動箇所に欠陥があり、それが必ず実行される 場合は、MTBFは 0 に近づき、可用性も0%になる
補足: MTBF=Mean Time Between Failures
5
8.4 故障の致命度分類
致命度分類
同じ影響を持つ故障 によって分類する
コストへの影響、システム能力への影響、ユーザへの影響など 最大4~5に分類
電話回線 ( 能力に基づく )
致命度 定義
1 いかなる通話も処理できない、電話回線網がすべてダ ウン
2 特定地域のいかなる通話も処理できない。 3 スイッチ内のいかなる通話も処理できない 4 不便な運用
ATMネットワーク ( ユーザに基づ く)
致命度 定義:影響を受けるマシ ン数
1 >1000
2 100~1000
3 10~100
4 <10
ルータ ( ユーザ種別に基づく)
致命度 定義:影響を受けるOS
1 Win
2 Mac
3 Android
4 Linux
さて、皆さん の製品では?
6
8.5 故障強度
単位ごとの故障数
単位がシステムにとって自然な単位であること。
でないと、故障強度はユーザにとって意味のないものに なる。
意味のある例:
飛行機:フライと数毎の墜落数、百マイル毎の墜落数 車:使用年数毎の故障数、1000Km毎の故障数 パソコン:使用年数毎の故障数
ルータ:連続使用時間数毎の故障数 意味のない例:
パソコン:メールの発信数ごとの故障数
ルータ:電源の抜き差し回数ごとの故障数 さて、皆さんの製品では?
7
8.6 信頼性のコスト
信頼性はタダではない。
実際1%の改善につきそれぞれコストがかかる。 テストやレビューを行うなど開発費用がかかる。
(でもQuality is Free とクロスビーさんは言っている)
次ページから苦手なゾーンに突入。
ドラえも~ん、なにかいい道具はないの~?
8
8.6 信頼性のコスト
信頼性のコストモデル
COCOMOⅡ
コスト係数として、ソフトウェア信頼性要求度 (RELY) を使う RELY : 低 0.82 ~ 標準 1 ~ 高 1.26
マーカスとスターンの可用性指標
R=e-t/MTTF, A=MTTF /(MTTF+MTTR) R=e(A-1)/(A*MTTR)*t
A は可用性、 MTTF は平均故障時間、 MTTR は平均修復時間
シャーの信頼性モデル 工数と信頼性
R=e-kCt/E
この式から投資と信頼性の式を導くと E=-kCt/(lnR)
信 頼 性
投資
ワンポイント: MTBF と似ているが、MTBF は修理すればまた利用可能になるようなシステム に適用するのに対し、MTTFは修理不可能なシステムに対して適用する。例えば電球は 1 度切 れるともう使えないので MTTF を適用するが、電気スタンドは電球を取り替えて修理すればま た利用できるので MTBF を適用する。 http://www.atmarkit.co.jp/icd/root/00/77467900.html より引用
9
8.7 ソフトウェア信頼性理論
信頼性工学の基本的な目的
システムが故障する時期を予測すること。
ソフトウェアの信頼性は、ハードウェアの信頼性と似て いる。
え~、ソフトには腐食も、劣化もないのに~???
確率的に似ている
時間の経過とともに変化し、グラフやモデルで表せる。 つまり確率分布がある。
確率分布:確率変数のとる値に対し、その値をとる確率の分布状態。
http://www.publickey1.jp/blog/09/post_56.htmlより引用 確率分布のグラフ例です(たぶん)
10
ひとやすみ
「ソフトウェアの故障時期も確率分布に従う」
って、うちの会社の人に言うと、絶対こう言うと思 う「欠陥のあるコードが実行されなければ。絶対故障しな い。でもね、システム起動箇所に欠陥があり、それが必 ず実行される場合は、必ず故障する。ソフトウェアの故 障って、1か0の世界なんだよ。」
これに対して皆さんなら、何といいますか?
11
8.7.1(1) 一様分布
一様分布
例: 5 日以内に故障するソフトウェアがある。
いつ故障するかはその確率はいつも同じである。 これを時間 t を使い、故障密度関数で表すと
f(t)=1/5 ・・・ t=1~5 f(t)=0 ・・・ t > 5
0.2
1 2 3 4 5 6 7 t
0 f(t)
これには特定の状況を説明するには優れているが、 終了の時点がわからないという大きな制限がある。
そこで一般的に使われるのが、次のランダム分布である。
12
8.7.1(2) ランダム分布
ランダム分布
故障は時間の経過とともに
ランダムに発生する傾向にある。
過去のイベントからは独立している。
時刻tまでに故障しなかった条件における故障の確率が各 時刻について一定( λ )である。指数分布とも呼ばれる。
<ご興味のある方、お読みください> f(t) = λe-λt
λ=1 / MTTF 補説: λ は瞬間故障率(ハザード率ともいう)、MTTFは平均故障時間 故障データに t1 から tn まで n 個の異なる故障時点がある場合は次の式となる。
MTTF = (Σti) / n
もし故障密度関数 f(t) が与えられている場合は、 MTTF は f(t) の「期待値」となり次のようになる。 MTTF = ∫∞0 tf(t)dt
指数分布に対しては次のようになる。
MTTF = ∫∞0 t λe-λt dt = 1 / λ ∫インテグラルと読む
f(t)
t
0 に近づくが 0 にはならない
13
8.7.1(2) ランダム分布の計算例
あるシステムの部品は定期的に故障し、交換している。こ の様子を 1 ヶ月間追跡したところ、 2,7,8,16,22,31 日に 故障した。さて MTTF はいくつ?
((2-1)+(7-2)+(8-7)+(16-8)+(22-16)+(31-22))/6 = 30/6 = 5 日間
あるシステムの故障が発生する時間の長さを追跡すると、 f(1)=10%, f(2)=15%, f(3)=20%, f(4)=25%, f(5)=30%, その他の f(x)= 0% であった。さて MTTF は?
0.1*1 + 0.15*2 + 0.2*3 + 0.25*4 + 0.3*5 = 3.5
指数分布がある。 MTTF は 2 日間。
つまり λ=1/MTTF=1/2=0.5 となり、 f(t)=0.5e-0.5tとなる。 ここで、 10 日目では f(10)= 0.5e-5=0.0033=0.33% となる。 なお、 1 番目の例において 9 日目に故障がまったく発生し なければ、 f(10)=f(2)=0.5e-1=0.18=18% となる。
f(10)=f(2) の意味がわかりません。どなたか教えてくださ い。
0.5e-5
=2.718^- 5*0.5
=0.003371
14
8.7.2 時間間隔における故障確率
ある 2 つの時点間における故障確率は、 f(t) の曲線の下の面 積になる。つまり、 f(t) の積分である。
∫ t2t1 f(t)dt
一様分布の例に対して、 t1 と t2 の間の故障確率は次のとおり。
∫ t2t1 0.2dt = 0.2(t2-t1)
例:一様分布における時刻 3 と 4 の間の故障確率は 0.2(4-3)=0.2 20% となる。
指数関数に対して、 t1 と t2 の間の故障確率は次のとおり。 ∫ t2t1 λe-λtdt = e-λt |t2t1 = e-λt1 - e-λt2
例:指数分布における時刻 5 と 6 の間の故障確率は
e-λ*5 - e-λ*6となり λ に依存する。
λ=1 のときの故障確率は 0.004 、 λ=0.1 のときの故障確率は 0.057 である。つまり、時刻 5 と 6 の間の故障確率は λ=0.1 の ときに 5.7% である。したがって、 MTTF=1/0.1=10 となる。
????? どなたか教えてくだ さい。
15
どうわからないかというと・・・
例:指数分布における時刻 5 と 6 の間の故障確率は
e-λ*5 - e-λ*6となり λ に依存する。
λ=1 のときの故障確率は 0.004 、
λ=0.1 のときの故障確率は 0.057 である。
つまり、時刻 5 と 6 の間の故障確率は λ=0.1 のときに 5. 7% である。
e=2.718 とすると、
e-1*5 - e-1*6=2.718^(1*5)-2.718^(1*6)=-254.8416577 0.004 と大きく違ってるんですけど???
e-0.1*5 - e-0.1*6=2.718^(0.1*5)-2.718^(0.1*6)=-0.173369649 0.057 と大きく違ってるんですけど???
p.216 下 7 行目「2.指数分布における時刻 5 と時刻 6 との間の故障間隔」は「故障確率」の誤植?
16
8.7.3 F(t): 時刻tまでの故障確率
時刻t 「までの」 故障確率は F(t) と記述する。 F(t) は累積分布関数である。
これに対しf(t)は、確率密度関数である。
一様分布の例では、整数tが5以下の場合に F(t)=0.2t であり、5より大きい t に対しては 0 になる。
( 累積だから1になるが正しいので は ?)
指数分布では
F(t)=∫t10 λe-λtdt = e-λt |t10 = 1 - e-λt1
10 0.6
0 t
F(t)
λ = 0.1 のときの F(t)
17
8.7. 4 R(t) 信頼度関数
システムが時刻tまでに故障しない確率である。だから
、時刻 t までに故障する確率を1から引いた値となる。 R(t)= 1- F(t)
一様分布の例では、
R(t)= 1- 0,2t となる
指数分布では
R(t)= 1- (1- e-λt)= e-λt となる
λ=0.1 と仮定すると、 7 日間にわたってシステムが故 障しない確率は、 R(t)= e-0.7 となる
18
8.7.5 信頼性理論のまとめ
信頼性理論には、以下の3つの基本関数がある。
f(t) = 故障の確率密度関数
F(t) = 時刻tまでの故障確率
R(t) = 時刻tまでの無故障確率
これら3つは以下のように関連づけられる。
F(t) =∫ t0 f(t) dt
f(t) = Σ ( i=1 から t までの) f(i)
R(t) =1- F(t)
19
8.8 信頼性モデル
これは、製品の信頼性、または製品のリリース後の潜在 欠陥数を見積もるために使われる。
出荷時期の事実に基づいた決定
保守にかかるリソースの計画 リリース後の
欠陥数と
欠陥を見つけられる時期・・・(時刻tまでの故障確率 F(t) を使う?)
要員が修正できる欠陥数 から、見積もる。
20
8.8.1 モデルの種類
信頼性モデルは欠陥モデルととてもよく似ており、 同じこともある。
信頼性モデルには、静的モデルと動的モデルがある
静的モデルは、プログラムの属性を使って欠陥数を見積もる。 このモデルは一般的に y=f(a,b,c,d, ・・・ ,z) という形をと る。yは欠陥率または欠陥数。
a ~ z は、製品やプロセス、プロジェクト属性である。
静的モデルは、モジュールレベルでうまく機能する。
動的モデルは、統計分布に基づき磁気を見積もる必要がある場 合や、プロジェクトが失敗するかどうかなど、プロジェクトの 対部分でうまく機能する。
あるモデルでは、ライフサイクル全体をもらし、レイリー分布 を利用する。また、テストプロセスや配備プロセスから始まり
、指数分布を使うモデルもある。
21
8.8.1 モデルの種類
信頼性モデルは、動的モデルである。
これは、バグの発見と修正がノルマであり、システムの 安定性が増しつつあり、したがって信頼度が増しつつあ ることが期待されるときに使われる。
動的モデルにおいて「時間」は重要な意味を持つ。
そのため時間は、意識的に選択され、的確に特定する必 要がある。週 1 2 3 4
欠陥数 10 5 3 2
テスト時間 80 40 40 20
CPU 時間 100 20 50 30 故障強度
週ごと 10 5 3 2
テスト時間ご と
0.13 0.13 0.08 0.10 CPU 時間ごと 0.10 0.25 0.06 0.07
ここだけ見る と減っている ように見える が・・・
22
8.8.1 モデルの種類
信頼度成長モデルは、欠陥数と MTTF のいずれについて も基づくことができる。
欠陥数モデルでは、故障強度は時間の経過とともに減少。 MTTF モデルでは、信頼度が向上すると、時間の経過と ともに MTTF が増加。
MTBF = MTTR + MTTF
(平均故障間隔=平均修復時間+平均故障時間)
23
8.8.2 残存欠陥数の予測
これは、 7.4 節 7.5 節で詳細に説明した。なので、それ 以外のシンプルなものを説明する。
SEI の成熟度レベルに沿った欠陥数に基づく方法。 確かに組織の成熟度レベルと欠陥数は相関関係があるかも。
過去のデータを使う方法として、欠陥除去率を使う方法。 過去に存在した類似プロジェクトと比較する。
24