ソフトウェア設計
設計方法論は実際のシステム設計におけるテンプレートやフレームワークの役割を果たす。実際の設計工程を単純化し、品質向上のための設計原則の適用を可能とする。
モジュール化設計 - モジュール性、凝集度と結合度、ソフトウェアコンポーネント
オブジェクト指向分析設計
Model View Controller、多層アーキテクチャ
Domain-driven design(DDD)、ドメイン駆動設計
ソフトウェア設計にあたっては、様々な観点を考慮する必要がある。ソフトウェアが達成しようとしている目標を反映しているため、それらは重要である。そのような観点の一部を以下に挙げる。
拡張性 - 基盤となるアーキテクチャに大きな変更を加えることなく、新たな機能を追加できること。
頑健性 - 高負荷状態や不正な入力があっても動作すること。例えば、使用可能なメモリ量が少なくても動作するよう設計する。
信頼性 - ある一定期間まで、特定の困難な状態になっても、機能すること。
耐障害性 - コンポーネントの障害が発生しても、それに耐えたり、回復させたりできること。
セキュリティ - 悪意ある行為に対して耐性があること。
保守性 - ある一定時間で、特定の状態に復帰できること。例えば、アンチウイルスソフトのように、定期的な更新が可能であるなど。
互換性 - 他の製品と相互にやりとりできること。あるいは、過去の代替すべき製品と互換であること。
モジュール性 - モジュール性を考慮した設計。それによって保守性も向上する。開発においてもコンポーネント単位で実装しテスト可能などの利点がある。また、開発作業の分割が容易になる。
再利用 - モジュール性がよければ、個々のコンポーネントを他の場面で再利用できる可能性が生じる。