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

15.3.0 案例分析

可以看看这两个学生项目的例子,推断出这些团队的血型:

STG游戏的跳票(为了完美,推迟了7天,但是7天之后也没有发布……)[leal1] [i]

英语学习软件(说了“明早发布”,但是明早一直没到)[ii]

15.3.1  反动分子阿超

在最后的稳定阶段,阿超不断地把事情推到下一个版本,二柱和果冻都不耐烦了——为什么不拼一下,把所有事情在第一版搞定?

阿超: 有两种做法——

1. 根据事情的轻重缓急,安排大部分事情在下一个版本做。正因为我们对项目、团队、商业模式有信心,才会把很多事情安排在以后的版本中。

2. 拼一下,把所有事情搞定,后果是大家都累得够呛,[leal2] 然后人也走了,没有人有兴趣做下一个版本。

二柱: 我记得当年我们公社组织修水利的时候,大家都拼了老命,有几个前辈都牺牲了,才把水库修好……难道这些不是有价值的么?

果冻: 对!我记得山坡上还用巨石刻了一些标语,有两个前辈就是牺牲在炸开巨石刻字的时候。

阿超: 是啊,现在看起来,那些刻在山上的标语是属于可“cut”的功能。至少我们可以把它推迟到下一个版本。到今天,我们大家都意识到刻巨大的“人定胜天”标语不是特别重要的“功能”,对么?这样岂不更好?当年我们的叔叔伯伯们的确没有必要“誓死完成”所有的任务。

二柱: 要在以前,你就是反动分子。

阿超: 我们写商业软件,是要赚钱养家,如果自己都做得疲惫不堪,精神不振[leal3] ,那拿钱来养啥?如果还要刻字,我建议在山坡上刻“以人为本”几个大字。

15.3.2  银弹之战

银弹:为了避免项目的成员为了一些问题争执不休,移山公司发明了银弹(Silver Bullet)这一工具。简而言之,就是每个角色的代表(Dev/Test/PM)在项目过程中可以使用有限次的“停止争论,按我说的办”的武器 – 银弹。银弹一出,大家就要听话。当然,银弹用一个少一个,下次有争论的时候,别人就更有机会使用这个手段了。

讨论 - 银弹真的有用么?

15.3.3 扁鹊三兄弟[leal4]

果冻: 我听说了萝卜和白菜的故事,其实类似的事儿古代早已有之,请看一段关于“扁鹊三兄弟”的古文:

王独不闻魏文王之问扁鹊耶?曰:‘子昆弟三人其孰最善为医?’扁鹊曰:‘长兄最善,中兄次之,扁鹊最为下。’魏文侯曰:‘可得闻邪?’扁鹊曰:‘长兄于病视神,未有形而除之,故名不出于家。中兄治病,其在毫毛,故名不出于闾。若扁鹊者,镵血脉,投毒药,副肌肤,闲而名出闻于诸侯。(《鶡冠子·卷下·世贤第十六》)[leal5]

扁鹊是这么说的:“俺大哥治病是看病人的神色,病还没有表现出来他就把病给治了,所以他的名声不出家门。俺二哥治病是在病人稍有不适的时候,就把他们搞定,所以他的名声不出巷子。而我扁鹊看病用的是疏通血脉的针、有毒副作用的汤汁、埋入肌肤之内的草药。所以我的名声反倒传遍了各个诸侯国。”

二柱: 这个跟王屋河的防洪是一个道理,上游搞得好,不发洪水没人知道,下游要决堤了,一堆人上去堵,死伤几个,就出名了。我们最善于搞末端治理。

在软件开发上,如果项目早期就发现并解决了问题,除了“家里人”,没人知道;项目中期发现问题并解决,项目的许多相关人员“公司”都知道了;项目后期出了问题,我们要加班,重写代码,hack原来的设计,开一些后门来解决问题(下一些副作用很大的猛药),总算把项目给救活了,这时候全公司的人都知道了。

阿超: 我记得小学六年级学过“曲突徙薪”的故事,也讲了类似的道理。我们往往奖励末端治理的英雄,但是最初提建议的人未必得到奖励,移山公司会不会也是这样?


[i]      http://www.cnblogs.com/buaashine/archive/2012/12/17/2821563.html#2590003

[ii]      http://www.cnblogs.com/SuperBrothers/archive/2012/12/18/2822585.html


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

时间: 2024-12-11 01:21:46

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

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

1  什么时候开始考虑用户体验? 既然用户体验和用户界面对一个项目这么重要,但是负责这类工作的设计师并不是软件工程师,设计师们什么时候加入进来为好呢? 不同的人有不同的看法. 最先:“你要从用户体验开始,然后反过来寻求技术的解决方案”.[i] 最后:代码写得差不多了,请设计师(或者美工)来美化一下,画个图标,对齐一下文字. 你认为应该如何根据项目和用户的类型来决定设计师与工程师的交互方式? 2 个人电脑界面的演变 参考下面这个网页和其他资料,练习自己使用软件的经历,讨论个人电脑界面的演变, 以及

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

15.3.1 有些成功人士或公司认为不需要独立的测试角色(Test),你怎么看? 我猜想和踢足球类似,还是那几个原因: 人太牛: 不世出的天才,例如高德纳写书时发现排版软件不好用,就自己写了一个.也没听说他为这个软件项目请了什么独立测试人员.对了,他不读Email,有秘书帮他处理这些事——这也是一种分工! 有些软件工程师是在后台钻研和开发高难度的算法,或者做某种后台的处理工作,这个工作本身的难度较高,测试主要是自己通过工具完成.如果一定要找一个测试人员,这个测试人员的水平要相当高才行,如果水平那

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

15.1  案例分析 跟书上的例子对比,觉得以下例子中团队的血型: STG游戏的跳票(为了完美,推迟了7天,但是7天之后也没有发布……:B型或者O型 英语学习软件(说了“明早发布”,但是明早一直没到):B型 15.2  银弹之战 我个人觉得“讨论”就是不想一个人独裁,通过讨论交换大家的意见,使用银弹会出现偏激的想法,可以使用投票表决的方法进行最后的决定 15.3分析一些著名的失败项目 - 例如,电脑控制的丹佛机场行李系统. 如果你们小组要给这个项目做 Postmortem,你会怎么总结呢? 了解

深入浅出Zabbix 3.0 -- 第十五章 Zabbix 协议与API

今天是六.一儿童节,祝小朋友们节日快乐!发完此文就带我家小朋友出去玩耍了. 第十五章 Zabbix 协议与API 本章将介绍和开发相关的Zabbix协议和API的内容,通过对Zabbix协议和API的深入了解,你可以利用Zabbix协议编写客户端程序并将其嵌入的产品或系统中,并将数据发送到Zabbix server,这在无法安装Zabbixagent等程序的场景(例如专用的嵌入式系统)中非常有用.你也可以利用Zabbix API开发自己的业务系统,或灵活的与现有系统整合集成. 15.1 Zabb

第十五章 文件属性类的实现

                  第十五章    文件属性类的实现        根用户的权限也不能是无限大.必须考虑到保护用户的隐私!用户的文件内容.程序代码可设置为根用户也不能观看,只能是文件拥有者可以查看.修改.但根用户可以删除一切非根用户的文件.也可以查看用户的目录.所以,i_mode字符更改如下:      BU16 i_mode; // 描述文件的访问权限:文件的读.写.执行权限  // i_mode.15-13  ftype; 文件类型: 0-符号软连接文件, // 1-硬连接文

C和指针 (pointers on C)——第十五章:输入输出函数

第十五章 输入输出函数 这一章读完的第一感觉就是"呵呵". 如果说上过C语言课,基本上scanf()/printf()算是用的比较熟练了.尤其是那些抽象的格式说明.还有scanf()为什么要加括号. 读过本书前面的内容的话,getchar(),putchar(),gets(),puts()这些应该也问题不大. 再如果的话,你学过计算机图形学,你玩过OpenGL,听说过双缓存机制,那么fflush()也肯定弄明白了. 再加上FILE的操作,输入输出定位刷新删除改名,流的概念. 这一章就会

第十五章 链表

/** 数组与链表的区别:数组易随机访问,链表易插入和删除 链表组成:储存数据元素的数据域,储存下一结点地址的指针域 链表易于插入与删除 lists 的用法????????????????????? *///建立一个图书链表 #include<iostream> #include <string> using namespace std; struct book //第一步: 用于建立节点. class 默认为私有 struct 默认为公有 //节点组成:①数据域 ②指针域(*ne

java(第十五章)

第十五章 一.字符串类String 1.String是一个类,位于java.lang包中 2.创建一个字符串对象的2种方式: String 变量名="值"; String 对象名=new String("值"); 3.字符串的常用方法 3.1 字符串长度--length() 3.2 判断值是否相等 equals() 3.3 判断字符串对象地址是否相同 == 3.4 忽略 大小写 判断 equalsIgnoreCase() 3.5 大小写转换 toLowerCase(

CSS3秘笈复习:十三章&amp;十四章&amp;十五章&amp;十六章&amp;十七章

第十三章 1.在使用浮动时,源代码的顺序非常重要.浮动元素的HTML必须处在要包围它的元素的HTML之前. 2.清楚浮动: (1).在外围div的底部添加一个清除元素:clear属性可以防止元素包围浮动元素.关键字:left.right或both. (2).浮动外围元素:让包含浮动元素的<div>也浮动.选择这种方法一定要在浮动容器后面的任何元素中添加一个clear属性,确保浮动元素落到容器的下方. (3).利用overflow : hidden.另一种常见的方法是在外围的样式中添加以下属性: