现代软件工程讲义 4 方法论 - 事后诸葛亮会议

一个里程碑结束了, 下面怎么办?  团队有什么经验教训? 产品怎么才能做得更好? 我们常说 “软件的生命周期”- 这个软件开发的周期结束了, 我们能不能像医学的尸体解剖一样, 把这个软件开发的流程解剖一下?

Postmortem, Retrospective, Review, 事后诸葛亮会议, 就是为了解决这一问题。

 

产品发布了,大家松了一口气。阿超建议大家开一个总结会议, 就是事后诸葛亮会议。会议请公司的秘书小芳主持并作记录。 为了让大家能畅所欲言,阿超和大牛没有参加会议。为了活跃气氛,小芳还买了零食、饮料、河曲啤酒等。

 

阿超给小芳一个讨论的模板,同时也嘱咐小芳不一定要拘泥于模板,要见机行事,根据会议的进展灵活地变动计划。要牢记会议的核心问题是“如果你可以重新来过,什么方面可以做得更好?”

 

现代软件工程 项目Postmortem 模板

邹欣

现代软件工程 课件

2011

 

设想和目标

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. 在发布的过程中发现了哪些意外问题?

如果历史重来一遍我们会做什么改进?

 

 

怎么开好一个 Postmortem 会议:

  1. 保持会议轻松愉快的氛围, 可以考虑换一个开会的环境, 有饮料, 零食, 音乐的帮助更好
  2. 当 [大官] 的最好不要出现, 让大家畅所欲言。 (即使出现, 也要夹着尾巴, 不要为自己以前的行为辩护, 作好听众)
  3. 坚持对事不对人的原创, 强调 - 如果再有一次机会, 会如何改进? 而不是挖历史旧帐.
  4. 照顾到模板提及的各个领域, 可以深入团队最感兴趣的部分。
  5. 让所有人都有充分发言的机会。
  6. 有人记录发言要点, 最后列出所有改进意见
  7. 最后大家可以投票, 如果我只有三票, 投给哪些改进意见 
  8. 大官们保证要采取行动, 执行票数最高的一些改进意见。

 

 

 

小芳:最后要交一个什么样的文件呢?是不是所有问题的列表就可以了?

阿超:列出问题,只是一个部分,重要的是让所有人了解问题的存在之后,开始讨论解决方案,要提出一个解决问题的草案。

 

 

原来准备开一个小时的会议进行了两个多小时才结束,食品和酒水的消耗也比原计划多了两倍,有人被抬出了河曲大酒店。

 

小芳最后把大家的意见和建议整理之后,发给了全体成员。

移山公司Stone项目Postmortem结果

整理:小芳

设想和目标

1.       我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述?

想做的事情还是太多,导致很长时间不能集中精力。

2.       是否有充足的时间来做计划?

有时间,但是大部分人并不知道如何利用这一段时间来做计划。

3.       团队在计划阶段是如何解决同事们对于计划的不同意见的? 

主要通过喝酒聊天解决,另外阿超有某种光环,大家对他有些崇拜,这样他说的话别人都比较容易接受,不同的意见也没有特别强烈。

 

 

计划

1.       你原计划的工作是否最后都做完了如果有没做完的,为什么?

很多事情都没做完,大家认为最后没做完的事情,都是可有可无的。

2.       有没有发现你做了一些事后看来没必要或没多大价值的事?

很多,但是大家认为与其不断地争论某些事情有没有必要,不如做了再说。

3.       是否每一项任务都有清楚定义和衡量的交付件?

大部分都没有,因为我们大家都不知道做到多少才叫。有些情况下, 大家对细节过早地进行讨论,花了很多时间。不如等到后来再讨论。

4.       是否项目的整个过程都按照计划进行?

基本上,因为阿超的光环,大家大部分情况下都听他的。

5.       在计划中有没有留下缓冲区,缓冲区有作用么?

有缓冲区,原来认为没有必要,后来发现还是有用的。主要是各人进度不一,有些模块不断地有一些小问题,花了很长时间才能做好。

6.       将来的计划会做什么修改?(例如:缓冲区的定义,加班)

应该明确缓冲区的长度。

 

资源

1.       我们有足够的资源来完成各项任务么?

很多情况下,花了不少时间来设置机器,以及设置用来测试的数据。

2.       各项任务所需的时间和其他资源是如何估计的,精度如何?

开始精度很粗略,后来随着项目任务的加重,大家只顾得上干活,没时间考虑精度问题。

3.       用户测试的时间,人力和软件/硬件资源是否足够?

4.       你有没有感到你做的事情可以让别人来做(更有效率)?

比如网页的CSS设计,最好由美工设计来做,开发人员最后做实现即可。我们要有专职的设计,不要临时拉人来帮忙。因为临时帮忙的设计师对整个项目了解不多,事后也找不到他。

 

变更管理

1.       每个相关的员工都及时知道了变更的消息?

由于大家都坐得比较近,小道消息传播得比较快。

2.       我们采用了什么办法决定“推迟”和“必须实现”的功能?

用了银弹,除了导致一场短时间的斗殴之外,还可以。银弹的目的就是一种威慑。

3.       项目的出口条件 Exit Criteria)是否得到清晰的定义?

大家都不太懂“出口条件”是什么,经过这一个项目之后,稍稍清楚了一些。但是说实在的,在这个项目里面我们没有用到太多。

4.       对于可能的变更是否能制定应急计划?

基本没有,到时候随意抓人顶上。

5.       员工是否能够有效地处理意料之外的工作请求?

规定所有请求都转到PM那里处理,这样减轻了开发人员的压力,让他们有大部分时间花在自己那一亩三分地上。

 

设计/实现

1.       设计工作在什么时候,由谁来完成的?是合适的时间,合适的人么?

有些界面的设计过早,大家为了字体的大小,按钮的尺寸争论,事实上这些事情不应该由开发人员在项目早期来做。

2.       设计工作有没有碰到模棱两可的情况,团队是如何解决的?

很多,大家都不知道如何解决。就看具体执行的人是如何解决的,有的解决得好,大家并不知道出过问题;有的经常拿出来讨论,大家都知道问题在哪里,但是没法达到一致。

3.       团队是否运用单元测试(unit test),测试驱动的开发(TDD)、UML, 或者其他工具来帮助设计和实现?这些工具有效么?

运用了单元测试的员工,整体来看Bug不多,没有用单元测试的员工,后期比较忙。

TDD 要求PM要清楚地确定功能说明(spec),我们目前还做不到这一点。

一个好处是:大家都追着PM spec,弄得PM的压力很大,以前谁都不搭理PMspec

4.       什么功能产生的Bug最多,为什么?

交易功能由于牵涉的面太多,Bug也最多。

5.       代码复审 Code Review)是如何进行的,是否严格执行了代码规范?

刚开始还像那么回事,后来就变成走走形式。往往是小飞,我要check-in 了,reviewer 填你的名字,怎么样?其实小飞后来也没看代码。

 

测试/发布

1.       团队是否有一个测试计划?为什么没有?

我们有测试计划,而且因为有了计划,测试人员好像不再像无头苍蝇胡乱测试

2.       是否进行了正式的验收测试?

有些测试人员最后不敢说验收测试不成功,似乎是迫于某些开发人员的淫威

3.       团队是否有测试工具来帮助测试?

有。

4.       团队是如何测量并跟踪软件的效能的?从软件实际运行的结果来看,这些测试工作有用么?应该有哪些改进?

TFS 还是很有用的,至于改进,有这样一些建议:

a)输入Bug 还是步骤比较多,很多需要手动重复填写的字段。

b)不是所有的Bug  task 都记录在TFS中。

5.       在发布的过程中发现了哪些意外问题?

有些功能在新的机器上不能工作,因为很多设置没有明确的定义,也没有记录。在发布的时候,这些设置没有能正确地拷贝到发布的机器上去。说明很多关于这个系统的知识还没有形成文字,还是保留在某些人的脑袋中。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值