本文为《UML和模式应用(原书第3版)》读书笔记
迭代1的需求和重点:OOA/D技术的核心
强调的是基础繁为和在构件对象系统中所使用的常见OOA/D技术,首先处理困难和具有风险的事项。
e.g 销售系统
- 实现处理销售用例中基本和关键的场景:输入商品项目并收取现金。
- 实现用于支持迭代初始化需要的启动用例。
- 不处理任何特殊和复杂的部分,仅仅针对场景的简单理想路径,并对此进行设计和实现。
- 不与外部服务进行协作,例如,税金计算器或产品数据库。
- 不应用复杂的定价规则。
在迭代开发中,我们并非一次就实现所有的需求,在多个迭代里对同一用例进行增量式开发。
细化之所在
- 初始阶段强调面向需求的制品。
- 对核心、有风险的架构进行编程和测试。
- 发现并稳定需求的主题部分。
- 规避主要风险。
- 迭代时间约2到6周。
- 细化不是设计阶段,也不是要完成所有模型的开发,不是要创建可以丢弃的模型,与之相反,该阶段产生的代码和设计是具有产品品质的最终系统的一部分,该原型叫做可执行架构或架构基线。
- 一句话概括:构件核心架构,解决高风险元素,定义大部分需求,以及预计总体进度和资源。
细化阶段一些关键思想和最佳实践
- 实行短时间定量、风险驱动的迭代。
- 及早开始编程。
- 对架构的核心和风险部分进行适应性的设计、实现和测试。
- 尽早、频繁、实际地测试。
- 基于来自测试、用户、开发者的反馈进行调整。
- 通过一系列讨论会,详细编写大部分用例和其他需求,每个细化迭代举行一次。
- 通过风险(技术复杂性、工作量等)、覆盖范围(涉及系统所有主要部分)和关键程度(客户认为具有高业务价值的功能)组织需求和迭代,因此在迭代1之前完成工作等级划分,但是在迭代2之前要重新划分,因为新需求和新理解会对等级排列产生影响,这就是迭代的可适应性。
细化阶段会构建的制品
- 领域模型:领域概念的可视化,类似于领域实体的静态信息模型;
- 设计模型:描述逻辑设计的一组图,包括软件类图、对象交互图、包图等,是对重要设计思想及其在系统中动机的概要;
- 数据模型:包括数据库方案,以及在对象和非对象表示之间映射的策略;
- 用例示意板,用户界面原型:描述用户界面、导航路径、可用性模型等;
何时知道自己并没有理解细化阶段
- 对于大部分项目,细化阶段都比几个月更长。
- 只有一次迭代。
- 在细化开始前就定义了大部分的需求。
- 没有处理具有风险的元素和核心架构。
- 没有产生可执行架构;没有进行产品代码的编程。
- 认为细化阶段主要是需求或设计阶段,为构造阶段的实现进行准备。
- 试图在编程之前进行彻底和细致的设计。
- 只有少量的反馈和调整;用户没有持续地参与评估和反馈。
- 没有尽早和实际的测试。
- 在编程之前推测性地结束架构设计。