现代软件工程 第七章 【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
现代软件工程 第七章 【MSF】练习与讨论的更多相关文章
- 0428—Scrum团队成立及《构建之法》第六、七章读后感
5.Scrum团队成立 5.1 团队名称:喳喳 团队目标:突破渣渣 团队口号:吱吱喳喳 团队照: 5.2 角色分配 产品负责人: 112冯婉莹 Scrum Master:109张鑫相 PM项目经理:1 ...
- 精通Web Analytics 2.0 (9) 第七章:失败更快:爆发测试与实验的能量
精通Web Analytics 2.0 : 用户中心科学与在线统计艺术 第七章:失败更快:爆发测试与实验的能量 欢迎来到实验和测试这个棒极了的世界! 如果Web拥有一个超越所有其他渠道的巨大优势,它就 ...
- 《Entity Framework 6 Recipes》中文翻译系列 (38) ------ 第七章 使用对象服务之动态创建连接字符串和从数据库读取模型
翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 第七章 使用对象服务 本章篇幅适中,对真实应用中的常见问题提供了切实可行的解决方案. ...
- 《Entity Framework 6 Recipes》中文翻译系列 (41) ------ 第七章 使用对象服务之标识关系中使用依赖实体与异步查询保存
翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 7-7 标识关系中使用依赖实体 问题 你想在标识关系中插入,更新和删除一个依赖实体 ...
- Java语言程序设计(基础篇) 第七章 一维数组
第七章 一维数组 7.2 数组的基础知识 1.一旦数组被创建,它的大小是固定的.使用一个数组引用变量,通过下标来访问数组中的元素. 2.数组是用来存储数据的集合,但是,通常我们会发现把数组看作一个存储 ...
- objective-c第七章课后练习2
题:改变第七章例子中print方法,增加bool参数,判断如果是YES则对分数进行约简 @interface Fraction : NSObject { //int num,den; } @prope ...
- 读《编写可维护的JavaScript》第七章总结
第七章 事件处理 7.1 典型用法 作者首先给了个我们一个处理事件的方法.看起来也没啥俩样,不过后来给出的优化方法很值得学习: // 不好的写法 function handleClick(even ...
- 第七章 LED将为我们闪烁:控制发光二极管
第七章 LED将为我们闪烁:控制发光二极管 本章我们将会看到一个完整的linux驱动程序,通过linux驱动程序控制LED的四个小灯,通俗的说就是通过向linux驱动程序来控制LED小灯的开关.用到 ...
- Getting Started With Hazelcast 读书笔记(第七章)
第七章 部署策略 Hazelcast具有适应性,能根据不同的架构和应用进行特定的部署配置,每个应用可以根据具体情况选择最优的配置: 数据与应用紧密结合的模式(重点,of就是这种) 胖客户端模式(最好用 ...
随机推荐
- Centos6.6下安装MySQL5.6
1.先查看本机上已经安装的MySQL rpm –qa | grep -i mysql 如果存在信息说明已经安装MySQL 需要完全卸载以前的MySQL yum remove mysql mysql-s ...
- .Net程序员之Python基础教程学习----字典的使用 [Third Day]
今天学习了字典的使用, 所谓的字典其实就是键值对数据, 一个字典里面有唯一的Key对应一个value,Key是唯一的,Value不唯一. 在.net添加相同的Key会报错,在Python,若出现相 ...
- 老话题:自己编写只截窗口客户区的截屏软件(VB2010)
现在能实现截屏的软件很多,就不一一列举了,连WIN7都自带截屏软件,甚至OFFICE2010开始都有截屏的功能. 截屏软件虽多,无外乎三种截屏方式:全屏截图.窗口截图.自定义矩形截图. 其中,窗口截图 ...
- hdu3065 病毒侵袭持续中
题目地址:http://acm.split.hdu.edu.cn/showproblem.php?pid=3065 题目: 病毒侵袭持续中 Time Limit: 2000/1000 MS (Java ...
- AC日记——配对碱基链 openjudge 1.7 07
07:配对碱基链 总时间限制: 1000ms 内存限制: 65536kB 描述 脱氧核糖核酸(DNA)由两条互补的碱基链以双螺旋的方式结合而成.而构成DNA的碱基共有4种,分别为腺瞟呤(A).鸟嘌 ...
- 代码静态解析PMD
在正式进入测试之前,进行一定的静态代码分析及code review对代码质量及系统提高是有帮助的,以上为数据证明 Pmd 它是一个基于静态规则集的Java源码分析器,它可以识别出潜在的如下问题:– 可 ...
- I/O工作机制
I/O问题是任何编程语言都无法回避的问题,可以说I/O是整个人机交互的核心问题,因为I/O是机器获取和交换信息的主要渠道.java的I/O操作类在包java.io下,大概有将近80个类,这些类大概可以 ...
- Socket用法详解
在客户/服务器通信模式中,客户端需要主动创建与服务器的Socket(套接字),服务端收到了客户端的请求,也会创建与客户端连接的Socket. Scoket可以看作两端通信的收发器,服务端和客户端都通过 ...
- HTML 学习笔记 CSS3 (2D Matrix)
Matrix 矩阵 那么什么是矩阵呢? 矩阵可以理解为方阵,只不过 平时方阵里面站着人 矩阵中是数值: CSS3中的矩阵: css3中的矩阵指的是一个方法,书写为matrix() 和 matrix3d ...
- HTML 学习笔记 JavaScript (变量)
变量是储存信息的容器. 实例 var x=2; var y=3; var z=x+y; 就像代数那样 x=2 y=3 z=x+y 在代数中,我们使用字母(比如 x)来保存值(比如 2).通过上面的表达 ...