Much like every site on the internet, we use cookies to help analyze traffic and improve our website. As outlined in our privacy policy, any information is only used internally and is not shared with outside organizations.
Learn More

How safe do you feel knowing your code passes a syntax check?

Keeping reading and you might change your mind.

We have talked at length about having correct syntax does not mean your code is correct.  Sure, we start with getting the syntax correct, but we must also follow the rules of the language.

The ability to create functions and return values is one of the greatest tools available to a programmer!  VBScript, unfortunately, does not use a simple statement such as “return” to signify the return value (as is common in “C”-style languages).  Instead, it makes you repeat the name of the function in a syntax similar to assigning a value to a variable.  This works great, of course… provided you type the name correctly!

While working on support for the Web Services add-in for the next release of Test Design Studio, we opened the “Web_Services.txt” file that ships with QuickTest to ensure that the user-defined functions were being properly registered to the “WebService” object.  That is when we found the issue below:

image_thumb2_thumb

Do you see what’s wrong?  Test Design Studio makes it pretty obvious that the author of this file mistyped the name of the function when trying to set the return value.  What should have been “GetHeaders” was typed as “GetHeader”.  Test Design Studio saw two potential problems here:

  1. “GetHeader” (since it does not match the name of the function) is the same as a reference to a variable.  This file has Option Explicit turned on, and a variable named “GetHeader” does not exist.  Test Design Studio will not let you use an undeclared variable when Option Explicit is enabled.
  2. Functions, by definition, are meant to return values.  This function declaration does not (due to the mistyped name).  Test Design Studio warns you that you might have forgotten to return a value.

 

This error means that anyone attempting to use the “GetHeaders” function attached to the “WebServices” object is either going to get a run-time error or, even worse, never get the object they were trying to retrieve.

Sadly, that’s not the only error Test Design Studio caught.  Elsewhere in the same file was this code:

image_thumb5_thumb

Again, Test Design Studio makes it obvious that there is a problem here!  The code author misspelled the parameter name in the function declaration, which made the reference to the parameter (using the proper spelling) inaccurate.  Test Design Studio gave the following reports:

  1. The code attempted to use an undeclared variable “XMLSchemaFile” (Option Explicit turned on).  Since the name did not match the parameter, it was expecting the name to be defined elsewhere.
  2. A warning was given that the user declared the parameter “XMLScheamFile” and never actually used it.

 

This function, as defined, would never properly validate the XML Schema file.

Had the author of this code been using Test Design Studio and the powerful code analysis features, neither of these mistakes would have been distributed to thousands of HP customers!  Keep in mind that the syntax of this file was 100% accurate even though the file had multiple errors.

So I ask again… how safe do you feel that syntax checking is enough to verify your code?

To learn more about the Code Analysis features of Test Design Studio, check out our page on Code Quality.  You may also want to download our Data Sheet.

The two major flaws in this code were caused by 3 simple characters.  What might you have missed in your code?

Note: This file was analyzed from the general release of QuickTest v11.0.  I have not verified if the issues have been corrected in any patched release.  What to check your file?  The default location is “C:\Program Files\HP\QuickTest Professional\data\BPT_Resources”.  You may also find the file automatically added to your Quality Center/ALM projects in the Resources module.