1、软件维护,软件维护的概念软件在投入使用之后,就进入维护阶段。软件维护阶段是软件生命期中时间最长、花费精力和财力最多的阶段。因为计算机程序总要变化:故障要排除,系统要改进,要进行优化,版本要升级等。所以软件工程方法学的一个主要目的就是如何减少维护的总工作量。软件维护的定义:在软件运行/维护阶段对软件产品所进行的修改就是维护。,软件维护的概念,软件维护的内容很广泛,根据要求维护的原因,维护的活动可分为4种: 1、改正性维护:在软件测试过程中,没有发现的错误,带到维护阶段,这些隐含的错误在某些特定的环境下会暴露出来。为识别和纠正这些错误,修改软件性能上的缺陷进行的确定和修改错误的过程称为改正性维护。
2、 2、适应性维护:随着计算机的发展,计算机硬件和软件环境、数据环境都在不断地发生变化,为使软件适应这种变化而进行的软件修改过程称为适应性维护。 3、完善性维护:在软件使用过程中,用户往往会对软件提出新的功能要求与性能要求,为满足这些新的要求,扩充软件原有的功能、改善性能而进行的软件维护活动称为完善性维护。 4、预防性维护:为提高软件的可维护性和可靠性,为以后进一步改进软件奠定良好基础而对软件进行的修改称为预防性维护。,软件维护的概念,4种维护的活动占总维护工作量的比例:,1、非结构化维护:由于只有源程序,而文档很少或没有文档,维护工作只能从阅读、理解、分析源程序入手,通过阅读源程序了解系统功能
3、、软件结构、数据结构、系统接口等,这样非常困难,很多问题难以搞清楚,要想搞清楚需花费大量的人力、物力,由于常常误解一些问题,最终对源程序的修改的后果是难以预料的。 2、结构化维护:进行维护活动时,首先从评价需求开始,搞清楚功能、性能上的改变,然后对设计说明文档进行评价、修改和复查;根据设计的修改,再进行程序的变动;然后根据测试文档中的测试 用例进行回归测试;最后将修改后的软件再次交付使用。,软件开发过程对软件维护的影响,软件维护可以分为四步: 第一步: 软件维护申请报告 第二步: 维护工作的实施 第三步: 维护文档整理 第四步: 维护活动评价,软件维护步骤,软件维护步骤,第一步:软件维护申请报
4、告为了有效地进行软件维护,应在维护前先做组织工作,建立维护机构,申明提出维护申请报告的过程和评价的过程;为每一个维护申请规定标准的处理步骤;同时还必须建立维护活动的登记制度以及规定评价和评审的标准。,维护机构,软件维护步骤,第二步:维护工作的实施 软件维护工作流程:,软件维护步骤,源程序修改的步骤:1、分析和理解程序:可采用如下方法1)分析程序结构图;2)跟踪数据;3)控制跟踪;4)充分阅读和源程序清单和文档,分析现有文档的合理性;5)充分使用由编译程序或汇编程序提供的交叉引用表、符号表及其它信息;,软件维护步骤,2、设计程序的修改计划一方面:考虑对人员和资源的安排另一方面:需要根据修改的内容
5、及受到修改影响的内容设计修改方案, 包括:(1) 研究程序的各个模块、模块接口及数据库等,按全局观点提出修改计划;(2) 依次将要修改的、以及受修改影响的模块和数据结构分离出来;(3)详细分析将要修改的、以及受修改影响的模块和数据结构的内部细节,标明新逻辑及要修改的现有逻辑;,软件维护步骤,3、修改代码,以适应变化。修改时应遵循原则: 正确、有效、谨慎地修改程序代码,尽量保持程序的原有风格; 修改过程中,要随时保存前一次调试正确的源程序代码; 保持详细的维护活动和维护结果记录,保证维护工作的可追踪性; 如果修改较大,程序原有架构不符合要求,可抛弃原有程序重新编写。,软件维护步骤,4、修改程序的
6、副作用副作用是指因修改软件而造成的错误或其它不希望发生的情况。 1)编码副作用:在使用程序设计语言修改源代码时可能引起的错误,如删除或修改一个标号、标识符、一个子程序,改变程序代码的时序关系,改变逻辑运算符,改进程序的执行效率,改变程序占用存储的大小等,都很容易引入错误,应特别小心。2)数据副作用:在修改数据结构时,有可能造成软件设计和数据结构的不一致,而导致软件错误。数据副作用是修改软件信息结构引起的,如重新定义全局或局部常量,重新初始化控制标志或指针等,都容易产生设计与数据不相容的错误,可通过详细设计文档对数据副作用加以控制。3)文档副作用:对数据流、软件结构、逻辑模块等进行修改时,必须对
7、相关技术文档进行修改,否则会导致 文档与程序功能不匹配,使文档不能反映软件当前的状态。,软件维护步骤,5、重新验证程序:1)静态确认;2)计算机确认;3)维护后的验收。,软件维护步骤,第三步:维护文档整理 记录一些与维护工作有关的数据信息,这些信息可作为估计软件维护的有效程度,确定软件产品的质量,确定维护的实际开销等工作的原始数据。,软件维护步骤,第四步:维护活动评价 具体的评价工作可从以下几个方面考虑:(1)每次程序运行时的平均出错次数;(2)花费在每类维护活动上的总的 “人时” 数;(3)每个程序、每种语言、每种维护类型程序的平均修改次数;(4)维护工作中增加或删除每个源程序语句所花费的平均 “人时” 数;(5)用于每种语言的平均 “人时” 数;(6)维护申请报告的平均处理时间;(7)各类维护申请的百分比。一方面,可判定此次维护活动开展是否顺利、成功;另一方面,为今面的维护工作积累经验。,