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