关于软件维护问题的几点思考
□ /文 王政
(广州市龙口东路360号天河软件园天诚广场园区 510625)
前言:什么是软件维护?所谓软件维护就是在软件已经交付使用之后,为了改正错误或满足新的需要而修改软件的过程。其目的是保证系统能持续地与用户环境,数据处理操作、政府或其他有关部门的请求取得协调。
从软件工程学的角度的来讲,软件维护费用日益上升,目前已达到整个开发费用的80%。就这个数字我们可以看出软件维护工作的重要性,但是遗憾的是我们许多软件开发公司往往忽略了它的重要性,或者明知道它的重要性却对如何做好软件维护工作不得其门。
本文根据个人工作经验,从以下三个方面来谈谈怎样做好软件维护工作:
一、 软件维护工作中存在的问题:
与软件维护有关的绝大多数问题的根源在于计划阶段和开发阶段的工作有缺点。典型问题:1、深刻理解原开发人员的编程思想通常相当困难。2、软件人员的流动性,使得软件维护时很难与原开发人员沟通。3、没有文档或文档严重不足。4、软件设计时,欠考虑软件的可修改性,可扩展性。5、频繁的软件升级,要追踪软件的演化变得很困难,使软件难以修改。
场景:做过软件维护工作的朋友常常在没有文档说明、没有代码注释的一大堆乱如麻的程序中转了一圈后晕头转向、郁闷不已。更郁闷的事情是在Goto语句之间跳来跳去,最后摸不着北。还有利害的程序员可以把几千行的代码全部写在一张页面当中,让你见识见识一下他高超的水平(其实很多时候我们看都不用看,就已经在心里あああ:TMD,你也太厉害了吧!)……
二、问题分析:
我们来分析一下引起软件维护工作的原因到底是什么?
引起软件维护工作的原因主要来自两方面:一个是自身的原因、另一个是外部环境;因自身的原因而引起的维护工作有:预防性维护,正确性维护(一个软件能否正确运行这是最起码的要求),完善性维护。由外部环境所引起的工作包括适应性维护(客户的满意度是我们公司能够持续发展一个重要方面,只有在有条件的情况下不断满足客户的要求,才能提高我们的生存的空间)。
问题不只是这么简单,要做好它却是一件非常困难的事情。
1、软件维护本身的复杂性。
2、软件维护是一个长期的过程,我们公司很多领导没有耐性,习惯不了长跑。
3、有标准不执行,喜欢做表面文章,自认为有了一个什么质量认证便可以高枕无忧。
4、能够认识到它的重要性,可是没有人愿意去做这费力不讨好的事情。普遍的观点:认为其没有创造性,体现不了自身的水平与价值。每个有思想的程序员都希望把程序看成是自己第二生命。
场景:最近网上报道:中央政府的政令有时出不了“中南海”。分析研究得到的结果是地方政府官员没有得到实际利益,懒得执行(官员在乎的只是眼前利益,没有考虑到长远利益)。针对软件开发的复杂性,制定出来的标准我想大家都应该有所了解,但是很多时候软件公司在开发软件的过程中很少按标准去执行他们的工作。我心里会想:这难道也是软件公司得不到利益吗?可能我们公司的很多领导都和那些官员一样——都是近视眼罢了。
三、 问题的解决:
我想首先要从思想上去解决问题,何谓从思想上去解决问题?就是从思想上对软件维护工作有一个明确的认识。读书
从思想上认识到了软件维护的重要性,接着便是从技术上确保软件维护的可行性。怎样从技术上确保软件维护可行性呢?
1、借鉴先进管理经验、根据实际情况制定符合自身发展的企业标准和维护组织。
建立维护组织:一般软件公司没有专门的维护机构,除非大型软件公司。
维护机构成员一般包括:配置管理员、维护控制员、系统管理员、一般维护工作人员。
2、 制定计划、坚持评审:
根据软件开发需求和公司情况制定切实可行的计划。维护工作不应该采用“头痛医头,脚痛医脚”的零打碎敲的方法,而应当有计划有步骤地统筹安排。认真做维护工作报告,及时发现问题解决问题。维护报告应包括的内容:该维护任务的范围,所需资源,确认的要求,维修费用及维修进度安排。
坚持评审,在软件开发各个阶段的评审过程中分别考虑它们的可维护性。
需求评审:对将来可能要完善和修改的部分应加以说明,如讨论可移植性问题时应考虑系统接口对软件可维护性带来的影响。
设计评审:数据设计、体系结构设计、过程设计及接口设计是否易于修改;
编码评审:强调编程风格和内部文档;
测试:在软件正式交付使用前,每个测试步骤都应对预防性维护作出提示。
3、 编写软件维护文档:
很多时候我们在解决了问题之后,便自以为事情已经了结,其实这个时候我们还有一项重要的工作没有完成——编写软件维护文档。软件维护文档包括:软件问题报告、软件变动记录、软件维护记录。这样当下次我们再需要修改时,便可以很快的找到问题的原因,减少我们从繁多的代码中去寻找Bug。
总之,本人认为软件维护工作不是哪一个人或哪一部分人的事情。作为公司应该根据公司实际情况制定切实可行的制度,从制度上去确保它;作为员工,从思想上应重视它,及早做好预防工作,减少或避免不必要的维护的工作。只有从互动的两个方面努力,才能真正地做好软件维护工作。
注:以上是本人从事软件开发和软件维护工作以来的一些思考,很多地方表述得还不透彻也不够深入,希望能够与大家一起讨论、共同学习!