现代软件工程 第七章 【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就是这种) 胖客户端模式(最好用 ...
随机推荐
- TCL校园招聘——软件开发工程师(java) 只招5个。。。
简介 TCL集团股份有限公司创立于1981年,是全球性规模经营的消费类电子企业集团之一,广州2010年亚运会合作伙伴,总部位于广东省惠州市仲恺高新区TCL科技大厦.旗下拥有TCL集团.TCL多媒体科技 ...
- SQL 编程
用SQL编写程序首先我们要了解SQL的一些编程方法 1.使用变量 变量:是可以存储数据值的对象,可以使用局部变量向SQL语句专递数据. (1)局部变量 T-SQL中,局部变量的名称必须以标记@作为前缀 ...
- AC日记——独木桥 洛谷 p1007
题目背景 战争已经进入到紧要时间.你是运输小队长,正在率领运输部队向前线运送物资.运输任务像做题一样的无聊.你希望找些刺激,于是命令你的士兵们到前方的一座独木桥上欣赏风景,而你留在桥下欣赏士兵们.士兵 ...
- Svn Patch 中文乱码
关于Patch svn打patch的介绍:巧用svn create patch(打补丁)方案解决定制版需求 svn创建patch 1.在SVN的提交列表中,右键选择“创建补丁” 2.选择保存位置,保存 ...
- jmeter的压力测试
Apache JMeter是Apache组织开发的基于Java的压力测试工具.用于对软件做压力测试. 以下为压力测试的简单介绍 1.在测试计划下增加一个线程组 2.线程组的内容需要进行编辑,根据压力测 ...
- Makefile总述②文件命名、包含其他文件makefile、变量、重建重载、解析
Makefile的内容 在一个完整的 Makefile 中,包含了 5 个东西:显式规则.隐含规则.变量定义.指示符和注释. 显式规则:它描述了在何种情况下如何更新一个或者多个被称为目标的文件( Ma ...
- java 22 - 21 多线程之多线程的代码实现方式3
JDK5新增了一个Executors工厂类来产生线程池,有如下几个方法 A.public static ExecutorService newCachedThreadPool() B.public s ...
- hdu 4027
Can you answer these queries? Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65768/65768 K ...
- jmeter(二)录制脚本
对大多数刚开始接触性能测试的人来说,代码功力可能不是太好,我们可以通过工具,录制脚本来进行测试,以达到我们的目的 一般来讲,录制脚本有两种方法 一.利用badboy进行脚本录制 1.下载安装 badb ...
- js/jquery判断浏览器的方法小结
在网站前端开发中,浏览器兼容性是前端开发框架要解决的第一个问题,要解决兼容性问题就得首先准确判断出浏览器的类型及其版本,而判断浏览器的版本一般只能通过分析浏览器的userAgent才能知道.今天我们把 ...