这次继续第十五章的内容。这章主要
第15章 稳定和发布阶段
一、从代码完成到发布
一个软件团队经历了计划/设计/开发等阶段, 达成代码完成 (Code Complete) 这一目标。
1、软件团队的血型
A型:他们知道优秀的软件公司会发布有已知缺陷的软件;
B型:他们不相信这一点;
O型:他们不知道这一点,因此嘴巴惊讶成O型;
AB型:他们对于自己开发的软件是A型,对于别人开发的软件是B型。
常用的名词:
Alpha、Beta、ZBB(Zero Bug Build)、RC(Release Candidate)、RTM(Release To Manufacturer)、RTW(Release To Web)
2、会诊小组(Triage Team) 软件团队的各个角色代表 (pm/dev/test/UX 等) 组成会诊小组。处理每一个影响产品发布的问题。
3、按时发布的招数:
招数: 设计变更(Design Chang Request) 经过Alpha / Beta阶段后,通过用户的反馈,对原来的设计进行改进。
招数: ZBB 团队要有把bug 都搞定的执行力。
招数:最后回归测试
招数:砍掉功能
招数: 修复bug 的门槛逐渐提高
招数:逐步冻结
二、不同频率不同覆盖范围的渐进发布
一般来说,后发布的版本事前一个版本的升级。比如Windows 10 的发布,采用不同目标人群+不同发布频率的方式。
三、发布之后---事后诸葛亮 会议
在软件开发周期结束后,对软件开发的流程进行解剖分析的过程。结果是找出问题的根源。
四、项目回顾模板
设想和目标
1. 我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和 典型场景有清晰的描述?
2. 是否有充足的时间来做计划? 有时间,但是大部分人并不知道如何利用这一段时间来做计划。
3. 团队在计划阶段是如何解决同事们对于计划的不同意见的?
计划
1. 你原计划的工作是否最后都做完了?如果有没做完的,为什么?
2. 有没有发现你做了一些事后看来没必要或没多大价值的事?
3. 是否每一项任务都有清楚定义和衡量的交付件?
4. 是否项目的整个过程都按照计划进行?
5. 在计划中有没有留下缓冲区,缓冲区有作用么?
6. 将来的计划会做什么修改?(例如:缓冲区的定义,加班。)
资源
1. 我们有足够的资源来完成各项任务么?
2. 各项任务所需的时间和其他资源是如何估计的,精度如何?
3. 用户测试的时间,人力和软件 / 硬件资源是否足够?
4. 你有没有感到你做的事情可以让别人来做(更有效率)?
有什么经验教训?
变更管理
1. 每个相关的员工都及时知道了变更的消息吗?
2. 我们采用了什么办法决定“推迟”和“必须实现”的功能?
3. 项目的出口条件(Exit Criteria)是否得到清晰的定义?
4. 对于可能的变更是否能制定应急计划?
5. 员工是否能够有效地处理意料之外的工作请求?
设计 / 实现
1. 设计工作在什么时候,由谁来完成?是合适的时间,合适的人么?
2. 设计工作有没有碰到模棱两可的情况,团队是如何解决的?
3. 团队是否运用单元测试(Unit Test)、测试驱动的开发(TDD)、 UML 或者其他工具来帮助设计和实现?这些工具有效么?
4. 什么功能产生的 Bug 最多,为什么?
5. 代码复审(Code Review)是如何进行的,是否严格执行了代码规范?
测试 / 发布
1. 团队有没有测试计划?为什么没有?
2. 有没有做过正式的验收测试?
3. 团队是否有测试工具来帮助测试?
4. 团队是如何测量并跟踪软件的效能的?从软件实际运行的结果来看, 这些测试工作有用么?应该有哪些改进?
5. 在发布的过程中发现了哪些意外问题?
我们学到了什么?如果历史重来一遍,我们会做什么改进?
总结
根据上面的这些问题作出相应的讨论和回答,提出意见和建议,并将其汇总整理。