ソフトウェア品質
目的達成の際にリソースを無駄に消費しないことを意味する。この場合のリソースとはメモリ使用量とプロセッサ使用時間である。
前節の循環しているような文章は偶然ではない。これはソフトウェアの信頼性の測定に関する基本的問題を表している。信頼性は判断が難しく、特に事前にソフトウェアがどう使われるかを正確に想定することは難しい。問題は、従来ならば人間が担っていたであろう役割をソフトウェアが代替しているという共通の概念的錯覚から生じる。この問題は2つのレベルに分けられる。第一に、最新のソフトウェアは人間にはできないようなことを実行し、特に人間に比較するとその信頼性は非常に高い。第二に、ソフトウェアは人間の精神的な面を代替することはできない。つまり、融通を利かせるとか、常識を働かせるとか、概念的なことを理解する能力はない。
それにもかかわらず、多くのソフトウェアプログラムは何らかの目的を持つと見なすことができる。
プログラムの開発者が「どう動作すべきか」を事前または開発中に詳細に把握していなければ、それが望ましい動作をすることは期待できない。どの程度詳細に把握すべきかは議論の余地がある。完璧な詳細さという考え方は魅力的だが、実際問題としては現実的ではない。なぜなら、「こうあるべき」という要求仕様は試行錯誤的に変化するものだからである。
事前に要求仕様をうまく記述できるかどうかは信頼性の分かれ目であり、要求仕様の形式化(モデリング言語などの利用)が採用されるのはそのためである。また、プログラマ以外の専門家でない人々にそのソフトウェアの振る舞いを正しく伝達する手段でもある。実際には、プログラマも「どう動作するか」を事前に把握していないことが多く、それが要求仕様に関する議論を困難にしている。
商品品質 要求仕様やプログラム仕様への適合性(後述する「ソフトウェアの信頼性」に関連する)
スケーラビリティ 正当性
完全性
バグが無いこと
フォールトトレラントシステム 拡張性 保守性
ソフトウェアドキュメンテーション
限界値のチェックは行われているか? ゼロ除算が起きないようになっているか? 例外処理を行っているか?