知识卡片
三种敏捷方法的初始架构与迭代过程对比
内容
优秀的敏捷软件架构设计过程一般同时包含规划式设计和演进式设计,分别体现为初始阶段设计和迭代过程中的设计。三种代表性敏捷方法的初始阶段设计目的相同(都为了得到一个原始架构),但输出形式完全不同:XP的原始架构以”系统隐喻”存在——把架构中重要复杂关键的概念用类比语言描述出来(如把一个文字缓冲输出程序隐喻成”装卸卡车运垃圾”,缓冲区是卡车、屏幕是垃圾场、程序是垃圾制造者),这是XP十二个关键实践之一,也是XP受质疑最多的地方,反对者认为这暴露了XP在架构方面的缺陷;同一个设计可能因不同人的理解角度不同而产生多个系统隐喻。Scrum的原始架构以”产品Backlog”存在——一个按商业价值/风险/必要性排优先级的功能列表,永远不完整、随团队对产品理解加深不断演进,优先级越高的条目越详细具体,越低越简单抽象。FDD的原始架构是”特征表”——从领域划分开始做简单功能分解(领域→区域→活动→特征),每个特征是”对客户有价值的细小功能”,用〈动作〉〈结果〉〈对象〉命名模板描述(如”计算总销售额”),完成一个特征不应超过两周。三种方法的迭代思想相同(都是重复半并行的开发周期:需求→设计→编程→测试→发布→反馈),但迭代过程不同:XP强调”做可能有效的最简单的东西”和”你不会需要它”(YAGNI),只为当前需要的功能编码而不为未来预留灵活性,Kent Beck给出简单的四个标准(运行所有测试/表达所有意图/无任何重复/最少的类和方法),迭代周期1-3周;Scrum把迭代称为”冲刺”(Sprint,通常一个月或更短),Sprint计划会议确定”做什么”和”怎么做”、把产品Backlog转化为Sprint Backlog,每日例会(15分钟)汇报已完成/待完成/遇到的障碍,Sprint评审会议对本轮工作做整体评审;FDD根据特征相关性/工作负荷/复杂性排定开发顺序,主程序员把具有相同类的特征分给特征小组、生成顺序图并精化对象模型,最终产出包含特征、顺序图、类图、原型代码的”设计包”,迭代周期约两周。