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

 

7.7  移山开发方法——比TFS敏捷更精简

几个软件学院的学生来请教阿超,同学们自豪地说,我们要用全套TFS敏捷开发模式开发项目!

真的?阿超不敢相信。

同学: 对!我们要用全5个工作项类型 – 任务、缺陷、场景、风险、服务质量需求、

阿超: 你们有多少实战项目的经验?哦,都没有。这么说这是你们第一个真正的实用项目,我建议你们先忘记这么多工作项类型,把时间花在写代码上好了。

同学: 可是老师要我们上敏捷开发模式呀?

阿超: 当敏捷模式变成强迫,那还能敏捷到哪儿去呢?如果你们非用不可,我建议你们只用其中两个工作项类型:

  • 任务
  • 缺陷

同学: 超总,我觉得其他的工作项类型也很好用耶,比如场景,风险——没有风险管理,我们咋能上CMM等级呢?

同学: 还有“QoS——服务质量需求”,难道你不重视程序的效能和可扩展性?

阿超: 看来你们读书都不错,那些类型都很好,但是不直接使用这些类型并不表示我们不重视,特别是风险。因为在一个全新的团队中不加辨别地使用所有工作项类型也是一种风险。它增加了VSTS的系统复杂性,从而增加用户(就是你和我)学习和使用的难度,浪费时间。有可能使项目的进展受到影响!至于“服务质量需求”,我们很重视程序的效能和可扩展性,但是不必拘泥于非要用某一特定的类型不可。

对于小规模的项目,我的原则是“直奔主题,精简过程”,我们的主题是啥?让用户买我们的产品,只要用户满意我们的产品,他们会关心我们内部开发模式用的是哪几个工作项类型么?

我个人认为项目开发过程中有两件不同类型的事:

(1)事先预计到的要做的事。这就是任务,把要做的事情组合起来实现用户某一个特定的需求,这就是场景,也可以用任务来表达。

(2)事先没有预计到,但是为了项目成功而不得不做的事。这就是缺陷。

软件开发的过程就是做完这些“计划要做的事”和“没计划,但是不得不做的事”,做好就行了。等你们做了三五个项目,写了一万行以上的程序,再来看场景、风险、服务质量需求也不迟。

同学:您说得在理,但是老师让我们用全套敏捷模式,我们怎么办?

阿超:你们可以回去告诉老师说这是最新的“移山精简开发模式”,填补了国内外空白,很好用。

把同学们打发走了以后,阿超转念一想,为什么不呢?“移山精简开发模式”,说不定对小型团队来说是一个很好的模式。

举例说明:例如我们要设计一个网上拍卖的网站,商业用户(简称商户)可以开商店,卖东西;一般的用户可以浏览,购物。

商户可以用我们的系统进行登录。这是场景,也可以叫任务,我们要以此为基础,驱动开发和测试工作:

我们计划要在网络用户界面实现商户登录管理,这是任务。

我们计划要在中间逻辑层实现商户登录管理,这是任务。

我们计划要在数据层实现商户登录管理,这是任务。

我们计划要测试商户登录,这是任务。

我们计划要系统能支持100个以上的商户同时访问,这是任务,同时也是“服务质量需求”。

在某些情况下,商户登录失败,这是缺陷。我们事先没有预计到会出这样的问题。

在标准配置情况下,20个以上的商户同时登录时,系统的响应时间很慢,这是缺陷。我们事先没有预计到会出现这样的问题。

系统在上传某种图像文件时出错,这是缺陷。

对于一个不太复杂的系统来说,每次里程碑(迭代)中要实现的场景应该两个手掰指头能数得过来。而且场景是相对稳定的,不会突然间有大的变化。对于一线的开发和测试人员来说,每天打交道更多的是任务和缺陷。过多的类型会增加管理和交流的成本,一个开发者每天很简单地浏览“我的任务”和“我的缺陷”这两个检索,就能知道今天该做什么。同时开发和测试的交流也主要通过“缺陷”这一类型来完成。管理人员在跟踪进度、报告进度的时候也很简明。在这种情况下,“场景”只是起到一个综合与归类的作用,使管理人员和客户知道哪些功能能够使用了,哪些还差得远。因此,“场景”可以等同于“任务”。因为这是我们预计到要做的事情。

如果加上“服务质量需求”,那么团队中每个人需要接触的工作项类型就有4种,如果测试人员发现“服务质量需求”的某些部分不符合要求,需要重新激活“服务质量需求”,并创建一个新的“缺陷”,并且通报所有相关人员,对于一个小规模、人员相当集中的团队,真的有这个必要么?

对于一个新建的团队,保持一个精简的过程和管理方法是很重要的。只要任务、缺陷这两个类型足以解决问题,就不必考虑更多的工作项类型,而是集中精力把项目开发好。

在软件工程发展的过程中,各个专家在不同时期总结了软件工程的原则,下面是1983 年Barry Boehm在总结了多个项目(各个项目总共耗时约175000人月,主要是国防、航空、航天相关)之后提出的软件工程原则[i],请把它和MSF、Agile的原则相比,看看有什么异同?

表7-2  Barry Boehm总结的软件工程原则

Principles

中文翻译和解释

1. Manage using a phased life-cycle   plan.

使用分阶段的计划来管理流程,强调需求分析和抵制随意地改变项目计划。

2. Perform continuous validation.

持续地检查认证,争取在早期发现问题。

3. Maintain disciplined product   control.

坚持规范的产品控制– 验证过的程序或文档只有通过规范的流程才能修改。

4. Use modern programming practices.

使用现代的编程方法和工具

5. Maintain clear accountability for   results.

确保团队成员能分阶段,分模块地产生可以测试,可以复审的结果,并对结果负责。

6. Use better and fewer people.

用少而精的人员,减少交流成本,提高效率。

7. Maintain a commitment to improve   the process.

持续地收集数据,和反馈,争取通过多个迭代实现流程的改进和整体软件质量的提高。

小飞: 能否有一个打折扣的MSF?让一个团队一下子接受MSF的“9项基本原则”似乎并非易事,那么我们可以打折扣地贯彻MSF吗?如果可以,应该如何实施呢?

阿超: 这些原则都是相互依赖、相互促进的。如果只实施了50%的原则,也许只有10%的作用。但是不必为此烦恼,只要开始改变,经常总结,就是好事。

小飞: 越是充分授权和信任,很多人在团队中越不自觉,结果写的代码都是敷衍了事(大学里面的团队很多都是这样),需要用什么激励机制来促进吗,还是说只能依靠团队成员的个人自觉?

阿超: 那我们要问一下这个项目的商业价值是什么?如果这个项目没有任何商业价值,我想你也不好意思照搬商业软件的做法。但是也许这个项目对个人而言很有价值(提高个人技术的价值),那些有心锻炼自己的同学,能够自我驱动,值得你去“授权”和“信任”。

小飞: 我体会最深的是——“如果你问一个技术人员,技术人员往往略带不屑地告诉你——把“工具 | 选项”打开,在某个“高级选项”下,改某个参数即可”这一段。移山公司的一些技术人员,特别是开发人员,甚至还带有一些轻蔑的眼神。参照这一新闻(北京禁止售货员用轻蔑审视的眼光扫视顾客)[ii],我大胆地提一个建议——“移山公司禁止开发人员用轻蔑审视的眼光扫视测试人员”!

大牛: 我同意,而且要扩展到“禁止开发人员用轻蔑审视的眼光扫视非开发人员”!

果冻: 西方管理学大师戴明曾经说:“Eliminate numerical goals, numerical quotasand management by objectives. Substitute (that with) leadership”,意思就是说(在团队中)要消除以数字定义的目标、份额,以及以类目标为基础的管理原则。我们要用领导能力取而代之。
这和“数量化的管理”级别的要求有没有冲突?

二柱:软件工程讲的净是一些奇妙玄幻的概念,拗口的专业名词加上纷繁复杂的流程,其实做软件完全没那么难,主要靠的还是程序员自身的修养和完成工作的素质。

你怎么看二柱的观点?


[i]      论文信息:Seven Basic Principles of Software Engineering, Barry W. Boehm, 链接:http://dx.doi.org/10.1016/0164-1212(83)90003-1

[ii]      http://news.sina.com.cn/c/2006-11-30/202110650498s.shtml

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/500379.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

现代软件工程 第八章 【需求分析】练习与讨论

1 扩展阅读下面两篇文章也说明了软件估计的难度: Steve McConnell 软件估计的 10 种罪:http://www.ewh.ieee.org/r5/central_texas/austin_cs/presentations/2004.08.26.pdf Quora精选: 为什么软件开发周期总是预估的2~3倍http://jandan.net/201…

现代软件工程 第九章 【项目经理】练习与讨论

9.5.1 PM们的故事 讲了这么多条条框框,我们还是来讲几个故事吧。 A)是不是所有的好功能都是由PM主导,一步一步根据用户需求,按照用户场景设计,然后进行可用性测试等等步骤之后得来的呢? 功能本天成,妙手偶…

现代软件工程 第十章 【典型用户和场景】 练习与讨论

1. 讨论:下面的老板犯了什么错误? 只看用户的表面语言或行动还是不够的。我们还要找到用户语言行动背后的动机! (图像来源: http://www.weibo.com/funnyshoelace) 2. 是否要文档 有人说,我们敏捷的团队,就喜欢直接的面对面的交流&#xff0…

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

1 如何避免在产品开发后期不断有重大修改,导致其它模块的连锁反应? DCR Tell mode vs. Ask mode设计变更 在项目早期,如果大家觉得要做一个设计变更,便可以采用告知模式(Tell-mode)的形式,也就是说,修改方必须通告所…

现代软件工程 第十二章 【用户体验】练习与讨论

1 什么是用户体验, 什么时候开始考虑用户体验? 究竟什么是用户体验呢? 请看: http://www.infoq.com/articles/aaron-sanders-user-experience (中文版)http://kb.cnblogs.com/page/508097/ 既然用户体验和用户界面对一个项目这么重要&…

现代软件工程 第十七章 【人、绩效和职业道德】 练习与讨论

0. 为啥要讲人、绩效、和职业道德? 学好专业不就行了么,为啥要扯这么多? 用专业知识教育人是不够的。通过专业教育,他可以成为一种有用的机器,但是不能成为一个和谐发展的人。要使学生对价值有所理解并且产生热烈的感情…

现代软件工程 第十三章 【软件测试】 练习与讨论

13.5.2 有错不改 果冻: 微软的产品经过这么多版本的不断完善,应该是把所有问题都搞定,“止于至善”了吧? 阿超: 那也不一定,在非常有名的电子表格软件Excel中,就有这样一个Bug:Exce…

现代软件工程 第十四章 【质量保障】 练习与讨论

15.3.1 有些成功人士或公司认为不需要独立的测试角色(Test),你怎么看? 我猜想和踢足球类似,还是那几个原因: 人太牛: 不世出的天才,例如高德纳写书时发现排版软件不好用,就自己写了一个。也没听…

现代软件工程 第十五章 【稳定和发布阶段】练习与讨论

15.3.0 案例分析 可以看看这两个学生项目的例子,推断出这些团队的血型: STG游戏的跳票(为了完美,推迟了7天,但是7天之后也没有发布……) [i] 英语学习软件(说了“明早发布”,但是明早一直没到)[ii] 15.3.1 反动分子阿…

现代软件工程 第十六章 【IT 行业的创新】练习与讨论

16.6.0 Xerox Parc 的成功创新和推向市场的失败 http://research.microsoft.com/en-us/um/people/blampson/Slides/AltoAtPARCIn1970s_files/frame.htm http://research.microsoft.com/en-us/um/people/blampson/38-AltoSoftware/WebPage.html http://research.microsoft.com/…

感恩回馈——你评博客,我送好书

各位博客园的用户: 最近我的书《构建之法—现代软件工程》上市了,得到了不少读者和老师的好评,出版2个月即告重印。该书的相关信息参见豆瓣页面:http://book.douban.com/subject/25965995/ 《构建之法—现代软件工程》得以出版和畅…

《梦断代码》读后感 - 驱动,责任,交流,远虑

这三篇读后感原来发布在我自己申请的域名 yishan.cc 上面,后来这个域名被墙了。 (原文写于2008年12月) 几个星期前,我给《现代软件工程》课的每一个团队都发了一本 《Dreaming In Code》的中文版 《梦断代码》,要求写读后感。这本书讲了这样的…

软件工程练习:模块化,单元测试,回归测试,TDD

这是《构建之法》实战教学的一部分。适合作为同学们的第二个程序作业。 第一个程序作业: 请看 “概论” 一章的练习,或者老师的题目,例如这个。 作业要求: 软件工程的作业越来越有意思了, 我们在第一个作业中&#xff…

《构建之法》参考书和链接汇总

《构建之法》 参考书和链接汇总 参考书汇总 一些读者对《构建之法》引用过的参考书也感兴趣,因此我把所有参考书单独列出来。其实人大部分的思想都是受某些外部信息的启发影响而来,很多道理看似新颖,其实别人早就讲过了😀。这个参…

现代软件工程讲义 7 分析和设计方法

(这一节在第一版的 《构建之法》中没有, 是《构建之法》电子书(多看版), 和纸版书第二版中新增加的内容,纸版书第二版预计2015年6月出版) 11.1 分析和设计方法 我们写软件就是要解决用户的需求,我们需要表达和传递下面这些…

三周的 软件工程实践课 课程安排建议

不少学校想在暑期安排软件工程实践课, 在这么短的时间内要做到软件生命周期的完整体验是有很多挑战的,下面是一个建议: 软件工程课程设计 - 三周计划,10 次授课,10 次学生报告。 第一周,准备: 在…

现代软件工程讲义 源代码管理

【现代软件工程课件】 源代码管理 -- 以实践促进学习 移山软件学院的学生果冻问老师: 为啥需要源代码管理? 我自己写代码多爽,别人要,就用QQ 传过去好了。 老师问:原始人怎么建房子? 果冻:或者找一个洞&…

现代软件工程讲义 个人项目和结对项目练习 地铁

很多老师反映教软件工程和程序设计的时候没有合适的题目,《构建之法》提供了下面的题目,都是从简单的解题思路入手,逐步增量改进。学生们可以复习基本的编程技能,然后逐步加入模块化,文件处理,单元测试&…

最新软件工程总结,项目模板,软工作业下载

(改了标题吸引目标用户) 老师教课,学生上课,首先要讲明师生关系。 其次,就是要说明这门课的底线是什么。 我们假设所有人写作业都独立思考,认真实践,不断改进,勇于创新... 这个假设通常是不全面的&#xf…

C语言 教学实践建议

(编程/软件工程课程怎么教) 这是2016年秋季学期和北京工业大学耿丹学院合作教学的计划。这也可以用于其他学校的 C 语言课程。 2016级有四个班,每班大约 32 人,每班配有一个有一定实际工作经验的助教,配合老师把课教好。 C语言是一门基础课&…