谁动了项目的质量

  又一个项目结束了,终于闲出空来写些东西.有了以前的经验教训,这次在做项目的时候,我对时间的控制很关注,最后也基本上达到了计划的要求. 但最终交付产品的质量却让我不太满意:客户在做接受测试的时候发现了很多的问题,而且在我们进行修改的同时,又有BUG源源不断的报过来.甚至把更新的版本发给客户以后,还会发现不少问题.给客户留下了很不professional的印象.为什么问题总是要到项目快结束的时候才会出现呢?软件的质量为何不好?究竟是谁动了项目的质量?

  大家知道,项目的时间、成本及质量的三大要素是缺一不可.这三方面的符合程度直接决定了项目的成败与否.但事实上,想达到一个完美的等边三角形几乎是不可能完成的任务.这次的项目就让质量这个角短了很多,质量的问题暴露地很明显.所以,接下来,我就从项目的流程角度出发,一步步地分析到底是哪里出了质量问题.

 1.分析阶段

  项目的开始阶段,也是质量控制的开始.在这个阶段中,主要的工作是从客户方获得足够多的项目需求,并准确地记录在案,而且要使得项目组的成员对于需求足够得了解.先说说这个项目的基本情况:一个信息管理系统,而且是在原来的版本上进行的功能增加.项目组的成员,除了我以前参加了前一个版本的开发,其它的人员都不了解这个项目.就是这样的一个项目,在开始阶段,我先是安排了组员对以前版本的需求文档进行了阅读,并安装使用了软件.随后对新的需求进行了研究,分析了它们对于原有系统的影响.由于是在旧有系统的文档进行增加,所以加入的新内容并不是很多,需求文档很快就完成了.所谓的分析阶段的里程碑也就结束了.

  在需求阶段"顺利"结束的同时,问题也随之留下来,并对后面的阶段起到了"乘数效应"――影响变得越来越大:

   A.        对旧系统的理解不足

  由于开发人员没有参与过上一个版本的开发工作,他们对于旧系统并不了解.虽然在阅读了以前的需求文档以及使用了软件之后,大概对系统的功能有了一个初步的认识.但是对于系统中出现的各种逻辑关系并没有深入了解下去.作为项目经理,在这项工作中,失误之处在于任务的结果(即输出)没有事先定义清楚,从而也就导致无法确认目标是否已经达到,再加上需求文档描述的也不是十分清晰.最后,只是在开发人员觉得已经理解该系统的基本上,进行了下一步的工作.没有进行进一步的确认工作,不知道组员进行旧系统已经了解到了什么样的程度.这个问题的结果,就是直接导致了后期的开发过程中,由于对于原先系统的逻辑关系不是很清楚.对于旧代码理解和新代码编写进行地不是很顺利.

   B.       对新需求的分析不够

  这还是个老问题,但又不是一个问题.说它是个老问题,因为分析需求要求考虑细致全面,并且能引导客户,启发客户提供更有价值的信息.事实上,需求分析我们做的算是很尽力了,同时客户把需求一条条的列出来给我们,相对来说需求已经很清楚了.我们在接到这些需求后,不仅研究了新功能,还把他们对于旧系统的影响都做了分析.但还是有些问题没有能在需求文档中反映出来,后面的影响也是可想而知的了.我以前的文章中才曾提到过相关的问题,在这里就不再重复了.不过,从另一个角度来看,它又不是一个问题.为什么这么说呢,因为需求实在不是能够在分析阶段就能完全理解透彻的,甚至有的需求客户也模模糊糊,直到交付以后才提出了改动的要求.软件开发经过这么多年的发展,大家已经认识到了一点:需求是变化的.要达到能够拥抱变化的要求,我们要对开发方法进行改进,相关的问题我在后面也会提到.

  需求分析阶段出现的问题,解决的可操作性不是很大,更多的是从思想或经验上解决,而后面几个阶段出现的问题都相对具体一些.

 2.设计阶段

  设计阶段的问题相对比较明显――结构设计不合理,或者说还不够.一个传统的C/S结构的系统,基本结构我们采用了经典的三层模型来划分系统.由于是在旧有系统上的改进,我们在尽量不改变原有系统的基础上添加新的功能.

  主要的问题可能就是体现在没有对旧系统进行改进.旧系统本身有一些复杂的功能,逻辑关系也比较复杂,耦合度非常高.所以,在新需求来临的时候,我们的第一反应就是尽量不去动原来的设计与代码,保证原有系统功能不会发生变化.这一点就暴露出了我们没有去拥抱变化的决心与胆量.虽然旧系统很复杂,但是我们不能去故意回避它.对于旧系统中设计的不合理的地方,应该主动大胆的去进行重构.其实重构的作用就是对不合理结构的进行改进,设计模式更是在设计结构的变化改进中才能体现它的价值.而这些东西,在我们的项目中都没有应用.这可能跟我们的保守心理有关:只要不出问题,我们就不去动它,哪怕结构是多么的错综复杂.这种消极的观念在当今的充满变化的世界中是不太有前途的.项目经理要有足够的决心去做,同时,也不要担心去变化.当然,可能有人会说,时间紧怎么办,其实这种付出对于项目的整体是只有好处没有坏处的,因为结构合理会让开发人员会更少的时间去理解代码,减少代码开发的复杂度,提高代码编写的质量.唯一需要考虑的就是如果改动的话,如何来保证这种变化对原有系统的功能不产生影响.这就需要有更多的测试,最好是单元测试来保证,这就是下面会谈到的问题.

 3.编码阶段

  编码主要还是受了设计的限制,我们的主要工作就只是在原有的结构上添加一些类与方法,以及对原有的代码进行修改.前面也提到了,我们采用了比较保守的作法,没有对代码进行重构,放任这种高耦合的代码存在,导致我们在编码过程中花费了不少精力和时间去理解它们,并在其中加上一两条更加加深耦合度的代码.其实到了编码阶段,很多问题都纠缠到了一起,已经分不清因果了.比较说单元测试,首先我需要承认的一点就是没有足够的决心去做充分的单元测试,思想上也没有做好充分的准备.除去主观的因素之外,还有一点就是设计的结构不合理,很多的逻辑被处理在表示层中,数据处理则被加到了逻辑层中.没有划分出更多的接口供单元测试来验证.但反过来说,没有单元测试用例的支持,也降低了我们想要进行重构的决心.除了上述的问题之外,还有一些细节的地方,如硬编码,命名规则等都在一定程度上对代码的质量产生了影响.

  改进的办法,一是从主观上接受变化的现实,主动的对代码进行改动.单元测试一定要进行,最好结合统计覆盖率的工具一并进行,这样对于每个接口,都保证有充分多的测试用例来跑完尽可能多的路径.在项目的质量管理上面,要求还需要更加严格一些,一定要按照规范来进行编码.

 4.测试阶段

  代码完成之后,测试的工作也随之展开.但是由于成本的原因,我们并没有再加入专业的测试人员来进行,而只是用开发人员自己来进行系统测试,让开发人员互相测试别人实现的功能.由于开发人员与测试人员所需的专注点不同,造成了开发人员很多问题在测试中没有被发现,缺乏测试的经验.从另一个方面说,是开发人员不能够及时的转换自己的角色,而是还把自己定位在开发人员上面,更加关注的问题出在什么地方并立刻去解决它,而不是设法去发现隐藏的BUG.当然,还有一些细节的地方,比如说测试都应该是开发人员发布一个安装包,然后单独进行测试,但有的时候为了图省事,有的功能在调试状态下发现通过了,在安装包中就没有再验证,有时也会出现意想不到的情况发生.

   大家可以看到,软件的质量可能就是被这一步步的失误,错误,粗心等等影响了.这些问题都是在项目管理中暴露出来的,可以说是由于项目经理对于质量的要求还不高,有的时候为了片面追求成本与时间而忽视了质量,从而造成了质量的下降.算是个总结和教训吧.也希望大家能够说出你的想法与意见,多多交流,共同进步.

posted on 2006-12-11 10:39 布鲁斯南 阅读(8679) 评论(25) 编辑 收藏

评论

#1楼  回复 引用   

写得不错,有时候觉得要真正平衡时间成本和质量,很难!!!
2006-12-11 11:42 | oldmoon[未注册用户]

#2楼  回复 引用 查看   

国内的项目,特别是中小项目,成本决定一切。
2006-12-11 13:05 | Zhongkeruanjian      

#3楼  回复 引用 查看   

文中的问题都是老生常谈了,需求不确定,分析不彻底,架构不合理,测试太马虎。。。

有的时候想一下,为什么我们总是一而再,再而三的犯同样的错误呢?
我觉得根本的问题就是我们的软件工程思想还不清晰,或者说还没有一个系统连贯的软件工程思想。软件工程思想是贯穿开发过程始终的,而不仅仅是追着开发者定时写出代码就可以了。
2006-12-11 14:19 | 追求卓越      

#4楼  回复 引用 查看   

便宜,优良,快速只能三选其二,恐怕只有非常默契,个人能力和团队综合能力都非常强的组织才能兼顾三者。具备这样团队的公司又有多少呢?
项目经理的作用非常重要,但是一个优良的团队更加重要。新人需要培养,要让他们主动去思考项目的方方面面。不过知易行难啊。
2006-12-11 14:49 | Robert Lee      

#5楼  回复 引用   

只是提出了问题,但是没有说怎么解决,而且这些问题是人人都知道的...
2006-12-11 15:41 | kklc[未注册用户]

#6楼  回复 引用 查看   

正在开发一套《软件产品服务协同工作平台》,用于根据CMMI标准跟踪软件产品开发过程及售后服务数据统计,作为项目质量的有力辅助工具,并打算开源出来... 估计整个过程还需要半年左右
2006-12-11 15:52 | 发仔      

#7楼  回复 引用 查看   

The three key core factors of the project is time, cost and scope, not time, cost and quality.
2006-12-11 16:47 | Samuel@Singapore      

#8楼  回复 引用   

写的很详细,支持一下!
2006-12-11 16:55 | dell[未注册用户]

#9楼  回复 引用   

Kent Beck认为项目有四要素,即时间,成本,范围和质量
而且这四个要素中只有三个可控,另一个不可控,要控制不可控的要素只能通过调整其他三个要素来实现

我觉得楼主这个项目比较特殊,是一个替换旧系统的项目,而且估计客户给的时间,资金比较紧

这种项目必须对旧系统有足够的了解,但你们项目组只对旧系统的一头一尾做了了解,头就是需求文档,尾就是已经编译好的程序,而中间的设计和代码都没有充分研究,这样其实项目组对整个旧系统只是了解了不到一半,这样很难把新需求加入到这个系统。
所以应该一开始就对旧系统作一次详细的分析,得到需求模型,系统框架,设计模型,以及一些编码的约定,为下一步改进做好充分准备,而这个需要时间和成本的

2006-12-11 21:05 | spgoal[匿名]

#10楼  回复 引用   

我提个方案,不过是否能成功我也说不准

如果时间紧,资金少,当然要速战速决,但质量是不能马虎的,楼主的考虑也是符合实际情况的,就是在原有系统基础上改进,添加新的功能,那么怎么保证质量?有一个方法就是分析旧系统,把每个功能点写成单元测试用例,即深入到代码层,为一些关键函数,类写测试用例,写测试用例代码过程其实就是了解旧系统代码的过程,而对测试用例进行分类后系统的框架也基本出来,然后在原有代码加类加功能,每添加一个功能就对应写一个单元测试用例,用测试用例来保证质量。
其实集成测试可以交给某些熟悉业务的客户来做,这样能发现很多问题
2006-12-11 21:14 | spgoal[匿名]

#11楼  回复 引用 查看   

就PMP来说,项目的三要素是:时间,成本,范围,形成一个取舍三角形,改变任何一个边都会影响其它两个边。所以现实中,如何平衡三个边就要取决于你的现实环境和经验了。
2006-12-11 23:14 | 纶巾客      

#12楼  回复 引用   

项目开始时总是急于求成,项目做完后总会发现缺陷。
2006-12-12 00:30 | jolidge[未注册用户]

#13楼[楼主]  回复 引用 查看   

TO: spgoal
谢谢你的建议,我当然也是希望开始的时候,大家都能深入研究到代码层,搞懂每个函数的意义,但是一个是时间上不会允许,而且系统的耦合性太强,单元测试的测试用例写起来实在是费事.事实上,我们开始也是写了一些测试用例的,目的是要保证旧系统的报表导出功能在添加了新功能之后不会出什么问题,但是在新的功能加上之后,那些单元测试只有一小部分可以通过了,因为数据库里也进行了一些改动.

TO:Samuel@Singapore
感谢一直的关注.关于这个三角的问题,我也是找了一些资料,各种说法也都存在.应该说是从不同的角度也看待项目的管理吧.PMP可能考虑的更多的是收敛需求的定义域,检验是否准确把握住了客户的需求.我之所以用了质量,因为它毕竟是我们项目检验的一个考核点,当然,也是为了贴切文章的主题:)
2006-12-12 09:32 | 布鲁斯南      

#14楼  回复 引用 查看   

如果时间不允许,其实不需要到代码层,但至少要得到一个比较细的架构模型,而且你说旧系统耦合度太高,所以新系统在设计上不能单纯的在原有系统上加功能,而是应该要重新封装旧系统的功能,融入到新系统的架构;通过对旧系统的架构的分解,把一些功能重新加入到新系统架构里,也许这样会省时一些,而且对旧系统改动没那么大,毕竟去改以前的东西还要先看懂才能改,还不如自己新写一个

归根到底,我觉得这个项目本身就是先天不足,旧系统既然有那么多弊病,在当初立项的时候就应该考虑到这个风险,然后开发阶段给的时间和资金不足,这又失去了一个后天补拙的大好机会。
2006-12-12 11:38 | spgoal      

#15楼  回复 引用 查看   

pmp说的三要素只是从管理的角度来看项目的实施过程,而质量管理在他九大领域的其中一个,但其实他里面描述的也只是如何管理质量,而怎么和开发具体结合没有太详细的说明

而整个项目的实施不单要从管理角度去做,而且还要从开发过程的角度去看,质量是检验一个项目或一个产品最终能否得到用户认可的一个关键指标,而如何控制质量,还需要一些具体开发技术手段来实现

要做到“多快好省”是不可能,“多”代表大范围,“快”代表短时间,“好”代表质量好,“省”代表成本少,做IT项目基本是不可能达到这个目标的,极限编程也提及到,范围,时间,成本,质量四者最多只能控制三个,另一个是根据这三个的变化而变化的,我觉得这个描述比较贴切些,按照这个说法,好质量的保证就是有合适的项目范围、比较宽裕的时间和雄厚的项目资金,但在现实项目中基本上是不可能实现的,我看只有在科研项目才能做到这个。而一般来说,做项目都是时间紧,启动资金又少,那么首先要在范围上下功夫,尽量缩小范围,起码在一开始要抓住主要矛盾,并实现之,给客户一个直观的概念以及增加他们对项目的信心,然后再逐步扩展,这其实也就是敏捷开发方法(包括极限编程)所说的“尽快交付可工作的软件”的用意。

好的技术方法和工具能帮我们什么,其实就是减少人力成本,提高效率,这样最终也是为了保证质量嘛
2006-12-12 12:04 | spgoal      

#16楼  回复 引用   

好好好好好好好好好好好好
我支持,因为和我们现在的情况
一模一样,我们的状况还在恶化
QQ276399175
2006-12-13 10:05 | EWAWA[未注册用户]

#17楼[楼主]  回复 引用 查看   

PMP谈的项目管理是一个笼统的概念,并不是针对软件项目开发的.软件项目开发有它的特殊性,所以PMP只是在大的框架上面给管理提供一定的支持.

技术工具的使用是可以增进开发,提高效率,但也要考虑到新技术,新工具的学习使用成本.

呵呵,总得来说,还是要看胆子大不大了.这年头,撑死胆大的,饿死胆小的啊.
2006-12-13 15:00 | 布鲁斯南      

#18楼  回复 引用   

关于拥抱需求的变化说下个人的看法,推荐套用xp的理论,缩小开发周期,密切与客户沟通。如何才能缩短开发周期呢,个人的看法是没有必要在详细分析了每个需求后再进入设计、编码,而是通过和客户协商筛选出重要的用例进行具体实现,然后和客户就成品交换意见,毕竟大家坐一起谈些子虚乌有的事情是不会有什么具体的结果的。至于这个开发周期的具体实践,我认为在2-3周最好,最长不能超过一个月,在一个开发周期内,完成用例的分析、实现与测试,这样的话我们能及时得到反馈,用户也能看到成果,大家都满意,不是吗?

ps:澄清一下,2-3周的时间内,我们要有自知之明,如果非要挑选10个以上的用例来做的话,那失败的可能性会达到90%。

另外,说到成本方面,项目人员参与的时间是一个关键。比如说一个项目需要10个人,其中包括了需求分析、设计编码、测试验收等人员,大多数公司喜欢一下就给pm这么多人,可是前期没这么多任务要做,这只是项目阶段中的一个小缩影,其他阶段也一样。结果就是人不能尽其责,物不能尽其用,给老板的印象还不好:这么多人还干不好事情!所以,作为pm或者team lead,要善于分配人力,到啥阶段要啥人,否则还要为闲人分心,太累了。

#19楼  回复 引用 查看   

"我们没有去拥抱变化的决心与胆量.虽然旧系统很复杂,但是我们不能去故意回避它"
是的,我们的承认,很多开发人员在系统维护时出于懒惰而不拿最适合的方案去修改,致使系统维护的复杂度就象滚雪球。做为项目经理你应该负起责任,要能拿出的最优方案去维护、去实现项目需求。但这要结合实际情况分析系统资本后,才能拿出所谓的"最优方案"。这些不是通过说说就能办到的,必须得有丰富的实战经验。
2006-12-27 14:46 | ※ABeen※      

#20楼  回复 引用 查看   

"我们没有去拥抱变化的决心与胆量.虽然旧系统很复杂,但是我们不能去故意回避它"
是的,我们的承认,很多开发人员在系统维护时出于懒惰而不拿最适合的方案去修改,致使系统维护的复杂度就象滚雪球。做为项目经理你应该负起责任,要能拿出的最优方案去维护、去实现项目需求。但这要结合实际情况分析系统资本后,才能拿出所谓的"最优方案"。这些不是通过说说就能办到的,必须得有丰富的实战经验。
2006-12-27 14:47 | ※ABeen※      

#21楼  回复 引用   

文章写得很具体了

我觉得,测试人员如果自己做的话,除非是很有经验的编码人员并且在
熟悉业务的情况下。可以

还有开发的时间的安排实在是一个大问题。
我以前参与的一个项目,用于前期准备的时间太长了
而编码的时间大大的压缩,结果可想而知。


#22楼[楼主]  回复 引用 查看   

@lostgil[匿名]
前期的准备时间太长,应该会有更加详细的设计结果出来.
2007-01-11 11:48 | 布鲁斯南      

#23楼  回复 引用 查看   

一个好的设计才是最重要的,既然原来的设计就不合理,那么就不要希望能够通过候补的方法在原来的系统上增加功能单元以满足用户需求,这样只会增加更多的耦合性,更加复杂的代码逻辑并导致后继的开发中更加难以应用新的变化。

完美是不存在的,选择必有代价,多快好省其实更多的还是决择
2008-01-08 15:57 | 李现民      

#24楼  回复 引用   

ok
2008-03-11 12:06 | llw[未注册用户]

#25楼  回复 引用   

太好了
2008-11-15 18:25 | 祝传顺[未注册用户]

导航

<2006年12月>
262728293012
3456789
10111213141516
17181920212223
24252627282930
31123456

公告

本博客所有文章版权归本人所有,不得转为商业用途. 如需转载,请注明来源. 作者保留所有权利.
致力于企业的信息化建设,办公自动化及数据仓库,商业智能,数据库以及各式报表开发.有意者请给我留言.
昵称:布鲁斯南
园龄:6年
粉丝:3
关注:0

搜索

 
 

常用链接

最新随笔

我的标签

随笔分类(8)

随笔档案(9)

相册

积分与排名

  • 积分 - 39553
  • 排名 - 2714

最新评论

阅读排行榜

评论排行榜

推荐排行榜

本博客所有文章版权归本人所有,不得转为商业用途. 如需转载,请注明来源. 作者保留所有权利.

Google PR? - Post your Page Rank with MyGooglePageRank.com