论文部分内容阅读
【摘要】 面向对象的开发技术有力的推进了软件产业的迅速发展。面向对象软件的独有特性,如抽象、继承、封装、多态等,使得传统的软件测试技术不能直接应用于面向对象的软件测试,从而形成一种新兴的软件测试技术——面向对象的测试技术。本文主要分析了面向对象软件测试中存在的几点问题及应对策略。
【关键词】 面向对象 软件测试 单元测试 集成测试 封装测试 多态测试
一、引言
现代软件工程学中,软件测试作为软件开发的重要环节越来越受到人们的重视。随着软件开发规模的增大、复杂程度的增加,测试工作也显得更加困难。在测试中面临如下方面的问题:测试的基本单元应该是什么;继承的内在含义是什么;封装造成的困难是什么;多态性引起的附加困难是什么?本文就上述几个问题进行论述与分析。
二、面向对象软件测试的概念
面向对象软件测试是根据面向对象的软件开发过程结合面向对象的特点提出的。是新兴的软件测试技术,是专门针对使用面向对象技术开发的软件而提出的一种测试技术。其目的是为了解决传统的软件测试技术,面对面向对象技术开发的软件多少显得有些力不从心的现象。面向对象开发技术和传统的开发技术相比,新增了多态、继承、封装等特点。这些新特点使得开发出来的程序,具有更好的结构、更规范的编程风格, 极大地优化了数据使用的安全性,提高了代码的重用率。然而,另一方面也影响了软件测试的方法和内容,增加了软件测试的难度,带来了传统软件设计技术所不存在的错误;或者使得传统软件测试中的重点不再突出。
三、面向对象单元测试的选择
传统的单元测试的对象是软件设计的最小单位——模块。单元测试的依据是详细设计描述,单元测试应对模块内所有重要的控制路径设计测试用例,可以发现模块内部的错误。对于面向对象系统中的测试案例设计,类——而不是功能(面向对象中的方法),被作为测试的基本单元。
四、继承测试问题的分析
继承的功能是面向对象系统的主要优点之一。一个应用中正在被测试的类可能已经被完整地测试过后,有必要重新测试继承的方法吗?当然在大多数情况下,继承的功能要重新测试。因为当功能被继承时会产生新的使用上下文。另一个原因是,多繼承增加了要测试的上下文的数目。所以,在设计一个类的测试计划时必须考虑类所继承的所有功能。
继承可以用来实现开发中的特殊化关系或仅为了编程的方便。实现特殊化作为继承的出发点必须对应于问题域的特殊化。这里,用于测试超类的测试案例可能在测试继承类时是可以复用的。如果继承的使用仅仅是为了编程的方便,那么这种子类不可能体现真正特殊化关系。因此我们把用于超类的测试案例直接复用于继承类存在一定的问题。继承类必须从新测试。所以,基于继承所使用的上下文对继承要重新测试。从上述讨论中我们可以得出的结论是:派生类必须被测试,即使其代码可能没有经过更改。我们需要对实施于基类的测试再补充一些测试案例来覆盖派生类中那些未被基类满足的需求区域。
五、封装测试问题的分析
封装是面向对象系统中添加的功能之一。封装本身不是错误的一个来源,但是许多开发人员认为它会妨碍测试,因为测试要求报告对象的具体和抽象状态。封装确实会使提供这类报告变得困难,继而影响到报告方法的可靠验证。但是,有几种方法可以解决这个问题。那么,通过什么方法可以在较高层解决该问题呢?可以尝试使用常规的“正确性证明”技术,因为一个已被证明的方法有理由免于测试。一个程序的常规正确性证明类似于证明一个理论是正确的。必须使用常规的数学方法来证明程序正确地执行了期望它实现的功能。常规的正确性证明就如同穷举测试,不仅难度大而且耗时。但状态报告方法趋向于小而简单,而且使用常规方法来证明相对比较容易。从上述讨论可以得出的结论是:封装加大了测试的难度,但这个问题是可以解决的。底层单侧或调试工具可以帮助查看对象,但不推荐使用。常规方法提供了最丰富的结果,但实现起来极其困难。
六、多态测试问题的分析
多态对象将有多个绑定,但是必须对多态对象的每个可能的绑定进行单独的测试。问题在于定位所有这种绑定可能很困难。无法定位到所有这些绑定将削弱代码覆盖的目标,因而是不理想的。有可能缺陷就潜伏在这种情况下。我们必须承认:单独测试多态对象的多个绑定的要求确实会产生问题。它还会使集成规划变得复杂,因为在一个客户类可以被测试之前,必须集成许多服务类。
从上述讨论中,我们可以得出结论:必须测试多态对象的所有绑定以检查完整的代码覆盖,但是定位所有绑定却存在困难。
参 考 文 献
[1]余先荣 罗婷婷.关于面向对象软件测试技术的研究[J].中国新通信,2013,(8).
[2]宋春秀.面向对象软件测试技术的研究[J].信息安全与技术,2010,(9).
【关键词】 面向对象 软件测试 单元测试 集成测试 封装测试 多态测试
一、引言
现代软件工程学中,软件测试作为软件开发的重要环节越来越受到人们的重视。随着软件开发规模的增大、复杂程度的增加,测试工作也显得更加困难。在测试中面临如下方面的问题:测试的基本单元应该是什么;继承的内在含义是什么;封装造成的困难是什么;多态性引起的附加困难是什么?本文就上述几个问题进行论述与分析。
二、面向对象软件测试的概念
面向对象软件测试是根据面向对象的软件开发过程结合面向对象的特点提出的。是新兴的软件测试技术,是专门针对使用面向对象技术开发的软件而提出的一种测试技术。其目的是为了解决传统的软件测试技术,面对面向对象技术开发的软件多少显得有些力不从心的现象。面向对象开发技术和传统的开发技术相比,新增了多态、继承、封装等特点。这些新特点使得开发出来的程序,具有更好的结构、更规范的编程风格, 极大地优化了数据使用的安全性,提高了代码的重用率。然而,另一方面也影响了软件测试的方法和内容,增加了软件测试的难度,带来了传统软件设计技术所不存在的错误;或者使得传统软件测试中的重点不再突出。
三、面向对象单元测试的选择
传统的单元测试的对象是软件设计的最小单位——模块。单元测试的依据是详细设计描述,单元测试应对模块内所有重要的控制路径设计测试用例,可以发现模块内部的错误。对于面向对象系统中的测试案例设计,类——而不是功能(面向对象中的方法),被作为测试的基本单元。
四、继承测试问题的分析
继承的功能是面向对象系统的主要优点之一。一个应用中正在被测试的类可能已经被完整地测试过后,有必要重新测试继承的方法吗?当然在大多数情况下,继承的功能要重新测试。因为当功能被继承时会产生新的使用上下文。另一个原因是,多繼承增加了要测试的上下文的数目。所以,在设计一个类的测试计划时必须考虑类所继承的所有功能。
继承可以用来实现开发中的特殊化关系或仅为了编程的方便。实现特殊化作为继承的出发点必须对应于问题域的特殊化。这里,用于测试超类的测试案例可能在测试继承类时是可以复用的。如果继承的使用仅仅是为了编程的方便,那么这种子类不可能体现真正特殊化关系。因此我们把用于超类的测试案例直接复用于继承类存在一定的问题。继承类必须从新测试。所以,基于继承所使用的上下文对继承要重新测试。从上述讨论中我们可以得出的结论是:派生类必须被测试,即使其代码可能没有经过更改。我们需要对实施于基类的测试再补充一些测试案例来覆盖派生类中那些未被基类满足的需求区域。
五、封装测试问题的分析
封装是面向对象系统中添加的功能之一。封装本身不是错误的一个来源,但是许多开发人员认为它会妨碍测试,因为测试要求报告对象的具体和抽象状态。封装确实会使提供这类报告变得困难,继而影响到报告方法的可靠验证。但是,有几种方法可以解决这个问题。那么,通过什么方法可以在较高层解决该问题呢?可以尝试使用常规的“正确性证明”技术,因为一个已被证明的方法有理由免于测试。一个程序的常规正确性证明类似于证明一个理论是正确的。必须使用常规的数学方法来证明程序正确地执行了期望它实现的功能。常规的正确性证明就如同穷举测试,不仅难度大而且耗时。但状态报告方法趋向于小而简单,而且使用常规方法来证明相对比较容易。从上述讨论可以得出的结论是:封装加大了测试的难度,但这个问题是可以解决的。底层单侧或调试工具可以帮助查看对象,但不推荐使用。常规方法提供了最丰富的结果,但实现起来极其困难。
六、多态测试问题的分析
多态对象将有多个绑定,但是必须对多态对象的每个可能的绑定进行单独的测试。问题在于定位所有这种绑定可能很困难。无法定位到所有这些绑定将削弱代码覆盖的目标,因而是不理想的。有可能缺陷就潜伏在这种情况下。我们必须承认:单独测试多态对象的多个绑定的要求确实会产生问题。它还会使集成规划变得复杂,因为在一个客户类可以被测试之前,必须集成许多服务类。
从上述讨论中,我们可以得出结论:必须测试多态对象的所有绑定以检查完整的代码覆盖,但是定位所有绑定却存在困难。
参 考 文 献
[1]余先荣 罗婷婷.关于面向对象软件测试技术的研究[J].中国新通信,2013,(8).
[2]宋春秀.面向对象软件测试技术的研究[J].信息安全与技术,2010,(9).