资源预览内容
第1页 / 共25页
第2页 / 共25页
第3页 / 共25页
第4页 / 共25页
第5页 / 共25页
第6页 / 共25页
第7页 / 共25页
第8页 / 共25页
第9页 / 共25页
第10页 / 共25页
亲,该文档总共25页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
浅析面向对象的软件维护,面向对象方法与技术,专 业: 软件工程 姓 名: 王 宜 政,主要内容,一、是什么涉及到的相关概念及基本原理 二、为什么面向对象的软件维护的必要性 三、做什么维护过程以及常用的CASE工具 四、怎么做维护阶段存在问题及解决方案 五、谁去做对面向对象软件维护员的要求 六、结束语完成学习报告后的小结与感想,浅析面向对象的软件维护,一、是什么涉及到的相关概念及基本原理,(一)面向对象 按人们认识客观世界的系统思维方式,采用基于对象的概念建立模型,模拟客观世界分析、设计、实现软件的办法。面向对象的理念能使计算机软件系统与现实世界中的系统一一对应。 在面向对象的世界中,人们通常考虑的是做什么,而不是怎么做的问题。其基本思想是使用对象、类、继承、封装、消息等基本概念来进行软件设计。即:面向对象(object-oriented) = 对象(objects)+分类(classification)+继承(inheritance)+通信(communication),浅析面向对象的软件维护,一、是什么涉及到的相关概念及基本原理,(二)面向对象的优点 1.面向对象技术可以解决软件产品的规模越变越大的问题。 2.设计出的良好对象在概念上和物理上是一个独立的单元。 3.降低了软件产品的复杂度,从而使软件开发变得更容易。 4.软件维护是面向对象技术满足人们对其期望的又一方面。,浅析面向对象的软件维护,一、是什么涉及到的相关概念及基本原理,(三)软件维护 在客户接收了产品之后,开发人员对产品进行的改变就称为维护。维护不是一种当产品安装到客户计算机上之后才勉强进行的活动;相反,它是软件过程中整体组成的一部分,必须从软件开发的一开始就对它进行计划。 产品通过验收测试后就交给客户,然后安装产品,并按照它的设计用途使用它。然而,任何实用的产品几乎都需要在维护阶段进行维护,以便纠正错误或扩展产品功能。由于产品不仅仅包括源代码,所以在产品移交给客户后,对文档、手册或其他任何部分的改动均属于产品维护。,浅析面向对象的软件维护,一、是什么涉及到的相关概念及基本原理,(三)软件维护 右图是软件生命周期模型的示意图。在该软件生命周期模型中,前四个阶段是开发期,最后一个阶段是运行期,也叫维护阶段。从图中可看出任何一个软件都会有一个维护阶段,而且会是一个代价高昂的维护阶段。不论一个软件在开发之初被认为是多么的好,功能如何的完美,界面如何的友好,经过一段时间的运行,客户都会要求有更强的功能和更好的适应性。也就是说,只有不断的更新维护,软件才会更具生命力。,浅析面向对象的软件维护,一、是什么涉及到的相关概念及基本原理,(四)面向对象的软件维护 面向对象的软件工程方法为软件维护提供了有效的途径。程序与问题域是一致的,各个阶段的表示是一致的,从而大大减小了理解的难度。无论是发现了程序中的错误而逆向追溯到问题域,还是需求发生了变化而从问题域正向地追踪到程序,道路都是比较平坦的。同时由于系统中最容易发生变化的“功能”这一因素,被作为对象的服务而封装在对象内部,使一个对象的修改对其他对象的影响很少,避免了所谓的“波动效应”。 具体说来,两方面的原因决定了维护对象是容易的。首先,概念独立性(封装)意味着很容易判断出产品的哪一部分必须进行修改,以达到某一确定的维护目标无论是对完善性维护还是对纠错性维护。其次,信息隐藏确保了对象本身的修改不会在该对象以外产生影响,因此可大大降低回归错误的数量。,浅析面向对象的软件维护,二、为什么面向对象的软件维护的必要性,(一)软件维护具有极端的重要性 1.维护是软件生命周期中时间和金钱花费最昂贵的一个阶段。由图可知,开发上每花费1分钱,则在维护上就会花费2分钱。整个软件耗费的大约2/3都用于了维护,更有些组织投入80%的时间和努力用于维护。 2.有时人们认为只有坏软件才需要维护,实际却恰恰相反。人们通常会将坏软件扔掉,而将最好的软件在10年、15年甚至20年的时间范围内进行改进和扩展。 3.维护可看作是售后服务,提供优秀的维护服务令客户满意,对每个软件开发公司而言都是重要的。 4.软件产品是现实世界的模型,而现实世界是不断变化着的,因而必须不断地对软件进行维护,以保证它能精确地反映现实世界的变化。,浅析面向对象的软件维护,二、为什么面向对象的软件维护的必要性,(二)对产品进行修改的主要原因 1.第一个原因是纠正错误,包括规格说明错误、设计缺陷、编码错误、文档错误以及其他任何错误,这叫做纠错性维护。 2.维护程序员将绝大部分时间用于完善性维护,在这类维护中,需要修改源代码,以提高产品的有效性。 3.对产品进行修改的第三个原因是适应性维护,就是为了适应产品运行环境的变化而做的修改。 4.其余4%的维护时间用于除上述三种维护以外的其他维护工作。,浅析面向对象的软件维护,二、为什么面向对象的软件维护的必要性,(三)导致维护在生命周期中所占比例较大的原因 1.软件的开发是有时间限制的,而软件的使用是没时间限制的。 2.软件的“逻辑产品”特性和缺少文档决定了软件的维护比较困难。 3.需求分析、开发方法缺陷和非结构化设计会导致软件维护困难。 4.软件维护会产生副作用,最大的问题是:“以前本来是正确的部分,有可能在修改以后变成错误的了”。 5.软件维护的管理不规范,维护工作不吸引人,也是维护困难的原因。,浅析面向对象的软件维护,三、做什么维护过程以及常用的CASE工具,(一)维护过程 维护是一项涉及面很广的工作,一旦某个维护目标确定之后,维护人员必须先理解将被修改的系统,然后产生一个维护方案。由于程序的修改不一定是局部性的,某处的修改很可能会影响到程序的其它部分,所以产生维护方案时需考虑的一个重要问题,就是修改的影响范围和波及作用。按方案完成修改后还要对程序进行重新测试,如测试不能通过,则要重复上述步骤;如测试通过则可修改所有文档。右图简略地说明了维护的过程。,浅析面向对象的软件维护,三、做什么维护过程以及常用的CASE工具,(二)维护步骤 总体步骤:修改软件需求说明修改软件设计设计评审重新编码单元测试集成测试回归测试确认测试复审。具体说来,包括以下几个方面: 1.在产品运行不正确或出现残余的错误时,用户须提交错误报告。错误报告须包括足够的信息,以使维护程序员能再现那个错误。 2.维护程序员向该产品的所有用户递交的错误报告,须包括发现但尚未纠正的错误,以及在错误纠正之前,关于用户如何绕过错误的建议。 3.一旦决定进行纠错性维护,维护程序员就应该查找软件运行失败的原因,并承担起修正该错误的任务。代码改变后,须进行回归测试并及时更新文档,以反映所做的修改。 4.接下来是把新版本发布给用户,不过产品在发布之前,需通过一个独立小组进行的软件质量保证(SQA)。得到SQA小组的批准之后,新版本才可以发布。,浅析面向对象的软件维护,三、做什么维护过程以及常用的CASE工具,(三)CASE工具简介 CASE是Computer-Aided Software Engineering的缩写,它代表计算机辅助软件工程,而不是计算机自动化软件工程。在软件产品的开发过程中,需要进行不同的操作。CASE工具可以完成与软件开发有关的大部分繁重工作,包括创建并组织所有注入计划、合同、规格说明、设计、源代码和管理信息这样的人工制品。 文档对于软件的开发和维护至关重要,但大多数从事软件开发的个人并不喜欢生成或更新文档。CASE工具并不只限于对文档的帮助,还可以帮助软件工程师应付软件开发的复杂性,特别是在处理所有的细节上。 CASE工具包含了计算机支持软件工程的所有方面,包括用于计划和估算的CASE工具、需求阶段的CASE工具、规格说明阶段的CASE工具、面向对象分析阶段的CASE工具、设计阶段的CASE工具、实现阶段的CASE工具、实现与集成阶段的CASE工具、维护阶段的CASE工具等。,浅析面向对象的软件维护,三、做什么维护过程以及常用的CASE工具,(四)维护阶段常用的CASE工具 维护是困难和苦恼的,管理部门至少要给维护小组提供必需的工具,以保证产品维护的效率与效果。我们没有理由指望维护程序员手工跟踪各种版本号,并在模块每次更新后为其指定下一个版本号。 1.如果操作系统不包含版本控制功能,就需要一个版本控制工具,如sccs(源代码控制系统)、rcs(版本控制系统)或cvs(并行版本系统)。 2.同样也不能指望手工控制冻结技术,以及其他确保版本号能够相应更新的方法。这就需要一种配置工具,一种典型的商业软件是CCC(修改、配置、控制)。 3.即使软件开发单位不愿意购买一整套配置工具,也应至少连同版本控制工具一起,购买一套建造工具。 4.在维护阶段必需的另一类CASE工具是错误跟踪工具用于记录已经报告但尚未纠正的错误。 5.最后就是有助于逆向工程和再工程的CASE工具,这类工具能够以可视化显示产品结构,如Battlemap Teamwork、Bachman Reengineering Product Set等。,浅析面向对象的软件维护,四、怎么做维护阶段存在问题及解决方案,(一)专门针对面向对象软件维护的三大问题,浅析面向对象的软件维护,四、怎么做维护阶段存在问题及解决方案,(一)专门针对面向对象软件维护的三大问题 1.第一个问题:首先来看一段C+实现的类层次结构。displayNode()方法是在UndirectedTree类中定义的,并由DirectedTree类继承,然后在RootedTree类中重新定义。重定义后的方法由BinaryTree类和BalancedBinaryTree类继承,并在BalancedBinaryTree类中调用。因此,维护程序员必须研究整个继承结构才能理解BalancedBinaryTree类。 所以为了理解displayNode()方法在BalancedBinaryTree类里的行为,维护程序员必须仔细阅读产品的大部分代码。更糟的是,继承结构通常不是这种线型结构,而是涵盖了整个产品,这与前面描述的对象“独立性”相去甚远。这个问题的解决方案很简单,使用展开类的CASE工具即可。,浅析面向对象的软件维护,四、怎么做维护阶段存在问题及解决方案,(一)专门针对面向对象软件维护的三大问题 2.第二个问题是由多态和动态绑定这两个概念造成的。在基类FileClass中声明了一个抽象方法open(),然后3个子类DiskFileClass、TapeFileClass和DisketteFileClass分别实现了该方法,每个方法的名称都是相同的open。假设myFile作为FileClass类的实例被声明为一个对象,那么要维护的代码就包括了myFile.open()方法。由于多态和动态绑定的原因,myFile在运行时可能是3个子类中任何一个类的成员。一旦运行时系统确定了myFile所属的类,就会调用相应的open()方法。 这种结果有利于面向对象产品的开发,但却是不利于维护工作的。如果维护程序员在代码中遇到了myFile.open()方法的调用,为了理解这部分产品,他必须分别考虑myFile是任意一个子类实例时所发生的情况。CASE工具在这种情况下也无能为力,因为静态工具一般是无法解决动态绑定问题的。判断大量绑定究竟会发生在哪里,唯一的方法就是进行代码跟踪,要么在计算机上运行代码,要么就手工跟踪。,浅析面向对象的软件维护,四、怎么做维护阶段存在问题及解决方案,(一)专门针对面向对象软件维护的三大问题 3.第三个问题是由继承造成的。假设某一基类满足了一新产品中多数但不是全部的要求,则可以定义子类,并加入新的一些特征,而原有的特征可能会被重命名、重新实现、取消或做其他改动。再假设现在基类本身发生了改变,则所有的子类均会产生相同的变化。 也就是说继承的优势在于可以在不改变继承树(图)中其他类的情况下,给继承树(图)加入新的叶
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号