第6章 · 播客 第5集
开发方法 · FDD、Scrum 与水晶方法
🎙️ 本集播客:第5集:敏捷家族三将——FDD 的六种角色、五个核心过程和独门的「类的个体所有」;Scrum 的 Sprint、五大活动、每日站会必须回答的三件事和五大价值观;水晶方法的七大体系特征。「简单」到底属于 XP 还是 Scrum,这集说清。 语音由微软 Edge 神经网络语音预生成(女声·晓伊,男声·云希)。点击下方任意对话可直接从该句开始播,当前句朗读时下一句已预先加载,无缝衔接。
明
阿明
师姐,XP 之外那几个敏捷方法,名字一个比一个怪:FDD、Scrum、水晶……先讲哪个?
雅
小雅
按教材顺序,FDD 先。特征驱动开发,缩写 FDD,来自一个大型的新加坡银行项目——创立者 Jeff De Luca 和 Peter Coad 分别是这个项目的项目经理和首席架构设计师,两人采用特征驱动、彩色建模等方法最终获得巨大成功。考过「FDD 来源于什么项目」,答大型新加坡银行项目。FDD 也是迭代的开发模型,每步强调质量、不断交付可运行的软件;同敏捷方法一样,它弱化了过程——一个几页纸就能完全描述的过程深受开发者喜爱。
雅
小雅
FDD 的世界观:有效软件开发不可缺少的三要素是人、过程和技术——最重要的是人,个人的生产率和技能决定项目成败。为此 FDD 定义了 6 种关键的项目角色:项目经理、首席架构设计师、开发经理、主程序员、程序员、领域专家。
雅
小雅
第一个角色就有考点:项目经理是开发的组织者,但项目经理不是开发的主宰;对项目团队来说,项目经理应该是团队的保护屏障——同团队外界如高层领导、人事甚至物业沟通,为团队提供适宜的开发环境。首席架构设计师负责系统架构的设计;开发经理负责日常开发,解决技术问题与资源冲突;主程序员带领小组完成特征的详细设计和构建;若干程序员在主程序员带领下形成开发小组;领域专家是对业务领域精通的人,一般由客户、系统分析员等担当——正对应敏捷宣言中「业务人员同开发人员紧密合作」。小项目中角色可以重复,强人项目经理可兼首席架构设计师和开发经理。
明
阿明
特征驱动,特征到底是啥?过程有几个?
雅
小雅
特征的定义:一个小的、对客户有价值的功能,采用动作、结果和目标来描述,粒度最好可在两周之内实现。FDD 共有 5 个核心过程:第一,开发整体对象模型,即业务建模阶段,强调系统地完整地面向对象建模,领域专家和首席架构设计师配合完成;第二,构造特征列表,可整理出系统的需求;第三,计划特征开发,项目经理根据特征列表和依赖关系进行计划、安排任务;第四,特征设计,主程序员带领特征小组做详细设计;第五,特征构建——它和特征设计合并起来可看做特征的实现阶段,反复迭代直到完成全部开发。五个名字背原词,考「以下不属于」时防它换词。
雅
小雅
再数最佳实践,一共八个:领域对象建模、根据特征进行开发、类的个体所有、组成特征小组、审查、定期构造、配置管理、结果的可见性。最有特色的就是真题考的——类的个体所有。
明
阿明
这个我记得是反着的——别家代码共有,它搞个人所有?
雅
小雅
对,先立对照组:几乎所有的开发模型都是代码共有,程序员负责开发系统中的全部代码,通过配置管理和变更控制保持一致性。在 FDD 中,将类分配给特定的人或小组,分配给 A 成员的代码将全部由 A 来维护,除 A 外的角色都不能修改它,只能使用它。真题四个选项:只有架构师拥有修改权、代码归公司所有个人不负责、每个成员都拥有全部代码并对全部代码负责、代码由项目经理统一管理——注意这四个都不对,正确表述是「分配给 A 的代码全部由 A 维护,其他人只能使用不能修改」,杀招就在「不能修改」这半句。
雅
小雅
优缺点是配对题素材。优点:个人容易保持概念的完整性;开发类代码的人是最熟悉这个类的主人;支配感促使开发人员产生自豪感、更出色地完成任务。缺陷:依赖关系增强——A 需要 B 修改自己的类时必须等待;还增加了员工离职的损失。FDD 认为类的个体所有对系统开发更有帮助。跟 XP 对照:XP 集体代码所有制人人拥有全部、对全部负责,FDD 专人独占维护权,正好两个极端。
明
阿明
FDD 还有个审查?敏捷方法也搞审查?
雅
小雅
问得好。不少人都认为审查是非常严格的软件过程所特有的——要花人力和时间、对审查者素质有要求;然而 FDD 明确将审查作为一项最佳实践提出。审查是很有效的发现缺陷的手段但经常被忽视:有效的审查可以发现很多潜在问题,而这往往是无法通过测试发现的,例如建模、需求和设计期的缺陷——这些大多要到系统测试甚至发布后才发现,修正代价很大。
明
阿明
FDD 收工。Scrum 我工作中真用过,天天站会,定义我来背:Scrum 是一个用于开发和维持复杂产品的框架,是一个增量的、迭代的开发过程,整个开发过程由若干个短的迭代周期组成,一个短的迭代周期称为一个 Sprint,每个 Sprint 的建议长度是 2 到 4 周,互联网产品研发可以使用 1 周的 Sprint。
雅
小雅
真题就这么问:「每个短的迭代周期称为」,选项 Sprint、Backlog、Iteration、Cycle,答 Sprint——Iteration 是通用词,Scrum 专门叫 Sprint。需求管理用产品 Backlog:按照商业价值排序的需求列表,条目体现形式通常为用户故事;团队总是先开发对客户价值较高的需求。在 Sprint 中,团队从产品 Backlog 挑最高优先级的需求,在计划会议上讨论、分析和估算,得到的任务列表称为 Sprint Backlog。每个迭代结束时,团队递交潜在可交付的产品增量——「潜在可交付」常被挖空。
明
阿明
那五个活动呢?我们公司就有站会。
雅
小雅
第二个,Sprint 计划会议:每个 Sprint 以它作为开始,固定时长,整个团队参加,推荐时长每周对应两小时或更少——两周 Sprint 就是 4 小时或更少。分两部分:第一部分决定需要完成哪些工作,产品负责人向开发团队介绍排好序的待办事项;第二部分决定如何完成,开发团队按当前的「完成的定义」一起计划。必考的权责划分:做多少工作完全由开发团队决定,产品负责人或任何其他人都不能强加工作量;决定做什么、排序是产品负责人的职责。产出就是 Sprint 待办事项列表。
明
阿明
「做多少」归开发团队、「做什么」归产品负责人。站会呢?
雅
小雅
每日 Scrum 会议,真题最密。形式:每天在同样的时间和同样的地点召开,通常不超过 15 分钟。每一个开发团队成员需要提供三点信息:从上一个每日 Scrum 到现在我完成了什么;从现在到下一个每日 Scrum 我计划完成什么;有什么阻碍了我的进展。真题问「每日 Scrum 中需提供的信息不包括」,选项里放一条「对其他成员的批评建议」——那条就是答案,三点信息里没有批评建议。
雅
小雅
再补防坑:每日 Scrum 中可有简要的问题澄清和回答,但不应该有任何话题的讨论,许多团队会在站会之后另开会处理;定性更关键——它既不是向管理层汇报,也不是向产品负责人或 ScrumMaster 汇报,而是开发团队内部的沟通会议,保证大家对现状有一致的了解;只有 Scrum 团队成员可以发言,其他人可旁听。判断题问「每日 Scrum 是向管理层汇报的会议」,错。
雅
小雅
第四个,Sprint 评审会议:Sprint 结束时团队和相关人员一起评审产出,推荐时长每周对应一个小时——两周就是 2 小时;围绕完成的产品增量讨论,是非正式会议,每个人都可以发表意见,产品负责人对未来做最终决定并调整产品 Backlog。第五个,Sprint 回顾会议:回顾团队在流程、人际关系以及工具方面做得如何,找出改进事项制定计划,推荐时长同样是每周一小时。记法:评审看产品,回顾看流程。
明
阿明
然后是价值观?我记得有道题拿「简单」来坑人。
雅
小雅
Scrum 的 5 大价值观:承诺——愿意对目标做出承诺;专注——把心思和能力都用到你承诺的工作上去;开放——把项目中的一切开放给每个人看;尊重——每个人都有他独特的背景和经验;勇气——有勇气做出承诺、履行承诺、接受别人的尊重。真题问「以下哪项不包括」,选项承诺、专注、开放、简单——答案是简单,「简单」是 XP 四大价值观里的。勇气和尊重两边都有,别数混:Scrum 五个是承诺、专注、开放、尊重、勇气。
明
阿明
好,Scrum 收官。水晶方法又是什么路数?
雅
小雅
水晶方法,英文 Crystal,由 Alistair Cockburn 和 Jim Highsmith 建立,目的是发展提倡「机动性」的敏捷方法系列——注意它是系列不是单一方法:Crystal 家族是一组经过证明、对不同类型项目非常有效的敏捷过程,团队可根据项目和环境选最合适的成员,家族分为 Crystal Clear、Crystal Yellow、Crystal Orange 和 Crystal Red。使用频度较高的是透明水晶 Crystal Clear,适合小团队,人数在 6 人以下为宜。「6 人以下」考过。
雅
小雅
透明水晶有七大体系特征。第一,经常交付:任何项目无论大小,其最重要的一项体系特征是每过几个月就向用户交付已测试的运行代码——注意「已测试的」和「每过几个月」;主办者获得重要反馈,用户有机会发现原来的需求是否真正想要。第二,反思改进:开发中时常出现技术难题和烦心事,经常在迭代会中及时反思和改进,就能很快找到应对方案。第三,渗透式交流:信息流向团队成员的背景听觉,成员就像通过渗透一样获取相关信息,通常通过团队在同一间工作室内工作实现——一名成员提出问题,其他成员可以加入讨论也可以继续忙自己的。
雅
小雅
第四,个人安全:指当你指出困扰你的问题时,不用担心受到报复——有了它团队能发现和改正自身缺点,没有它成员知而不言、缺点愈发严重;个人安全是迈向信任的第一步。第五,焦点:确定首先要做什么,再安排时间、以平和心态开展工作,确保成员清楚最重要的任务并有充分时间完成。第六,与专家用户建立方便的联系:提供配置测试的地方、关于成品质量和设计理念的快速反馈、最新的需求。第七,配有自动测试、配置管理和经常集成功能的技术环境:自动测试让代码修改后即可自动测试;配置管理允许不同步检查、可撤销更改;经常集成使团队一天内多次集成,越频繁越快发现错误;最好的团队将三大技术结合成「持续测试集成技术」,几分钟内发现集成错误。
明
阿明
七个:经常交付、反思改进、渗透式交流、个人安全、焦点、专家用户联系、技术环境。
雅
小雅
还有两个「其他敏捷方法」考基本特征。开放式源码:开放源码界所用的一种运作方式,特别之处是开发人员在地域上分布很广——这和其他敏捷方法不同,因为一般敏捷方法都强调项目组成员在同一地点工作;突出特点是查错排障的高度并行性,任何人发现错误都可将改正源码的补丁文件发给维护者,由维护者将补丁并入源码库。ASD 方法由 Jim Highsmith 提出,核心是三个非线性的、重叠的开发阶段:猜测、合作与学习。
明
阿明
开放源码地理分布广加排错并行,ASD 猜测合作学习。这集必背呢?
雅
小雅
本集必背:FDD 出自大型新加坡银行项目,三要素以人为最重要;项目经理是保护屏障不是主宰;五核心过程开发整体对象模型、构造特征列表、计划特征开发、特征设计、特征构建;类的个体所有——分给 A 的代码全部由 A 维护、他人只能使用不能修改;审查能发现测试发现不了的建模需求和设计期缺陷。
雅
小雅
Scrum 部分再压一遍:短迭代叫 Sprint、建议 2 到 4 周互联网产品可 1 周;做多少由开发团队决定;每日站会三点信息、不超过 15 分钟、是内部沟通不是汇报;五大价值观承诺、专注、开放、尊重、勇气,没有「简单」。透明水晶适合 6 人以下;开放源码地域分布广、查错排障高度并行;ASD 三阶段猜测、合作、学习。下一集收官:软件重用、ABSD 和形式化方法。