面向对象的软件维护论文(共10篇)
面向对象的软件维护论文 篇1
面向对象的方法在现在的软件开发的运用中是越来越广泛, 但是相应的测试方法并没有做出相应的改变, 仍然有很多使用的还是传统软件使用的测试方法, 出现这样的结果不是单方面的原因, 既有在采用面向对象方法开发软件的时候在设计和分析阶段保留的文档不够全面或者并没有按照面向对象的方法进行保存, 造成了在设计测试的时候不能够找到原始文档。还有可能就是现在并没有有效的方法是针对面向对象方法的。这样就会使得工作变得更加的复杂, 就会增加工作量。但是测试的结果也可能并不理想, 使得最后得到的软件并不能够达到用户的期望。因此, 如何使用面向对象的方法来测试软件是非常必要的。
1 面向对象测试与传统测试技术的异同
首先, 这两种技术的测试过程是相同的。都要对整个测试进行计划, 设计出测试用例, 运行测试用例, 根据结果进行测试分析, 最后是用户验收。其次, 这两种技术的测试目标也是相同的。测试的目的都是为了使得设计出来的软件能够达到期望的功能。再次, 测试也是为了用尽可能少的工作量测试出软件尽可能多的错误, 虽然在这三个方面这两种技术都是相同的, 但是在测试计划和设计测试用例的时候是有很大的区别的, 这主要是归结于面向对象软件和传统的软件的设计思路不同。传统的软件是由各个功能模块组成的, 那么在测试计划和设计测试用例的时候就要注意的就是这些功能模块之间的关系。他们之间的关系, 它们之间是调用的关系。而面向对象的软件, 它更加注重的是对象之间的相互交流。它们是通过对象来传递它们之间的消息。这也是在测试计划和设计测试用例的时候需要考虑的, 怎样的测试用例才能够更好使得软件的功能的优缺点体现出来。
2 面向对象测试的意义与现状
类是面向对象软件中最重要的概念, 也是面向对象程序的最基本的组成要素。传统的软件是面向过程的, 软件的推进必须是一个过程完结的输出作为下一个过程的输入, 必须这样按部就班的进行下去。计算机的功能就是模拟人的行为的。这样的一种软件的方法是不能达到前面讲的效果的。人是一种群体动物, 必须是在一个团体下才能够使得事情向更好的方向发展。也就是在团体的作用之下才能使资源更优, 而面向对象方法的出现就是应了这样的需求。类就是实现这种需求的最好方法, 它既可以是对象又可以是事件, 通过类之间的相互作用也达到了这种消息之间的传递。这是因为这种软件方法的改变也就造就了软件测试的改变, 传统的软件测试方法完全不能达到用小的工作量来测试软件的错误。针对软件方法面向对象的软件测试也就应运而生了。而面向对象测试是势在必然的。
3 面向对象测试
3.1 面向对象的测试模型
大家比较熟悉的软件开发模型就是瀑布模型, 它包括了需求分析, 设计, 实现和测试。面向对象的开发模型变为了面向对象分析 (OOA) 、面向对象设计 (OOD) 和面向对象编程 (OOP) 3个阶段。面向对象分析阶段需要做的就是将整个问题总结出来, 转换成计算机能够识别的语言, 那么在这个阶段就需要选择使用什么样的编程语言。在面向对象设计阶段则需要的是选择什么样的类结构, 也就是需要些什么类, 这些类能够完成些什么工作。最后的面向对象编程阶段, 用选定的编程语言来实现设计出来的类结构。这种方法有个很大的优点就是在用户需求发生变化的时候, 能够不改变原有程序。测试模型如图1所示:
从上面的图中可以看出, 对面向对象开发模型的各个阶段都进行了测试的, 对面向对象分析的测试和面向对象设计的测试是非常必要的。如果把软件的前期工作做好了, 那么后续的工作进行的才有意义, 进行完了面向对象编程测试以后, 还有三个非常重要的测试, 就是面向对象单元测试, 面向对象集成测试和面向对象系统测试。其中面向对象单元测试和面向对象集成测试是两个工作量比较大的地方。而最后的面向对象系统测试就是要参考前面两个阶段测试结果了, 主要是以用户的需求为主的。六个阶段的测试是相辅相成的, 但是在每个阶段又有不同, 它们采用的方法也会不尽相同。下面就分别介绍单元测试, 集成测试和系统测试。
3.2 面向对象的单元测试
3.2.1 基础类测试
什么是基础类, 就是我们在面向对象设计时, 设计的类, 这些类可能是些对象, 也可能是些事件, 这里并不包括那些需要继承的类, 就是一些独立的类, 没有任何的消息传递。软件的测试就是要构造测试用例, 构造的这些测试用例必须满足两个条件:前置条件和后置条件。所谓前置条件就是发生这些测试用例要满足什么样的条件, 后置条件就是使用了这些测试用例会产生什么样的后果。测试用例既要满足前置条件又要满足后置条件。在设计测试用例的时候需要根据状态转换图, 因为状态转换图中的节点代表的是状态, 而节点与节点之间的连线则表示的是一个动作, 而测试用例就是需要了解如何促使这些动作发生。满足这些动作的发生应该是在一定的范围进行的, 那么对于临界值的设计是至关重要的, 在选择测试用例的时候临界值是非常好的一个标志。设计好了测试用例需要的是怎样来使它运行, 那么就还需要一个测试用例驱动程序。测试用例驱动程序主要的工作就是运行测试用例和得到运行结果。目前用的最多的测试驱动程序是Tester类。Tester类是抽象的概念, 使用这个类的最大好处就是能够为所有的测试人员提供默认的实现。测试人员可能会有如下的操作:运行其他所有类的测试驱动程序的公共函数, 记录下这些测试用例的结果, 必须运行所有要测试的类的测试用例, 检查所有类的所有常量。具体的Tester类主要负责实现测试用例的方法, 并将它们作为测试系列不可缺少的一部分来运行。
3.2.2 交互对象测试
面向对象的程序顾名思义就是由很多的对象构成的, 这些对象相互作用来解决某类问题的。程序中的这些对象有条不紊的相互工作这是这个程序成功的关键。完成了上面提到的单元类的测试, 那么交互对象测试则是为了这些单元类之间的消息传递能够正常的进行。交互测试有两种方法:一种是把设计的测试用例嵌入到程序的交互对象中去, 另一种方法则是用上面提到的Tester类提供的测试环境, 在这个环境下使得对象之间相互作用。这种测试的前提条件就是发送对象能不能够满足接受对象的要求。单位类测试的时候采用了临界值的方法, 这里是一些动作的发发生, 临界值的方法不并不适用。如果采用穷举的方法, 那么工作量将会变得很大, 也有可能出现无穷的情况, 交互对象的测试采用的是正交阵列的方法, 这种方法就是从影响交互对象的所有因素中选出那些对所有交互对象都有影响的子集中来确定测试用例。
如何选出这个子集是正交阵列提供的一种特殊方法, 该方法首先要设计出交互对象配对的方法, 选择的组合方式必须要限制组合数量的急剧递增。正交阵列就如下表1所示是一个数值矩阵。表中的每一行都是一个变量, 这个变量在测试的软件中就是表示的那些具有相同特性的类群。变量则会有一定的取值, 每一个取值则代表了某一个特定的类。把每个变量的所有取值都列举出来就成为了一个矩阵, 也列举出了所有可能的情况。
3.2.3 层次结构类测试
面向对象程序有一个很重要的特征就是继承, 继承的好处可以减少工作量, 不会使得工作变得冗余, 大大的提高程序的性能, 这是因为这些特点也使得继承具有一定的缺点, 那就是错误的传播率提高。继承是面向对象软件新出的概念, 那么在测试的时候对这一部分怎样设计测试用例是新的问题。如果对某个类的父类已经做了完整的测试, 那么对它的子类如何进行测试呢, 为了达到测试的目标就是用尽可能少的工作量来完成测试, 那么就需要复制对父类的某些测试部分, 又因为子类不仅仅继承了父类还有自己一些新的动作或者规范, 因此除去复制的部分再添加一些对新的动作或规范起作用的测试部分即可。这样就会大大的提供工作效率。
3.3 面向对象的集成测试
面向对象的集成测试即涉及到面向对象的结构集成又涉及到面向对象的功能集成。要实现结构和功能的集成则会有类之间的关联、聚合、多态、继承。那么在测试的时候可以分成以下几种情况:
1) 关联和聚合关系的测试:将所有具有关联和聚合关系的类放到一起, 这里不需要涉及新的测试用例, 只需要找到这些类中哪个类是最开始发出动作的, 最先发出动作类的测试用例作为这种关系的测试用例, 应用驱动程序来运行这个测试用例, 观察类之间的消息传递情况。
2) 继承关系的测试:在前面的层次结构类中提到了继承关系的测试, 参照前面的方法即可。
3) 多态/动态绑定的测试:面向对象中的多态增加了程序的运行路径的多样性, 那么在设计测试用例的时候就要考虑到这个因素, 由于运行的轨迹不同那么测试用例的设计可能就会出现变化。那么测试用例的数量就会发生变化, 应该包括所有的执行路径。
3.4 面向对象的系统测试
面向对象的系统测试和传统的系统测试是一样的, 都是为了验证设计出来的软件有没有达到用户的需求, 在满足了用户需求的前提下再考虑软件的性能是不是满足了最开始面向对象分析时提出的要求。系统测试的时候可以采用传统的系统测试的方法, 但是在设计测试用例的时候还是会有不同的, 测试用例的设计还是需要考虑从对象入手。
4 总结
通过对面向对象测试过程方法的分析, 根据本文中的图1就可以了解到测试并不是和开发过程分开的, 它们之间是密不可分的。在整个开发过程要随时都做到随时测试, 这样做的好处就是能够尽早的发现问题, 这样就会及时作出修改。该文中提到了很多解决不同阶段的测试方法, 但是这些都是在理论层次的探讨, 在实施的过程中仍然会遇到这样或那样的问题, 因此后面的研究就着重在如何使理论和实际达到高度的统一。
摘要:软件的测试时软件开发的重要部分, 是保证软件质量提高软件性能的关键。面向对象的软件测试具有它自己的特点, 需要与传统的软件测试相区别, 因此面向对象的软件测试则被分成不同的阶段, 本文将面向对象软件测试层次划分为六个个层次, 主要介绍了面向对象软件测试的以下三个层次:类测试、集成测试和系统测试。
关键词:面向对象,单元测试,集成测试,系统测试
参考文献
[1]武海丽.面向对象的软件测试[J].中国高新技术企业, 2008 (12) .
[2]李伟龙.面向对象的软件测试[J].科技资讯, 2008 (26) .
[3]刘维光.面向对象软件测试的方法研究[J].电脑知识与技术, 2006 (29) .
[4]刘颖, 姜永涛.面向对象软件测试技术与方法的管理[J].信息技术, 2005 (6) .
面向对象的软件维护论文 篇2
因此,快速原型方法能够很好的解决这一问题,并且在当前软件开发过程中应用十分广泛。快速原型方法能够在了解软件开发需求的前提下,以极快的速度制造出大概结构的过程,虽然不一定能够符合实际使用过程中的需求,但是却能够将开发软件的系统及时的展现出来,同时也能够根据软件的模型来进行更为准确的开发。使用快速原型方法,若是用户对软件开发过程中有不满意的情况,也能够及时的对原型进行改进,从而获取新的目标系统,没有重新进行开发的必要;快速原型建造工具也能够在很大程度上缩短创建系统的时间,使得系统原型在很短时间内就能创建成功,增强了软件的开发效率和质量,同时也促进了用户对软件的使用率,提升软件存在的价值。由于建立原型目的有所差别,在快速原型法实现过程中存在探索型、实验型和进化型等三种不同的类型。
探索型的目的是研究探索,明确木白哦系统的需求和特征需求;实验型是在实验目的下建立原型,在开发软件的前期建立原型来检测方法的可靠性。一般建立的背景为针对问题的方案;进化型目的是演示,为了能够更好的解决系统的适应性,从而生成演示型的系统开发模式。也就是说,在面向对象的软件工程中进行软件需求分析时,采用快速原型法能够提升使用效率,而且还能够避免一些不必要的阶段,节省大量投资。
4结束语
综上所述,软件需求分析对软件工程来说非常重要,不仅是作用于及时发现其中出现的问题,构建合理的原型来帮助分析工作的顺利进行,同时也有利于软件需求分析能够提升效率,并且减少一些经济支出,降低投资为下一个软件的开发做好准备。
参考文献
[1]蔺茹.软件工程中面向对象方法的优势分析[J].电子技术与软件工程,(24):54-55.
面向对象软件测试方法研究 篇3
关键词:软件测试;面向对象;类测试
中图分类号:TP311 文献标识码:A 文章编号:1674-7712 (2013) 24-0000-01
面向对象软件测试技术是针对使用面向对象技术开发的软件而提出的一种测试技术。面向对象开发技术和传统开发技术相比有新的特点,使用面向对象技术开发的程序具有高质量、高效率、易扩展、易维护等优点,这也给它的测试技术带来新的挑战。面向对象软件测试与传统的软件测试相比,由于面向对象技术开发的软件会出现传统软件技术中不存在或者不突出的错误,使得传统的软件测试中次要方面成为了现在的主要问题,影响了软件测试的方法和内容,增加了软件测试的难度。
一、软件测试
(一)软件测试
软件测试是使用人工操作或者利用测试工具按照测试方案和流程对软件产品进行功能和性能方面的评估,检验软件产品是否满足规定的需求或弄清预期结果与实际结果之间的差别的过程。
(二)面向对象对软件测试的影响
面向对象软件具有抽象性、封装性、继承性和多态性等特点,这些特点对软件测试产生了不同的影响。面向对象程序中子类可以继承父类的功能,父类进行了充分测试后,子类也要设计相应的测试用例进行充分测试,对子类进行测试时不仅要测试子类中的方法,还要重新测试与子类中重定义方法相关的类。面向对象软件测试时,对象的状态通常是信息隐蔽的,测试人员需要在测试类中添加适当的信息来表明对象的实现方法及其内部状态。对于面向对象软件的多态性形成的动态绑定的测试使用传统的静态分析策略是不合适的,需要使用动态的测试标准来解决这个问题。
二、面向对象软件测试方法
面向对象软件测试方法是从传统的软件测试方法中演化而来的,有与传统的软件测试相类似之处,但由于面向对象的软件开发具有继承性和多态性等特点,为了支持和加强数据隐藏的特性,面向对象的软件测试必须向一个类的接口添加操作,所以说面向对象的软件测试方法更复杂一些。
(一)面向对象软件单元测试
面向对象软件单元测试主要是类测试,包括方法测试和对象测试。类是面向对象程序设计的基本单位,对象是类的具体实例,类测试是来验证类的实现和类的说明是否完全一致,如果类的实现是正确的,那么类的每一个具体实例的行为也将是正确的。
面向对象的类测试首先要确定测试方法,通常可以通过代码检查和执行测试用例两种方法来测试类的代码。代码检查方法容易受人为错误的影响,在代码量很大的情况下也会加大它的工作量,而编写一个好的测试用例需要很丰富的经验和较高的技巧。通过类实现的功能来分析所要编写的测试用例,然后根据类的边界值来扩充测试用例。构建测试用例一般是基于前置条件或后置条件,为所有可能出现的情况及情况的组合确定测试用例的需求,在这些可能出现的情况组合下,根据这些需求来构建测试用例,而且还要针对实际情况创建特定输入值的测试用例,并确定它们的正确输出。
测试驱动程序是一个运行测试用例并能够收集运行结果的程序。在面向对象的软件测试中,设计核心类的测试驱动程序十分重要,要求该程序必须思路严谨、结构简单清晰并易于维护。当确定了类的可执行测试用例,测试驱动程序就要创建类的实例来运行该测试用例,并给出测试用例运行的测试结果。
(二)面向对象软件集成测试
面向对象软件集成测试主要是类簇测试。面向对象软件是由若干对象组成的,这些对象互相协调合作来实现软件的功能,在面向对象的软件开发中,对象间的相互协调即对象的交互对于程序的正确性来说是非常重要的,对象的交互方式决定了程序能做什么,从而也就决定了程序是否正确。对象的交互测试是在对类的单独测试的基础上实现的,它来确保对象之间相互传递消息的正确性,它一般执行测试的是嵌入到应用程序中的交互对象。
在面向对象的软件测试当中,除了要考虑对象交互特征面之外,还需要具体的测试技术去实现测试的要求,目前常用的面向对象软件集成测试的方法有抽样测试和正交阵列测试。抽样测试提供了一种运算法则,不需要首先明确测试用例的总体,从一组可能的测试用例中选择测试序列;正交阵列测试是一种特殊的抽样方法,它通过定义一组交互对象的配对方式组合来进行测试,同时要尽量限制测试组合的配置数目,正交阵列测试系统就是挑选某个样本的特定测试技术。
(三)面向对象软件系统测试
在对面向对象软件进行系统测试时,要保证被测系统的完整性,搭建与真实用户实际使用环境相同的测试平台,并且需要参考面向对象分析的结果,对软件的架构进行验证,确保软件可以完全再现问题空间以及完整实现用户需求。系统测试不仅是要检测软件的整体功能行为表现,也是对软件设计开发的再确认,它针对的是非功能需求的测试,包括功能需求以外的所有需求以及注意事项等。系统测试是针对完整软件产品的测试,包括软件、软件运行所依赖的硬件、外设、数据、支撑软件及接口等,确保开发的软件与其依赖的各种资源能够协调运行,形成完整的软件产品。系统测试是软件测试过程中非常重要的阶段,它对测试技术的要求也是最高的。在进行面向对象软件的系统测试时,测试技术人员需要与软件的用户进行交流,根据用户提出的需求给出系统的修改建议,结合用户需求对被测试软件进行测试分析,根据分析结果建立测试用例。
三、结束语
面向对象的软件测试技术是面向对象软件开发中的重要组成部分,本文从面向对象软件的特点出发,分析了面向对象软件测试对传统软件测试的影响,介绍了面向对象软件测试的方法。
参考文献:
[1]王艳丽.面向对象软件簇级测试用例自动生成方法研究与实现[D].长春工业大学,2011.
面向对象的软件开发过程 篇4
随着计算机应用领域的不断扩大, 软件的规模和复杂性也在不断增加, 我们需要按照更科学、有效的方法组织软件的生产与管理。面向对象技术首先在编程领域兴起, 并逐渐发展成熟, 并随着面向对象的测试、集成等技术的出现而发展为一套贯穿整个软件生命周期的方法体系。
面向对象技术首先在编程领域兴起, 并逐渐发展成熟, 并随着面向对象的测试、集成等技术的出现而发展为一套贯穿整个软件生命周期的方法体系。面向对象方法的基本思想是:从客观存在的事物 (即对象) 出发来构造软件系统, 并在系统构造中尽可能运用人类的自然思维方式。
具体地讲, 面向对象技术是从问题域中客观存在的事物出发构造软件系统, 用对象作为这些事物的抽象表示, 并以此作为系统的基本构成单位。每个对象都有其属性和方法, 属性表示事物的静态特征, 方法表示事物的动态特征。对象的属性和方法结合为一体, 对外屏蔽其内部细节, 称作封装。把具有相同属性和相同方法的对象归为一类, 类是对象的抽象描述, 每个对象是它所属类的一个实例。通过在不同程度上运用抽象的原则, 可以得到基类和子类, 子类继承基类的属性和方法。
面向对象的三个基本特征:
封装———是把客观事物封装成抽象的类, 可以隐藏实现细节, 使得代码模块化;
继承———使用现有类的所有功能, 并在无需重写原来类的情况下对这些功能进行扩展;
多态———指同一消息作用于不同的对象时, 具有不同的处理方案和处理结果, 即所谓的“同一接口, 多种方法”, 增强了程序的灵活性。
2 面向对象的分析与设计实现
面向对象的程序设计以解决的问题中所涉及的各种对象为主要矛盾, 力图从实际问题中抽象出封装了数据和操作的对象, 通过定义属性和操作来表述他们的特征和功能, 定义接口来描述他们的地位及与其他对象的关系, 最终形成一个可理解、可扩充、可维护的动态对象模型。面向对象的软件开发过程可以大体划分为面向对象的分析, 面向对象的设计, 面向对象的实现三个阶段。
2.1 面向对象的分析
面向对象的分析主要作用是明确用户的需求, 并用标准化的面向对象的模型规范来表述这一需求, 最后形成面向对象的分析模型。图1展示的是面向对象系统分析示意图。
面向对象的分析分为如下几步:
2.1.1 确定需求
明确用户的需求, 包括对用户需求的全面理解和分析;明确所要开发的软件系统的职责界限;进行可行性研究和制订方案, 交给用户确认。
2.1.2 进行分析
对问题域进行分析和理解, 对其中的事物和它们之间的关系产生正确的认识, 找出描述问题域所需的类及对象, 定义这些类和对象的属性与服务, 以及它们之间形成的结构、静态联系和动态联系。
2.2 面向对象的设计
面向对象的设计的主要工作是确定如何做。面向对象的设计将在对象类模型的基础上引入界面管理、任务管理和数据管理, 进一步确定模型。界面管理:负责整个系统的人机界面的设计。任务管理:负责处理并进行操作之类的系统资源管理功能的工作。数据管理:负责设计系统与数据库的接口。
2.3 面向对象的实现
面向对象的实现就是具体的编码阶段。选择合适的面向对象的编程语言, 用选定的语言编码实现的对设计阶段所得的各对象类的详尽描述。将编好的各个类代码模块根据类的相互关系集成, 测试检验各个模块和整个软件系统。
3 总结
面向对象的技术相对于之前的程序设计方法, 能够更好地适应当今软件开发在规模、质量、效率、复杂性和可靠性上的种种需求。
3.1 可重用性
可重用性是面向对象软件开发的一个核心思路, 类能够抓住事物的实质特征, 具有普遍适应性, 类的另外一大特点是继承, 通过继承大幅减少冗余的代码, 并可以方便地扩展现有代码, 提高编码效率, 这就是一种可重用性的体现。
3.2 可扩展性
可扩展性即要求应用软件能够很方便地进行扩充和修改。对于面向过程的程序设计来说, 往往添加一个功能, 整个程序都要重新考虑, 对于大型程序来说, 这样付出的代价是很大的。面向对象的程序设计则可以有效地避免这一缺点, 降低软件维护的难度。
3.3 可管理性
面向对象的开发方法采用类作为构建系统的部件, 使整个项目的组织更加合理、方便。数据抽象可以在保持外部接口不变的情况下改变内部实现, 从而减少对外界的干扰, 提高程序的可靠性。
3.4 可直接操作性
允许将问题域中的对象直接映射到程序中, 减少软件开发过程的中间环节的转换过程, 优化整个程序设计结构, 提高软件质量。
面向对象技术出现和广泛应用是计算机软件技术发展中的重要成果和趋势之一, 在许多应用领域的软件开发中都极具前途。相信随着经验的积累, 面向对象的软件开发技术会在当今的软件开发中占据主流的位置, 并将日趋成熟。
参考文献
[1]王维江.面向对象方法的程序设计简述[J].航空计算技术, 2004, 6.
[2]郭领艳, 常淑凤.面向对象编程思想的理解及案例分析[J].资源建设:技术与应用, 2007, 5.
[3]宋晓军, 李卓玲.Oracle系统中面向对象技术的应用[J].信息技术, 2002, 5.
面向对象的软件维护论文 篇5
【摘 要】针对用人单位对软件的人才需求,以软件工程专业模块化课程体系为研究对象,提出了面向对象程序设计课程体系及教学方法改革。研究如何将本专业其它课程融入其中,整合教学内容。根据不同的教学内容,探索灵活的教学方法,并提出实践教学方法的改革思想,以提高面向对象程序设计的教学质量。
【关键词】面向对象程序设计;Java;课程体系;教学改革
Research on Teaching Reforms Object-Oriented Programming of Software Engineering Special Field
WU Xiao-qin TAN Ming XU Qiang HU Chun-lin
(Department of Computer Science and Technology,Hefei University, Hefei Anhui 230601, China)
【Abstract】Considering the demands of software talent, modular curriculum system of software engineering special field is studied. The system of object-oriented programming courses and teaching methods are proposed. In Java, for example, The integration of professional courses is researched. The flexible teaching methods are explored . In order to improve the teaching quality of object-oriented programming, the reform ideas of practical teaching methods of is proposed.
【Key words】Object-Oriented Programming; Java; Curriculum system; Teaching Reformation
0 引言
Java是新一代面向对象编程语言。由于它的优点在不断发展,现已成为目前使用最广泛和最卓越的的面向对象程序设计语言之一,从桌面办公的应用软件到企业级大型复杂的应用软件,再到小型移动设备的嵌入软件,因此此类人才的市场需求与日俱增,一方面人才需求缺口很大,一方面企业很难招聘到合格的Java软件工程师。其主要原因体现在以下几方面。
(1)课程内容孤立:教学内容和其它课程知识点的缺乏融合、渗透。
(2)教学方法单调:老师只是单纯讲授每节课的知识点。很难激发学生学习兴趣。
(3)实践教学滞后:实践项目和实践教学方法滞后,没有完善的实践教学环节。
(4)学习方法被动:学生听完教师讲完课,被动地根据实验项目做该节单元实验。
本文结合多年的Java教学经验和教学过程中体会,以软件工程专业模块化课程体系为研究对象较,找出面向对象编程和其它课程模块的结合点整合Java教学内容,探索面向对象程序设计的新教学方法和教学手段的改革思想,引导学生自主学习意识,提升授课的效果。
1 挖掘软件课程间的结合点,整合教学内容
在整合教学内容时,一方面以软件工程专业模块化课程体系为研究对象,探讨本专业各课程特点,挖掘Java与本专业其他课程教学内容的结合点,另一方面将新技术、新知识融入其中,注意保持与Java技术的发展同步。java教学内容可分为四部分:基础知识(Java语法、数组字符串、工具类)、面向对象(面向对象分析方法、面向对象设计方法、面向对象特征)基本编程技术(多线程技术、异常处理机制、Applet应用编程、图形用户界面设计、输入输处流)综合应用技术(网络编程、数据库编程、多媒体编程等),具体如图1所示。如讲解包、集合和工具类的使用时,可以集合数据结构的线性表、栈、队列、二叉树例子。讲解Java线程生命周期、线程同步、线程死锁时,以操作系统的进程管理为例。讲解String类的使用时,可重点讲解字符串的各种操作,为后续的编译原理中词法分析的实现打下基础。讲解Socket通信、web编程、JSP程序设计结合计算机网络TCP/IP协议等知识点,讲解JDBC时,结合数据库操作相关知识, 讲解Java高级编程时,将软件工程、软件测试等相关课程融入其中,总之,整合课程内容时,将本专业相关课程的知识互相融合渗透,完善课程内容体系。
2 灵活运用教学方法,提高教学质量
针对不同的.教学内容,灵活运用教学手段和方法。如对基础知识部分,Java语法主要以自学为主,以任务为驱动,重点讲授面向对象的程序设计思想和如何运用面向对象方法对客观实际问题进行建模。任务:用面向对象的思想完成车的设计,车是由发动机、轮子、车门、窗户等部件构成的,每个部件设计一个类,车类(Car类)有自己的属性和方法,还包含这些部件类。通过该设计任务的讲解让学生学会用面向对象思想解决客观实际问题,注重培养学生面向对象建模能力,实现班级学生。基本编程技术这部分内容,以案例为主线,结合生动形象的案例讲解,如案例1:实现windows附件所带计算器,通过该的案例分析、设计、编程实现的过程逐一介绍Applet应用、容器中组件的添加与设置、菜单的使用技术、布局管理器、Java核心包中数组、Math类的使用、异常的处理、事件处理机制等相关知识。案例2:操作系统的进程管理中生产者与消费者,介绍Java多线程技术,将具体的问题抽象为编程技术的实现,引导学生尽快掌握Java基本编程技术和设计技巧。对第三部分内容.采用项目教学法,综合运用前两部分知识,结合最新技术解决实际问题,如通过对聊天室软件的分析设计,让学生学会将输入输处流、图形用户界面的设计、数据库JDBC连接、Socket通信、线程等技术加以综合应用。在讲解Java高级编程时,主要是结合一个具体项目,如实现学生管理系统,讲解项目的设计思想、方法和步骤时,启发鼓励学生结合已有的知识积极主动地参与项目分析,然后再根据学生分析的进度将项目整个实现过程逐步讲解、逐一展示给同学,切忌将整个程序代码直接展示介绍。否则学生只能读懂代码的功能,而没有完整的思路。而面向对象程序设计课程的目的是培养学生运用面向对象程序设计方法解决问题的能力。
3 将软件工程素质的培养贯穿在整个实践教学过程中
在实践教学当中,一方面把所学的知识与技术融入到工程项目中,另十分关键是如何将软件工程素质的培养贯穿在整个实践教学过程中,面向对象程序设计实践教学采用项目驱动方式实施整个实践教学环节,通过成立项目小组模拟企业真实项目练习,具体过程如下:
(1)调研,选题;
(2)研讨项目方案,拟定开发计划,小组成员分工;
(3)查阅学习相关技术资料,完成需求分析;
(4)小组成员研讨课题相关的技术,完成设计阶段;
(5)编码实现和测试等各个阶段;
(6)开发文档整理、编制。
利用软件质量保证计划完成整个项目的实施完成需求分析、系统设计、编码实现和测试等各个阶段,撰写各个阶段的相应文档。特别在需求分析、系统设计阶段等阶段,充分理解和详细分析项目的需求,要注重培养学生的创新能力,经过需求分析、系统设计后,再用相应的Java技术对设计的结果进行编码,最后通过单元测试、集成测试完成整个项目。通过一个模拟实战项目训练,学生既掌握Java技术知识和运用,又对软件工程实际项目实施过程有一个清晰完整的思路,拓宽了学生的视野,增强了学生的学习兴趣。在是学生能明确自己的学习目标。很好地培养了学生软件工程素质。任课教师也要参与软件项目的开发,不断提高自身工程实践能力。
4 引导学生自主协作学习
首先要完善整合课程网络资源:包括课程介绍、教学大纲、教学周历、电子教案、重点难点内容特别指导、实践项目任务书等必需的教学资源。让学生依据自身学习能力、学习兴趣和学习时间,通过网络资源自主安排学习进度。教师可通过多种方式实时指导学生,如电话、电子邮件、课程学习论坛、建立QQ课程群等形式实时指导学习,培养学生自主学习能力。其次组织成立兴趣小组确定学习项目、让组长安排分配学习任务,教师参与定期交流学习体会,能解决活动中存在的问题。而协作学习有助于增强学生之间的沟通能力以及培养学生的团队意识。再学生可通过访问专业网站与经验丰富的编程人员交流,以提高自己的编程水平。并定期进行考核计入总评成绩,督促鼓励学生进行自主学习。同时了解学生学习效果,调整学习方法,激发学习兴趣,培养学生学习的主动性,使学生不在是被动的、孤立地学习,从而培养学生的自学能力和团队协作精神。
5 考核方式的改革
目前大多采用理论考试和实践考试相结合模式,以掌握知识为主单一的闭卷笔试占比例更大些,以至于难以衡量学生实践动手能力,不能客观公评价学生掌握该课程情况,甚至制约了课程教学改革和教学质量的提高。因此改革考核方式也是教学改革的重要内容之一,运用多样化的考核形式有利于全面真实地对学生的知识掌握程度、实践能力的衡量。考试重心转移到对学生的实际能力的考核,如,采用项目答辩、上机考试、过程考该等多种考试方式。完善的考核方式将推动课程的教学改革研究。
6 结束语
在面向对象编程技术课程教学过程中,应避免理论教学和实践环节脱离、注重学生项目开发能力的培养,授课教师应定期到软件企业调研,掌握最新的Java技术,调整教学计划,整合课程体系。还应采用科学合理的教学方法,引导学生采用正确的学习方法。理解面向对象程序设计的总体思路及各种抽象概念。培养学生查阅资料、编写和调试程序能力。特别注重在整个教学过程中贯穿软件工程的思想.培养学生具有一定的软件工程的素质和团队合作意识,为今后从事软件技术开发工作打下良好基础。今后,本课程组要总结前期课程建设工作,如教学内容的整合、教学方法和教学手段的改革和实践能力培养的突出方法。构建课程体系,编制实教材,建设案例库和项目库等资料,完善本课程教学体系。
【参考文献】
[1]王新海,李建东.李捷娜.软件工程专业课程体系研究与实践[J].计算机教育, (4):70-73.
[2]韩春燕,高晓兴,姜慧妍,等.软件工程专业课程体系优化方法研究与实践[J]. 计算机教育,2009(2):70-73.
[3]王秀坤,张宪超,郭禾.本科软件工程专业软件类核心课程关联式教学模型研究与实践[J].计算机教育,(12):91-92.
[4]芳,孙力娟.软件工程专业课程体系研究[J].高等工程教育研究,2009(2):140-144.
[5]许庆伟.徐兆佳.杨莉.软件工程专业Java教学初探[J].计算机教育,2009(1):28-30.
面向对象的软件类测试技术的研究 篇6
随着面向对象技术的广泛应用和发展,软件测试技术也在逐步成熟。在传统软件测试中,软件测试工作仅是对简单计算机代码进行“调试”工作。而随着面向对象技术的提出和应用,传统的软件测试技术已经无法满足面向对象技术中关于多态、继承、封装等特点的要求,从而提出了面向对象软件测试技术。
在面向对象技术中,最重要的概念就是类。我们以往所使用的传统测试方法,是一种面向过程的测试方法,只完成对方法的测试,并不适用于面向对象技术中类的整体测试。因此,在面向软件测试技术中,提出了类测试的概念。本文将从类的特点出发,对面向对象的类测试技术作进一步的研究。
2 类测试技术
类测试是针对面向对象技术中类的概念而提出的,其目的是为了保证一个定义的类能够完成其定义以内的功能,确保类中方法的实现,将类的使用风险降到最低。
类测试按测试的顺序可分为以下三个部分:
1)基于服务的测试:测试类中的每一个服务;
2)基于状态的测试:考察类的实例在其生命周期各个状态下的情况;
3)基于响应状态的测试:从类和对象的责任出发,以外界向对象发送特定的消息序列的方法来测试对象的各个响应状态。如图1所示。
3 面向对象的软件类测试技术
类测试有很多种方法,如:等价划分测试、基于层次增量、基于服务、基于状态、基于流程、基于数据流的类测试。这里详细介绍基于服务的和基于状态的类测试,通过对这两种类测试的介绍,了解类测试的思想和方法。
3.1 基于服务的类测试技术
基于服务的类测试主要考察封装在类中的一个方法对数据进行的操作。类测试若采用传统的白盒测试,很可能会带来测试用例选取的盲目性。测试人员的个人喜好和倾向性,也会使得选取的测试用例存在一定的局限性。块分支图,作为一种基于服务的类测试模型,能够比较好的克服测试中的盲目性和局限性,保证软件测试的质量。
3.1.1 类的服务的测试模型
由Kung等人提出的块分支图(Block Branch Diagram,简称BBD)是一种性能比较好的基于服务的类测试模型,如图2所示。
服务f的BBD是一个5元组。BBD f=(Du,Dd,P,Fe,G)
其中:Du={di|di是f引用全局数据或类数据};Dd={di|di是f修改了的全局数据或类数据};P=X1θ1,X2θ2,…,Xnθn;Xn+1θn+1分别是f的参数表和函数返回值,θi为↓(表示输入)、↑(表示输出)或↓↑(表示输入/输出)。若Xn+1缺省,则无返回值;Fe={fi|fi是被f调用的其它服务}
G是一个有向图,叫做块体。它是按照控制流图的思想,修改f的程序流程图而来,表示了f的控制结构。f中的复合条件判断被分解,每个判断框只有单个的条件。
BBD通常有两种获取途径。一是采用逆向工程的方法,由源程序画出流程图构造出BBD。但这并不是最好的方法,当源程序不正确时构造出来的BBD是错误的。另一种途径是在软件的分析设计阶段构造出相应的BBD,能根本解决问题,正确指导类的服务的测试。
3.1.2 类的服务的测试策略
根据BBD模型,可对服务进行结构测试和功能测试两种测试。
1)结构测试:主要进行基本路径测试,根据软件过程性描述中的控制流程确定复杂性度量,然后用此度量定义基本路径集合,导出一组测试用例。
2)功能测试:等价类划分和边界值分析是两种很有效的功能测试方法。但这两种方法只针对数据集中的孤立数据进行测试,为考虑多组数据组合的情况,我们以判定表或判定树为工具,列出输入数据的各种组合情况和程序相应动作(以及可能的输出结果)之间的对应关系,为判定的每一列至少设计一个测试用例。
3.2 基于状态的类测试
同传统的控制流和数据流测试相比,对象状态测试侧重于对象的动态行为,这是一种依赖于对象的状态。当对象成员函数之间通过对象状态进行交互时可能会产生一些错误,测试对象的动态行为就可以检测出这些错误,基于状态的类测试就是这样一种通过测试对象的动态行为检测错误的测试方法。
下面举例使用状态转移图建立对象的动态行为模型,用以刻画对象响应各种事件时状态发生转移的情况。如图3所示,图中每个结点表示对象的某个可能状态,结点之间的有向边通常用“事件/动作”标出。当对象处于状态A时,若接收到考察事件e则执行相应的操作a同时转移到状态B。如此,对象的状态就随各种外来事件发生了变化,这是对象行为的一个重要方面。
基于状态的测试是检查对象的状态在执行某个方法后是否会达到预期的一种测试技术。对象状态的变化是通过对象的数据成员值体现出来的,实现对象数据成员值的跟踪监视,即完成了对象状态的检测。要检测对象多个数据成员的状态需要对对象的状态空间进行划分,这类似于黑盒测试中划分等价类的方法,并在对象的数据成员的取值域中找到特殊值和一般性区间,分别对其进行测试。进行基于状态的测试时,首先要对受测试的类进行扩充定义,增加一些用于设置和检查对象状态的方法。另一项重要工作是编写主控的测试驱动程序,如被测对象在执行某个方法时还要调用其他对象的方法,则需编写程序代替其他对象的方法。
4 结束语
面向对象软件类测试技术的研究是面向对象开发的重要一环。从目前对面向对象测试的研究现状来看,现有的类测试方法还存在一些问题。深入研究类测试技术,解决现有问题,对面向对象软件测试技术具有十分重大的指导意义。
参考文献
[1]赵荣利,崔志明,陈建民.面向对象软件测试的技术研究[J].苏州大学学报:工科版,2007,21(1):35-38.
[2]Grady Booch.面向对象分析与设计[M].冯博琴,冯岚译.北京:机械工业出版社,2003.
[3]朱少民.软件测试方法和技术[M].北京:清华大学出版社,2005.
[4]钱乐秋,赵文耘.软件工程[M].北京:清华大学出版社,2007.
面向对象的软件维护论文 篇7
能够写出可维护的面向对象的JavaScript代码, 不仅可以节约时间, 还能享受重用代码的过程。对于每一位从事或即将从事JavaScript代码编写的人员来说, 如何编写可重用的不过时的JavaScript代码都将成为其追求的目标。在开始探究如何编写可维护的面向对象JavaScript代码之前, 先要弄清楚什么是面向对象。
1面向对象
面向对象编程主要通过代码代表现实世界中的实质对象。要创建对象, 首先需要写一个“类”来定义。类几乎可以代表所有的东西:账户、员工、导航菜单、汽车、植物、 广告、饮料等等。而每次要创建对象的时候, 就要从类实例化一个对象。换句话说, 就是创建类的实例做为对象。 事实上, 通常处理一个以上的同类事物就会使用到对象。 另外, 只需要简单的函数式程序就可以做的很好。对象实质上是数据的容器。因此在一个employee对象中, 可能要储存员工号、姓名、入职日期、职称、工资、资历等等。对象也包括处理数据的函数 (也叫做“方法”) 。方法被用作媒介来确保数据的完整性, 以及在储存之前对数据进行转换。例如, 方法可以接收任意格式的日期, 然后在储存之前将其转化成标准化格式。最后, 类还可以继承其它类。 继承可以在不同类中重复使用相同代码。例如, 银行账户和音像店账户都可以继承一个基本的账户类, 里面包括个人信息、开户日期、分部信息等。然后每个类都可以定义交易或者借款处理等数据结构和方法。
2 JavaScript面向对象差异
上面概述了经典的面向对象编程的基本知识, 说经典是因为JavaScript并不遵循这些规则, 相反地, JavaScript的类是写成函数的样子, 而继承则是通过原型实现的。原型继承基本上意味着使用原型属性来实现对象的继承, 而不是从类继承类。
2.1对象实例化
以下是JavaScript中对象实例化的例子:
在这里, 有3个重点需要注意:
(1) “class”函数名的第一个字母要大写。这表明该函数的目的是被实例化而不是像一般函数一样被调用。
(2) 在实例化的时候使用了new操作符。如果省略掉new而仅仅调用函数则会产生很多问题。
(3) 因为getFullName指定给了this操作符, 所以是公共可用的, 但是fname和lname则不是。由Employee函数产生的闭包给了getFullName到fname和lname的入口, 但同时对于其它类仍然是私有的。
2.2原型继承
下面是JavaScript中原型继承的例子:
这一次, 创建的Human类包含人类的一切共有属性———将fname和lname放进去了, 因为不仅员工有名字, 所有人都有名字。然后将Human对象赋值给它的prototype属性。
2.3通过继承实现代码重用
在前面的例子中, 原来的Employee类被分解成两个部分。所有的人类通用属性被移到了Human类中, 然后让Employee继承Human。这样, Human中的属性就可以被其它的对象使用, 例如Student (学生) 、Client (顾客) 、 Citizen (公民) 、Visitor (游客) 等等。注意, 这是分割和重用代码很好的方式。处理Human对象时, 只需要继承Human来使用已存在的属性, 而不需要对每种不同的对象都重新一一创建。除此之外, 如果要添加一个“中间名字”的属性, 只需要加一次, 那些继承了Human的类就可以立即使用了。反之, 如果只是想给一个对象加“中间名字”的属性, 就可直接加在那个对象里面, 而不需要在Hu- man类里面加。
2.4 Public (公有的) 和Private (私有的)
接下来谈谈类中的公有和私有变量。根据对象处理数据方式的不同, 数据会被处理为私有的或者公有的。私有属性并不一定意味着其他人无法访问, 可能只是需要用到某个方法。
2.5只读
有时, 创建对象时会有一个值, 一旦创建, 就不想其他人改变这个值。为了做到这点, 可以创建一个私有变量, 在实例化时给它赋值。
在这个例子中, Animal类创建了一个本地数组data。 当Animal对象被实例化时, 传递了一个type的值并将该值放置在data数组中。因为它是私有的, 所以该值无法被覆盖 (Animal函数定义了它的范围) 。一旦对象被实例化了, 读取type值的唯一方式是调用getType方法。因为getType是在Animal中定义的, 因此凭借Animal产生的闭包, getType可以进入到data中。这样, 可以读到对象的类型却无法改变。
有一点非常重要, 就是当对象被继承时, “只读”技术将无法运用。在执行继承后, 每个实例化的对象都会共享那些只读变量并覆盖其值。最简单的解决办法是将类中的只读变量转换成公共变量。必须保持它们是私有的, 可以使用Philippe在评论中提到的技术。
2.6 Public (公有)
当然, 有些时候想要任意读写某个属性的值, 要实现这一点, 需要使用this操作符。
这次Animal类公开了一个叫mood的属性, 可以随意读写。同样, 可以将函数指定给公有的属性, 例如之前例子中的getType函数, 只是要注意不给getType赋值, 否则会出现大问题。
2.7完全私有
最后, 需要一个完全私有化的本地变量。可以使用与第一个例子中一样的模式而不需要创建公有方法。
2.8写灵活的API
按照前述对类的创建的研究, 为了保持与产品需求变化同步, 就需要保持代码不过时。如果做过某些项目或者是长期维护过某个产品, 就应该知道需求是变化的。可能突然需要将选项卡中的内容弄成动画形式, 或是需要通过Ajax调用来获取数据。对于这些变化, 完全可以将代码写灵活以备将来不时之需。
2.9 Saner参数列表
在设计参数列表的时候要注意代码的前瞻性。参数列表是实现代码的主要接触点, 如果没有设计好, 会有大问题。应该避免下面这样的参数列表:
这个类十分脆弱。如果发布代码后想要添加一个中间名参数, 因为顺序问题, 不得不在列表的最后往上加。 这让工作变得尴尬。如果没有为每个参数赋值, 将会十分困难。例如:
var ara= new Person (1234, " Ara", " Pehlivanian", "514 -555-1234", null, null, null, "1976-05-17") ;
让操作参数列表更整洁也更灵活的方式是使用这个模式:
function Person (employeeId, data) {
};
有第一个参数因为这是必需的, 剩下的就混在对象里面, 这样才可以灵活运用。
这个模式的优点在于它既方便阅读又高度灵活。注意到fax, email和email2完全被忽略了。不仅如此, 对象是没有特定顺序的, 因此哪里方便就在哪里添加一个中间名参数是非常容易的:
类里面的代码不重要, 因为里面的值可以通过索引来访问:
如果data['fname']返回一个值, 那么它就被设定好了。否则, 即使没被设定好, 也没有什么损失。
2.10让代码可嵌入
随着时间流逝, 产品需求可能对类的行为有更多的要求。而该行为却与类的核心功能没有任何关系, 也有可能是类的唯一一种实现, 好比在一个选项卡的面板获取另一个选项卡的外部数据时, 将这个选项卡面板中的内容变灰。你可能想把这些功能放在类中, 但是它们不属于那里。选项卡条的责任在于管理选项卡。动画和获取数据是完全不同的两码事, 也必须与选项卡条的代码分开。唯一一个让选项卡条不过时而又将那些额外的功能排除在外的方法是:允许将行为嵌入到代码中。换句话说, 通过创建事件, 让它们在代码中与关键时刻挂钩, 例如onTab- Change、afterTabChange、onShowPanel、after-ShowPanel等等。这样, 它们就可以轻易地与onShowPanel事件挂钩, 写一个将面板内容变灰的处理器。JavaScript库可以容易地做到这一点, 下面是使用YUI 3的一个例子。
这个例子有一个简单的TabStrip类, 其中有个show- Panel方法。这个方法激发两个事件, onShowPanel和af- terShowPanel。这个能力是通过用Y.EventTarget扩大类来实现的。一旦做成, 我们就实例化了一个TabStrip对象, 并将一堆处理器都分配给它, 这是用来处理实例的唯一办法, 它能避免混淆当前类的常用代码。
3结语
如果打算重用代码, 无论是在同一网页、同一网站还是跨项目操作, 都可考虑在类中将其打包和组织起来。面向对象JavaScript很自然地帮助实现更好的代码组织以及代码重用。除此以外, 还应该确保代码具有足够的灵活性, 可以在写完代码后持续使用很长时间。编写可重用的JavaScript代码可以大大节省开发时间。
参考文献
[1]BRUCE ECKEL.Think in jave[EB/OL].中文版.http://wenku.baidu.com/
面向对象设计的软件工程开发分析 篇8
面向对象设计是一种软件工程方法学的发展主流方向之一, 当前被广泛应用, 其有效性在实际应用中也得到了证实。对于面向对象的方法, 以对象为基础, 在其中事物都是由对象构成的。对象有内部特征和运动规律并且分别与不同的对象彼此互动。在面向对象的方法中, 对象主要具有两方面的特征属性, 其中包括数据和操作, 分别对应于对象的内部属性特征以及其外部运动的规律。面向对象的方法使软件的开发以及其相关的维护工作更便利, 增强了软件的可重用性, 并且同时其生产率大大提高。
一、面向对象的设计与分析简要介绍
面向对象的分析过程中的主要的阶段包括:一是提取和抽象概括用户需求;二是模型的建立。而设计是将用户的要求转换成可实现的最优方案的过程。从分析到设计的过程是一个逐步扩充和完善在分析阶段中所建立的模型的过程, 二者虽然是两个不同的阶段, 但却是相辅相成互相制约和影响的。只有分析的准确, 才能建立适合的模型并很好地解决用户所提出的需求和问题。在一般情况下, 分析的结果会在一定程度上反映设计的结果, 而设计的阶段中又会反复理解分析的结果, 进而完善分析过程中的结果。
二、面向对象的软件开发方法
现在, 随着面向对象的技术的飞速发展, 当前出现了很多的软件开发方法。其中, 在面向对象的软件工程开发中, 比较常见且广泛应用的有OMT和Booch等方法。它们根据各自不同的特点被应用在不同的领域中。虽然UML方法在该领域的方法中占有重要作用, 但是这些面向对象的方法对于研究者仍然具有很关键的指导作用, 在实际应用和开发过程中, 综合考虑这几种方法在分析建模过程中具有重要的意义。
(一) Booch方法。
Booch方法是Grady Booch从20世纪80年代开始研究, 后来这个方法在实际的应用中得到了逐步的完善和改进。Booch方法可被分为两个主要的过程。面向对象分为微观和宏观两个不同的过程, 微观的过程通常包含:一是将类和对象抽象化, 从问题中挖掘类和对象, 确定实现对象功能的行为。二是建立抽象出来的类的状态和行为。利用类图建立识别对象和类的关系, 确定类对象的边界以及辨别出相互协同作用的类对象。三是找出设计最优的算法和数据结构来实现对象类与对象。在宏观软件工程的开发过程中, 为了方便进行风险评估和方便快速的修改, 在该过程中确定一些相应的成果和活动。宏观过程更注重风险和结构, 因此, 结构以及完整性等在该过程中显得尤为重要。其中包括:概念化和需求的建立。概念化过程中要求具有较强的创造性, 没有固定的模式, 该过程主要是建立核心的需求。在分析过程中需要提供软件开发所需要的模型, 在该过程中注重系统的行为, 以此来区分系统的功能特点。设计的过程中, 体统结构的实现很重要。
Booch方法是UML技术方法的基础起源。其中的概念有:类、对象、操作和继承等。其主要的模型分为逻辑的和物理的, 两类中都包含各自的静态和动态视图。Booch的主要优势有很强的表达能力, 并且其设计的迭代和增量的思想对很多软件工程开发的设计阶段的建模提供了重要的指导。
(二) OMT方法。
OMT (Object Modeling Technique) 方法是由Loomis, Shan和Rumbaugh最先提出的, 该方法目前在数据库的关系设计中得到了应用。随着不断的发展, 后来该方法应用于面向对象的分析和设计领域中。有了之前的实体和关系模型, 在这个方法中又进一步扩展了类、行为以及继承等。OMT方法主要有三种模型:一是对象的模型:表述对象的静态的结构 (e.g.类、属性) 以及它们之间的相互作用关系 (e.g.操作和继承等) 。二是动态的模型:描述系统动态的变化特点, 例如:随时间的变化等。其主要的概念包括:状态和活动等。三是功能的模型:不同数据值之间在系统内的转换, 包括处理, 数据存储, 数据流和控制流的概念。OMT方法目前已得到广泛应用, 并且该方法在分析数据密集型的信息系统中占有重要的地位。
(三) UML方法。
目前, UML这种建模的语言其特点是有一个清晰、易于表达且功能强大, 在该领域包括了新的思路, 新方法和新技术。UML的模型包括静态, 动态, 系统环境模型等。此外, 交互式可视化建模工具所提供的代码等将模型转换成一种编程语言。例如:XMLDTD代码和JAVA代码等。还可以利用相应的工具和方法将这些代码逆向转换为UML。UML支持大部分面向对象开发过程, 它融合了之前建模技术的经验以及目前优秀的标准建模方法的特点。基于UML的建模可以分为静态和动态两种, 其中基于例图和对象图以及类图等创建的模型为静态的模型。然而, 基于状态图, 活动图等创建的模型为动态的模型。在大多数情况下, 一般采用这些对象模型的组合。由于类之间的关系为静态的模型, 对象之间的相互作用关系为动态的模型, 分别可以用类图和顺序图来描述这些状态以及它们之间的相互联系等。可视化建模是用直观的方式将模型描述出来的过程, 其中利用的基本信息是标准的图形元素。其中的一个重要的问题是选择合适的图形标注方法。比较常用的方法包括Booch, OMT以及UML。对象建模技术 (OMT) 图注方法则使用比Booch方法更简单的图形描述系统。UML方法融合吸收了之前建模技术的各种的经验和特点、方法和思想等。目前, UML是当今公认一种标准的建模语言, 并且近年来, UML技术不断发展完善, 融合了基于Web系统、数据的模型等新的思想。
三、面向对象设计的软件工程开发分析方法的优势
该方法的主要特点包括:对象是基本元素, 简单的对象组成复杂的软件对象, 对象又构成了系统;划分对象类, 不同的对象类对应各自的一组数据和方法;根据子类和父类来设定层次结构;对象之间可以相互联系。
面向对象的方法的优点有:更贴近人类的思维方式;具有较高的稳定性;可复用性强;易于大型产品的开发;方便维护。
四、结语
目前, 随着计算机硬件, 计算机应用的迅速发展, 计算机性能得到改善。然而, 在计算机的软件工程开发领域还面临重大的挑战。面向对象的软件工程方法, 由于它的先进性, 已被广泛应用于计算机技术领域且占据主流。用户的需求分析与设计阶段在这个过程中比较重要。面向对象的方法中非常重要的目标是合适地解决分析与设计过程中的复杂性同时提高其可重用性。因此, 当前软件工程开发分析领域面临的一个重点和难点是面向对象的分析与设计, 开发和研究应用性强, 可实现性以及复现性强的面向对象软件工程方法是一个重要的研究课题和方向。
摘要:随着计算机软件的规模以及它的复杂性不断迅速增长, 面向对象的软件工程方法成为当今软件技术的主要研究方向。本文主要针对这一问题, 首先简要概述了面向对象设计与分析, 然后探讨了主要的几种面向对象的软件开发方法, 最后针对其优点进行了进一步的概述和讨论。
关键词:面向对象设计,面向对象分析,软件工程开发
参考文献
[1] .胡家芬.思维导图在《C语言程序设计》语法教学中的应用研究[J].电脑编程技巧与维护, 2012
[2] .魏艳红.简单案例在C语言教学中的应用[J].现代电子技术, 2012
面向对象软件测试简述 篇9
当今软件开发的主流技术还是面向对象的软件开发技术,面向对象技术所独有的多态,继承,封装等新特点,产生了传统语言设计所不存在的错误可能性。比如类的封装机制就给软件测试带来了困难,它把数据和操作数据的方法封装在一起,限制对象属性对外的可见性和外界对它的操作权限,从而有效地避免了类中有关实现细节的信息被错误地使用,而这样的细节性信息正是软件测试所不可忽略的。
2 测试必要性
由于面向对象的软件系统在运行时由一组协调工作的对象组成,对象具有一定的状态,所以对而向对象的程序测试来说,对象的状态是必须考虑的因素,对象的状态可能被修改,产生新的状态。面向对象软件测试的基本工作就是创建对象(包括初始化)、向对象发送一系列消息,然后检杳结果对象的状态,看其是否处于正确的状态。但是,对象的状态往往是隐蔽的,若类中未提供足够的存取函数来表明对象的实现方式和内部状态,则测试者必须增加这样的函数。继承性是面向对象程序的最重要的特点,很好的实现了代码重用,子类不仅一可以继承父类中的数据和方法,还可以对继承的东西进行重定义;然而,这也给软件测试带来了改变,因为即使是彻底复用的,对每个新的使用语境也需要重新测试。比如我们在子类中重定义了某一继承的方法,即使两个函数完成相同的功能,对重定义的方法也要重新测试,所以,继承不仅不能简化测试问题,反而使测试更加复杂。多态性和动态绑定是面向对象方法的关键特性之一,多态就是同一消息可以根据发送消息对象的不同而采用多种不同的行为方式,如依据引用的对象类型来决定使用哪一个方法,但这种灵活性给测试带来了新的问题,比如静态分析的难度就增大了很多。
所以有必要对面向对象软件测试进行研究,面向对象软件测试的整体目标和传统软件测试的目标是一致的,其动态测试过程也与传统软件的测试一样,但是由于面向对象测试本身所具有的封装性、继承性、多态性,要充分地测试面向对象系统就必须扩大测试的视角,从面向对象分析和面向对象设计的模型开始测试,而且传统的单元和集成测试策略必须有很大的改变。面向对象测试模型(Object-Orient Test Model)如图1所示。
面向对象软件的开发是从分析和设计模型的创建开始的。模型从对系统需求相对作正式的表示开始,逐步演化为详细的类模型、类连结和关系、系统设计和分配以及对象设计在每个阶段测试模型,以尽早地发现错误和防止错误的传播,面向对象分析和设计模型的复审是非常有用的。面向对象分析的测试(OOA Test)包括对认定的对象的测试,对认定的结构的测试,对认定的主题的测试,对定义的属性和实例关联的测试,对定义的服务和消息关联的测试等内容,面向对象设计的测试(OOD Test)测试的内容包括对认定的类的测试,对构造的类层次结构的测试,对类库的支持的测试对认定的类的测试。面向对象编程的测试(OOP Test)主要是类测试,测试主要是测试数据成员是否满足数据封装的要求还有类是否实现了要求的功能。
3 测试内容
传统的软件测试分为单元测试、集成测试和系统测试三个阶段,对于面向对象的软件测试,一般分为3个级别:
3.1 类测试(面向对象的单元测试)
面向对象软件从宏观上看是类与类之间的相互作用。在面向对象系统中,系统的基本构造模块是封装了的数据和方法的类和对象,而不再是一个个能完成特定功能的功能模块,面向对象软件的类测试与传统软件的单元测试相对应,但和传统的单元测试不一样,类测试实际测试类成员函数。一些传统的测试方法在面向对象的单元测试中都可以使用。如等价类划分法,因果图法,边值分析法,逻辑覆盖法,路径分析法,程序插装法等等,但类测试时不能孤立地测试单个函数,同时要把对象与其状态结合起来,进行对象行为的测试,类的测试按顺序分为基于服务的测试,测试类中的每一个方法,基于状态测试,考察类的实例再起生命周期各个状态下的悄况。还有基于响应状态的测试。从类和对象的责任出发,以外界向对象发送特定的消息序列的方法,来测试对象各个相应状态。
3.2 簇测试(面向对象的集成测试)
传统的集成测试,是由底向上通过集成完成的功能模块进行测试,一般可以在部分程序编译完成的情况下进行。而对于面向对象程序,相互调用的功能是散布在程序的不同类中,类通过消息相互作用中请和提供服务。类的行为与它的状态密切相关,状态不仅仅是体现在类数据成员的值,也许还包括其他类中的状态信息。由此可见,类相互依赖极其紧密,根本无法在编译不完全的程序上对类进行测试。所以,而向对象的集成测试通常需要在整个程序编译完成后进行。对面向对象软件的集成测试有两种不同策略,一种是基于线程的测试,继承与组相互协作,以对某事件做出回应的类测试,每个线程被集成并分别测试,应用回归测试以保证没有产生副作用。另一种是基于使用的测试通过测试那些不使用服务器类的类级独立类,而后开始构造系统,在独立类测试完成后,下一层使用独立类的类级依赖于类测试,依赖于类层的测试序列一直持续到构造完整个系统.具体生成测试用例的参考步骤如下:
1)先选定检测的类,参考OOD分析结果,列出类的状态和相应的行为,类或成员函数问传递的消息,输人或输出的界定等。
2)确定覆盖标准。
3)利用结构关系图确定待测类的所有关联。
4)根据程序中类的对象构造测试用例,确认使用什么输人激发类的状态、使用类的服务和期望产生什么行为等。
值得注意,设计测试用例时,不但要设计确认类功能满足的输人,还应该有意识的设计一些被禁止的例子,确认类是否有不合法的行为产生,如发送与类状态不相适应的消息,要求不相适应的服务等。根据具体情况,动态的集成测试,有时也可以通过系统测试完成。
3.3 面向对象的系统测试
通过单元测试和集成测试,仅能保证软件开发的功能得以实现,但不能确认在实际运行时,它是否满足用户的需要,是否大量存在实际使用条件下会被诱发产生错误的隐患。为此,对完成开发的软件必须经过规范的系统测试。系统测试时,对所有类和主程序构成的整个个系统进行的整体测试,验证软件系统的正确性和性能指标等,满足需求规格和任务的要求,它与传统的软件测试一样,包括功能测试、性能测试、余量测试等,系统测试不仅是检测软件的整体行为表现,从另一个侧面看,也是对软件开发设计的再确认。这里说的系统测试,是对测试步骤的抽象描述。
4 结束语
目前面向对象软件开发已经成为主流的软件开发技术,本文浅谈了面向对象软件测试的必要性,内容及方法。软件测试是软件开发过程中的一项重要的内容。
摘要:软件测试是软件开发的一个重要过程,保证了软件的质量;提高了软件产品可靠性。阐述了面向对象软件开发过程中,面向对象软件测试的必要性。介绍了面向对象软件测试的内容及方法。
关键词:软件,面向对象,软件测试
参考文献
[1]McGregor J D,Sykes D A.面向对象的软件测试[M].北京:机械工业出版社,2003.
[2]宋雪芬,王冠军,宋雪玲.面向对象软件测试方法研究[J].治金自动化,2004,28(z1).
面向对象的软件维护论文 篇10
非结构化网格对复杂计算域有较强适应性,被广泛地应用在有限元分析和计算流体力学中。在多种网格生成算法中,Delaunay三角化法具有“最小内角最大”和“空外接圆”性质, 能够进行任意多连通域网格的自动生成,因此是目前主流的非结构网格生成方法。然而单纯地对某一模型进行网格剖分并不能满足工程技术需求。因为完整的数值模拟是由几何造型、网格剖分、数值计算和数据后处理四部分组成,网格剖分是几何造型与数值计算的桥梁。首先它要继承几何层上的拓扑信息保证块与块之间衔接部分的信息融合。并且网格单元自身能够搜索其周围单元的拓扑信息以方便数值计算过程。因此需要建立一套完整的网格生成体系来满足实际工程应用。而基于对象的编程技术正是为大规模软件开发应运而生的。本文采用面向对象的设计思想,结合课题组已有的几何造型体系,开发了一套三维非结构化网格生成软件,为实际工程应用提供技术支持。
曲面网格是三维非结构网格生成的基础,本文采用映射法实现曲面Delaunay三角剖分。为控制曲面网格品质,在网格剖分过程中引入黎曼度量加以控制[7],并给出了黎曼空间下的外接圆准则判定标准。另外三维Delaunay三角化过程中需要保证模型边界的完整性。本文采用文献[4,5]中的方法,首先通过一致边界恢复进行辅助插点,之后移动或分解边界上的辅助点,实验表明该方法对复杂模型有很强的适应力。另外,因为浮点运算和边界恢复带来的影响,网格插点过程中并不能完全保证形成空腔的正确性。针对此问题引入一个空腔检查机制控制空腔的形成,保证程序的健壮性。
1 网格生成算法
a) 根据实现过程,把生成Delaunay网格的各种算法分为三类:分治算法,三角网生长法,逐点插入法。在此采用Bowyer[1]-Watson[2]的逐点插入法,该算法可以描述为:1)首先确定一个插入点Q,并在原始三角面(四面体)集合T中搜索外接圆(外接球)包含插入点的三角形集合S。2)确定区域S的外边界集合E,删除集合S中的三角面(四面体)并形成一个空腔。3)将插入点Q与边界集合E连接,形成新的Delaunay网格。4)重复步骤1)到3),直到没有插入点为止。
b) 以上是算法的逐点插入过程,完整的Delaunay三角化过程如下:
1) 输入模型边界点集合,二维情况下确定一个四边形能够完全覆盖边界点区域,并将该四边形剖分为两个初始三角形;三维情况下确定一个六面体,并将该六面体剖分为五个初始四面体。
2) 利用Bowyer-Watson算法将边界点逐一插入。
3) 保证边界的完整性,删除计算域外的网格单元。
4) 利用Weatherill[3]的重心插点法进行计算域自动插点。
5) 分别用拓扑法和Laplace法对网格进行优化、光顺。
经过前人的研究和完善,目前已经能够对二维平面生成完美的Delaunay三角网格。但曲面网格的生成和三维网格边界恢复问题则仍是网格生成的研究重点,下面将针对这两方面进行介绍。
1.1 曲面网格生成
利用Delaunay三角化法进行曲面网格生成时需要通过映射的方式,即在二维参数域中进行Delaunay三角剖分,之后将剖分结果变换到三维物理域。然而映射法在处理简单平滑曲面时可以保证映射后的网格品质,但对于曲率变化剧烈的复杂曲面则会使映射后的网格产生很大的扭曲,网格品质下降。本文将在平面参数域进行三角剖分时引入一个黎曼度量矩阵加以控制,并给出了黎曼空间下的外接圆准则判定标准,以此保证最终曲面网格的品质。
有空间曲面∑,其参数表达式为
式中,Ω是∑的参变量平面。设在任意位置存在一阶导数:
式中,
;
是点A+tAB处的黎曼度量矩阵,且是正定矩阵。其中,
式(3)可以用梯形公式近似计算,并将其定义为Ω上两点的距离。这个度量反映了通常曲面∑上的曲线段长度,用该度量对在Ω进行三角剖分, 并转换到∑上, 则可以得到曲面上满意的非结构网格。
进行Delaunay三角化过程中外接圆准则是算法的关键之一,需要准确计算三角面的外接圆圆心和半径。通常二维平面下能够准确地计算出三角面的圆心,但在三维曲面下每一点的度量矩阵并不相同,很难准确计算三角面的圆心。因此本文采用一种近似的求三角面圆心的方法。设Z是参变量平面Ω上的一点,则在黎曼空间域(Ω,M(Z))内两点的距离记为lz。对于三角形P1P2P3采用以下公式计算圆心O:
并通过公式(5)判断插入点P是否满足外接圆准则。
lP(O,P)<lP(O,P1) (5)
1.2 边界恢复
因为通过Delaunay三角剖分生成初始网格后会出现边界丢失的现象,所以要进行边界恢复过程。二维情况下的边界恢复问题可以通过边交换的方式方便地解决,但在三维区域下,情况则要复杂的多。通常解决的方法有两种:一致边界恢复和约束边界恢复。一致边界恢复需要在边界上添加辅助点来完成边界恢复。但添加辅助点破坏了原有单元尺寸场的定义,且可能在其附近形成品质较差、甚至退化的网格单元。约束边界恢复是通过边、面交换操作和在一些局部区域添加辅助点来实现的。但在文献[8]中给出一些无法解决的例子,这些例子在边界上常有一些狭长的三角单元,或存在局部区域单元尺寸剧烈过度的现象。本文采用先在边界上添加辅助点完成一致边界恢复,再移动或分解边界上的辅助点,以达到剔除它们的目的。一致边界恢复方法在[3]中有详细的说明,这里将主要介绍如何将辅助点分解的过程。
图1给出了丢失边上辅助点分解的过程。图中边AC是丢失边,E是添加的辅助点,三角面ABC和ACD共享边AC,G是BC边上的辅助点,F是三角面ABC的辅助点。则分解E点的过程为:
1) 确定三角面ABC和ACD的法向量
2) 沿
3) 注意到三维多边形AFGCD可以是由多边形ACD、AFGC组成,分别三角化两组多边形则可以得到丢失边AC。利用分解后的三角形分别与E1,E2两点生成四面体。
由于AC上只有一个辅助点E,E被分解后,丢失边便直接恢复了。如果AC边上还有其他辅助点,则继续按上面的方式进行分解,最终恢复丢失边。
丢失面上的辅助点分解与丢失边的方法类似,仅是在求解扰动方向
1.3 空腔判断准则
由于浮点计算误差和边界恢复过程带来的影响,插点过程中形成的空腔并不能完全保证其正确性。因此必须保证插入点对空腔边界单元的可视,下面给出了保证空腔正确性的方法:
1) 设空腔集合为T,找出空腔的外边界三角面集合F。通过Fi和插入点P计算出混合积Si,再由Fi和其所在空腔的四面体的对顶点计算出混合积Ki。
2) 逐一计算Si×Ki,
如果Si×Ki>0,则继续比较;
如果Si×Ki<0,从集合T中移除四面体Ti;
如果Si×Ki=0,则将三角面Fi连接的另外一个四面体加入到集合T。
3) 如果集合T经过步骤2)没有改变,则结束空腔正确性判断;否则转到1)重新进行判断。
2 基于对象的网格生成软件体系
2.1 网格生成软件体系
目前网格生成技术多种多样,算法也趋于成熟,但在解决工程实际问题中仍面临一些问题。首先,网格生成的前提是几何模型,而如何从模型中获得合适的几何信息则是首要的问题。大多CAD软件的几何、拓扑信息由于其自身的特点,不能直接运用到网格生成中去。需要对于几何信息进行特殊的清理与修补[6],这是一件繁琐的工作。另外,CAD软件很难通过参数化构建几何模型进行实体外形设计。因此在课题组已有的几何造型体系下,搭建一个网格生成系统将极大地方便几何信息与网格信息之间的融合;并且能够通过参数化设计快速生成几何模型以及计算网格,方便下游的数值计算模拟,缩短设计周期。
网格生成体系的完整结构如图2所示,包括几何造型和网格生成两部分。几何造型体系具有生成标准图形及NURBS曲线、曲面的功能。几何实体由几何点、几何线、几何曲面组成,通过它们之间建立的拓扑关系,能够互相进行上下层几何信息搜索。网格生成部分可以进行二维平面、三维曲面和三维实体的非结构化网格生成。针对几何层上的点、线、面建立对应的网格信息存储模块,即网格点(Grid_Vertex)、线网格(Grid_Line)、面网格(Grid_Face)、体网格(Grid_Solid) 四部分。其中线网格中包含曲线上的网格点集合、网格边集合信息;面网格中包含曲面上的网格点集合、网格边集合以及三角面集合信息;体网格中记录网格点集合、四面体集合信息。通过网格信息存储模块与几何层上的点、曲线、曲面建立的关系,便实现了网格信息部分与几何信息部分的有机融合,继承了几何层上的拓扑关系,为网格生成体系搭建了几何拓扑基础。
2.2 基于对象的数据存储结构
通过面向对象技术将几何层中的点、线、面和网格信息存储模块中的网格点、线网格、面网格、体网格建立相应的类,并且在各自类中记录上下层对象的指针,以此将几何信息与网格信息联系起来。需要说明的是体网格的上层没有几何体的信息,因此它通过记录组成体的几何面指针数组来实现拓扑信息的融合。
网格生成过程中的基本网格单元包括网格点(Grid_Vertex)、网格边(Grid_Edge)、三角面(Grid_Triangle)和四面体(Grid_Tetrahedron),同样建立相应的类来表示。因为考虑到Delaunay三角化过程中需要进行频繁的单元拓扑信息搜索和网格的删除、生成工作,例如在确定插入点形成的空腔时就需要通过一个基四面体进行相邻单元的树型搜索来完成。因此建立完整的网格单元拓扑结构可以方便地进行单元之间的拓扑搜索,提高Delaunay三角化效率。网格单元之间的拓扑结构如图3所示。其中,网格点类通过指针链表记录点所连接的边;网格边类同时记录组成点的指针数组以及边所连接三角面的指针链表;三角面类记录组成的点、边的指针数组以及两侧的四面体单元指针;四面体类则同时记录组成的点、边、面数组指针。如此每种类型的单元均能方便地对上下层单元进行搜索。
3 算例
定义表征网格单元品质的扭曲率为
二维情况下,α为网格单元中任意相邻网格边的夹角,因此当SR→0.0,网格品质越好。三维情况下α为任意相邻三角面的的夹角,正四面体的二面角约为70.5°,因此当SR→0.083时,网格品质越好。
例1:参数曲面表达式为z=sin(πx)sin(πy),其中-1≤x,y≤1。图4显示了参数域下的三角剖分结果,可以看出三角网格呈现各向异性的特征。图5是由参数域映射到曲面空间域的三角网格,网格为各向同性。平均网格品质为0.2438,网格品质在0.1以下的单元占90.12%,三角形夹角大多在50°~70°之间,网格品质较好。
例2:带狭缝的长方六面体非结构网格。表面三角网格总数为7318,丢失的三角网格数为24,占总网格的0.33%。三维四面体网格数为43530,平均品质为0.32,网格品质在0.2以下的占80.62%。网格恢复过程如图6所示。
例3:几何模型为上表面是Volcano参数曲面,下半部分为一立方体。表面三角网格总数为5234,初始网格生成后丢失面个数为48,占总网格的0.92%。三维四面体网格数为42365,平均网格品质为0.2921,网格品质在0.2以下的占78.23%。网格恢复过程如图7所示。
4 总结
通过以上算例表明该网格生成软件很好地解决了曲面网格和边界恢复等网格生成中的关键问题,对复杂三维实体有较强的适应性和通用性,网格品质较高。采用面向对象的程序设计思想成功地将课题组已有的几何造型体系和网格生成体系进行了有机的结合,为工程应用提供了方便。
参考文献
[1] Bowyer A. Computing Dirichlet tessellations[J]. The Computer Journal, 1981(24):162-166.
[2] Watson D F. Computing the n-dimensional Delaunay tessellation with application to Voronoi polytopes[J]. The Computer Journal, 1981(24):167-172.
[3] Weatherill N P, Hassan O. Efficient three-dimensional Delaunay triangulation with automatic point creation and imposed boundary constraints[J]. International Journal For Numerical Methods in Engineering, 1994(37):2005-2039.
[4] George P L, Borouchaki H, Saltel E. ‘Ultimate’ robustness in meshing an arbitrary polyhedron[J]. International Journal for Numerical Methods in Engineering, 2003(58):1061-1089.
[5]Qiang Du,Desheng Wang.Constrained boundary recovery for three dimensional Delaunay triangulations[J].International Jour-nal for Numerical Methods in Engineering,2004(61):1471-1500.
[6]Gopalsamy S,TzuYi Y.A Geometry engine for CAD/Grid inte-gration[J].41st Aerospace Sciences Meeting and Exhibit,2003.
[7]Borouchaki H,George P L,Hecht F,et al.Delaunay mesh gen-eration governed by metric specifications[J].Part I.Algorithms.Finite Element Analysis and Design,1997,25(1-2):61-83.
【面向对象的软件维护论文】推荐阅读:
面向对象的软件开发方法分析论文09-09
面向对象的软件测试09-25
面向对象软件测试07-18
面向对象的思想05-30
面向对象的分析11-10
他们为什么说面向对象有问题,探讨面向对象的一些缺陷06-03
面向对象的单元测试06-10
面向对象与面向过程06-01
面向对象的程序设计06-16
面向对象11-10