����������••••••••••••––––––––••••••••––外部环境外部环境��新的硬、软件配臵新的硬、软件配臵��––数据环境数据环境��数据库、数据格式、数数据库、数据格式、数据输入据输入//输出方式、数据存储介质输出方式、数据存储介质��可能发生变化。可能发生变化。••••••••••••••••••••••70%70%三类维护占三类维护占维护在软件生存期维护在软件生存期总维护比例总维护比例所占比例所占比例••••••••••––––––––••••••––应用的类型应用的类型––数学模型数学模型––任务的难度任务的难度––开关与标记、开关与标记、IFIF嵌套深度、索引或嵌套深度、索引或下标数等下标数等••软件维护的策略软件维护的策略••100100。。。。。。。。••••••––––––••••252510001000••••MM••pp••KK••cc••dddcKepM���••••––首先首先建立维护的机构建立维护的机构––申明申明提出维护申请报告的过程提出维护申请报告的过程及及评评价的过程价的过程––为每一个维护申请规定为每一个维护申请规定标准的处理标准的处理步骤步骤––建立建立维护活动的登记制度维护活动的登记制度以及规定以及规定评价和评审的标准评价和评审的标准。。••••••••••••••••••••••––所需修改变动的性质�所需修改变动的性质�––申请修改的优先级�申请修改的优先级�––为满足某个维护申请报告�所需为满足某个维护申请报告�所需的工作量�的工作量�––预计修改后的状况预计修改后的状况..••••––修改软件需求说明修改软件需求说明––修改软件设计修改软件设计––设计评审设计评审––对源程序做必要的修改对源程序做必要的修改––单元测试单元测试––集成测试集成测试((回归测试回归测试))––确认测试确认测试––软件配臵评审等软件配臵评审等。。••••••••••••••••••••••••••••••••••••••––每次程序运行时的平均出错次数�每次程序运行时的平均出错次数�––花费在每类维护上的总“人时”花费在每类维护上的总“人时”数�数�––每个程序、每种语言、每种维护类每个程序、每种语言、每种维护类型的程序平均修改次数�型的程序平均修改次数�––因为维护�增加或删除每个源程序因为维护�增加或删除每个源程序语句所花费的平均“人时”数�语句所花费的平均“人时”数�––用于每种语言的平均“人时”数�用于每种语言的平均“人时”数�––维护申请报告的平均处理时间�维护申请报告的平均处理时间�––各类维护申请的百分比。各类维护申请的百分比。据此可对开发技术、语言选择、维据此可对开发技术、语言选择、维护工作计划、资源分配、以及其它护工作计划、资源分配、以及其它许多方面做出判定。许多方面做出判定。••••••��理解程序的功能和目标�理解程序的功能和目标���掌握程序的结构信息�即从程序中细掌握程序的结构信息�即从程序中细分出若干结构成分。如程序系统结构、分出若干结构成分。如程序系统结构、控制结构、数据结构和输入�输出结控制结构、数据结构和输入�输出结构等�构等���了解数据流信息�即涉及到的数据来了解数据流信息�即涉及到的数据来源何处�在哪里被使用源何处�在哪里被使用��了解控制流信息�即执行每条路径的了解控制流信息�即执行每条路径的结果�结果���理解程序的操作理解程序的操作((使用使用))要求�要求�1.1.设计程序的修改计划设计程序的修改计划程序的修改计划要考虑人员和资源的安程序的修改计划要考虑人员和资源的安排。小的修改可以不需要详细的计划�排。小的修改可以不需要详细的计划�而对于需要耗时数月的修改�就需要计而对于需要耗时数月的修改�就需要计划立案。划立案。2.2.修改代码�以适应变化修改代码�以适应变化3.3.修改程序的副作用修改程序的副作用所谓副作用是指因修改软件而造成的错所谓副作用是指因修改软件而造成的错误或其它不希望发生的情况。副作用有误或其它不希望发生的情况。副作用有三种�三种�修改代码的副作用修改代码的副作用、、修改数据的修改数据的副作用副作用、、文档的副作用文档的副作用。。••••••(1)(1)(2)(2)(3)(3)(4)(4)••────(1)(1)(2)(2)(3)(3)(4)(4)••••••••••。改正性维护适应性维护完善性维护可理解性�可测试性�可修改性��可靠性�可移植性�可使用性��效率�••••––––––••••””””••••11..••••22..••••––平均失效间隔时间平均失效间隔时间MTTFMTTF––平均修复时间平均修复时间MTTRMTTR––有效性有效性AA==MTBD/(MTBD+MDT)MTBD/(MTBD+MDT)––根据程序错误统计数字�进行可靠性预根据程序错误统计数字�进行可靠性预测测。。常用方法是利用一些常用方法是利用一些可靠性模型可靠性模型��根据程序测试时发现并排除的错误数预根据程序测试时发现并排除的错误数预测平均失效间隔时间测平均失效间隔时间MTTFMTTF。。––根据程序复杂性�预测软件可靠性根据程序复杂性�预测软件可靠性。。用程序复杂性预测可靠性�用程序复杂性预测可靠性�前提条件是前提条件是可靠性与复杂性有关可靠性与复杂性有关。因此可用复杂性。因此可用复杂性预测出错率。程序复杂性度量标准可用预测出错率。程序复杂性度量标准可用于于预测哪些模块最可能发生错误预测哪些模块最可能发生错误�以及�以及可能出现的错误类型可能出现的错误类型。。33..••••••––程序是否模块化程序是否模块化??结构是否良好结构是否良好??––程序是否可理解程序是否可理解??程序是否可靠程序是否可靠??––程序是否能显示任意中间结果程序是否能显示任意中间结果??––程序是否能以清楚的方式描述它的程序是否能以清楚的方式描述它的输出输出??––程序是否能及时地按照要求显示所程序是否能及时地按照要求显示所有的输入有的输入??––程序是否有跟踪及显示逻辑控制流程序是否有跟踪及显示逻辑控制流程的能力程的能力??––程序是否能从检查点再启动程序是否能从检查点再启动??––程序是否能显示带说明的错误信息程序是否能显示带说明的错误信息??44..••••••••••••CCnnAADDD=A/CD=A/C55..••••••––––––––––程序在执行之前是否初始化内存程序在执行之前是否初始化内存??––程序在执行之前是否测定当前的输入程序在执行之前是否测定当前的输入�输出设备�输出设备??––程序是否把与机器相关的语句分离了程序是否把与机器相关的语句分离了出来�集中放在了一些单独的程序模出来�集中放在了一些单独的程序模块中�并有说明文件块中�并有说明文件??–程序是否结构化程序是否结构化??并允许在小一些的并允许在小一些的计算机上分段计算机上分段((覆盖覆盖))运行运行??––程序中是否避免了依赖于字母数字或程序中是否避免了依赖于字母数字或特殊字符的内部位表示特殊字符的内部位表示??66..••。••••�––程序是否模块化程序是否模块化??结构是否良好结构是否良好??––是否消除了无用的标号与表达式�是否消除了无用的标号与表达式�以充分发挥编译器优化作用以充分发挥编译器优化作用??––程序的编译器是否有优化功能程序的编译器是否有优化功能??––是否把特殊子程序和错误处理子是否把特殊子程序和错误处理子程序都归入了单独的模块中程序都归入了单独的模块中??––是否以快速的数学运算代替了较是否以快速的数学运算代替了较慢的数学运算慢的数学运算??––是否尽可能地使用了整数运算�是否尽可能地使用了整数运算�而不是实数运算而不是实数运算??––是否在表达式中避免了混合数据是否在表达式中避免了混合数据类型的使用�消除了不必要的类型类型的使用�消除了不必要的类型转换转换??––––––77..••••––程序是否具有自描述性程序是否具有自描述性??––程序是否能始终如一地按照用户的程序是否能始终如一地按照用户的要求运行要求运行??––程序是否让用户对数据处理有一程序是否让用户对数据处理有一个满意的和适当的控制个满意的和适当的控制??––程序是否容易学会使用程序是否容易学会使用??––程序是否使用数据管理系统来自程序是否使用数据管理系统来自动地处理事务性工作和管理格式化、动地处理事务性工作和管理格式化、地址分配及存储器组织。地址分配及存储器组织。––程序是否具有容错性程序是否具有容错性??––程序是否灵活程序是否灵活??••••••••••••••••••••••提高可维护性的方法提高可维护性的方法••••••••••