- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
一种针对面向对象动态多态性的测试方法
摘要:在面向对象程序设计中,动态多态性的引入为程序的可复用性和可扩充性提供了极大的便利,但同时也为程序的测试引入了一般测试方法无法很好应对的难题。在该文中,作者基于实践,提出了一种针对面向对象动态多态性的测试方法。该方法从静态分析入手,首先从被测程序中识别出需要进行动态多态性测试的代码,以此建立被测程序的动态多态性测试表,然后对该测试表进行分析,并最终在此基础上生成测试用例。该方法主要针对面向对象动态多态性的测试,可以作为一般面向对象软件测试的补充。
关键词:面向对象;动态多态性;软件测试
中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2017)06-0138-02
1 概述
多态性是面向对象的重要特征,其与封装性和继承性并称为面向对象程序设计的三大特性。多态性的定义为:指允许不同的类的对象对同一消息做出响应,即同一消息可以根据发送对象的不同而采取多种不同的行为方式。简单来说就是“一个对外的接口,有多个内在的实现方法”。多态性按运行时刻可划分为静态多态性和动态多态性。静态多态性是指定义有一个类的同名函数,它们根据参数的类型和个数不同进行语义区别,其主要通过函数的重载(Overload)和运算符重载来实现的,这种多态性在程序编译时系统就能识别调用的是哪个函数,也叫做静态绑定。动态多态性是指在程序执行前,系统无法根据函数名和参数来确定要调用哪个函数,必须在程序执行过程中,根据执行的具体情况来动态的确定,它是通过类的继承关系和虚函数重写(Override)来实现的,这种多态性在程序编译时系统无法识别调用的是哪个函数,直到运行时刻调用时才能确定,故又叫做动态绑定。
在对具有多态性的程序进行测试时,静态多态性的代码我们可以理解为多个名字相同的类成员函数,使用一般的测试方法就可以对其进行测试。相对于静态多态性,对动态多态性的程序代码进行测试则显得困难了许多,其中最主要的难点是测试用例的设计,由于动态多态性是在程序执行时才确定具体哪个函数被调用,所以这要求测试人员在设计测试用例时要用模拟程序运行的动态思维来考虑,才能使所有可能的函数调用均被测试用例覆盖,这无疑是一个很高的要求。
本人在多个工程项目软件测试经验教训基础上,参考了多种面向对象测试策略,提出了一种针对面向对象动态多态性的测试方法,这种方法从静态分析入手,首先从被测程序中识别出需要进行动态多态性测试的代码,以此建立被测程序的动态多态性测试表,然后对该测试表进行分析,并最终在此基础上生成测试用例。这种方法能很好地解决动态多态性代码的测试问题。
2静态分析
2.1 动态多态性识别
要在诸多程序代码中识别出哪部分代码需要进行动态多态性测试,就要对动态多态性的形成机制有深刻的理解。简单地说,动态多态性的形成需要三个基本条件:继承、虚函数重写和指向子类对象的父类指针,其中继承是动态多态性的基础,只有有继承关系的父类和子类之间才有可能形成动态多态性;虚函数重写是指父类定义实现一个虚函数接口,子类继承父类的接口并对该虚函数进行重写,这是动态多态性形成的技术关键;指向子类对象的父类指针是指将一个子类的对象赋予一个父类的指针,并使用该指针调用重写的虚函数,这样在程序运行时系统就会调用指针指向的虚函数表所记录的子类的函数,而不是父类的函数。
下面以一段代码来说明如何识别程序代码中的动态多态性。
class A {
virtual void fun1(){...}; //此处省略处理描述
virtual void fun2(){...};
};
class B : public A {
void fun1(){...}; //重写父类的虚函数fun1
void fun2(){...}; //重写父类的虚函数fun2
};
class C : public A {
void fun2(){...}; //重写父类的虚函数fun2
};
void Testfun(int i_flg)
{
A *a;
switch(i_flg) {
case 1:
a = new B; break;
case 2:
a = new C; break;
default:
a = new A; break;
}
a-fun1();
a-fun2();
}
由以上代码我们可以看出类A为父类,类B和类C为类A的子类,并分别重写了父类A的虚函数,在函数Testfun(int i_flg)代码的最后使用了父类指针完成虚函数的调用,具备了动态多态性的三个基本条
您可能关注的文档
最近下载
- 老年妇科患者围手术期管理中国专家共识(2024年版).pptx VIP
- 2023《关于党的建设的重要思想》微党课精品课件.ppt VIP
- 老年妇科患者围手术期管理中国专家共识(2024版)解读PPT课件.pptx VIP
- 生态系统课件课件.ppt VIP
- 《西方艺术鉴赏》课件.ppt VIP
- 成人肠造口护理-2019中华护理学会团体标准.pptx VIP
- 上海市绿色社区创建状况调查和发展对策研究.pdf VIP
- 第一现场震撼世界的不朽影像黑镜头精选珍藏本 阿夏 285页.pdf VIP
- 心血管-肾脏-代谢综合征患者的综合管理中国专家共识2025解读-1.pptx
- 2024年国网新疆电力有限公司高校毕业生招聘450人(第二批)笔试参考题库附带答案详解.doc
文档评论(0)