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

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

「保守性」と「拡張性」が複数の意味をもっていそうなので調べてみた

 『アジャイルメトリクス』を少しずつ読んでいます。

 職業がら、最初をすっ飛ばして「品質」の項から手を付けていることもあり、なかなか歯ごたえのある(つまりわたしには難しい)本だなーと噛みしめております。
 読み進めていくなかで、「この品質特性、多義的じゃないか?」と感じたものが2つあったので、わたしの理解をメモしておきます。

TL:DR

  • 国内規格で「保守性」といえば、コードの修正のしやすさ。運用の仕方ではない。
  • 「拡張性」は、外部品質的なscalabilityと、内部品質的なextensibilityのどちらの話をしているかに注意。

保守性

 まず、「保守性」です。
 ソフトウェアの分野で「保守性」という言葉は、少なくとも2つの意味で使われるように感じます。開発寄りか、運用寄りか、の2つです。DevかOpsか、と言ってもいいかもしれません。

(A) 開発寄りの「保守性」
  • コードの修正のしやすさ、修正に伴うテストのしやすさ、みたいなもの。
  • 「このプログラムは保守性が低くて、どこを触ったらどこに影響があるかわからないよ・・・」
  • ソフトウェアの内部品質特性のように思える。
(B) 運用寄りの「保守性」
  • ログの明瞭さ、トラブルシュートのしやすさ、運用ドキュメントの充実、みたいなもの。
  • 「このサービスって、保守のこと何も考えてないから、ろくにアラートも上がらないんだよな」
  • ソフトウェアの外部品質特性のように思える。

 結論を言うと、ISO/IEC 25010:2011(SQuaRE)における「保守性」は、(A)です。
 JIS X 25010:2013による「保守性」*1の定義は以下の通り。

保守性(maintainability)
意図した保守者によって,製品又はシステムが修正することができる有効性及び効率性の度合い。

 この品質特性の下には、以下の副特性がぶら下がっています。

  • モジュール性(modularity)
  • 再利用性(reusability)
  • 解析性(analysability)
  • 修正性(modifiability)

 では、運用寄りの(B)を表す品質特性はあるのでしょうか。
 一番近いものは、「運用操作性」に見えます。  

運用操作性(operability)
製品又はシステムが,それらを運用操作しやすく,制御しやすくする属性をもっている度合い。

 なお「運用操作性」は、「使用性」(Usability)の下にある品質副特性です。ユーザビリティの下か~。
 そのソフトウェアの運用のしやすさを表現するための「運用性」なんて品質特性があってよさそうですが、ないのですね。Observability(可観測性)なんてまさにそういうものなのかなと思っているのですが・・。

 なお『アジャイルメトリクス』では、保守性の構成要素として以下を挙げています。
 これらの一部は、ソフトウェアの保守性そのものというより、保守性の「結果」として現れるメトリクスに見えます。

  • 平均修復時間(MTTR)
  • リードタイム
  • コードカバレッジ
  • コーディング規約ルール(の順守レベル)
  • 機能追加やバグフィックスのためにどのくらいコードを変更しなければならないか
  • バグ率

拡張性

 『アジャイルメトリクス』の第8章『ソフトウェア品質を測定する』では、「拡張性」と「スケーラビリティ」が1つの図に同時に現れ、混乱させられました*2
  結論を先に言っておくと、この2つは別のものです。

 『アジャイルメトリクス』の『8.2 品質特性によるNFRの測定』では、「拡張性」を以下のように説明しています。

新しい視能を追加したり、アプリケーションを拡張したりするために必要な労力の大きさ

 これってソフトウェアの内部品質っぽいですよね。SQuaREでいうと、「保守性」の下の副特性「修正性」に相当するとみていいでしょう。

 一方、ISTQBのFoundation Level 性能テストのシラバスでは、「拡張性テスト」を以下のように説明しています。
 こちらは外部品質っぽいですよね。

拡張性テストでは、現在要求されている以上の将来的な効率性の要求を満たすためのシステムの能力に焦点を当てる。これらのテストの目的は、現在指定されている性能要件に違反したり故障したりすることなく、システムが成長する能力(ユーザー数の増加や保存データ量の増加など)を判断することである。拡張性の限界が明らかになれば、しきい値を設定し、本番環境でモニタリングすることで、問題が発 生しそうなときに警告を発することができる。また、適切な量のハードウェアで本番環境を調整することもできる。

 この2つの「拡張性」は明らかに別のものなのですが、辰巳さんにいただいたオチが以下でした。

 つまり、本書での対訳が以下のようになっているのでした。

  • 拡張性 : extensibility
  • スケーラビリティ : scalability

 これはわからん・・・ですが、本書を読むときにはこの対訳を覚えておきましょう!  

おわりに

 辰巳さんによると、後者のscalabilityも品質特性に追加されるようです。

 そういえば、「信頼性」にも、reliabilitydependabilityがあったような・・・。

Scales of Justice

*1:製品品質モデルの下の品質特性である。

*2:先立つ章にきちんと説明があるのかもしれません。であれば、つまみ食い読者のわたしの問題です。すみません。