Quality assurance, or QA, is often given short shrift in a software development organization, especially when budgets are tight. When debating the software development budget at one of the software companies where I consult, the CEO finally asked, “Well, do you really want to hire a QA guy, or a programmer to add features to the software?”
It was a tough choice. I decided to hire the programmer because we had a huge list of features to implement. And we couldn't afford to implement a QA process without hiring a significant staff of QA engineers and someone to manage them.
In another example, a client had developed its software and was getting ready for a beta release to its first customers. It too had neglected QA. Although the work of the company's individual programmers was good, the entire system needed testing after the programming work was integrated.
This client realized that going to market without a comprehensive test of the system would be a major disaster. An obvious indicator of the impending doom was the missing data on screens of the application whenever the VP of engineering tried to use the software. The target market was ordinary consumers who wouldn't tolerate any missing data, confusing behavior or unexpected error messages.
How could such good engineers create such lousy software?!
Because QA is the ugly stepsister of software development. Even if the engineers are unit testing their code, they don't want to be bothered with testing the entire application. It isn't considered a creative or “fun” part of the process.
Consequently, QA is often neglected, leading to mediocre software and unhappy users.
Outsourcing is an excellent solution to the problem of nonexistent or incomplete QA. Yet some people are surprised to learn QA can even be outsourced. Outsourcing your QA is a terrific first step to taking advantage of low-cost offshore engineering resources.
One reason QA is such a good place to start with outsourcing is you don't necessarily need to divulge your source code. You can deliver a binary version of your software for installation and testing by your outsourced QA team.
Look for a team with experience performing the type of QA that you need. You can divide QA into five different types of testing:
- Requirements testing. Making sure your software does what you designed it to do.
- Usability testing. Specialized testing that may require focus groups of target users.
- Load or stress testing. To ensure your software has the required performance.
- Environment testing. Testing your software on different operating systems, browsers, etc.
- Regression testing. An automated process to repeat tests quickly on each new release of your software.
Regression testing is often used with unit testing. Unit testing is performed during programming and requires access to the source code. Other separate regression tests can exercise the user and programmatic interfaces defined for your software without viewing the source code.
Avoid outsourcing too much at once. Pick the type of testing that will give you the biggest benefit. For example, regression testing may be valuable because you can reuse the tests yourself after they're developed by the service provider's QA team. On the other hand, environment testing requires a large number of test cases, and low cost outsourcing is the only way to complete them affordably.
In summary, it's important to recognize the value of QA in the software development process. You may start out with a small development team and be satisfied with the quality of its code. As the complexity of the software grows, you can add QA resources either by outsourcing or hiring your own internal team.
When you undertake the creation of a large and complex software project, it's important to plan for professional QA as part of the effort. If you don’t, you run the risk of making a bad first impression and losing critical early sales, funding for future projects, or worse. This is a case where outsourcing may be just the tool you need to stay gainfully employed.