『Software Durability: Concepts and Practices』は、ソフトウェアの耐久性について書かれた技術書というよりは学術書です。
大学の研究者たちが書いた本のようで、実用性には乏しいです。
ソフトウェアの耐久性(Durability)は以下の要素からなるとしています。
- Dependability
- Trustworthiness
- Usability
- Security
- Human Trust
DependabilityもTrustworthinessも日本語訳すると「信頼性」になりますし、Human Trustもまた信頼で、直交していない感じがして気持ち悪さがあります。
さらには、この5つの要素も分解して説明されているのですが、例えばDependabilityは、
- Availability
- Reliability
- Maintainability
- Accountability
- Survivability
で説明されていて、ここでもまた別の信頼性(Reliability)が出てきます。せっかくなので、ソフトウェアの品質特性として挙げられる「信頼性」について深掘りしておきます。
信頼性
信頼性と訳せるものは、この本に出てくるものと、Wikipediaの品質特性のページから拾うと以下のようにたくさんあります。
- Reliability
- Dependability
- Trustworthiness
- Credibility
- Confidentiality
Reliability
このうち品質特性での「信頼性」というと、Reliabilityを指します。「特定の期間で必要な機能を提供し続けられる能力」を意味する、というのが一般的な解釈です。
したがって、ReliabilityはISO/IEC FCD 25010の定義だと、可用性や耐障害性、復旧可能性などのサブ品質特性を持ちます。
Dependability
Dependabilityも日本語訳は通常「信頼性」なのですが、品質特性では、メタ的なものと考えられることが慣例で、『Basic Concepts and Taxonomy of Dependable and Secure Computing』の論文によれば、
- Reliability
- Availability
- Safety
- Integrity
- Maintainability
からなるとされます。
Trustworthiness
Trust系の「信頼」は、エンドユーザの期待を意味するためにとっておかれている言葉で、品質特性として挙げられることはあまりありません。『Software Durability』の書籍では、これを品質特性として挙げているのですが、Dependabilityと区別が曖昧で、悪手だと思います。
Credibility
アーキテクチャの品質特性というよりは、サービスおよびコンテンツがユーザから信頼できる、信じられると認識される度合いを指します。
WikipediaのCredibilityのページによれば、
- 善意、真実、偏りのない情報、および情報源の知覚された善良さや道徳性に関連する。
- 知識がある、経験がある、有能であるなどの用語と関連し、情報源の知覚された知識と技術を捉える。
とされます。
Confidentiality
Confidentialityは、ソフトウェアの世界では機密性と訳されることが多いので、混乱することは少ないかと思いますが、一応品質特性としては、不正なアクセスや開示から機密情報を保護するソフトウェアの能力を指します。
保守性
『Software Durability』では、メインは耐久性には、信頼性が大事という主張なのですが、実際にソフトウェアの寿命が短くなる主要因の1つにMaintainabilityがあります。この書籍では、(Dependabilityの1要素ではあるので、考慮されていないわけではないはずなのですが…)残念ながらMaintainability(保守性)への言及が弱いです。
これまた、ISO/IEC FCD 25010を参照すると、Maintainabilityは、以下からなります。
- Modularity
- Reusability
- Analyzability
- Modifiability
- Testability
結局は、影響範囲調査のしやすさ、変更容易性、テスト容易性などが、ソフトウェアの寿命を決めるのは直感に一致するところかと思います。
品質特性の議論の注意点
ISO/IEC FCD 25010もそうであるように、品質特性は、上下関係を持たせてツリー状で整理することが多くあります。
ここまでの議論でも、ISO/IEC FCD 25010ではReliabilityのサブ特性であるはずのAvailabilityが、本書の整理では、並列になっているなど、解釈は統一されていません。
Software Architecture in Practice 4thによれば、「機能的正確性」は「信頼性」の一部であるべきだとか、「移植性」は「変更容易性」の一種である、または「保守性」は「変更容易性」の一種である(その逆ではない)などの議論があるようだし、ISO 25010の策定者たちは、セキュリティを機能のサブ特性ではなく、独自の特性として決定するために時間と労力を費やしたらしいです。
なので、品質特性の整理は、チェックリストとして使うのは良いが、用語や構造に固執することはありません。
と、いうことが書いてあるSoftware Architecture in Practice 4thは、とにかくオススメなので、未読の方はこちらをまず読んだ方が良いです。