一个理想的软件项目在进行构建之前,都要经过谨慎的需求分析和架构设计。在构建完成之后,也要经历全面的、统计意义上受控制的系统测试。然而现实中不那么完美的软件项目,往往跳过了需求和设计的阶段直接跃入构建环节,之后又因为有太多的错误要修正而时间又不够,导致测试环节被抛到一边。但是构建活动又是唯一一项不可或缺的环节,所以对构建活动进行改进,是改进软件开发过程的一种有效途径。
把开发过程与其他自己熟悉的活动联系,可以帮助你更好的理解,这就是隐喻,也是面向对象思想中的对象抽象,相对于不善于运用隐喻的人来说,那些使用隐喻来照亮自己的软件开发过程的人,他对编程的理解会更好,也能更快的写出更好的代码。但是不恰当的隐喻,也可能会让你误入歧途。
需求的重要性,如果在一个大型项目中,在架构阶段检测到需求错误,要修复它的成本通常是“在需求阶段检测并修复该错误”的成本的三倍,如果是编码阶段检测到需求错误,修复成本是5-10倍,在系统测试阶段,成本是10倍,在发布之后,成本也是10-100倍。充分详细的需求,是项目成功的关键,甚至可能比有限的构建技术更重要,如果没有好的需求,你可能对问题的总体有把握,但却没有击中问题的特定方面。
软件架构,是软件设计的高层部分,用于支撑更细节的设计的框架。架构的质量决定了系统的“概念完整性”,“概念完整性”又决定了系统的最终质量。好的软件架构使得构建活动变得更容易,糟糕的架构使得构建活动几乎寸步难行。架构变更如同需求变更,看起来很小的改动,影响也许是非常深远的。
架构的经典组成部分:
- 程序组织
- 主要的类
- 数据设计
- 业务规则
- 用户界面设计
- 资源管理
- 安全性
- 性能
- 可伸缩性
- 交互性
- 国际化/本地化
- 输入输出
- 错误处理
- 容错性
- 架构的可行性
- 过渡工程
- 关于“买”还是“造”的决策
- 关于复用的决策
- 变更策略
- 架构的总体质量
架构和需求分析,问题定义等都属于构建活动的前期准备工作,其根本目的在于降低风险,要确定你的准备活动是在降低风险,而不是增加风险。