高效开发与彻底测试

发表于:2008-2-21 14:38

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

 作者:未知    来源:网络转载

分享:

  只要写完了第一个测试用例的代码,更多的用例就简单了,只要拷贝并对输入输出数据进行修改就行。细心的读都可能已注意到,第一个测试用例的前后加了{},这是为了多个测试用例可以使用相同的变量名。

  使用这种方法,建立测试代码通常是很快的。编写很简单的函数时不需要调试,当然也不需要测试代码。测试代码的组织也很简单:一个产品工程对应一个测试工程,一个产品类对应一个测试类,一个需要测试的产品函数对应一个测试函数。测试工程可以加一个简单的界面,以便执行指定的测试,也可以使用相应的工具如 CppUnit。

  再回到我们的主题:调试。有了测试代码,调试就简单了,要调试某种输入,只要在相应的测试用例中加断点就行了。使用这种方式,仅就调试来说,好处也是非常明显的:
  所有输入在一起列出来,调试比较全面,程序员的思维也会比较全面;
  要调试指定的输入很容易,通常不需要高级断点,更不需要通过反复跟踪来捕捉需要的输入;
  调试数据可以永久保存,避免了以后修改代码时的重复工作。

  
自动驱动

  在Visual Unit的支持下编码调试,除了兼具自然驱动和专门驱动的优点外,还能享受Visual Unit的独特殊功能带来的便利。

  首先我们用个人版来说明,个人版是免费的版本,并且开发商也提供免费的基本技术支持。

  Visual Unit具有丰富的文档,包括视频教程,这里不再叙述其基本使用方法。只要选择要测试(调试)的类和函数(如果使用企业版的IDE插件,会根据当前文档和光标位置自动选择),VU就会生成测试代码,并弹出测试用例编译器。VU是自动生成测试代码,而不是自动生成测试用例,也就是说,输入输出数据是由用户指定的,不过VU已经生成了输入输出数据的声明。下面是本例中VU生成的第一个测试用例的输入输出:

  输入部分:
CTokenList iList =

  输出部分:
ret ==

  这里的“=”和“==”仅仅表示可能需要赋值或判断输出,对于基本数据类型,可以直接填写数值,高级数据类型需要灵活处理(详细信息请查看帮助或教程)。只要把输入输出改为这样就完成了第一个测试用例的建立:

  输入部分:

       CTokenList iList = //多余的=会自动删除

       CTokenReader reader

       reader.ReadTokenList(iList, "int i")

  
输出部分:

       ret->type == "int"

       ret->name == "i"

  
  更多的测试用例,只要点击"新建",就会自动拷贝当前用例,只要修改输入输出就行了。这里没有涉及到成员变量和变局全量,不过都很简单的(成员变量用点操作符访问,全局变量直接访问),请查看帮助。

  可以看出,使用VU建立调试支持环境是很快速的:对于第一个测试用例,输入输出比较复杂时需要写少量简单的代码,输入输出简单时直接填写输入输出数值,其他测试用例只需点击一个按钮拷贝现有测试用例并修改输入输出就行,可以选择相近的用例来生成新的用例,这样通常只需要修改一两个数据就可以得到想要的用例。

  那么,还可以得到哪些好处呢?
  方便地进入调式:在被调试函数的入口加断点,并调试测试工程即可进入调试;
  方便地选择输入:在测试用例编辑器中轻点鼠标即可指定要调试的输入,如果执行了测试,只要点击出错的测试,就会自动选择相应的输入;
  方便地切换输入:调试过程中,不需要退出调试,就可以切换到其他输入:只要在测试用例编辑器中选择另一个测试用例,用调试器的"执行到光标所在行"命令回到函数入口,即可切换到新的输入;
  无限制后退重复:用调试器的"执行到光标所在行"命令可以自由地后退和重复执行,其实现的原理是"重来",后退时相关数据也会"还原",感觉上是真正的"后退",这个奇特而有用的功能是VU生成的测试代码自动实现的。

  上述是免费的个人版所具有功能,VU企业版除了具有这些功能外,还具有"描述程序行为"的功能:
  自动输出参数、成员变量的输入输出值,返回值,用户也可以用简单的语法输出任何变量或表达式的值。这些数值都是上下文相关的,也就是说,同一个用例的相关值放在一起;

  显示在任一个用例下程序所执行的代码,可以很方便地查看程序是否按预想的流程执行。
程序无论多复杂,无非就是执行一些代码,读写、计算一些数据,因此,上述两方面信息已完整地描述了程序行为,很容易看出"程序干了什么"。这个功能大幅度地提高了开发人员的工作效率:

  帮助整理、验证编程思路:写几行代码,就可以看看"程序干了什么",轻松判断"现在所写的对不对",也比较容易想清楚"接下来要怎么写"。快速找出程序错误:根据输入输出数据和所执行的代码,通常可以很快判断程序是否按预期工作并找到出错原因,比单步调试要快得多。编程的时间消耗主要不在于敲键盘,而在于编程思路和调试,VU企业版可谓"对症下药",在这两方面大量提高工作效率。

  以上所述,都是针对软件开发过程中无可逃避的工作:编码调试。仅从时间上来说,对于编写调试有一定复杂度的程序,使用专门驱动,可能比自然驱动多费一点时间,但也是完全合算的,至于自动驱动,如果使用VU个人版,大概能省时10%,如果使用企业版,则可以省时20-50%!读者可以自行尝试比较一下。是否省时还不是最重要的,更高的价值在于:使用专门驱动或自动驱动编码调试,实际上也已经把令人望而生畏的单元测试工作完成了一半,并清除了实施单元测试的最主要障碍。

43/4<1234>
精选软件测试好文,快来阅读吧~

精彩评论

  • bht2000
    2008-3-05 16:54:07

    彻底测试????
    什么测试能够算的上彻底?

关注51Testing

联系我们

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

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

沪ICP备05003035号

沪公网安备 31010102002173号