假如你不幸要编写大量的PL/SQL代码,现在你的救星终于到来了,它就是Quest Code Tester for Oracle (QCTO)。假如你在结构化的开发环境中工作(最少是这种环境中),那么执行单元测试的重担将落在程序员上。
这个工具可以为你节约无数的时间,它让你开发出可重复使用的测试库,只需要简单的配置和修改就可以将这个测试库用于其他的项目。Quest Code Tester是由Steven Feuerstein开发出来的,他是PL/SQL方面公认的专家。在他编写的关于PL/SQL的、由O’Reilly出版的书籍中蕴藏的聪明同样渗透到了这个工具的开发当中。
Quest Code Tester为什么会吸引你
QCTO的发布会直接引起四类人的爱好,而间接的引起一类人的信息。直接感爱好的人包括程序员、DBA、QA测试人员和经理。间接感爱好的人是客户或者终端用户。为什么像QCTO这样的工具会引起这些人的爱好呢?
对于程序员来说,测试PL/SQL代码经常有一些问题。其一,对他们来说没有像Mercury 公司WinRunner类似的工具。对于PL/SQL程序员来说,这就意味着没有自动化测试、测试案例库或者报告测试结果工具。其二、和数据库测试有关的一个(巨大的)障碍是很多测试将影响到现有的数据。你执行了一个测试,即使是部分失败了(或者部分成功,这决定于你的参考对象),你的测试环境也已经变化了。这种效果也被称为破坏型测试。其三的问题是测试代码用后就被扔掉。你花费了精力来编写测试代码,为了检查完一行数据是否插入到了表中,在你的下一个开发项目中,你可能需要又重写一样的代码。
对于DBA来说,能够编写PL/SQL是如今一项必备的能力。你能够写出专家级别的代码?不,但是你应该有一定程度的竞争力。拿大学中的专业做类比,数据库治理是你的主修专业,而PL/SQL编程则是你的辅修专业。拥有强壮的测试工具可以弥补相当的技巧。插入一条记录到数据库表中不会让你挠头,对吧?下面,请说出在你插入一条记录到表中的可能会碰到的六种错误或者异常。这就是我所想的。我们等会再讨论这个问题。
对于QA测试人员来说,无论是测试工程师、软件质量保证人员(software quality assurance ,SQA),他们的时间花在系统/功能/压力测试上,而不是单元测试上不是更好吗?是的,在单元级会有一些检查,但是你作为程序员/DBA也应该有义务检查自己的代码。假如程序员仅仅是写代码然后扔给办公室另一边的其他人去测试,那么这个组织机构是效率低下的。这是在浪费精力,但是似乎有无数的由于这个原因(对部分程序员拙劣的质量控制)而导致的开发项目失败的故事和例子。
作为经理,想想数据库代码被彻底的测试所增加的价值,甚至更好的情况,你终于有了独立于任何程序员的测试代码库。当程序员为了更好的薪水而离开的时候会发生什么?你的组织结构/开发团队会损失一整套知识。有了QCTO,这部分知识和程序测试会被保存下来。这仅仅会造成稍微的负面影响:你需要为程序员们熟悉任何测试工具而支付时间和金钱(比如,WinRunner是2600美元4天),但是结果是全面的生产力得到提高。
最终,你的产品会给最终的用户留下什么印象?假如你的公司正在卖一个应用软件,为什么你不想去宣传你的应用程序经过了多么彻底的测试?假如你的产品是良好的,你还会花钱四处宣传吗?作为一个第一线的IT专家,你可能还没有收到到RFP(RFP ,Request for PRoposal,就是征求建议书,发单人向数家承包商征求解决方案建议时,向外招标发放的一种文件)。在RFP中包括关于你的公司的软件开发过程的现象现在已经不少见。在QA/单元测试方面能够精心实施的能力会让你领先你的对手。
从Quest Code Tester可以获得什么?
开始,你可以获得免费的指南,包括一步一步的例子、充分的文档、访问用户社区、代码样本、产品支持、公道的定价和试用免费的版本。QCTO会带来很多的功能和好处。这个产品方便下载、安装和使用。47页的PDF快速入门,而且帮助(在产品中)内容详实。QCTO中的Flash videos会讲解如下的内容:
介绍和概要
对表、视图、查询和光标变量的测试
对集合(collection)的测试
对记录的测试
对全局变量和表达式的测试
对文件内容的测试
对异常、系统输出和时间花销的测试
提示和技巧
所有的内容都包括在视频中演示的代码,这样你可以在方便的时候回去在试一试这些测试代码。这个库的第二个好处是这些测试代码可以作为很好的例子或者用于你自己环境中的原型。
Quest Code Tester非常优雅的功能
接下来,将介绍快速构建(Quick Build)的功能。它里面有很多模板一样的测试用例,你可以方便的拖放到测试预备框架中。现在回到前面的关于在插入数据会碰到的六个错误或者异常的问题(我本来可以问七个的),下面一张图中显示了只要你鼠标点一下就可以获得这些错误。
对于每一种异常,最后的结果会在特定的错误发生之后进一步的描述。举一个例子,假设你在插入数据的过程中碰到了DUP_VAL_ON_INDEX(索引上出现重复值)的异常。在这个错误发生之后表的状态是怎样的?理想的情况,表没有发生任何变化,但是你如何才能检查或者验证这个希望的结果?
一种测试是比较错误发生之前和之后的记录行数,而另外一种测试是验证哪一种错误真正的发生了(而不是其他类型的错误)。出于好奇心,Oracle中的哪个错误是和DUP_VAL_ON_INDEX相关的?第一个错误是我记得住的, 这个错误试图攻击Oracle做的最好的事情:防止违反唯一性约束, 否则就报ORA-00001.
这个应用的状态
Quest Code Tester处于开发阶段。我使用的版本是1.5.2。超过70个bug或者是增强在上一个版本中解决了。和TOAD用户社区类似,Quest乐意接受帮助产品做的更好的意见和反馈。当你自己评价这个产品的时候,想想PL/SQL开发人员的世界中有多久都没有出现像QCTO这样完整的工具了。很明显在QCTO的开发中投入了相当的精力,并且它并没有写的很烂然后就不负责任的丢给用户做QA的工作。
我的一个建议可能是将具体/简洁的模式结合在一起。在Step1中的套话可能会让你在使用了100次快速构建预备测试之后感到厌烦。
结论
在这篇评论的第二部分,我将深入讨论安装的细节以及如何使用该工具完成代码测试。下面列出了网址,你可以从中了解更多关于Quest Code Tester的信息。
产品信息 http://www.quest.com/code-tester-for-oracle/
知识库 http://www.unit-test.com/Presentations/library.php
下载地址 http://www.quest.com/2_0/registration.aspx?requestdefid=12476下面的幻灯片 (来源于Feuerstein 强调要害的部分的介绍视频) 抓住了需要QCTO 完成的功能的精髓。现在标题“Wouldn’t it be wonderful if…”可以被换成 “Isn’t it wonderful that Quest Code Tester does…”