1.2.2 面向对象的CIA
1.3 本文研究内容
随着社会科技的发展,对软件产品的使用越来越广泛,软件的质量决定了它的竞争力。而与软件质量密切相关的软件测试和回归测试,自然得到了越来越多的重视,尤其在降低测试成本这一目标上,已经开展了大量研究工作。本文的研究重点就是围绕面向对象软件的修改影响分析和测试用例更新方面,做了以下几项工作:
1) 研究现有软件修改影响分析(CIA)方法,特别是面向对象软件的修改影响分析方法。提出了一种识别修改对面向对象软件的影响的方法。利用该方法在类成员函数粒度的级别上对程序进行分析。
2) 针对一段面向对象语言编写的程序,介绍了一种构造函数调用关系图(FCG)的算法,完成修改影响分析模型的建模。接着基于构造的FCG,在类成员函数粒度级别上,讨论了几种类成员函数修改的类型,并提出了相应的CIA算法。
3) 编程实现了对一个FCG进行修改影响分析的模拟界面。针对一个模拟器程序,基于文中提出的修改影响分析算法,分析修改图中结点修改后受到影响的部分,并给出直观表示,基于此对原始的测试用例进行更新研究。
本文的组织结构是这样的:第二章讨论了面向对象软件的三个特性和它们给回归测试带来的阻碍;第三章主要是介绍一种FCG的构造算法,并提出修改影响分析算法;第四章主要进行实验分析,在基于一个程序构造的函数调用关系图上实现提出的算法进行修改影响分析,统计受修改影响部分,对原始的测试用例集进行更新,得出统计表;最后,总结了本文的研究成果并展望了下一步的工作。
2 面向对象软件的修改影响分析
面相对象程序设计语言提供了封装性、继承性和多态性和动态绑定的特性,这使得面向对象软件修改影响分析区别于传统软件的CIA过程,甚至由于其支持类的继与和使用使得修改更容易扩散到其它部分,增加了修改影响分析的难度。下面,先了解一下面向对象软件的几种特性和它们给测试工作带来的难度。
2.1 面向对象软件特性
2.1.1 封装性
封装性是面向对象程序设计的重要特点,它支持隐藏软件设计的具体细节。 封装是一种信息隐蔽技术,它将对象的功能分为公开和不公开两部分。对外公开的功能可以被外部访问,而内部使用功能被隐藏在对象内部。封装的目的是将对象的设计者和使用者分离,使用者不必了解方法的具体实现细节,而只需通过消息来访问对象的功能。
也就是说,封装控制了外部对类中信息的访问权限,隐藏了类中的具体实现细节,而这些细节正是测试时不可缺少的关注点。另一方面,对信息的隐藏给系统运行时观察对象状态带来麻烦,阻碍了测试点选取和测试用例生成,工程师常需要另外添加函数来表明对象内部状态。由此可见信息隐蔽机制和封装性给测试增加了难度。
2.1.2 继承性
继承性是实现面向对象软件技术的重用性的一种重要手段,它是类间的一种基本关系,是基于层次关系的不同类共享数据和操作的一种机制。子类可以继承父类中的属性和方法,也可以再定义自己的特有方法和属性,或重定义父类的方法和属性。继承性使得一个函数可以存在于多个类中。
继承性带来的问题是,被子类重定义的父类特征显然需要重新测试,那么未被重定义的继承特征是否需要再测试呢?一种研究结果认为子类中继承的父类方法不管有没有被重定义,都需要在子类的环境中重新进行测试[12]。类继承可以分为单重继承和多重继承,虽然多重继承提高了特征共享度,但也使子类引用变量和调用方法的选择变得更复杂,可能出现歧义,从而导致一些从功能上来看难于辨别的隐含错误。类的继承也使软件修改更易扩散,总之,继承性使得软件测试更复杂。 基于修改影响分析的测试用例更新研究(3):http://www.youerw.com/jisuanji/lunwen_21640.html