Software testing is probably the most complex task in the software development cycle.

It often takes longer to test the software than it does to write the code. The problems discovered during the software testing phase add more time onto the coding phase, resulting in further delays in the product’s release, and so this vicious cycle goes. It’s nearly impossible to attribute the problems that arise during the software testing cycle to any single factor. Before going any further, it’s important to clarify one point. Software that works, but not the way it is supposed to work, is not considered an error in the coding (also known as a bug). Rather, this situation is the result of an error in the design phase. Software engineers refer to these differences as a “faultâ€ vs. a “failureâ€. Faults can turn into failures, but that’s a subject for another time. So why is software testing such a time-consuming and frustrating process? One factor is the complexity of the software being developed. The more complex the project is, the more there is to test. Also, complex projects typically involve multiple development team members, including those working directly for the company and those working as subcontractors. Software testing troubles directly attributable to the human factor include poorly documented code and employee turnover. And if the person who is not properly documenting the project is the same person who leaves the company midway through the project cycle, the problem quickly compounds. Another software testing difficulty arises when those developing the software are the same ones testing that software. These individuals have a much higher level of understanding about software and computer system. They’re not likely to make the same types of mistakes during the software testing phase that end users might make using the finished software. For example, software engineers understand that you never press the power button before you properly close all applications. End users, in their rush to burst out of the office at 5:00 pm just want the computer off, and some won’t wait until every application closes properly. Plenty of software testing applications are available to help during the software testing phase. These products are designed to facilitate and enhance the software testing phase, provided they can be made to work with the software being tested. The main purpose of software testing is to discover software failures. As failures are discovered, they can be corrected. However, software testing cannot guarantee that the software is problem-free. Testing finds many bugs, but even the most extensive testing processes can’t fix failures that are not uncovered. Never rely on software testing as proof that no problems exist. That’s considered software verification, an entirely different process. Regardless of the difficulties involved with software testing, one truth remains. Software failures discovered early on cost far less to correct than those that occur in latter stages of software development, or worse, after the software has been released to the general public.

Software Testing Tools – Are they really useful? There’s no easy answer to this question. Software testing is a crucial part of the development process, and tools definitely help with this oftentimes overwhelming task. But to be useful, software testing tools must support the testing process. What does this mean? It means you need to start by understanding the different phases of software testing. For example, do you understand the difference between black box and white box testing? Black box confirms only that the software meets its stated requirements and functions accordingly. White box testing looks at the actual software code to ensure paths, conditions, code statements and branches are written properly. Do you know which software testing tools work best for unit testing, integration testing or system testing? Each of these testing processes addresses a different aspect or view of the software. Starting to understand that software testing tools are not a “one size fits all” solution? Some rounds of software testing are better accomplished using humans, not software testing tools. Do you know which ones? Functional testing, alpha testing, acceptance testing and usability testing fall into this category. To confuse matters even a bit further, you’ve got to make sure you’re using the right type of human for the different “human” software testing processes. Software testers work closely with developers throughout all stages of development and use software testing tools. End users are those individuals for whom the software has been created. Beta testers are humans with more technical backgrounds (generally) who get involved in software testing just before the software is ready to be released into production. They look for last minute bugs and functionality issues. User acceptance testing ensures the resulting software is “user friendly” and satisfies the end users’ needs; also important before the software goes into production. There are even more phases of software testing that go on during the software development lifecycle. Determining which of the phases are better accomplished using software testing tools and which are better left to human intervention takes effort. In larger development houses, the IT department has a pretty good grasp on this. And they’re the ones who ultimately decide which of the hundreds of software testing tools on the market are best for their development/testing teams; definitely not an easy task. Software testing tools are themselves software. As such, each of these testing tools undergoes the whole development, testing, maintenance and upgrade cycles that other types of software do. So before making purchasing decisions, it’s best to try out these products, talk with existing users, research the product’s track record, and know how much configuration you’ll need to do to get the product up and running.

And remember, software testing tools can’t work miracles. They cannot make poorly designed software better. They can’t do anything about unrealistic development schedules. And most importantly, software testing tools will never work properly if management or others are allowed to continually change software specifications after development has begun.

OutSource Software Testing The trend nowadays is to outsource software testing. Offsite software testing companies are everywhere; they’re headquartered in the United States and in technology-rich countries such as India, Singapore and Japan. Company literature boasts the tremendous time and money saving features of outsourcing software testing while stressing high quality work you can count on. But is it really beneficial to outsource software testing? There’s no standard answer to this potentially expensive proposition. How can you decide if it makes sense to outsource software testing? You’ve got to begin by carefully analyzing your needs as they relate to this critical phase of software development. Software testing means many things to many people. The main objective of software testing is to ensure the software functions as specified before going into production. But it also means making sure the software is intuitive and easy to use. Let’s face it – no matter how great the software product is, if it’s too cumbersome to use, its usefulness will be short-lived. Before you make the decision to outsource software testing, it’s important to clarify what you want from the outsourcing company. As their popularity grows, so do the services these companies provide. Many also provide software design services. Or, they will plan, but not implement a software testing process for your organization. And they will even send individuals to your site to take care of integrating the software testing tools you purchase with your hardware. In general, regardless of your exact software testing needs, if you’ve got the money to pay for it, you’ll find an outsourcing company willing to do it. One reason companies decide to outsource software testing is to eliminate the learning curve. Software testing companies not only know about the different software testing tools, their employees already know how to use these tools. If you work in software development, you know how tight production schedules are. Anything that saves time helps keep projects on schedule. Software delays are costly so when weighing the costs vs. benefits of outsourcing software testing, determine how project delays affect your bottom line. Oftentimes software development houses cannot afford to hire and maintain a full-time development team and an in-house software testing team. For these companies, the decision to outsource software testing is an easy one. The decision to outsource software testing makes sense for many companies. If you do decide to outsource, get your expectations and your costs in writing before work

commences. Agree on a method of reporting bugs back to you to ensure that the information you receive back is useful. Also discuss such topics as regression testing, script maintenance, and load tests beforehand. When you outsource software testing, it’s important to build a solid relationship with the company for this current project as well as for future projects. If possible, speak with clients who have given their software testing work to the outsource company. As tempting as it may be don’t let cost be the deciding factor. Remember, cheaper isn’t always better.

Software Testing Procedures Don’t be fooled into thinking that software testing procedures are a waste of time and effort. Documented procedures for testing software must be in place before testing begins. Lack of software testing procedures or using procedures that are not clearly and completely defined often results in time delays and cost overruns; two things software marketers cannot afford, especially when staying ahead of the competition is crucial. To be useful, software testing procedures must encompass all aspects of the software testing process. It’s vitally important that the procedures define the people who will be involved in the testing process, the skill set of each team member, and their availability for the duration of the testing cycle. For the software cycle to remain on track, the software testing procedure must also delineate a carved-in-stone testing schedule including dates of important milestones. To be effective and useful, software testing procedures require much more information. Procedures must define guidelines for creating test cases. Include in this section the processes for running these test cases, and the creation, testing and maintenance of testing scripts. Also include here a thorough explanation of all other approaches that will be used during the software testing phase. It addition to a discussion of the specific processes for software testing, be sure to define the specific parts of the software to be tested during the stated timeframe. Software testing procedures must also define the hardware and software resources that are needed to keep the testing process on track and the length of time each will be needed. If the resources are not available, it won’t be possible to meet project deadlines. One aspect of software testing procedures that can be difficult to agree on is a definition of acceptable testing results. It’s imperative, however that a firm decision be made here. No software testing procedure should ever begin without a clear understanding of what results are and are not acceptable. Finally, there needs to be a process for reporting the results of the software testing phase, including the reporting of bugs. Software testers are not responsible for fixing software problems; only reporting them. However, they are responsible for verifying that previously reported bugs have been fixed. It’s imperative that this process also be detailed in software testing procedures. Equally important is discussion of and procedures for

regression testing. Software testers need to ensure that new fixes, and any software changes and enhancements do not adversely affected previously tested parts of the software. Software testing is a critical component of the software development cycle. And software testing procedures are critical to the success of the testing phase. Software remains in a perpetual state of change which is why software testing, whether manual or automated, is so vital to a software product’s success. Typically, 30 – 40% of the software engineers employed at larger software development companies work on software testing and each of these individuals needs to understand his or her role in this ongoing process. Software testing procedures help ensure that they do