《实用软件工程.ppt》由会员分享,可在线阅读,更多相关《实用软件工程.ppt(57页珍藏版)》请在优知文库上搜索。
1、 在软件的开发工作已完成并把软件产品交付给用户在软件的开发工作已完成并把软件产品交付给用户使用之后,就进入了软件维护阶段。这个阶段的工作目使用之后,就进入了软件维护阶段。这个阶段的工作目标是保证软件在一个相当长的时期内能够正常运行,标是保证软件在一个相当长的时期内能够正常运行,因因此对软件的维护就成为必不可少的了。此对软件的维护就成为必不可少的了。 软件维护需要的工作量非常大。软件维护需要的工作量非常大。平均说来,大型软平均说来,大型软件的维护成本高达开发成本的四倍左右件的维护成本高达开发成本的四倍左右。目前国外许多目前国外许多软件开发组织把软件开发组织把60%60%以上的人力用于维护已有的软
2、件以上的人力用于维护已有的软件,而,而且随着软件数量增多和使用寿命延长,这个百分比还在且随着软件数量增多和使用寿命延长,这个百分比还在持续上升。将来维护工作甚至可能会束缚住软件开发组持续上升。将来维护工作甚至可能会束缚住软件开发组织的手脚,使他们没有余力开发新的软件。织的手脚,使他们没有余力开发新的软件。 6.1 软件维护的内容及特点软件维护的内容及特点6.1.1 软件维护的内容软件维护的内容 所谓所谓软件维护软件维护就是在软件已经交付使用之后,为就是在软件已经交付使用之后,为了改正错误或满足新的需要而修改软件的过程了改正错误或满足新的需要而修改软件的过程。 我们可以通过描述我们可以通过描述软
3、件交付使用后可能进行的下软件交付使用后可能进行的下述四项活动述四项活动,具体地定义软件维护具体地定义软件维护。1. 改正性维护改正性维护 通常,在软件开发过程中所进行的测试都是不完通常,在软件开发过程中所进行的测试都是不完全、不彻底的,软件中必然会有一些潜伏的错误被带到全、不彻底的,软件中必然会有一些潜伏的错误被带到运行阶段来。用户常常将把他们遇到的问题报告给软件运行阶段来。用户常常将把他们遇到的问题报告给软件维护人员,要求解决。维护人员,要求解决。 我们把诊断和改正软件错误的过程称为我们把诊断和改正软件错误的过程称为改正性维护改正性维护。例如,在软件交付用户使用之后,解决在开发时没有例如,在
4、软件交付用户使用之后,解决在开发时没有测试所有可能的执行通路而带来的问题;解决程序中遗测试所有可能的执行通路而带来的问题;解决程序中遗漏对文件中最后一个记录的处理的错误等。漏对文件中最后一个记录的处理的错误等。2. 适应性维护适应性维护 计算机科学技术领域的各个方面都在迅速进步,大约计算机科学技术领域的各个方面都在迅速进步,大约每过每过3636个月就有新一代的硬件宣告出现;个月就有新一代的硬件宣告出现;另一方面,应用另一方面,应用软件的使用寿命却很容易超过十年,远远长于最初开发这软件的使用寿命却很容易超过十年,远远长于最初开发这个软件时的运行环境的寿命。个软件时的运行环境的寿命。因此,因此,适
5、应性维护适应性维护就是为了就是为了和变化了的环境适当地配合而进行的修改软件的活动,是和变化了的环境适当地配合而进行的修改软件的活动,是既必要又经常的维护活动。既必要又经常的维护活动。 例如,适应性维护可以是修改原在例如,适应性维护可以是修改原在DOSDOS操作系统中运行操作系统中运行的程序,使之能在的程序,使之能在WindowsWindows操作系统中运行;修改两个程序操作系统中运行;修改两个程序,使它们能够使用相同的记录结构;修改程序,使它适用,使它们能够使用相同的记录结构;修改程序,使它适用于另外一种终端设备。于另外一种终端设备。3. 完善性维护完善性维护 在使用软件的过程中,在使用软件的
6、过程中,用户往往提出增加新功能或用户往往提出增加新功能或改变某些已有功能的要求,还可能提出提高程序性能的要改变某些已有功能的要求,还可能提出提高程序性能的要求。为了满足这类要求而修改软件的活动求。为了满足这类要求而修改软件的活动,称为,称为完善性维完善性维护护。 例如,在储蓄系统交付银行使用之后,增加扣除利息例如,在储蓄系统交付银行使用之后,增加扣除利息税的功能;缩短系统的响应时间,使之达到新的要求;改税的功能;缩短系统的响应时间,使之达到新的要求;改变现有程序输出数据的格式,以方便用户;在正在运行的变现有程序输出数据的格式,以方便用户;在正在运行的软件中增加联机求助功能等,都是完善性维护。软
7、件中增加联机求助功能等,都是完善性维护。4. 预防性维护预防性维护 当为了提高未来的可维护性或可靠性,或为了给未来的当为了提高未来的可维护性或可靠性,或为了给未来的改进工作奠定更好的基础而修改软件时,就出现了第四类维改进工作奠定更好的基础而修改软件时,就出现了第四类维护活动,这类维护活动称为预防性维护。通常,护活动,这类维护活动称为预防性维护。通常,把预防性维把预防性维护定义为:护定义为:“把今天的方法学应用于昨天的系统以满足明天把今天的方法学应用于昨天的系统以满足明天的需要的需要”。也就是说,也就是说,预防性维护预防性维护就是采用先进的软件工程就是采用先进的软件工程方法对需要维护的软件或软件
8、中的某一部分,主动地进行重方法对需要维护的软件或软件中的某一部分,主动地进行重新设计、编码和测试。新设计、编码和测试。 在维护阶段的最初一二年,在维护阶段的最初一二年,改正性维护改正性维护的工作量往往比的工作量往往比较大。随着在软件运行过程中错误发现率迅速降低并趋于稳较大。随着在软件运行过程中错误发现率迅速降低并趋于稳定,就进入了正常使用期间。但是,由于用户经常提出改造定,就进入了正常使用期间。但是,由于用户经常提出改造软件的要求,软件的要求,适应性维护和完善性维护适应性维护和完善性维护的工作量逐渐增加,的工作量逐渐增加,而且在这种维护过程中往往又会引入新的错误,从而进一步而且在这种维护过程中
9、往往又会引入新的错误,从而进一步加大了维护的工作量。加大了维护的工作量。 从上述关于软件维护的定义不难看出,软件维护绝不仅从上述关于软件维护的定义不难看出,软件维护绝不仅限于纠正使用中发现的错误,事实上在全部维护活动中一半限于纠正使用中发现的错误,事实上在全部维护活动中一半以上是完善性维护。以上是完善性维护。国外的统计数字表明:国外的统计数字表明:完善性维护占全部维护活动的完善性维护占全部维护活动的50%66%改正性维护占改正性维护占17%21%,适应性维护占适应性维护占18%25%,其他维护活动只占其他维护活动只占4%左右。左右。软件维护策略软件维护策略 针对上一小节所述的三种典型的维护活动
10、,JamesMartin等人提出了一些可以减少维护成本的策略。下面等人提出了一些可以减少维护成本的策略。下面学习主要的软件维护策略。学习主要的软件维护策略。1. 降低改正性维护成本的策略降低改正性维护成本的策略 显然,软件中包含的错误越少,改正性维护的成本显然,软件中包含的错误越少,改正性维护的成本也就越低,但是,要生成也就越低,但是,要生成100%100%可靠的软件通常成本太高可靠的软件通常成本太高,并不一定合算。然而通过使用先进技术仍然可以大大,并不一定合算。然而通过使用先进技术仍然可以大大提高软件的可靠性,从而减少改正性维护的需求。提高软件的可靠性,从而减少改正性维护的需求。 2. 降低
11、适应性维护成本的策略降低适应性维护成本的策略 这类维护是必然要进行的,但是要采取适当的策略。(1 1)在进行配置管理时,把硬件、操作系统和其他相关的)在进行配置管理时,把硬件、操作系统和其他相关的环境因素的可能变化考虑在内,可以减少某些适应性维护的环境因素的可能变化考虑在内,可以减少某些适应性维护的工作量;工作量;(2 2)把与硬件、操作系统及其他外围设备有关的代码放到)把与硬件、操作系统及其他外围设备有关的代码放到特定的程序模块中,可以把因环境变化而必须修改的程序代特定的程序模块中,可以把因环境变化而必须修改的程序代码局限于某些特定的程序模块内;码局限于某些特定的程序模块内;(3 3)使用内
12、部程序列表、外部文件及例行处理程序包,可)使用内部程序列表、外部文件及例行处理程序包,可以为维护时修改程序提供方便。以为维护时修改程序提供方便。3. 降低完善性维护成本的策略降低完善性维护成本的策略 上述的减少前两类维护成本的策略,通常也能降低上述的减少前两类维护成本的策略,通常也能降低完善性维护的成本。特别是数据库管理系统、程序自动完善性维护的成本。特别是数据库管理系统、程序自动生成系统、软件开发环境、第四代语言和应用软件包,生成系统、软件开发环境、第四代语言和应用软件包,可明显减少维护工作量。可明显减少维护工作量。 此外,在需求分析过程中准确地预测用户将来可能此外,在需求分析过程中准确地预
13、测用户将来可能提出的需求,并且在设计时为将来可能提出的需求预先提出的需求,并且在设计时为将来可能提出的需求预先做准备,显然是降低完善性维护成本的有力措施。做准备,显然是降低完善性维护成本的有力措施。 在实际开发软件之前,建立软件的原型并让用户试在实际开发软件之前,建立软件的原型并让用户试用,以进一步完善他们对软件的功能需求,也能显著减用,以进一步完善他们对软件的功能需求,也能显著减少软件交付使用之后的完善性维护需求。少软件交付使用之后的完善性维护需求。6.1.2 软件维护的软件维护的的特点的特点 图6.1描绘了面对一项维护要求时,不同的软件配置所导致的不同工作流程。图6.1 结构化维护与非结构
14、化维护的对比非结构化维护结构化维护6.1.2.1 结构化维护与非结构化维护差别悬殊结构化维护与非结构化维护差别悬殊 如果软件配置的惟一成分是程序代码,那么维护活动如果软件配置的惟一成分是程序代码,那么维护活动从艰苦地评价程序代码开始,而且常常由于程序内部文档从艰苦地评价程序代码开始,而且常常由于程序内部文档不足而使评价更困难(诸如软件结构、全程数据结构、系不足而使评价更困难(诸如软件结构、全程数据结构、系统接口、性能或设计约束等微妙的特点是难于搞清的,而统接口、性能或设计约束等微妙的特点是难于搞清的,而且常常误解了这一类特点)。最终对程序代码所做的改动且常常误解了这一类特点)。最终对程序代码所
15、做的改动的后果是难于估量的。的后果是难于估量的。 因为没有测试方面的文档,所以不可能进行回归测试。因为没有测试方面的文档,所以不可能进行回归测试。这就是非结构化维护,这种维护方式是没有使用良好定义这就是非结构化维护,这种维护方式是没有使用良好定义的方法学开发出来的软件的必然结果的方法学开发出来的软件的必然结果-并正在为此而付出并正在为此而付出代价(浪费精力和受挫折)。代价(浪费精力和受挫折)。非结构化维护非结构化维护(上图右侧) 如果有一个完整的软件配置存在,那么维护工作从评如果有一个完整的软件配置存在,那么维护工作从评价设计文档开始,确定软件重要的结构特点、性能特点以价设计文档开始,确定软件
16、重要的结构特点、性能特点以及接口特点;估量要求的改动将带来的影响,并且计划实及接口特点;估量要求的改动将带来的影响,并且计划实施途径。然后首先修改设计并且对所做的修改进行仔细复施途径。然后首先修改设计并且对所做的修改进行仔细复查。接下来编写相应的源程序代码;使用在测试说明书中查。接下来编写相应的源程序代码;使用在测试说明书中包含的信息进行回归测试;最后,把修改后的软件再次交包含的信息进行回归测试;最后,把修改后的软件再次交付使用。付使用。 上面描述的事件构成上面描述的事件构成结构化维护结构化维护,它是在软件开发的它是在软件开发的早期应用软件工程方法学的结果早期应用软件工程方法学的结果。(它确实能减少精力的。(它确实能减少精力的浪费并且能提高维护的总体质量。)浪费并且能提高维护的总体质量。)6.1.2.2 维护的代价高昂维护的代价高昂 在过去的几十年中,软件维护的费用稳步上升。在过去的几十年中,软件维护的费用稳步上升。19701970年用于维护年用于维护已有软件的费用只占软件总预算的已有软件的费用只占软件总预算的35%35%40%40%,19801980年上升为年上升为40%40%60%