软件维护与项目管理.ppt
《软件维护与项目管理.ppt》由会员分享,可在线阅读,更多相关《软件维护与项目管理.ppt(102页珍藏版)》请在三一办公上搜索。
1、7,7.1软件维护,7.1.1 软件维护概述,软件维护主要是指根据需求变化或硬件环境的变化对应用程序进行部分或全部的修改,修改时应充分利用源程序修改后要填写程序改登记表,并在程序变更通知书上写明新旧程序的不同之处。,1软件维护概念,2软件维护的内容,软件的可维护性,软件的维护是十分困难的,为了使软件能易于维护,必须考虑使软件具有可维护性。,1可维护性定义,定义:软件能够被理解、校正、适应及增强功能的容 易程度。,软件的可维护性、可使用性、可靠性是衡量软件质量的几个主要特性,也是用户十分关心的几个问题。,软件的可维护性是软件开发阶段的关键目标。影响软件可维护性的因素较多,设计、编码及测试中的疏忽
2、和低劣的软件配置,缺少文档等都对软件的可维护性产生不良影响。软件可维护性可用下面七个质量特性来衡量,即可理解性、可测试性、可修改性、可靠性、可移植性、可使用性和效率。对于不同类型的维护,这七种特性的侧重点也是不相同。,2可维护性质量,目前有若干对软件可维护性进行综合度量的方法,但要对可维护性做出定量度量还是困难的。还没有一种方法能够使用计算机对软件的可维护性进行综合性的定量评价。下面是度量一个可维护的软件的七种特性时常采用的方法,即质量检查表、质量测试、质量标准。质量检查表是用于测试程序中某些质量特性是否存在的一个问题清单。质量测试与质量标准则用于定量分析和评价程序的质量。由于许多质量特性是相
3、互抵触的,要考虑几种不同的度量标准去度量不同的质量特性。,3提高可维护性的方法,从下面五个方面来阐述如何提高软件的可维护性:,(1)建立明确的软件质量目标,(2)使用先进的软件开发技术和工具,如果要程序满足可维护性七个特性的全部要求,那么要付出很大的代价,甚至是不现实的,但有些可维护性是相互促进的,因此要明确软件所追求的质量目标。,利用先进的软件开发技术能大大提高软件质量和减少软件费用。面向对象的软件开发方法就是一个非常实用而强有力的软件开发方法,用面向对象方法开发出来的软件系统,稳定性好,比较容易修改,比较容易理解,易于测试和调试,因此,可维护性好。,(3)建立明确的质量保证,质量保证是指为
4、提高软件质量所做的各种检查工作。质量保证检查是非常有效的方法,不仅在软件开发的各阶段中得到了广泛应用,而且在软件维护中也是一个非常主要的工具。,在检查点进行检查;验收检查周期性的维护检查;对软件包的检查。,为了保证可维护性,以下四类检查是非常有用的:,(4)选择可维护的语言,程序设计语言的选择对维护影响很大。低级语言很难掌握,很难理解,因而很难维护。一般来说,高级语言比低级语言更容易理解,第四代语言更容易理解,容易编程,程序容易修改,改进了可维护性。,(5)改进程序的文档,程序文档是对程序功能、程序各组成部分之间的关系、程序设计策略、程序实现过程的历史数据等的说明和补充。程序文档对提高程序的可
5、阅读性有重要作用。为了维护程序,人们必须阅读和理解程序文档。,软件维护的实施,1主要任务,软件维护的主要任务包括以下两点:,(1)维护组织机构 对于大型软件系统,建立一个专门的维护组织机构是必需的。即使是对较小的软件系统,也要委派一个专人负责软件维护工作,特别是收集、保存、整理维护活动的文档资料的工作是必须随时要做的。在维护活动开始之前必须明确维护活动的审批制度。每个维护要求都要通过维护管理员转交给系统管理员去评价。系统管理员对维护申请做出评价后,由主管部门(人)决定是否进行软件修改。接到审批的维护申请报告后,将维护任务下达给指定的维护人员,并监控维护活动有条不紊地开展。合理的组织机构和精干的
6、维护人员是保障维护活动顺利实施的基础。,(2)维护报告 任何维护申请都应该按规范化的方式提出。通常要求用户填写维护申请表。表中必须完整地描述每个错误发生的环境,包括:输入数据、输出结果等有关信息。对于适应性或完善性的维护要求,还应该提出一份修改说明书,提出用户希望的修改。维护申请表交维护组织后,经有关人员认真分析,并根据分析结果制定软件修改报告,内容应包括:,维护要求的性质;维护活动的优先顺序;计算满足维护申请表中提出的软件变更所需要的工作量;预计软件变更后的状况。,2维护阶段,软件维护的六个阶段如下:,(1)实施阶段包括软件准备和过渡活动,比如维护计划的构思与创建,为解决开发过程中所发现的问
7、题而做的准备,以及后续的产品配置管理。(2)一旦维护团队正式接手应用,就进入了问题与修改分析阶段。维护人员必须分析每个请求,对其进行确认(通过重建应用环境)并验证其有效性,调查并提出解决方案,记录请求和解决方案,最后获取所有需要的授权来应用修改。(3)该阶段为实施修改的阶段。,(4)在接受修改阶段,由请求的提交者进行检查,以确保所做的修改解决了相应的请求。(5)迁移阶段(比如平台迁移)是个特例,并不会在所有的维护任务中都出现。如果软件必须在功能没有任何改变的情况下迁移到另一个平台上,那么这个阶段将被实施,通常这项任务会被指派给一个维护工程团队。(6)最后一个维护阶段,也并不会在每个软件中都发生
8、,就是对软件某一部分的弃用。,3维护问题,软件维护的绝大多数问题与软件定义和软件开发阶段所采用的设计方法、指导思想、技术手段、开发工具等有直接的关系,同时与维护工作的性质也有一定的关系。,主要问题是:(1)理解别人写的程序通常非常困难,而且困难程度随着软件配置成分的减少而迅速增加。如果仅有源代码而没有相关的文档,问题会更加严重。(2)严格按规范化方法开发的软件系统一般不需要大的维护活动,而需要维护的软件系统却往往因为没有必需的文档或文档残缺不全,使得维护活动进展非常艰难。,(3)当需要对软件进行维护时,很难指望熟悉软件系统的原开发人员能全力以赴地亲临现场参与维护活动。(4)绝大多数软件在设计时
9、没有考虑将来的修改。(5)软件维护不是一项吸引人的工作。最出色的、成功的维护也只不过是保证他人开发的系统能正常运行,而且维护别人开发的软件经常受挫,使得维护人员无成就感。,7.2 软件再工程,7.2.1 软件再工程概念,软件再工程是指对既存对象系统进行调查,并将其重构为新形式代码的开发过程。最大限度地重用既存系统的各种资源是再工程的最重要特点之一。从软件重用方法学来说,如何开发可重用软件和如何构造采用可重用软件的系统体系结构是两个最关键问题。不过对再工程来说前者很大一部分内容是对既存系统中非可重用构件的改造。,软件再工程模型是一个循环模型,该模型中的每个活动均可能被重复。软件再工程模型如有图所
10、示:,(1)库存目录分析(Inventory Analysis),每个软件组织应该保存所有应用的库存目录。该目录可能仅仅是包含如下信息的一个电子表格模型:,应用的名字。最初构建的年份。已对它进行过的实质性修改的次数。完成这些修改所花费的总劳动。最好一次实质性修改的日期。最好一次实质性修改所花费的劳动。它驻留的系统。和它有接口的应用。,它访问的数据库。过去18 个月所报告的错误。用户数量。它被安装的机器数量。程序结构的复杂性、代码的复杂性和文档的复杂性。文档的质量。整体可维护性(等级值,scale value)。预期寿命(以年算)。预期在未来36 个月内的修改次数。年度维护成本。,年度运作成本。
11、年度业务值。业务重要程度,应该对每一个现存的应用收集上面列出的信息,通过按照业务重要程度、寿命、当前可维护性、以及其他局部重要标准对这些信息排序,可以选出再工程的候选者,然后可以明智地分配资源。必须注意:上面描述的目录表应该定期整理修订,应用的状况(如,业务重要程度)可能随时间发生变化,其结果是:再工程的优先级将发生变化。,(2)文档重构(document restructuring),文档重构主要是实现了同一概念信息的聚集,是更接近于人类进行信息查找的思维方法。,贫乏的文档是很多遗产系统的注册商标。但是,我们对此可做些什么呢?选项1:建立文档是非常耗费时间的。系统正常运作,我们将保持现状。在
12、某些情况下,这是一个正确的方法,不可能为数百个计算机程序重新建立文档。如果一个程序是相对静止的,正在走向其有用生命的末端,并且可能不会再经历什么变化,那么,让它保持现状。,选项2:文档必须更新,但是,我们只有有限的资源。我们将使用“使用时建文档”的方法。可能不需要对某应用全部重构文档,而是对系统中当前正在进行改变的那些部分建立完整文档。随时间流逝,将得到一组有用的和相关的文档。选项3:系统是业务关键的,而且必须完全地重构文档。即使在此情形,明智的方法是设法将文档工作减少到必需的最小量。每个选项均是可行的,软件组织必须选择最适合于每种情形的方法,(3)逆向工程(reverse engineeri
13、ng),术语“逆向工程”源于硬件领域,一个公司分解某竞争者的硬件产品去了解竞争者的设计和制造“秘密”。如果得到了竞争者的设计和制造规约,则这些秘密可以被很容易地理解。但是,这些文档是别人专有的,对做逆向工程的公司来说是不可得到的。本质上,成功的逆向工程通过检查产品的实际样本导出一个或多个关于产品的设计和制造规约。,软件的逆向工程是相当类似的。然而,在大多数情况下,被逆向工程的程序不是来自于竞争者,而是公司自己的软件(经常是很多年以前的)。将被理解的“秘密”是未开发过相关规约所带来的模糊不明。因此,软件的逆向工程是分析程序以在比源代码更高的抽象层次上创建程序的某种表示的过程。逆向工程是一个设计恢
14、复过程,逆向工程工具从现存的程序中抽取数据、体系结构和过程的设计信息。,(4)代码重构(code restructuring),最常见的再工程类型(实际上,在这里使用术语“再工程”是有疑问的)是代码重构。某些遗产系统具有相对完整的程序体系结构,但是,个体模块被以难于理解、测试和维护的方式编码。在这样的情形下,在可疑模块内的代码可被重构。为了完成该活动,用重构工具去分析源代码。标注出和结构化程序设计概念相背的部分,然后重构代码(此工作可以自动进行)。复审和测试生成的重构代码以保证没有引入异常和不规则。更新内部的代码文档。,(5)数据重构(data restructuring),数据体系结构差的程
15、序将难于进行适应性修改和增强。事实上,对很多应用来说,数据体系结构比源代码本身对程序的长期生存力有更大影响。和代码重构不同,数据重构发生在相当低的抽象层次上,它是一种全范围的再工程活动。在大多数情况下,数据重构以逆向工程活动为开始,当前的数据体系结构被分解。必要时,定义数据模型,标识数据对象和属性,并从质量的角度复审现存的数据结构。,当数据结构较差时(例如,平坦文件正被实现,而关系型方法将大大地简化处理),数据被再工程。因为数据体系结构对程序体系结构及其中的算法有很强的影响,对数据的改变将总是会导致体系结构或代码层的改变。,(6)正向工程(forward engineering),在理想的情况
16、,可以使用自动的“再工程引擎”来重建应用,旧的程序被输入引擎,分析、重构、然后以展示软件质量最好的方面的形式重新生成。在短期内,这样的“引擎”还不可能出现。正向工程也称为革新或改造,不仅从现存软件恢复设计信息,而且使用该信息去改变或重构现存系统,以改善其整体质量。在大多数情况,被再工程的软件重新实现现存系统的功能,并且加入新功能和/或改善整体性能。,7.2.2 逆向工程,逆向工程是对产品设计过程的一种描述。逆向工程产品设计可以认为是一个从产品到设计的过程。简单地说,逆向工程产品设计就是根据已经存在的产品,反向推出产品设计数据的过程。随着计算机技术在各个领域的广泛应用,特别是软件开发技术的迅猛发
17、展,基于某个软件,以反汇编阅读源码的方式去推断其数据结构、体系结构和程序设计信息成为软件逆向工程技术关注的主要对象。,逆向工程过程及用于实现该过程的工具的抽象层次是指可从源代码中抽取出来的设计信息的精密程度。理想地,抽象层次应该尽可能高,即,逆向工程过程应该能够导出过程的设计表示(一种低层的抽象);程序和数据结构信息(稍高一点层次的抽象);数据和控制流模型(一种相对高层的抽象);以及实体-关系模型(一种高层抽象)。随着抽象层次增高,软件工程师获得更有助于理解程序的信息。,逆向工程过程的完整性是指在某抽象层次提供的细节程度。在大多数情况,随着抽象层次增高,完整性就降低。交互性是指为了建立一个有效
18、的逆向工程过程,人和自动工具“集成”的程度。在大多数情况,随着抽象层次增高,交互必须增加,而完整性将遭受损害。如果逆向工程过程的方向是单向的,所有从源程序中抽取的信息被提供给软件工程师,他们然后可以在任何维护活动中使用这些信息。如果方向是双向的,则信息被输入到再工程工具,以试图重构或重生成旧程序。,逆向工程的核心是被称为抽取抽象的活动,工程师必须评价旧程序并从源代码(经常是无文档的)中抽取出被执行的处理、被应用的用户界面、以及被使用的程序数据结构或数据库的有意义的规约。,1处理的逆向工程,第一个真正的逆向工程活动从理解然后抽取源代码所表示的过程抽象的启图开始。为了理解过程抽象,要在不同的抽象层
19、次分析代码:系统、程序、模块、模式和语句。在进行更细节的逆向工程前必须理解整个系统的整体功能。这为进一步的分析建立语境,并提供对系统中应用间的互操作问题的洞悉。构成应用系统的每一个程序代表了在高详细层次的功能抽象,建立表示这些功能抽象间的交互的块图;每个模块执行某种子功能并表示某种定义的过程抽象,为每个模块建立处理叙述。在某些情况,系统、程序和模块规约已经存在,在此情况下,复审这些规约以保持和现存代码的相符性。,当考虑模块中的代码时,事情变得更复杂。工程师需寻找表示类属过程模式的代码段。几乎在每个模块中,一个代码段为处理(在模块内)准备数据,一个不同的代码段完成处理工作,而另一个代码段准备处理
20、的结果以从模块输出。在每个代码段中,我们可能遇到更小的模式(例如,数据确认和范围检查经常出现在为处理准备数据的代码段中)。对大型系统,通常用半自动方法来完成逆向工程。,2数据的逆向工程,数据的逆向工程发生在不同的抽象层次。在程序层,作为整体再工程努力的一部分内部的程序数据结构必须被逆向工程。在系统层,全局数据结构(如,文件、数据库)经常被再工程以便符合新的数据库管理范型,当前全局数据结构的逆向工程设置了引入新的系统范围数据库的场所。,针对内部程序数据的逆向工程技术着重于对象的类的定义。这是通过意图组合相关程序变量的对程序代码的检查来完成的。在很多情况下,在代码中的数据组织标识了抽象数据类型,例
21、如,记录结构、文件、列表和其他数据结构经常提供类的最初指示。,(1)内部数据结构,Breuer 和Lano建议了逆向工程类的下列方法:标识程序中记录关于全局数据结构(如,文件或数据库)的重要信息的标记和局部数据结构。定义在标记和局部数据结构与全局数据结构间的关系。例如,在文件空时某标记可能被设置,或某局部数据结构可能作为一个缓冲区,它包含从某中心数据库获取的最后100 个记录。对每个表示一个数组或文件的变量(在程序中),列出所有与其有逻辑联系的其他变量。这些步骤使得软件工程师能够在和全局数据结构交互的程序中标识类。,(2)数据库结构,不管其逻辑组织和物理结构,一个数据库允许数据对象的定义并支持
22、在对象间建立关系的方法。因此,将一个数据库模式再工程到另一个模式需要对现存对象和它们的关系的理解。可运用下面步骤将现存数据模型定义为再工程一个新的数据库模型的先驱:,(1)通过复审在平坦文件数据库中的记录或在关系模式中的表建立一个初始的对象模型。可以获得被定义为模型的一部分的类。包含在记录或表中的项成为类的属性。,(2)确定候选键。检查属性,确定它们是否被用于指向另一个记录或表,那些作为指针的属性成为候选键。(3)精化实验性的类。确定是否相似的类可被组合到某单个类中。(4)定义一般化。检查具有很多相似属性的类,确定是否应该构造一个,将一般化类放在其头部的类层次。(5)发现关联。建立类间的关联。
23、,一旦知道了定义在上面步骤中的信息,则可以应用一系列变换将旧的数据库结构映射为新的数据库结构。,3用户界面的逆向工程,随着高级的GUI 对每种类型的基于计算机的产品和系统成为必须的,用户界面的重新开发已经成为最常见的再工程活动类型之一。但是,在用户界面可以被重建之前,应该进行一个逆向工程活动。为了我们能完全地理解某现存的用户界面(UI),必须刻划界面的结构和行为。Merlo 及其同事提出了三个基本问题,它们必须在UI 的逆向工程开始前被回答:,什么是界面必须处理的基本动作例如,击键和按鼠标?什么是系统对这些动作的行为反应的简洁描述?“替代者”意味着什么?或更精确地说,什么界面的等价概念是相关的
24、?,行为建模符号可以提供一种表示上面提出的头两个问题的答案的工具,对创建行为模型必需的多数信息可以通过观察现存界面的外部表现而得到,但是,对创建行为模型必需的附加信息必须从代码中抽取。,在描述发生在界面中的进程时,一个关键的不寻常点是某些对象必须准备对用户输入做出反应,这些输入不能被控制,只能被拒绝。这样,人们必须抓住这个概念,至少有两种并发的活动实体:系统和用户。第二,人们必须能够表达一定的“外部”选择,这些选择不在用户的控制之下。对界面的描述使用代理和动作。一个代理是完成系统某方面功能的某种东西,动作允许代理间相互通信。,7.2.3 重构,重构(Refactoring)就是在不改变软件现有
25、功能的基础上,通过调整程序代码改善软件的质量、性能,使其程序的设计模式和架构更趋合理,提高软件的扩展性和维护性。通常,重构并不修改整体的程序体系结构,它趋向于关注个体模块的设计细节以及定义在模块中的局部数据结构。如果重构扩展到模块边界之外并涉及软件体系结构,则重构变成了正向工程重构的三次法则:事不过三,三则重构。意思是说,一件事情,第一次只管去做,第二次做类似的事情会产生反感,但无论如何还是做了,第三次再做类似的事情,就应该重构。所以,应该在添加新功能时进行重构.,在修改缺陷时进行重构以及在代码复审时进行重构。,代码重构,代码重构指对软件代码做任何更动以增加可读性或者简化结构而不影响输出结果。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件 维护 项目 管理

链接地址:https://www.31ppt.com/p-6146006.html