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

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

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

 第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に近づくので、これを掛け算するとかね。