


单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,Footer Text,*,/23,第七章 软件维护,软件维护概述,1,软件维护技术,5,软件维护过程模型,3,应注意的问题,2,小结,6,软件维护概述,软件维护的基本概念,软件维护的基本类型,维护的困难性,软件维护的定义,IEEE/EIA 12207ISO/IEC2008,中对软件维护的定义是:软件维护是指,由于软件产品出现问题或需要改进而对代码及相关文档的修改,,其目的是对现有软件产品进行修改的同时保持其完整性软件维护的必要性,软件维护能够改正错误软件维护能够改善设计软件维护能够实现软件的改进软件维护能够实现与其他系统的交互软件维护能够为使用不同的硬件、软件、系统的新性能以及通讯设备等而对软件进行改进软件维护能够完成遗留系统的移植软件退出使用遗留系统:仍能够使用的旧系统,有时对于业务运行来说至关重要原因:过时的语言或技术实现、昂贵的系统支持导致维护昂贵、结构性差软件维护的成本,软件维护阶段一般要消耗软件生命周期中经费开支的,大部分,软件维护的费用占软件总预算的比例:,70,年代的,35%40%,80,年代上升为,40%60%,90,年代已经占,70%,80%,软件维护的基本类型,维护的类型有,四,种:,纠错,性维护,适应性维护,完善性维护,预防性维护,国外的统计数字表明,完善性维护占全部维护活动的,50%,66%,,纠错性维护占,17%,21%,,适应性维护占,18%,25%,,其他维护活动只占,4%,左右,纠错性维护,在软件交付使用后,因开发时测试的不彻底、不完全,必然会有部分,隐藏的错误,遗留到运行阶段。
设计错误、编码错误、数据错误、文档错误,这些隐藏下来的错误在某些特定的使用环境下就会暴露出来为了,识别和纠正软件错误、改正软件性能上的缺陷、排除实施中的误用,应当进行的诊断和改正错误的过程,就叫做纠错性维护适应性维护,在使用过程中,,外部环境(新的硬、软件配置),数据环境(数据库、数据格式、数据输入,/,输出方式、数据存储介质),网络环境等其他可能发生的变化为使软件,适应外部、数据、网络的变化,,而去修改软件的过程就叫做适应性维护完善性维护,在软件的使用过程中,用户往往会对软件提出,新的功能与性能要求,为了满足,新的功能与性能要求,,需要修改或再开发软件,,以扩充软件功能、增强软件性能、改进加工效率、提高软件的可维护性这种情况下进行的维护活动叫做完善性维护实践表明,在几种维护活动中,,完善性维护所占的比重最大,即大部分维护工作是改变和加强软件,而不是纠错完善性维护不一定是救火式的紧急维修,而可以是有计划、有预谋的一种再开发活动预防性维护,预防性维护是防止问题发生而事先维护,目的是为了提高软件的可维护性、可靠性等,为以后进一步改进软件打下良好基础体系结构不良、数据结构不理想、文档不全、缺少变更记录等。
预防性维护定义为:,采用适当的方法对需要维护的软件或软件中的,某一部分(重新)进行设计、编码和测试,逆向工程、软件再工程等软件维护中应注意的问题(一),技术方面,程序的理解:有限理解,测试:完整测试消耗大,往往选择回归测试、局部测试软件运行中,协调测试困难影响分析,可维护性,影响分析,影响分析是对修改的影响进行完整分析,衡量消耗的可接受程度目标:,决定,改变的范围,这对合理计划和完成工作有重要意义,对完成工作,所需的资源,进行精确的估计分析改变的,费用,/,效益比,由于对软件进行变更往往是牵一发而动全身的,因此如果给出了一个变更,必须考虑到关联性的,复杂情况,可维护性,可维护性是指通过一定的手段,使软件可以被维护、改进、改动或修正,以满足特定的需求的方便程度决定要素:,可理解性,可测试性,可修改性,可移植性,可重用性,环境要素:,维护文档,运行环境,维护组织,维护质量,软件维护中应注意的问题(二),管理方面,契合组织的目标,:,延长软件生命、软件升级、改进的需要,但投资回报不明确权衡消耗与收益人力资源:吸引和维持软件维护队伍二等公民”误区,过程:需要开发过程没有的活动,如逆向工程,管理挑战,如何组织维护活动:责任到人,外包:有效控制是重点,确定服务的范围以及合约细节是挑战。
软件维护中应注意的问题(三),维护费用估算,参数模型,M=P+K e,(cd),M,是维护用的总工作量,,P,是生产性工作量,,K,是经验常数,,c,是复杂程度,,d,是维护人员对软件的熟悉程度生产性成本包括分析评价、修改设计和编码等非生产性成本包括程序理解、数据结构解释、接口特点和性能限度等基于经验,专家判断、类推、工作分解结构,软件维护过程模型,IEEE,维护模型图,分类与鉴别阶段,分析阶段,设计阶段,实现阶段,系统测试阶段,验收测试阶段,交付阶段,修改输入,软件维护技术,程序的理解,软件再工程,软件逆向工程,程序的理解,为了有效维护,需要阅读和理解程序,方法:,1,、文档理解、代码理解、注释理解,2,、代码浏览工具(,Source Insight,等),程序理解的任务:以软件维护、升级和再工程为目的,在不同的抽象级别上建立基本软件的概念模型,包括从代码本身的模型到基本应用领域的模型,即,建立从问题,/,应用域到程序设计,/,实现域的映射集,程序理解的具体任务,通过检查单个的程序设计结构,程序被表示成,抽象语法树、符号表或普通源文本包括手工代码阅读、人工提取、程序分析、静态分析和动态分析等。
尽量做到程序,隐含信息,的显性表示及程序,内部关系,的可视化如控制流、数据流分析、程序视图构造等从源代码中,提取信息,,并存放在通用的数据库中,然后通过查询语言对数据库进行查询检查程序构造过程中的,结构关系,,明确表示程序组成部分之间的依赖关系识别程序的,高层概念,,如标准算法、数据结构、语法及语义匹配等软件再工程,定义,软件再工程(,Re-engineering,)指对现有软件进行仔细审查和改造,对其进行,重新构造,,使之成为一个新的形式,同时包括随之产生的,对新形式的实现,软件再工程模型,数据重构,正向工程,库存目录分析,代码重构,逆向工程,文档重构,应用系统的库存目录:系统规模、使用年限、业务重要程度等信息根据相关信息选择再工程业务,后分配资源系统可以正常运作,并可预见能够支撑至终点,文档不变文档必须更新,但资源有限,部分重构系统关键业务,必须完全重构,则完全重构某些老程序的体系结构比较合理,但是,一些模块的编码方式却是难于理解、测试和维护的代码重构:不改变系统行为,只是对程序结构进行改变和优化,使其易于理解、测试和维护方法:分析源代码,标记与程序设计概念相违背的部分,重构新代码评审和测试。
全范围在工程活动,对当前数据体系结构进行分解,定义必要的数据模型,表示数据对象和属性,进行质量评审如数据结构较差,进行再工程数据结构改变影响体系结构和代码,,慎重,也称为,革,新或,改,造整个 系统代码、数据重构正向工程过程应用现代软件工程的概念、原理、技术和方法,重新开发现有的某些应用系统在大多数情况下,经过正向工程过程后,得,出的软件,不仅重新实现了现有系统的功能,而且增加了新功能,提高了整体性能软件逆向工程,软件逆向工程(,Software Reverse Engineering,)是分析目标系统,识别系统的构件及其交互关系,并且,通过高层抽象或其他形式来展现目标系统,的过程方法:分析系统,抽象系统和展现系统,从而实现协助用户理解系统的目的设计恢复的过程逆向工程过程,逆向工程主要内容,一、数据的逆向工程,二、处理的逆向工程,三、用户界面的逆向工程,四、逆向工程的工具,数据的逆向过程,一、数据结构提取,1,、模式分析:通过分析现有的结构化模式推出隐含的构造与约束,以提供一个原始的物理模式2,、程序分析:分析应用程序以及其他一些过程(如:触发器)的代码,以得到隐含的数据结构和完整性约束。
3,、数据分析:分析数据,以得到暗含的数据结构以及特性的数据模式,同时,对一些假设进行验证4,、模式集成:合并上述过程所得到的不同模式,最终得到完整的逻辑模式,其中包含隐式和显式的结构和约束二、数据结构的概念化,分为以下几个步骤:去除过时的和技术性的结构以及重命名;提取相关的语义信息;对被优化的构造进行识别和变形,(逆优化);检索每一个实现构造中的源概念结构;以及规范化处理的逆向过程,为了理解过程抽象,需要在,不同的抽象级别,(系统级、程序级、构件级、模式级和语句级)分析代码,对大型系统,通常用半自动方法完成逆向工程使用自动化工具帮助软件工程师理解现有代码的语义,然后将该过程的结果传递给重构和正向工程工具以完成再工程过程用户界面的逆向工程,弄清几个问题:,界面必须处理的,基本动作,是什么?,系统对这些,动作的行为反应,的简要描述是什么?,有哪些,界面的等价概念,是相关的?,逆向过程的工具,静态模型逆向工具,Rational Rose,Rigi,JBPAS,动态模型逆向工具,SCED,ISVis,Borland Together,理论和技术还不够完善,工具支持很重要,但是无法完全依赖本章小结,软件维护可以分为,纠错性维护、适应性维护、完善性维护、预防性维护,。
软件维护实践中经常会遇到各种困难,需要在技术、管理方面进行考虑,并对维护费用进行估算软件维护按IEEE 维护过程模型可以分为,七个阶段,程序的理解,对软件维护具有重要意义,程序理解的任务就是要揭示程序的功能与实现机制软件的再工程,是对现有软件进行仔细审查和改造,进行重新构造,最终成为一个新的形式,六种活动构成了再工程的循环模型软件逆向工程,包括数据逆向工程、处理逆向工程和用户界面逆向工程作业,为什么需要软件维护?简述软件维护的主要种类简述软件可维护性中软件自身的因素和软件维护环境两方面的内容简述,IEEE,软件维护过程模型试从不同抽象级别阐述应该如何理解程序,应得到什么输出什么是软件的逆向工程?简述其意义选择你认为是最困难的一种逆向工程活动进行阐述,具体分析其难点所在什么是软件的再工程?简述其主要步骤。