2004年2月3日星期二

软件过程改进纪实—从CVS到UnitTest再到Bugzilla


--------------------------------------------------------------------------------

51CMM.COM原创 作者:徐荣胜 [2003/04/17]
读 者不要误会,本文标题“从CVS到UnitTest再到Bugzilla”,并非指软件工具的使用从CVS转变到UnitTest再转变到 Bugzilla的过程,而是讲述我在开发管理中迭加使用这三个工具的过程。看了我在实际开发管理中的经历,希望能对您的开发过程改进有点帮助。
早 在几年前,我的团队为了提高开发效率、加强组员之间的协调,几个联系比较紧密的开发组开始试用CVS版本控制系统。因其操作方便,又能起到代码备份的功 能,试用的开发组偿到了甜头之后,马上推广到整个团队。在团队推广应用初期,CVS对项目的进度起到了很好的推动作用,充分体现了CVS的优越性,主要集 中在以下几点:
1.用CVS集中管理代码,高效地实现了代码共享,组员可以直接从CVS服务器上下载通用的函数、组件,免于通过网络拷贝。
2.有了CVS智能的版本比较功能,组员可以随时更新共享资源,便于共享资源的同步。
3.项目经理通过查看CVS的版本目录树,可以随时全面的掌握项目进展状况,同时也作为对开发人员的考核依据。
可惜好景不长,在系统测试以及前期试运行中,渐渐地暴露出了诸多问题,软件稳定性大打折扣,Bug不断出现。通过几个不算很成功的项目之后,只能痛定思痛,好好解剖了。我让开发人员好好反省反省,认真回顾开发过程。
经 过几天的回顾,得出的结论令我大吃一惊,由于开发人员感受到了CVS强大的版本控制功能之后,都习惯于写完代码马上往CVS服务器上传,而提交之前一般都 只经过简单测试,更有之根本算不上测试。提交了代码,别人当然要用了,而问题也随之出现了,看到别人已经在用自己的代码了,况且也没说代码中有什么错误 (其实只是暂时没出现),就自然而然的认为所写的代码都正确了,还大为庆幸,更不会再回头去好好测试了。
经过了这一深刻教训之后,我想有 必要好好的规范单元测试制度了,于是引入了UnitTest Framework,规定严格设计测试用例,未经UnitTest测试通过的代码不许提交到 CVS。刚开始,大伙还不大愿意接受,认为加UnitTest还不如多检查一遍代码。但随着增加测试代码熟练程度的提高,慢慢感受到了UnitTest的 妙处,毕竟UnitTest不会陷入个人思维的死胡同,逐渐的有接受而转变为非UnitTest不可。印证了台湾一位测试专家的一段话,“先写测试代码后 写实际代码”。
用了UnitTest后,大大的减少了集成测试中所出现的问题,系统的稳定性也大大的提高。但当时还有一个头痛的问题一直困扰着我,影响着项目进度,开发过程中的重复错误经常出现,同一个人先后有犯同样的错误,两个人之间先后也有犯同种错误或类似的错误。
一 个偶然的机会,为解决Apache Tomcat的国际化问题,在Apache网站上找相关资料时,无意间发现Apache组织的错误列表管理的很好,再 仔细注意其页脚注释,发现Apache所使用的管理工具并非是其自己的,而是Mozilla组织所提供的一个免费工具,名为Bugzilla。顺着链接, 马上下了当时的最新版安装上。
准备好了利器之后,留下的工作就是好好的使用它了。通过对Bugzliia小作研究之后,觉得 Bugzilla这一交流工具涉及到多方人员,从项目跟踪人员、软件开发人员到开发组负责人,甚至到项目经理都或多或少的存在着联系纽带。征得项目管委会 的认可后,召集部分相关人员代表共同讨论Bugzilla的跟踪流程以及相关业务规范,最终以《项目实施跟踪规则》的形式落实,对过程改进比较明显、作为 实施重点的几条分列如下:
1.反馈途径畅通 项目跟踪人员收集与项目相关的意见或建议,通过试运行期间的Bug信息收集、正式运行后的用户电话回访等多渠道汇总整理之后及时的提交到Bugzilla。
2.紧急程度明确 跟踪人员在提交反馈信息时,必须选择Bugzilla的应急程度等级,由Bugzilla 的邮件通知功能通知相关组长,组长视紧急程度对其作相应处理,落实到相关的开发人员。
3.反馈跟踪信息完整 相关开发人员对每条反馈信息必须有明确的答复或处理结果,要有完整的跟踪报告。
4.历史反馈信息要不断回阅 在每周末安排一小时让开发人员回顾查阅错误列表,了解整个团队成员在前期所犯的错误,对自己未来的开发过程起监督作用。
经过一个项目实施之后,质量明鲜改观。在此基础上,又好好的挖了挖Bugzilla的潜力,把Bugzilla所保存的错误跟踪报告作为团队中新人的学习资料之一,让新人充分吸收前人所受的经验教训。
以 上就是我的团队软件过程改进的实际经历,虽然对实施CMM来说只是冰山一角。但软件过程改进只能一步一个台阶, CMM是严格要求逐级发展的。如果您的团 队也存在着我所提到的问题,您不仿参考一下我所采取的改进方法,有兴趣的朋友可以通过nbDeveloper@hotmail.com与我共同交流。