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

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

ソフトウェアの安定度?成熟度?を計測する

 第3回ソフトウェアテストセミナーにおける細川さんのプレゼンテーションで、「SMI」というメトリクスに言及がありました。(待てよ、1つの指標だから「メトリック」というのが正しいのか?しかしそれだとルーティング・プロトコルの話をしているみたいだぜ、ルパン・・・)
 このメトリク(単数形)は、IEEE 982.1-1988で規定されているものですね。IEEE 982.1-1988はタイトルがかっこよくて、 「信頼性の高いソフトウェアを構築するための指標の標準辞書」!もうこれさえ読めば、メトリクスのことは全部わかりそうです。
 この規格の4.10で、SMI=Software Maturity Indexが規定されています。細川さんによると、「保守フェーズに入ったソフトウェアの安定度を判断するのに使える、珍しいメトリクス」とのこと。
 googleで検索すると、Internet黎明期みたいな、「シンプルがいいッ!オレはオレのやりたい方法でwebサイトをデザインするぜッ!」というこのページがめでたくヒットします。
 SMIの算出方法は単純。やはり、シンプルがいい。
Software Maturity Index
 SMI = ( M - ( A + C + D ) ) / M
  ・M: 現バージョンでのモジュールの数
  ・A: 現バージョンで追加されたモジュールの数
  ・C: 現バージョンで変更されたモジュールの数
  ・D: 現バージョンで削除されたモジュールの数
 モジュールの追加も変更も削除もない場合、つまりそれは機能追加もなければバグフィックスもない、「枯れた」ソフトウェアであるということになるのでしょうが、SMIは1となります。SMIが1に近づけば近づくほど、「安定している」という判断の基準にすることができます。この黎明期のページでも、「ソフトウェア安定度指数の方が近いのでは?」と言っていますね。
 一方で、「怖くて直すこともできないソフトウェアは、誰もいじれなくなってSMI=1になっちまうんだから、ソフトウェア停滞度指数でもあるよね」と。
 この指数もつまりは、SMIの値だけで判断できると思うな、ってことですな。
 1つよくわからないのが、「安定」を表すのに、時間の変数がないのは何故か、ということです。現バージョンリリースから現在までの時間Tを組み込みたくなりませんか?
 たとえば、最初のバージョンリリースから現在までの時間T1と、現バージョン(n番目として)Tnの比 Tn/T1は、時間が経てば経つほど1に近づくので、これを掛け算するとかね。