ソフトウェア品質
受け入れ基準が明確で性能評価が可能であることを意味する。設計段階での組み込みが重要となる。また、複雑な設計は試験性の低下を招く。
実行時間は最適化されているか? 繰り返し使われるコードのブロックはサブルーチン化されているか? メモリリークが起きないか?
特定のプラットフォームにしかないシステムやライブラリに依存していないか? 機種依存コードが明確化されているか(コメント、ifdefでの切り分けなど)? エンディアンや文字コードに依存していないか?
ユーザーにとって便利で実用的であることを意味する。特にユーザインタフェースが重要となる。
目的が明確に定義されるならば、ソフトウェアにある環境であるデータを与えたときに、予測される結果と実際の結果を比較することでその信頼性を客観的に判断することができることが期待される。しかし今のところ、プログラムに環境とデータを与えたときに、予測される結果や実際の結果を正確に求めることが可能かどうか定かではない。そして、そのような手段がなければ、プログラムの信頼性を確実性をもって決定することはできない。
しかし、実際のプログラムやプログラムの理論的記述について、その環境や入力による振る舞いを明らかにしようという試みはこれまでも数多くなされてきた。ソフトウェアの信頼性を改善するためのその種の試みは、実際のソフトウェア開発では様々な工程(要求仕様、設計、プログラミング、テスト、実行時評価)に適用される。ソフトウェアの理論的な信頼性の研究は、主に正当性の概念を扱い、形式言語やオートマトンといった計算機科学の数学的分野から派生している。