关闭

在S60平台进行单元测试(下)

发表于:2010-3-12 11:55

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:Li Fang    来源:forum.nokia.com

  ● 结构法

  代码覆盖[14]的过程如下:

  * 在程序中寻找不被测试实例测试过的区域;

  * 创建附加测试实例以增加覆盖范围;

  * 为代码覆盖确定一个定量测量,即一种非直接方式的质量。

  理解代码覆盖分析不能识别缺失代码是很重要的。例如,缺失的功能函数。这就是为什么结构测试函数绝不能用作唯一的测试技术。结构测试是行为测试的一种补充,而非取代。

  结构覆盖方式有很多,包括:

  *    引用覆盖

  *    判定覆盖

  *    条件覆盖

  *    多条件覆盖

  *    条件/判定覆盖

  *    修正条件/判定覆盖

  *    路径覆盖

  每一种覆盖方式都有其利弊,BullseyeCoverage解释了条件和判定覆盖,及它们不存在特定方式缺陷的简易的优势。更多有关覆盖方法和测试技术,更多查看[9], [10], [11], 和 [14]。

  ● 使用存根和伪对象

  Martin Fowler的"伪对象不是存根"[15],是阐述存根和伪对象差别的很好地文章。它们共有的特点是测试对象所依赖的依赖性被给于执行反馈的应用性所取代,并提供从测试执行中转换运行环境的可能性。Fowler 从以下方式定义了伪对象:

  Mock Objects术语已成为一种流行的说法,它描述了测试用的模拟实对象的特殊实例对象。如今许多语言环境都有其自己的框架,这使得我们很容易创建伪对象。尽管如此,最不常被我们意识到的是伪对象只是一个特殊的测试对象实例,是一种不同形式的测试。

  附录A的示例代码使用的函数,把所有的可执行文件记录到一个巨集_LOGF的文件里。这个巨集可被更改用来往动态的缓冲器里写结果。然后测试实例可以执行测试接着在缓冲器里以正确的指令校验某些被(用正确的存储内容)调用的函数。这种被动的运用替换被称为存根(stub)。

  当存根函数的语义能被动态地(从测试实例中)更改时,这种运用更趋向于被叫做伪对象(mock)。当单元测试达到高覆盖时,实际的做法是对每个类都进行伪对象(mock)操作。因为实类常相互参考,测试实例可选择用哪个例子替换伪对象或是在哪里使用具体对象。

  jMock是一个Java语言的资料库,它支持带有伪对象(mock)的java代码的测试驱动开发。这项实践是非常有趣的,但用c++的实现一些应用是很困难的,因为所有的东西都需要从头开始。"Mock Roles, Not Objects" [17] 一文是非常值得阅读理解伪对象(mock)相关的内容。

  其他的技术和工具

  复习查看一下代码手册是对付软件本地bug最有效的方法。两人合作是另一种方法,两种处理问题的方式会让bug无地自容。

  另外有一些可供扫描代码报告错误或代码中不合理之处的工具,包括:

  * LeaveScan (Carbide C++ 1.2随机附带工具)

  * CodeScanner

  * SymScan

  * PC-lint http://www.gimpel-online.com/OnlineTesting.html

  * Understand for C++

64/6<123456>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号