CSG could now effectively and thoroughly automate their test execution as well as efficiently manage and maintain dynamic content. The test tool could call the system DLL for a particular object, and the system DLL could call the application test DLL to retrieve or set the methods and properties.
While this sounds complicated, it's actually very elegant, because it permits the application to be delivered exactly as it was tested, with one small difference: the test DLLs are not part of the package. In other words, the application software does not have to be recompiled because the test hook is not embedded within it. And, since the test DLLs are not delivered, the special functions they provide are not available, thus sealing any potential security hole. "We have delivered two releases with the test DLLs removed and have not experienced any issues," said Shane.
The test automation team now has full, reliable access to all application objects and can shift their time and attention to the real task: developing an extensive automated test library that can deliver comprehensive coverage of their applications in a timely and effective manner. By improving their efficiency, the test team has more time to invest in analysis and design to continually improve quality. Customers receive better software faster, developers have fewer fixes in the field—everyone wins.
So what was the price of all this? Six weeks. One week for the application DLL, two weeks for the mapper, and three weeks to retrofit the automation function library. And how did the QA organization get the cooperation from development?
"We know that it takes teamwork to deliver a quality product," said John Klimek, Executive Director of QA. "If spending six weeks of development can save months of testing time, then it's an easy decision to make."
What a breath of fresh air! Too many companies view development and QA as different—if not adversarial—functions. You and I know that the opposite is true. They are integral to each other, each playing a vital role in delivering good software. When I hear that developers can't be bothered to invest time in improving testability, I am reminded of a cartoon where one person in a boat gloated to the other, "Your end of the boat is sinking."
So is CSG an anomaly, or are there other examples of encouragement you can tell me about out there?