软件工程案例教程(第2版)
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

案例一 火星业务支撑系统项目开发

1 需求的萌芽

培训战场硝烟弥漫。

火星培训公司总经理火总正在思虑着如何在激烈的竞争中立足并脱颖而出。

他抓起电话,让文员通知召开全公司大会……

会上讨论气氛非常热烈,除了火总,所有人似乎都抓住这个难得的机会,为最近自己的业绩下滑铺陈理由。

市场部M经理:竞争对手很好很强大,他们总是先我们一步把我们盯着的潜在学员弄走了……

客服部C经理:我们很努力地关怀学员,但是学员仍然有很多抱怨,甚至还说被咱们给“忽悠”了……

市场部李经理:我们虽然有很多优秀学员,就业情况很好,可是我们却难以找到他们之前的培训记录,甚至找不到他们目前的联系电话。要是能够找到这些人进行回访,并让他们回来给学弟学妹们现身说法,相信会促进我们的招生工作。

……

一时间众说纷纭,火总看看手表,认为必须讨论出一个针对性的对策才是,于是挥挥手,“那大家看看是否有什么好主意?”

“我了解到水星公司有一套软件能够支撑培训业务的全部流程!”市场部的小王似乎有备而来,僵坐2小时说的第一句话。

“嗯……”

“有道理……”

“对,我们也应搞一个!”

……

一时间大家似乎全被点燃激情,看到了一扭颓势的希望。

火总沉思不语,良久,终于喃喃说道:“是有道理,让我再考虑考虑……散会吧!”

2 调研、立项

火总回到办公室,他刚才没有当场决策的原因是,会上的信息不够,开发这种软件需要多少钱?搞这个系统真的有用吗?

然而,他毕竟见多识广,知道目前信息化建设是大势所趋,决定深入了解一下。

火总想到了提出这个想法的小王,对了,让他详细陈述一下!于是就拿起电话……

两分钟后,小王在火总宽大的办公桌对面正襟危坐。

“小王啊,我对你刚才提到的那个建议很有兴趣,能否仔细谈一下想法?”

“好的。”小王终于逮到在老板面前表现的机会,自然不会放过。

“首先,水星公司是目前我们公司的首要竞争对手,他们有IT软件支撑,我想我们也应该有吧?”火总若有所思地点了下头。

“其次,上这个系统之前,水星公司跟我们一样,各个部门之前的沟通都是通过纸质文件,效率低,浪费大;上了这个系统后,他们基本实现了无纸化运作,一年光打印纸就节省了好多钱!”“嗯,这个好!”一听到能省钱,火总来劲了,身子往前探了探。

“再者,上了IT系统,所有的数据在各个部门共享,大家都可以使用,并且数据可以保留很久。他们通过系统对学员从招收到从业后的回访,实现了学员成长的全程关怀,客户满意度一下高了很多。现在,他们招收学员越来越容易!”“对对对,我们也想这么搞!”火总显然被打动了!

“……”小王继续说了不少好处。

“那到底要花多少钱?”火总终于把自己最关心的问题说了出来。

“哦,听说水星公司第一年用了大约50万元,包括软硬件!”

“50万元?! ……”火总的眼睛瞪得老大,这可是他公司一年的营业额啊!

“听说他们只用了两年就把投资额全部回收,现在的业务量比上系统前提高了3倍!”“嗯……”火总再次陷入沉思……

两分钟后,火总打破沉寂:“小王啊,我认为这个建议真的很好,我决定了:要做!如果让你来负责这个项目,你看有问题吗?”

“谢谢火总信任!”王GG高兴得差点从凳子上蹦起来。

“我们给这个项目定个名字吧。”小王提议。

“嗯,就叫‘火星业务支撑系统’吧,英文名:HSS! ”火总擅长包装,这点小事难不倒他。

“但我希望今年投资能够控制在20万元,看有没有把握?”

“呃……我争取吧!”王GG似乎没把握,但还是应承下来了。

3 招标、甄选供应商

小王第一次接手老板直接委派的任务,踌躇满志!

他做的第一件事是找到他的好友——马甲。马甲就职当地一家小软件公司——土星公司,有了两年多的开发经验,一直希望自己能够有朝一日当上项目经理。这回好友找上门,他一口答应——其实他还有一个“阴谋”,就是到时争取由自己公司承接该项目,然后自己来当项目经理!

马甲开始当起了小王的“狗头军师”了……

马甲建议小王:首先要收集使用部门的需求……

小王就开始在各个部门跑动起来,最后他整理到各个部门的大概需求如下:

市场部:学员招募管理、营销人员考核和管理。

客服部:学员信息管理、学员满意度管理。

课程部:课程体系管理、学员考勤管理、学员学习效果评价。

财务部:学员培训费管理、内部员工绩效考核。

……

此间,马甲不时跟小王灌输:现在软件流行三层架构,一般使用J2EE、SSH工具……小王坚信马甲推荐的肯定是他所擅长的技术。

一周过去……

马甲看着小王提供的需求清单,皱着眉头:“这个估计要花挺多钱……包含软硬件20万元?有点悬!”

其实,小王原本打算如果马甲公司能够20万元之内拿下的话,他就建议老板直接委托给马甲公司,毕竟马甲是自己好朋友嘛。但现在看来不行了。

听到汇报,火总反应很直接指示:那就招标!不信20万元拿不下来!

这大大出乎马甲的意料之外,他起先认为十拿九稳,打算拿下项目后回去找自己老板邀功请赏的。现在小王的老板说要招标,这可就……

马甲赶紧回公司跟老板(土总)一五一十地汇报了情况。没想到土总并不责怪马甲,反而安慰他:“这个事情干得不错!我决定让你负责这个投标项目!

马甲受宠若惊,他知道若这个投标拿下了,按公司惯例,自己肯定就是项目经理了!

小王这边正在按火总指示准备招标材料。结果上网一查,吃了一惊,招标流程还蛮复杂,要准备《投标须知》、《技术规范书》、《商务规范书》……一大堆文件。

他下载了几个范本,在简单修改后就打算直接用了,但《技术规范书》看来还得请马甲帮忙了。

马甲很乐意,因为他的老板土总告诉他:能够参与制定规范,我们中标的概率就大多了!并且准许他用上班时间去协助小王。

很快,小王的招标材料准备好了,他再次听了马甲的建议,把《项目招标书》发给了马甲推荐的几家软件公司。

招标结果很快出来了,马甲的公司技术分得分最高,商务分中等,最终以最高得分胜出——中标了!该项目19.6万元,要求6个月上线。

火星公司和马甲公司的商务合同签订另有一番折腾,此处按下不表。自然地,马甲得偿所愿,成了这个项目的乙方项目经理,而小王则继续他的甲方项目经理的角色。

4 项目需求调研

其实在合同签订之前,马甲就开工了。

他温习了大学的《软件工程》,认真回忆了自己参与的几个项目的过程,感觉相当有信心。

首先,他开始进行需求调研和分析。

逐个部门,跟未来的系统用户沟通,然后就开始整理《需求说明书》。

一切顺利,一周以后,他的《需求说明书》出炉,提交给小王。小王看了以后相当满意,但是他还是谨慎地发给了相关部门负责人,并要求反馈。

除了提出几个错别字外,使用部门没有反馈其他意见。马甲心里不太踏实,请小王领着一起拜访了各个部门的主要使用人,得到了大致类似的回复:“应该差不多吧,能想到的差不多都写了……”

5 设计

该开始设计了!马甲感觉一切都很顺利,他祭出J2EE大旗,心里暗暗欣喜:我用的架构是如此先进,到时要让所有人大吃一惊!

现在感觉大学学的课程总算派上用场了!

软件工程、流程分析、E-R图、UML……能想到的都得用上!

……

鏖战1周后,马甲同志单枪匹马写出了《XX项目概要设计说明书》,40多页!哇塞,太帅了!马甲自己看着都不禁洋洋自得!

6 代码实现

土总给马甲配了3个开发人员,除了小龚有1年Java项目开发经验外,另外两人属于新手。

但马甲没有办法,虽然他希望开发人员都是熟练工,但老板告诉他,前期几个熟练的开发人员跳槽了,现在公司人员比较紧缺,为了这个项目他还特地紧急招聘了两位,都放到他的项目组里了——马甲理应感激,不是吗?

马甲开始按模块分配任务。

马甲自己负责学员信息管理模块、学员招募管理模块。

小龚负责学员满意度管理模块,财务管理模块。

其他两人分别领了各自的模块去开发。

……

马甲要求开发小组的所有人都需要对自己负责的模块从UI、代码、到数据库表设计,从头到尾,全部搞定!

“我们计划用4个月完成开发,然后大家开始集成测试!现在开工!”马甲一声令下,项目组开工了。

7 代码实现阶段某些特写

第一周,大家都感觉不错,信心很足,进度也很顺利。虽然除了马甲和小龚,其他两位新手技能上还不熟练,但他们都能加班加点,查资料解决问题,似乎也都能按时搞定当日任务。

第二周,马甲突然发现自己原来的设计有些地方似乎不妥当,但是他觉得改设计文档很麻烦,于是没有去修改。

小龚这两周多次和马甲沟通《设计说明书》的问题,小龚觉得有些地方表达不清楚,有些地方设计不合理。但马甲忙于完成自己的模块,并未完全放在心上。此外他也觉得自己的设计能力应该比小龚强,接受小龚的意见有点没面子。

而两位新手呢,则先是频繁地问马甲关于设计的事,起先马甲会耐心解释,但很快由于自己开发计划老被打断开始烦躁,两位新手渐渐地也不问了。

渐渐地,大家似乎都遗忘了那份漂亮的《设计说明书》。

第一个月快过去了,马甲问大家:进展如何?答案是。一切顺利!

第二个月,第三个月,仍是一切正常!

计划的代码集成时间到了,马甲没有忘记,但是这两天只睡5个小时,自己负责的两个模块总算交工了!

真累啊!

8 代码集成

“大家都把自己完成的那部分发给我,由我来集成!”

于是大家都把各自的代码拷贝给了马甲。

“这个目录怎么这样命名?”

“你的代码都没有注释?”

……

马甲一边“集成”代码目录,一边抱怨着。

“咦,怎么编译不通过?这么多编译错误!”马甲惊叫一声,大家都围了过来。

“不可能啊,在我电脑上跑得好好的!”小龚一脸难以置信。

“哦,我忘了跟您说了,昨晚我改了一个地方,还没有编译测试,不好意思啊!”其中一位新手看着其中的一个编译错误,赶紧认错,一脸不好意思。

“……”

马甲那天的午饭只吃了几口,第一因为他心情太差实在没有胃口,第二是他急着回到电脑前面排错。

集成期间,马甲有理由沮丧,因为他被几件事情折磨得快疯掉了:

目录覆盖后,旧代码无法找回;

公用的模块存在冲突;

集成后存在同一业务数据放在不同名字的基本表中;

……

事情很糟,他们花了1周,包括两天周末,每天都是凌晨才歇工,总算让系统“集成”了起来,编译通过,流程勉强走通。

9 测试

终于可以测试了!马甲长舒一口气。

他知道,测试很重要,但如何测试呢?

仍旧,他给团队每个成员划分了模块,让大家分头测试。当然,自己负责的模块是不能由自己来测试的。

测试出来的问题要第一时间通知代码作者。

大家开始行动了……

还是测出了不少问题,新手的问题相对多一些,比如输入合法化验证、边界检查等。

每次被他人找到一个错误都是不幸的,因为意味着当天得加班修复。

这段时间,马甲受困于几个问题:

为什么修复了一个BUG,却会新增更多的BUG?

为什么总会出现“这个问题前两天我改了呀,怎么又出现了?”

除了单步跟踪这个方法外,就没有其他办法可以定位问题了吗?

10 用户测试

终于要见公婆了,即使是丑媳妇。因为马甲看着这个“产品”突然觉得如此陌生,跟当初自己的设计想法简直是天壤之别。

马甲带着忐忑不安的心情上路了。

又是一天的辛苦,总算是给用户部署起来了一个用户测试环境。

为此,小王专门给各个部门发了通知,希望他们抓紧时间测试。

“不对啊,怎么跟我当初提的要求不一样啊?! ”

“这个数据输入后,怎么没地方找了呀?”

“下一个流程是什么?”

试用的第一天是如此的混乱,以至于马甲有种被五马分尸的感觉。

问题比预想的多得多,马甲抓着头发,恨不得让自己往墙壁上撞,让自己大脑“死机”片刻。

11 需求变更和蔓延

马甲再次遇到让自己措手不及的事情:用户提出了更高的要求!

情况大概是这么几种。

用户尝试着使用系统,他们抱怨这跟他们原来的构思不一样;用户认为这是马甲当初没有正确理解自己的需求,而马甲认为《需求说明书》已跟用户确认,用户给了肯定答复后自己才去实施的,因此应该算变更。

用户在使用这个“可运行”的系统时突然发现“灵感迸发”,许多“改良”思路喷涌出来,职位越高,表现越明显。

其中火总提的“新需求”最多,马甲尝试着提醒火总“这是新增需求,不在合同规定范围内……”,火总一脸不悦,“我没有见到系统,当然不知道要什么东西,要怎么做啊,这怎么能算新增需求?再说,合同中不是有提到要提供‘分析报表’吗?”。看到情形不对,小王用眼神暗示马甲,意思是:火总提的就做吧,别计较了,开发款还指望火总及时支付啊……

可怜的马甲敢怒不敢言,悻悻回家,加班做吧,不然还能怎样?

12 后记

第一次用户测试后,进行了大量返工。

马甲的团队中的小龚离职。

第二次用户测试的时候已经延期6个月了。

后来,马甲建立了团队开发环境,引入配置管理工具,还调整了团队开发方式,两个新手也逐渐熟练起来……

马甲像悲壮的斯巴达勇士一样坚持着,起早贪黑,废寝忘食,他已经不在乎老板给不给他发奖金了,他现在只想尽快搞定这个该死的项目,仅仅为了荣誉!

又过了6个月,火星公司终于同意上线使用……

3个月后,系统检验开始运行。此时的马甲已经掉膘30斤了,女友也离他而去……

又过了一年,这个系统变得很慢。小王打电话给马甲,才知道马甲早已跳槽,而其原公司也已经放弃软件开发业务(这个项目的尾款火星公司没有支付),无法给他们提供维护支撑。

经过多日讨论,火总下决心“升级”该系统,另找供应商重新开发——这次,他预算总额为50万元……