现代软件工程 第十一章 练习与讨论

1  如何避免在产品开发后期不断有重大修改,导致其它模块的连锁反应?

DCR Tell mode vs. Ask mode设计变更

在项目早期,如果大家觉得要做一个设计变更,便可以采用告知模式(Tell-mode)的形式,也就是说,修改方必须通告所有关系人:“我在这里修改了某某界面, 我在某个API 增加了一个参数。”但是修改方不必取得其他关系人(或者模块)的事先同意,就是说可以先行设计并编码。当然,如果其他关系人不同意,修改还是不能签入。

当项目进行到稳定阶段,例如达到了代码完成(CC)阶段,Tell-mode 要改为请求模式(Ask-mode),这时,修改方必须先问“我是否可以在这里修改某某界面?”(当然还要有更详尽和充分的理由),得到肯定的答复后,才能进行修改。这时的默认回答是“不”。

2  每周进度报告——还有多少事没做完

小飞: 我们每天都在签入新的代码,每人都很忙,但是我总觉得不太对劲。感觉事情越做越多,我们离最终目标到底是更接近了,还是更远了呢?

阿超: 这时我们可以看看各种报表,首要推荐的是TFS 的“Remaining Work”,可以看敏捷流程的“燃尽图”(Burn down chart)。如果你看到每个人每天花费的时间在不断增加,但是真正需要解决的任务(Task)和缺陷(Bug)都没有变化,甚至缓慢增加,这意味着团队离最后目标越来越远了。

可以在TFS报表设置的控制板中,进一步选择你要报告的内容,如:Iteration,选择里程碑;Area,选择项目的不同部分,也可以修改报告的起始和终止日期等[i]。

3  如何避免诧异的反应

问:     每次里程碑结束后,我们向客户汇报的时候,客户总是会惊讶地说,某某功能不是我们当初商量的那样啊,而PM却也同样一脸诧异地说,不对啊,当时咱们就是这么说好的啊,有文档为证。客户不干了,威胁不加/不改xx功能就如何如何,这时PM该怎么办?

阿超: 我们在合同里要写明到底我们要交付的是什么,这就要看PM的分析和说明能力了。有时要对客户说“不”。同时,我们在需求说明中也要从用户的角度去描述问题和解决方案,这样用户才能了解他们最终会得到什么,另一个方面是,当你给用户演示一些界面的时候,要说明哪些界面只是示例而已,哪些界面是大家同意的最终设计。敏捷的开发流程鼓励用户经常参与设计和计划,如果有条件这么做,那当然很好。

问:     项目开发中后期,开发人员用工具一统计,乖乖,足足xx万行代码,xx千个存储过程,可是每到给客户演示时,却不时出现程序的各个功能相互不配合,不能自圆其说的尴尬场景,Dev leader很郁闷,想想自己可是没少加班啊,代码量也够多,可是问题究竟出在什么方面呢?

阿超: 一个原因是每个人都沉浸在“我要写出最强大的某某类或某某模块”中,不停地优化一些没有人用的功能,但是真正能够为其他模块使用的功能却未能实现。他们忘了他们写的代码是给别人用的,而且是为了解决用户问题的。所以这个时候我们要想想“用场景驱动”的方法,保证典型的用户场景能够实现。如果从“场景”出发,各个模块的互相集成就能得到充分的测试,按照场景演示起来就更有保障了。

问:     在项目开始之前, 有很多队员还没有接触过编程语言(例如C#),导致PM在分配任务时很难用时间来衡量,就拿写一个Web Service这一模块来说,一个熟练的程序员可能只需要两个小时,而对于初学者来说,就得先花两天来理解Web Service的实现机制和原理。在有限时间的催促下,导致一些紧急的任务不断向高手集中,而初学者的任务越来越少。这时应该怎么办?

阿超: 对于这些队员,可以考虑在他们自己的任务估计值之上再乘以4。另外,如果你是写一个商业项目,请不要让连开发语言都没有接触过的队员进行开发工作。并不是非得 “写” 程序才是对项目有贡献,有时不写也有很好的贡献。如果他们有热情,就从测试开始学习吧。请参看前面提到的“大马哈鱼洄游模型“


[i]      VS2010以及之后的版本还提供了燃尽图等功能,请参见相关同学的博客,例如

http://www.cnblogs.com/OMG-Team/archive/2011/09/30/2196150.html

现代软件工程 第十一章 练习与讨论

时间: 2024-11-07 08:40:29

现代软件工程 第十一章 练习与讨论的相关文章

现代软件工程 第十三章 练习与讨论

13.5.2  有错不改 果冻: 微软的产品经过这么多版本的不断完善,应该是把所有问题都搞定,“止于至善”了吧? 阿超: 那也不一定,在非常有名的电子表格软件Excel中,就有这样一个Bug:Excel 的日期计算功能认为1900年是一个闰年,这是不对的,但是它愣是一直没有改正这个错误. 众人: 真的?为什么屡教不改呢? 阿超: 故事是这样的,当时这类电子表格软件的市场领头羊是Lotus 1-2-3这一款软件.它的日期计算功能有一个Bug,就是把1900年当作闰年.这类软件在内部把日期保存为“从

现代软件工程 第七章 练习与讨论

7.7  移山开发方法——比TFS敏捷更精简 几个软件学院的学生来请教阿超,同学们自豪地说,我们要用全套TFS敏捷开发模式开发项目! 真的?阿超不敢相信. 同学: 对!我们要用全5个工作项类型 – 任务.缺陷.场景.风险.服务质量需求. 阿超: 你们有多少实战项目的经验?哦,都没有.这么说这是你们第一个真正的实用项目,我建议你们先忘记这么多工作项类型,把时间花在写代码上好了. 同学: 可是老师要我们上敏捷开发模式呀? 阿超: 当敏捷模式变成强迫,那还能敏捷到哪儿去呢?如果你们非用不可,我建议你们

现代软件工程 第六章 练习与讨论

6.3.1  什么时候适合选择敏捷 我们看了这么多方法论之后,一些同学一定比较困惑,到底选择哪一种开发方法比较好呢? 这在实践中不是难题,有学者还列出了一些简单的问题来帮助人们做决定[i]: 表6-3 问题引出方法 问题 Yes – 偏向传统的瀑布+文档的流程 No –   偏向敏捷流程 1. 项目需要有明确的spec 么? 2. 项目没有明确的用户,也无法联系用户进行沟通 3. 软件系统是大型的么? 4. 软件系统是复杂的么?例如实时系统 5. 软件的生命周期很长么? 6. 你使用比较差的软件

现代软件工程 第四章 练习与讨论

4.7.1  结对项目的案例和论文 在现代软件工程教学的过程中,同学们已经总结了不少切身体会.例如: 总结1[i]:那是project到了比较关键的创造阶段,整整一天,我们俩椅子靠椅子的坐在电脑前,一边讨论一般coding,那次才真正的体会到结对真的能够带来效率.一整天的coding是容易走神的事,还好有pair在旁边指导,总是不断在我敲某某变量之前提前告诉我成员变量的名字,数据修改时帮忙检查是否有漏掉的,变量和函数定义的时候一起为其取名字,感觉有点眼花了,就换了个角色,我也开始对他“指指点点”

现代软件工程 第五章 练习与讨论

团队模式和团队的开发模式有什么关系? 如果你领头开展一个全新的项目,你要怎么选择“合适”的团队模式? 不同的团队模式如何影响团队绩效的评估? 团队精神和集体主义的区别?     大家回想在小学和中学的学习过程,大家在一个班集体,有多少工作是以“团队”(Teamwork)的形式来完成的,有多少工作是以“工作组”(Workgroup)形式完成的?或许大部分工作都是以“非团队”的形式完成的.“团队精神”和平常讲的“集体主义”有什么区别? 现代软件工程 第五章 练习与讨论

现代软件工程 第三章 练习与讨论

1  选哪一种医生? 作为一个软件工程师, 你觉得自己表现如何? 有没有这样的体会: 看书的时候觉得“技止此耳”,开发项目的时候才觉得实际情况和书上讲的都有一些出入,一些重要的细节书上没有提.我们很多人是边看Asp.net的书, 边开发Asp.net 的项目,这相当于一边看医学书一边动手术…… 如果你是病人,你希望你的医生是下面的哪一种呢? a)     刚刚在书上看到你的病例, 开刀的过程中非常认真严谨, 时不时还要停下来翻书看看…… b)    富有创新意识, 开刀时突然想到一个新技术. 新

软件工程—第十一章

第十一章—软件演化 软件系统在交付之后仍然在不断的演化,即进入软件的运行维护阶段,以保证软件长期处于可用状态,并能够适应实际业务的不断变化. 软件在更改过程中的演化特性具体如下:1.软件维护是一个必然的过程2.软件的不断修改会导致软件的退化3.软件系统的演化特性是在早期的开发阶段建立起来的4.软件开发的效率与投入的资源无关5.在软件系统中添加新的功能不可避免地会产生新的缺陷. 软件维护可以分为三种类型:改正性维护.适应性维护.完善性维护.软件维护的特点:1.软件维护受开发过程影响大2.软件维护困

现代软件工程 第十一章 【软件设计与实现】 练习与讨论

一.            如何避免在产品开发后期不断有重大修改,导致其他模块的连锁反应? 我认为首先前期的需求分析要尽可能完善并确定,需求变更是程序员所不能承受生命之重.另外题目中谈到的设计模式变更方法,是个很好的控制策略.项目早期采用Tell-mode,可以先行设计并编码,有较高的自由度:到了项目稳定阶段,采用Ask-mode,默认不同意变更设计,需要等待肯定答复,有效避免了修改的频繁,避免其他模块的连锁反应. 二.            每周进度报告 报表可以帮助我们掌控项目进度,把握项目

软件工程第一章至十一章汇总

第一章软件软件是计算机程序,规程及运行计算机系统可能需要的文档和数据.软件分为通用软件和定制软件.软件的特性:1.复杂性2.不可见性3.不断变化4.大多数软件仍然是定制的,而不是通过已有的构件组装而成.软件于二十世纪50~60年代,70年代,80年代,90年代至今进行发展.在此过程中遇到一些危机:1.软件的开发成本和进度难以估计,延迟交付甚至取消项目的现象屡见不鲜.2.软件存在着错误多,性能低,不可靠,不安全等质量问题.3.软件的成本在计算机系统的整个成本中所占的比例越来越大.4.软件的维护极其