If you write any significant
amount of PL/SQL code, your day of salvation has arrived, and the salvation is
in the form of Quest Code Tester for Oracle (QCTO). If you work in a structured
development environment (even minimally so), the responsibility for performing
unit tests falls upon the developer. This tool has the potential to save you
numerous hours by allowing you to develop a reusable test repository that can
be easily configured/modified from project to project. Quest Code Tester was
developed by Steven Feuerstein, who is widely acknowledged as the premier
expert of PL/SQL. The same level of excellence that went into the OReilly
books he authored on PL/SQL has gone into the development of this tool.
Why Quest Code Tester Should be of Interest to You
There are four groups of
people who should be directly excited by the release of QCTO, and one group
which can be indirectly so. The direct group is comprised of developers, DBAs,
QA testers, and managers. The indirect group is the customer or end user. Why
should a tool such as QCTO be of interest to these groups?
For developers, testing
PL/SQL code has always been somewhat problematic for several reasons. For one,
there has not been the equivalent of a Mercury WinRunner. For PL/SQL
developers, that meant no automated testing, test repositories, or test result
reporting tools. Another (huge) obstacle in database-related testing is that
many tests have an impact on existing data. You run a test, and even in a
partial failure scenario (or partial success, depending on your frame of
reference), your test environment has now been changed. This effect can also be
described as destructive testing. A third problem area has to do with throwaway
code. You go through the effort of writing a test to check if a row was
inserted into a table, and on your next development project, youre probably
writing the same test again.
For DBAs, being able to code
PL/SQL is pretty much a requirement these days. Do you have to be able to code
at the expert level or be a collections guru? No, but you should possess a
significant degree of competence. To use college as an analogy, database
administration can be your major, and PL/SQL coding is your minor. Having a
robust testing utility can offset a good bit of skill. Inserting one record
into a table is a no brainer, right? Quick, name six possible errors or
exceptions you can run into when inserting a record into a table. Thats what I
thought. Well come back to this question in a bit.
For QA testers, whether it
is at the level of test engineer or software quality assurance (SQA), isnt
their time better spent on system/functional/stress testing as opposed to unit
testing? Yes, there will be some checking at the unit level, but you as a
developer/DBA have a responsibility to check your own work. It is hugely
inefficient for an organization if developers simply write code and then throw
it over the cubicle wall for someone else to test. This is beating a dead
horse, but there is an almost unlimited supply of stories or case studies about
failed development projects for exactly this (poor quality control on the part
of developers) reason.
As a manager, think of the
value added if database code has been thoroughly tested, and even better, that
you now have a test code repository which is independent of a developer. What
typically happens when a developer leaves for greener pastures? Your
organization/development group suffers a loss of institutional knowledge. With
QCTO, much of that knowledge and procedural testing can be stored and captured.
There is a minor downside to this: you do have to account for the time it takes
for developers to become proficient on any testing tool (WinRunner, for
example, is $2600 for four days), but the trade-off is that overall
productivity will be increased.
Finally, what impression
does your product make on the end user? If your company sells an application,
why wouldnt you want to advertise how thoroughly your application has been
tested? If your product is any good, are you willing to put your money where
your mouth is? As an in the trenches IT professional, you may not be exposed
to RFPs. It is not uncommon for RFPs to include questions about your companys
software development process. Being able to elaborate on the QA/unit testing
aspects gives you that much more of a leg up on your competitors.
What Do You Get with Quest Code Tester?
To start with, you get free
tutorials with step-by-step examples, ample documentation, access to a user
community, code samples, product support, a reasonable price, and an option to
try a freeware version. QCTO comes with many features and benefits. The product
is easy to download, install and start using. The help (within the application)
component is thorough, as is the 47-page PDF quick start guide. QCTO includes
narrated Flash
videos covering the following topics:
-
Introduction and overviews
-
Testing tables, views, queries
and cursor variables
-
Testing collections
-
Testing records
-
Testing global variables and
expressions
-
Testing contents of files
-
Test exceptions, system output,
elapsed time
-
Tips and tricks
All topic areas include the
demonstration code used in the videos, so you can go back at your leisure to run
through a test setup on your own. A secondary benefit of the library is that
the test code itself serves as a good example or prototype of what you can use
in your own environment.
The Really, Really Neat Feature of Quest Code Tester
Hands down, it has to be the
Quick Build feature/interface. There are numerous template-like test cases you
can easily drag and drop into the test setup frames. Coming back to the earlier
question about naming six errors or exceptions you can encounter during a
simple insert (I could have asked for seven), the picture below shows how
Quick Build makes those errors available at the click of your mouse.
For each of the exceptions,
the end result is further described after a particular error has been raised.
As an example, suppose you encounter a DUP_VAL_ON_INDEX during an insert
operation. What is the state of the table after the error is raised? Hopefully,
nothing happened to the table, but how would you check or verify that expected
outcome?
One test is to compare the
number of rows before and after, and another is to verify that the specific
error was, in fact, raised (as opposed to some other error). Out of curiosity,
which Oracle error is associated with the DUP_VAL_ON_INDEX exception? Error
number one is how I remember it, which is the error that attempts to strike at
the heart of Oracle enforces best: preventing violations of a unique
constraint, otherwise known as ORA-00001.
The State of the Application
Quest Code Tester is a work
in progress. The version Im using is 1.5.2. Over 70 bugs or enhancements were
addressed in its last incarnation. Much like the TOAD user community, Quest
will gladly accept input and feedback to help make this product better. When
evaluating this product on your own, take into consideration just how long the
PL/SQL developer world was without a tool as complete as QCTO. It is obvious
that a considerable amount of effort went into the development of QCTO, and
that it wasnt coded then tossed over the fence for users to do the QA work on
it (see: Microsoft Live Mail beta testing, synonymous with bug city/what was
Microsoft thinking?).
An example of a suggested
improvement might be to incorporate a verbose/non-verbose mode. The verbiage in
the Step 1 window could tend to be overkill after the 100th time youve
used Quick Build to setup a test.
In Closing
In Part 2 of this review,
Ill go into more detail on the installation and use of the tool to perform
code testing. Listed below are sites with more information about Quest Code
Tester.
The slide below (from the
introduction video, complete with Feuersteins emphasis on key aspects)
captures the essence of the need QCTO fulfills. Wouldnt it be wonderful if
can be changed to Isnt it wonderful that Quest Code Tester does
»
See All Articles by Columnist Steve Callan