面向对象实现及测试第九章.ppt
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《面向对象实现及测试第九章.ppt》由会员分享,可在线阅读,更多相关《面向对象实现及测试第九章.ppt(48页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第九章第九章 面向对象软件的实现与测试面向对象软件的实现与测试面向对象的实现主要包括两项工作:面向对象的实现主要包括两项工作:(1)写)写面向对象程序面向对象程序;(2)测试并调试测试并调试面向对象程序面向对象程序面向对象程序的质量基本上由面向对象面向对象程序的质量基本上由面向对象设计的质量决定,但设计的质量决定,但程序设计语言的特程序设计语言的特点和设计风格也将影响程序点和设计风格也将影响程序的可靠性、的可靠性、可重用性和可维护性可重用性和可维护性软件测试是软件测试是保证软件保证软件可靠性可靠性的的主要措施主要措施9.1 9.1 程序设计语言程序设计语言9.1.1 9.1.1 面向对象语言的
2、优点面向对象语言的优点(1 1)一致的表示方法)一致的表示方法(2 2)可重用性)可重用性(3 3)可维护性)可维护性9.1.2 9.1.2 面向对象语言的技术特点面向对象语言的技术特点(1 1)支持类与对象概念的机制)支持类与对象概念的机制(2 2)实现整体)实现整体-部分结构的机制部分结构的机制(3 3)实现一般)实现一般-特殊结构的机制特殊结构的机制(4 4)实现属性和服务的机制)实现属性和服务的机制(5 5)类型检查)类型检查(6 6)类库)类库(7 7)效率)效率(8 8)持久保存对象)持久保存对象(9 9)参数化类)参数化类(1010)开发环境)开发环境9.1.3 9.1.3 选择
3、面向对象语言选择面向对象语言(1 1)将来是否占主导地位)将来是否占主导地位(2 2)可重用性)可重用性(3 3)类库和开发环境)类库和开发环境(4 4)其他因素)其他因素9.2 9.2 程序设计风格程序设计风格9.2.1 9.2.1 提高可重用性提高可重用性(1 1)提高方法的内聚)提高方法的内聚(2 2)减小方法的规模)减小方法的规模(3 3)保持方法的一致性)保持方法的一致性(4 4)把策略与实现分开)把策略与实现分开(5 5)全面覆盖)全面覆盖(6 6)尽量不使用全局信息)尽量不使用全局信息(7 7)利用继承机制)利用继承机制 调用子过程调用子过程 分解因子分解因子 使用委托使用委托
4、把代码封装在类中把代码封装在类中9.2.1 9.2.1 提高可扩充性提高可扩充性(1 1)封装实现策略)封装实现策略(2 2)不要用一个方法遍历多条)不要用一个方法遍历多条关联链关联链(3 3)避免使用多分支结构)避免使用多分支结构(4 4)精心确定公有方法)精心确定公有方法9.2.1 9.2.1 提高健壮性提高健壮性(1 1)预防用户的操作错误)预防用户的操作错误(2 2)检查参数的合法性)检查参数的合法性(3 3)不要预先确定限制条件)不要预先确定限制条件(4 4)先测试后优化)先测试后优化组装组装(Composition)组装关系是一个实现级关系,它对应于应用级的聚合关系。它也叫做com
5、ponent(部件)或叫做 is part of(是的一部分)。组装与消息两者都是类间的关系,在这种关系中,一个类的实例将是另一个类的实现的一部分。可以利用既存类来生成新类可以利用既存类来生成新类考虑Dictionary类的实现。在Dictionary中存储item的一种数据表示是使用散列表(HashTable)。进行Dictionary类的低层设计时,要指明在Dictionary类和HashTable类之间的一个 is part of 关系。在实现时,应当在Dictionary类的定义中声明这个HashTable的实例。继承(Inheritance)继承允许在既存类的基础上定义新的类继承允许
6、在既存类的基础上定义新的类。一个新类B继承了既存类A,则B包括了A定义的某些行为,以及它自定义的某些附加行为。有有多多少少种种面面向向对对象象程程序序设设计计语语言言,就就有有多少种不同的继承实现方式。多少种不同的继承实现方式。继承图 针对实现的继承两个类之间两个类之间“针对实现针对实现”的继承关系的的继承关系的建立指的是建立指的是使用既存类的内部表示来做使用既存类的内部表示来做为新类的内部表示的一部分为新类的内部表示的一部分。我们不推。我们不推荐这种继承方式。荐这种继承方式。考虑使用继承来实现一个考虑使用继承来实现一个Circle类,为类,为了定义一个圆,需要定义一个点和一个了定义一个圆,需
7、要定义一个点和一个值,做为圆的圆心和半径。因此,值,做为圆的圆心和半径。因此,Point类可支持类可支持Circle类的一部分实现。类的一部分实现。把把Point当做派生类。当做派生类。如果如果Circle类直接使用类直接使用Point的数据成员的数据成员x和和y,将失去抽象。而且失去做为一个点,将失去抽象。而且失去做为一个点的圆心的标识。的圆心的标识。针对实现的继承一般在原型开发中使用。针对实现的继承一般在原型开发中使用。针对特殊化的继承这种继承的使用适合于大多数面向对象这种继承的使用适合于大多数面向对象程序设计语言所提供的关系,是针对一程序设计语言所提供的关系,是针对一般化般化-特殊化关系
8、的特殊化关系的。这种继承使用这种继承使用is a关系。关系。类类B的一个实例的一个实例是是(is a)类类A的一个实例的一个实例。在使用中,在使用中,继承将使得既存类的界面成继承将使得既存类的界面成为新类的界面为新类的界面。这表明。这表明新类具有它的基新类具有它的基类的所有行为类的所有行为。为了定义为了定义Dictionary类,应当首先查找既类,应当首先查找既存的抽象,看存的抽象,看Dictionary类会是哪个既存类会是哪个既存抽象的特殊情况。抽象的特殊情况。Dictionary应是一个有序表,但具有它自应是一个有序表,但具有它自己特有的操作,如使用关键码进行搜索等。己特有的操作,如使用关
9、键码进行搜索等。既存的既存的OrderedList类可以提供类可以提供Dictionary类的某些行为,但不是全部。还要确认,类的某些行为,但不是全部。还要确认,在在OrderedList中是否有的行为在中是否有的行为在Dictionary中是不需要的。如果有,可能中是不需要的。如果有,可能需要重新组织层次或者开发某些附加的抽需要重新组织层次或者开发某些附加的抽象。象。is kind of(是一种)继承这种继承允许有选择地包含既存类的属这种继承允许有选择地包含既存类的属性,从而建立新的定义性,从而建立新的定义。一个一个鸟鸟类可能有一个关于类可能有一个关于飞行飞行的属性。的属性。一个一个鸵鸟鸵鸟
10、派生类在模型化时可能就不选派生类在模型化时可能就不选择这个属性,因为择这个属性,因为鸵鸟鸵鸟不会飞不会飞。鸵鸟鸵鸟是是一种一种(is kind of)鸟鸟,但具有的属性与,但具有的属性与鸟鸟不完全相同。不完全相同。is kind of 继承是不严格继承。继承是不严格继承。类的实现一种方案是一种方案是先开发一个比较小的比较简先开发一个比较小的比较简单的类单的类,做为开发比较大的比较复杂的做为开发比较大的比较复杂的类的基础类的基础。即从简单到复杂的开发方案。即从简单到复杂的开发方案。在这种方案中,在这种方案中,类的开发是类的开发是分层分层的。一的。一个类建立在一些既存的类的基础上,而个类建立在一些
11、既存的类的基础上,而这些既存的类又是建立在其它既存的类这些既存的类又是建立在其它既存的类的基础上的基础上。通过诸如。通过诸如“is a”或或“is part of”之类的关系,利用既存代码就能着之类的关系,利用既存代码就能着手建立新的类。手建立新的类。9.3 9.3 面向对象的测试策略面向对象的测试策略 测试计算机软件的经典策略是从测试计算机软件的经典策略是从“小小型测试型测试”开始,逐步过渡到开始,逐步过渡到“大型测试大型测试”测试测试顺序顺序:单元测试单元测试 集成测试集成测试-确定测试确定测试-系统测试系统测试单元测试单元测试(类测试)(类测试)在面向对象环境下,最小的可测试的单元是封装
12、了的类或对象,而不是程序模块。面向对象软件的类测试等价于传统软件开发方法中的单元测试。但它是由类中封装的操作和和类的状态行为驱动的。完全孤立地测试类的各个操作是不行的。考虑一个类的层次。在基类中我们定义了一个操作X。每一个派生类都使用操作X,它是在各个类所定义的私有属性和操作的环境中使用的。因使用操作X的环境变化太大,所以必须在每一个派生类的环境下都测试操作X。在面向对象开发环境下,把操作完全孤立起来进行测试,其收效是很小的。集成测试集成测试 因为面向对象软件没有一个层次的控制结构,所以传统的自顶向下和自底向上的组装策略意义不大。每次将一个操作组装到类中(像传统的增殖式组装那样)常常行不通,因
13、为在构成类的各个部件之间存在各种直接的和非直接的交互直接的和非直接的交互。对于面向对象系统的集成测试,存在两种不同的测试策略。基于线程测试基于线程测试(Thread-basedTest)它把为响应某一系统输入或事件所需的一组类组装在一起。每一条线索将分别测试和组装。基于使用的测试基于使用的测试(Use-basedTest)它着眼于系统结构,首先测试独立类,这些类只使用很少的服务器类。再测试那些使用了独立类的相关类。一系列测试各层相关类的活动继续下去,直到整个系统构造完成。确认测试确认测试在进行在进行确认测试确认测试和和系统测试系统测试时,不时,不关心类之间连接的细节。着眼于用关心类之间连接的细
14、节。着眼于用户的要求和用户能够认可的系统输户的要求和用户能够认可的系统输出。出。为了帮助确认测试的执行,测试者为了帮助确认测试的执行,测试者需要需要回到分析模型回到分析模型,根据那里提供,根据那里提供的事件序列(脚本)进行测试。的事件序列(脚本)进行测试。可以利用黑盒测试的方法来驱动确可以利用黑盒测试的方法来驱动确认测试。认测试。测试方法学测试方法学检测软件中的故障检测软件中的故障并并确确定软件是否执行了预定要开发的功定软件是否执行了预定要开发的功能能。测试过程包括了测试过程包括了一组测试用例的开一组测试用例的开发发,每一个测试用例要求能检验应,每一个测试用例要求能检验应用的一个特定的元素。还
15、需要分析用的一个特定的元素。还需要分析用各个测试用例执行测试的结果来用各个测试用例执行测试的结果来收集有关软件的信息。收集有关软件的信息。按不同层次进行测试测测试试类类中中各各个个操操作作,主主要要测测试试类类,这这种种测测试试是是某某些些单单元元测测试试与与组组装装测测试试的组合的组合假假定定测测试试一一个个软软件件与与测测试试一一个个类类一一样样。这这个个测测试试者者常常常常就就是是一一个个特特定定类的开发者。类的开发者。9.4.1 类测试的种类随机测试随机测试划分测试划分测试基于故障的测试基于故障的测试9.4 设计测试用例随机测试例:例:银行应用系统中,银行应用系统中,account(帐
16、户)(帐户)类的操作有:类的操作有:open,setup,deposit,withdraw,balance,summarize,creditLimit和和close限制:限制:在所有操作中最先执行在所有操作中最先执行open在所有操作中最后执行在所有操作中最后执行close则:则:一个一个account类的最小测试序列包括如下操作:类的最小测试序列包括如下操作:但该序列中可能有许多其它行为:但该序列中可能有许多其它行为:open.setup.deposit.deposit|withdraw|balance|summarize|creditLimit.withdraw.close从上述序列中可以
17、随机地产生一系列不同的操作序列:从上述序列中可以随机地产生一系列不同的操作序列:#r1:划分测试(等价划分)基于状态的划分基于状态的划分根据类根据类操作改变状态的能力操作改变状态的能力来划分类操作。来划分类操作。对对account类来说,类来说,状态操作状态操作包括包括deposit和和withdraw,非状态操作非状态操作有有balance,summarize和和creditLimit基于属性的划分基于属性的划分根据类根据类操作使用的属性操作使用的属性来划分类操作。来划分类操作。对对account类来说,操作分成三个类别:类来说,操作分成三个类别:使用使用balance的操作的操作修改修改b
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面向 对象 实现 测试 第九
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内