软件工程学教程 (第四版),周苏 教授,浙江大学城市学院 Zhousu@.com : 81505050 个人博客: 软件维护,系统转换以后就进入了正常运行阶段在这一阶段,系统工作人员要对投入运行后的软件系统进行调整和修改,以改正在开发阶段产生、在测试阶段又未发现的错误,使软件系统能适应外界环境的改变,并实现软件系统的功能扩充和性能改善因此,系统的维护工作将有许多事情要做12.1 概述,软件维护是指已完成开发工作,交付使用以后,对软件产品所进行的一些软件工程活动一个中等规模的软件,如果其开发阶段需要一到二年的时间,则在它投入使用以后,其运行或工作时间可能持续五年到十年之久,而它的维护阶段也正是在这运行的五年到十年期间在这期间内对软件进行维护,人们几乎需要着手解决开发阶段所遇到的各种问题,同时,还要解决某些维护工作本身所特有的问题12.1 概述,做好软件的维护工作不仅能排除障碍,使它能够正常工作,还可以使它扩充功能,提高性能,为用户带来显著的效益但是,人们对软件维护的认识还远不如软件开发这是因为开发工作更容易被看到,容易被人们所重视但和软件开发工作相比,软件维护阶段的工作量和成本都要大得多。
12.1.1 软件维护工作的必要性,实践表明,在开发阶段结束以后,在运行中仍然有必要对软件进行更动,其原因有以下几个方面: 1) 改正在运行中新发现的软件错误和设计上的缺陷之处,这些错误和缺陷是在开发后期的测试阶段未能发现的 2) 改进设计,以便增强软件的功能,提高软件的性能 3) 要求已运行的软件能适应特定的硬件、软件、外部设备和通信设备等的工作环境,或是要求适应已变动的数据或文件 4) 为使投入运行的软件与其他相关的程序有良好的接口,以利于协同工作 5) 为使运行软件的应用范围得到必要的扩充12.1.1 软件维护工作的必要性,值得注意的是,软件“维护”不同于对硬件的“维护”对硬件来说,“维护”包括替换已损坏的零部件、纠正缺陷、加强设计以及擦洗、注油和润滑保养等,但这些都不会影响到设备的功能,对设备性能的提高也是非常有限的软件的维护则完全是另一回事软件的维护不仅可以改正原来设计中的错误或不当之处,而且还增强软件的功能,提高它的性能,并且大多数的软件维护工作都是出于这些增强功能的要求,而不是由于可靠性问题进行的12.1.1 软件维护工作的必要性,怎样正确看待软件维护工作,是作好软件维护的重要前提。
我们知道,软件维护工作处在软件生存周期的最后阶段,在此以前完成的开发工作曾经花去了大量的人力和资源开发完成以后,用户迫切希望它能正常工作,发挥效益同时,也希望它能稳定、可靠地工作,具有较长的使用寿命然而,实践表明,任何一个软件在通过各项测试以后,谁都不能保证软件内部所有隐藏的错误被完全排除了随着对它的频繁使用,某些原来隐藏的问题会逐渐暴露出来,同时,用户还会发现一些使用不便之处12.1.1 软件维护工作的必要性,面对这些问题,为了让它能正常有效地工作,有必要再投入一定数量的人力和资源,开展软件维护工作统计资料表明,维护阶段的花费占整个软件生存周期花费的67%,这是一个相当可观的数字但是,如果我们不能充分认识到维护工作的重要性和迫切性,并在技术上、人力安排上和投资上给予足够的重视,则可能会导致已开发的软件无法发挥其应有的效益12.1.1 软件维护工作的必要性,维护工作面临的主要问题包括: 许多技术人员重开发,轻维护,认为只有开发工作才有广泛的自由度,能够发挥创造性,而对维护工作感到乏味,认为受限制多,发挥余地小另一方面,维护工作不象开发新软件那样,无法规定结束的期限,只要这个系统还在运行,维护工作也就要没完没了地进行下去。
不少用户对软件维护的知识了解得很少,一些重要的软件在运行过程中没有专人负责维护,致使有的软件在运行中出现问题,因得不到解决而被搁置起来12.1.1 软件维护工作的必要性,也有人以为,运行中发生的问题都应该由原开发人员或原开发部门来解决,把维护阶段的工作与开发阶段的工作混为一谈,于是,或产生矛盾,或使软件开发人员被大量的合理或不太合理的维护工作所束缚开发的软件越来越多,牵连的维护工作负担也越重 如何维持旺盛士气,改善支持环境由于软件维护是一项不允许有差错的工作,给人的精神压力很大,并且软件维护既繁琐又无规律可循,因此,应使一些工作尽可能和尽快地机械化,创造一个能提高效率的维护支援环境12.1.2 软件维护的内容,维护的起因一般分成三种基本类型: (1)故障 故障归因于程序错误,诸如无效输出结果、缺乏数据编辑检验、性能差、违反程序设计标准等等12.1.2 软件维护的内容,(2)环境变化 环境变化对于一个单位一段时间内使用的系统来说是常有的一般有两种类型的变化:一种是数据环境的变化,例如一个事务处理代码的改变,重新构造一个数据库等;一种是处理环境的变化,例如安装了新的硬件或新的操作系统等12.1.2 软件维护的内容,(3)用户和维护人员的要求 用户和维护人员本身也是维护的一个原因,例如要求修改软件系统,以提高操作效率;增加新的功能;改变现有的功能;提高可维护性等。
12.1.2 软件维护的内容,由这些基本原因引起的维护活动三类 1. 改正 (纠错) 性维护 改正性维护是在软件运行中发生异常或故障时进行的这种故障常常是由于遇到了从未用过的输入数据组合情况,或是在与其他软件的接口,以及在与硬件的接口处出现了问题严重的故障若未能及时解决,势必使得它所支持的数据处理活动被迫停止这些故障常常是由于软件开发过程中某个环节上隐藏着的错误而造成的在开发的末期所进行的测试中又未能将其发现,带着这些隐错运行,只是在某些特定情况下才会暴露出来12.1.2 软件维护的内容,例如,改正性维护可能是: 改正原来程序中未使开关复原的错误 解决开发时未能测试各种可能条件带来的问题 解决原来程序中遗漏处理文件中最后一个记录的问题12.1.2 软件维护的内容,2. 适应性维护 适应性维护是要使运行的软件能适应外部环境的变动计算机技术的迅速发展使得新的计算机硬件、新的操作系统和原来操作系统的新版本等不断涌现,而建立在硬件和操作系统上的应用软件,其使用年限往往要好多年,这就要求应用软件能跟上发展的新形势,使之不致因不能适应操作系统的新版本而影响正常工作12.1.2 软件维护的内容,除此以外,“数据环境”的变动也要求进行适应性维护。
例如,数据库的变动、数据格式的变动、数据输入输出方式的变动以及数据存储介质的变动等,都会直接影响到软件的正常工作12.1.2 软件维护的内容,例如,适应性维护可能是: 为现有的某个应用问题实现一个数据库管理系统 对某个指定编码进行修改,从三个字符改成四个字符 缩短系统的应答时间,使其达到特定要求 调整两个程序,使它们可以使用相同的记录结构 修改程序,使其适用于另外的终端12.1.2 软件维护的内容,3. 完善性维护 完善性维护是为扩充软件的功能、提高原有软件性能而开展的软件工程活动这里所说的新功能和新性能,都是在原来开发中编制的软件需求说明书上并未规定的内容用户在使用一段时间以后,提出了新的要求,要求在原已开发软件的基础上加以扩充12.1.2 软件维护的内容,例如: 修改计算工资程序,使其增加新的扣除项目 在已有的性能分析程序中增加包括若干属性的新报告 把现有程序的终端对话方式加以改造,使其具有方便用户使用的界面 改进图形输出 增加联机求助 (Help) 命令 为软件的运行增加监控设施12.1.2 软件维护的内容,改正 (纠错) 性维护、适应性维护和完善性维护正在成为维护基本类型的标准分类方案,这三种类型的维护工作在实践中占有的比例,大约分别为20%,25%和55%。
可见,大多数维护工作是用来改变或加强软件,而不是纠错完善性维护超过了整个维护工作量的一半12.1.3 维护工作的过程,维护工作同开发新软件不完全一样,它首先要找出作为修改对象的程序所存在的问题,但调查其影响范围往往要花许多时间通常,整个维护工作包括以下几个依次进行的阶段: 1) 接受提出的维护要求 2) 对所要求的内容进行分析 3) 对现有系统进行调查 (确定修改范围) 4) 决定维护作业的内容 5) 修改现行系统 6) 对修改部分进行测试12.1.3 维护工作的过程,7) 对整个系统进行测试 (确定其品质) 8) 修改后的系统投入正常的运行 在这8个阶段中,阶段3)和7)的工作量最大,并且在许多情况下阶段7)比起3)工作量更多 维护工作的过程除了增加维护的管理环节以外,其他部分的工作和软件开发的过程极为相似12.1.4 影响维护工作的因素,影响一个软件系统维护的困难程度,主要的有以下几个程序因素: 1) 系统大小 2) 系统年龄 3) 输入/输出数据项个数 4) 应用类型 5) 程序设计语言 6) 结构化程度12.1.4 影响维护工作的因素,在这诸项因素中,系统的大小、年龄、输入/输出报表个数和结构化程度被列为影响最大的因素。
大型系统比小型系统需要更多的维护工作量系统越大,掌握起来就越困难,而且系统越大,它所执行的功能就越复杂 老系统比新系统需要更多的维护工作量软件系统随着其年龄增长变得越来越大,不断修改使其结构越来越乱,维护人员的不断调换又使其越来越难理解,甚至许多老系统是在不知道如何使用模块化及结构技术去控制复杂性的情况下开发出来的12.1.4 影响维护工作的因素,系统大小是用源语句数、程序数、输入输出文件数、数据库所占字节数以及预定义的用户报表数来量度的根据调查,可以用程序数及预定义的用户报表数对系统大小以至维护工作量做出较为准确的预计特别是,处理预定义的用户报表越多的系统,其所需要的维护工作量也越多 使用已有的功能最强的程序语言可以控制程序大小一般来说,语言功能越强,生成程序所需指令就越少通过计划程序的“退役”时间和向新技术的转换可以控制程序年龄12.1.4 影响维护工作的因素,除控制程序大小外,数据库管理系统还可以减少为提供许多用户报表的应用系统所需的维护工作量数据库工具使修改和扩充报表更加容易,并允许终端用户自己来做修改 还有一些因素对维护工作是有利的,如: 软件开发中采用了结构化方法 利用了新的软件或自动的开发工具。
具有较好的数据管理 软件开发所采用的语言较易于维护 具有一定的维护实践经验12.1.5 维护策略,程序维护技术水平发展的现状可以用以下几点来概括: 1) 多数单位留有的维护历史资料很少每一个应用系统的纠错性、适应性、完善性和支持性维护分别所用小时数、系统错误记载以及用户的改进要求等数据都应该保存下来在决定较大维护问题及其费用时,这些资料都是非常宝贵的 2) 维护问题既包括技术问题,又包括非技术问题用于解决只涉及技术方面的维护问题的方法固然重要,但还不够那些涉及计划、项目管理以及用户等方面的方法也同样重要12.1.5 维护策略,3) 尽管现行软件开发技术作为开发工具时,可以提高软件的质量 (特别是可靠性) ,但它们不涉及软件可维护性的所有方面因此,还需要能够使软件更经得起变化的软件设计技术,例如使用数据库管理系统、程序自动生成及结构技术等较新的技术开发的系统更可靠、更容易修改,因此也更容易维护 4) 因为几乎一半的维护工作与持续的开发任务有关,维护工作比通常所设想的更类似于开发工程,软件开发技术也比原来设想的要更加适用于维护环境,诸如小组程序设计概念,结构预排以及质量审查等技术都应该用于改进维护过程。
12.1.5 维护策略,5) 一半以上的维护工作属于完善性维护,由单位考虑选择进行成本合算以及用户支付费用的方法有助于限制这部分维护工作 6) 软件系统的维护工作量取决于系统的大小、年龄、质量以及维护人。