软件维护概述1

        在软件产品被开发出来并交付用户使用之后,就进人了软件的运行维护阶段,这个阶段是软件生命周期的最后一个阶段,其基本任务是保证软件在一个相当长的时期能够正常运行。

        软件维护需要的工作量很大,平均说来,大型软件的维护成本高达开发成本的4倍左右。目前国外许多软件开发组织把60%以上的人力用于维护已有的软件,而且随着软件数量的增多和使用寿命的延长,这个百分比还在持续上升。将来维护工作甚至可能会束缚住软件开发组织的手即,使他们没有余力开发新的软件。

        软件工程的主要目的就是要提高软件的可维护性,减少软件维护所需的工作量,降低软件系统的总成本。

        8.1 软件维护的定义

        所谓软件维护就是在软件已经交付使用之后,为了改正错误或满足新的需要而修改软件的过程。可以通过描述软件交付用后可能进行的4项活动,具体地定义软件维护。

        因为软件测试不可能暴露出一个大型软件系统中所有潜藏的错误,所以必然会有第一项维护活动:在任何大型程序的使用期间,用户必然会发现程序错误,并且把使们遇到的问题报告给维护人员,把诊断和改正错误的过程称为改正性维护

        计算机科学技术的各个方面都在进步,大约每过36个月就有新一代的硬件宣告出现,经常推出新操作系统或旧系统的修改版本,时常增加或修改外部设备和其他系统部件;另外,应用软件的使用寿命却很容易超过10年,远远长于最初开发这个软件时的运行环境的寿命。因此,适应性维护也是为了和变化了的环境适当地配合而进行的修改软件的活动,是既必要又经常的维护活动。

        当一个软件系统顺利地运行时,常常出现第三项维护活动:在使用软件的过程中用户往往提出增加新功能或修改已有功能的建议,还可能提出一般性的改进意见,为了满足这类要求,需要进行完善性维护。这项维护活动通常占软件维护工作的大部分。

        当为了改进未来的可维护性或可靠性,成为了给未来的改进奠定更好的基础而修改软件时,出现了第四项维护活动,这项活动通常称为预防性维护。目前这项维护活动相对比较少。

        从上述关于软件维护的定义不难看出,软件维护绝不仅限于正使用中发现的错误。事实上在全部护活动中一半以上是完善性维护,国外的统计数字表明,完善性维护占全部护活动的50%一66%,改正性维护占17%一21%,适应性维护占18%一25%。其它维护活动只占4%左右。

        应该注意,上述4类的活动都必须应用于整个软件配置,维护软件文档和维护软件的可执行代码是同样重要的。

        8.2 软件维护的特点

        8.2.1 结构化维护与非结构化维护差别巨大

        1. 非结构化维护

        如果软件配置的唯一成分是程序代码,那么维护活动从艰若地评价程序代码开始,而且常常由于程序内部文档不足而使评价更困难,时于做件结,全程数据结构、系统接口、性能和(或)设计约束等经常会产生误解,而且对程序代码所做的改动的后果也是难于估量的:因为没有测试方面的文档,所以不可能进行回归测试(即指为了保证所做的修改没有在以前可以正常使用的软件功能中引入错误而重复过去做过的测试),非结构化的维护需要付出很大代价(浪费精力并且遭受挫折的打击),这种维护方式是没有使用良好定义的方法学开发出来的软件的必然结果。

        2. 结构化维护

        如果有一个完整的软件配置存在,那么维护工作从评价设计文档开始,确定软件重要的结构特点,性能特点以及接口特点;估量要求的改动将带来的影响,并且计划实施途径,然后首先修改设计并且对所做的修改进行仔细复查。接下来编写相应的源程序代码;使用在测试说明书中包含的信息进行回归测试;最后,把修改后的软件再次交付使用。

        刚才描述的事件构成结构化维护,它是在软件开发的早期应用软件工程方法学的结果,虽然有了软件的完整配置并不能保证维护中没有问题,但是确实能减少精力的浪费并且提高维护的总体质量。

        8.2.2 维护的代价高昂

        在过去的几十年中,软件维护的费用稳步上升,1970年用于维护已有软件的费用只软件总预算的35%-40%,1980年上升为40%~60%,1990年上升为70%-80%。

        维护费用只不过是软件维护的最明显的代价,其他一些现在还不明显的代价将来可能更为人们所关注,因为可用的资源必须提供维护任务使用,以至耽误甚至丧失了开发的良机,这是软件维护的一个无形的代价,其他无形的代价还有以下几个。

        当看来合理的有关错误或修改的要求不能及时满足时,将引起用户不满。

        由于维护时的改动,在软件中引入了潜藏的错误,从而降了软件的质量。

        当必须把软件工程师调去从事维护工作时,将在开发过程中造成混乱

        软件件维护的最后一个代价是生产率的大幅度下降,这种情况在维护旧程序时常遇到,例如,提 Gausler在1976年的报道,美国空军的飞行控制软件每条指令的开发成本是5美元,然而维护成本大约是每条指令4000美元,也就是说,生产率下降为约1/50。

        用于维护工作的劳动可以分成生产性活动(例如,分析评价,修改设计和编写程序代等)非生产性活动(例如,理解程序代码的功能,解释数据结构、接口特点和性能限度等)下述表达式给出维护工作量的一个模型:

        M=P + K * exps(c-d)

        其中,M中维护用的总工作量,P是生产性工作量,K是经验常数,C是复杂程度(非结构化设计和缺少文档都会增加软件的复杂程度),D是维护人员对软件的熟悉程度。

        上述的模型表明,如果软件的开发途径不好,(即没有使用软件工程方法学),而且原来的开发人员不能参加维护工作,那么维护工作量和费用将指数的增加。

        8.2.3 维护的问题很多

        与软件维护有关的绝大多数问题,都可归因于软件定义和软件开发的方法有缺点,在软件生命周期的头两个时期没有严格而又科学的管理和规划,几乎必然会导致在最后阶段出现问题,下面列出和软件维护有关的部分问题

        (1)理解别人写的程序通常非常困难,而且困难程度随着软件配置成分的减少而迅速增加。如果仅有程序代码没有说明文档,则会出现严重的问题。

        (2)需要维护的软件往往没有合格的文档,或者文档资料显著不足,认识到软件必须有文档只是第一步,容易理解的并且和程序代码完成一致的文档才有价值。

        (3)要求对软件进行维护时,不能指望由开发人员给人们仔细说明软件,由于维护阶段持续的时间长,因此,当需要解释软件时,往往原来写程序的人已经不在阶近了。

        (4)绝大多数软件在设计时没有考虑将来的修改,除非使用强调模块独立原理的设计方法学,否则修改较件既困难又容易发生错误。

        (5)软件推护不是一项吸引人的工作,形成这种观念很大程度上是因为维护工作经遭受挫折。

        上述种种问题在现有的没采用软件工程思想开发出来的软件中,都或多或少地存在着,不应该把一种科学的方法学看做万应灵药。但是,软件工程重至少部分地解决了与维护有关的每一个问题。

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值