ソフトウェアの品質を学びまくる

ソフトウェアの品質、ソフトウェアテストなどについて学んだことを記録するブログです。

MTBF・MTTRなどを復習しておく

 和田卓人(@t_wada)さんの講演『質とスピード』の影響もあり、MTTR(Mean Time To Repair、平均復旧時間)という用語を聞く機会が増えてきたように思います。

speakerdeck.com

 情報処理技術者試験対策として、MTTRとその周辺の用語の復習をしておきましょう。

RAS

 RASとは、システムがどのくらい安定しているかを示す3つの属性、信頼性(Reliability)・可用性(Availability)・保全性*1Serviceability*2)をまとめて呼んだものです。

 これら3つの属性は、『JIS Z 8115:2000 ディペンダビリティ用語』では、以下のように定義されています。

信頼性
アイテムが与えられた条件の下で,与えられた期間,要求機能を遂行できる能力。

可用性
要求された外部資源が用意されたと仮定したとき,アイテムが与えられた条件で,与えられた時点,又は期間中,要求機能を実行できる状態にある能力。

保全性
与えられた使用条件で,規定の手順及び資源を用いて保全が実行されるとき,アイテムが要求機能を実行できる状態に保持されるか,又は修復される能力。

 正直あまりピンと来ないというか、信頼性と可用性の違いって何じゃい!ってなりますよね。
 ざっくりいうと、こうなります*3

  • 信頼性: 故障せずに稼働し続けられる時間はどのくらいか。
  • 保全性: 故障した状態が続く時間はどのくらいか。
  • 可用性: 全体の時間のうち、故障せずに稼働している時間の割合はどのくらいか。

 信頼性と保全性は絶対値、可用性は相対値って感じですかね。

MTBFとMTTR

 よく見る絵をここでも作ってみました。
 青い部分が稼働中、赤い部分が故障中です。

f:id:kz_suzuki:20210926090925p:plain
MTBFとMTTRのよくある絵

 MTBFは、これもJISによると「平均故障間動作時間」(Mean Operating Time Between Failures)と訳されています。
 故障と故障の間、つまり稼働している青い部分の平均値です。この例だと、(200+340+260+400)/4 = 300 ということになります。これが長ければ長いほど、信頼性の高いシステムと言えます。

 MTTRは、「平均復旧時間」です。
 復旧までにどのくらい時間がかかるかということなので、故障している時間、つまり赤い部分の平均値となります。この例だと、(6+2+12+4)/4 = 6 ということになります。短いほど復旧にかかる時間が短いということなので、保全性の高いシステムと言えます。

 可用性は、全体の時間のうち稼働している時間なので、MTBF/(MTBF+MTTR) = 300/(300+6) = 98.0% ということになります。

どちらを改善するのがいいのか

 MTBFが長くMTTRが短ければ最高ですし、MTBFが短くMTTRが長ければ最悪です。
 では、MTBFもMTTRも長いのと、MTBFもMTTRも短いのでは、どちらがよいのでしょうか?

  • MTBFもMTTRも長い: めったに障害にはならないけれど、ひとたび障害が起こると復旧まで時間がかかってしまう。
  • MTBFもMTTRも短い: 障害はそれなりに起こるけれど、起きた場合の復旧が速い。

 表現が恣意的かもしれませんし、提供するサービスにもよるでしょうが、後者をベターと考えるケースは多そうです。
 また、ソフトウェアの品質が直接的に顕れるMTBF・信頼性に比べて、短縮の努力がしやすいMTTR・保全性の改善を目指す方が有効だという捉え方もできるかもしれません。t_wadaさんはスライドの中で、MTTRを以下の3つに細分化し、この仕組みをSREが作るとしています。

  • TTD: Time To Detect、認知までの時間
  • TTE: Time To Engage、認知からエスカレーション、アサイン、対処開始までの時間
  • TTF: Time To Fix、対処開始から回復・緩和までの時間

 ハードウェアの世界で生まれたMTBF・MTTRをそのままソフトウェア信頼性の話に適用できるかは議論があるようですが、過去の自分たちと比較して継続的に改善するにはわかりやすいメトリクスに思えます。

余談: MTBFのJIS定義

 わたしが基本情報技術者試験を受けたn年前は、MTBFは「平均故障間隔」(Mean Time Between Failures)と教えられました。これは「ある故障の始まりから、次の故障の始まりまでの時間」の平均を表しているので、青い部分の幅ではなく、赤い部分の始まりから、次の赤い部分の始まりに対応します。(200+6) + (340+2) + (260+12) + (400+4) /4 = 306 ということになります。

 MTBFについて検索すると、平均故障間隔ではなく平均故障間動作時間の定義で説明されていることが多いようなので、この変更に対応しているようですね。

参考

*1:JISでは以下のように補足されています。

ソフトウェアアイテムの場合には,保守性と表現。
故障要因を修正したり,性能及びその他の特性を改善したり,環境の変化に合わせたりすることの容易さを表す数値化できない用語として用いられる場合がある。

*2:JISでは、ServiceabilityではなくMaintainabilityとなっている。

*3:可用性を最後にしているのは、可用性が信頼性と保全性から導かれるからです。