The deeper you get into the software process, the more you will likely hear about software testing. It probably sounds to you like a good idea—software should be tested! Except once you realize it takes extra time (and we know time is money), you might start to wonder if it’s really necessary after all.
What is software testing? Is it really necessary? Or is it just a waste of time?
Software testing is the process software development companies use to determine if the software they are producing is working properly and accomplishing the desired outcome.
There are many different types of testing. For your reference, here are the most common types that happen throughout the software development process:
Unit Testing: This testing is done by the software developer during the development process to make sure each small chunk of the project is working as expected.
Integration Testing: During this testing, the software developer confirms that the different pieces of software functionality are working together as expected to produce the desired outcome.
Functional Testing: Multiple parties, including developers, dedicated software testers, and project managers, confirm that the software produced contains all the required functionality and is behaving as expected.
System Testing: This testing ensures that the software works in different systems or environments. The software starts on the developer’s computer but it won’t stay there forever—will it work on the client’s computer?
Stress and Performance Testing: Depending on the type of software, this test is not always necessary. However, when a project is going to experience high traffic, developers and testers will confirm that the software can handle a large number of users at a time, and that it works fast enough to suit the need it serves.
Usability testing: Usability testing is generally conducted by either a non-programming member of the company or a User Experience expert, who confirms that the software is user-friendly and intuitive.
Acceptance Testing: Also called User Acceptance Testing, or UAT, this testing is completed by the user (the client) to confirm that the product is what they expected and serves their need appropriately as agreed upon.
Regression Testing: This testing is done whenever a change is made to any functionality in the system to ensure that all the old pieces still work together correctly.
Beta Testing: This testing occurs during a short trial period in which the client uses the full software system and confirms that it is working properly and there are no unexpected failures or errors.
Who knew there were so many types of software testing? Is it really all necessary? Why not just create the software and then test it at the end?
Jonathan Trick, a senior software developer at EduSource, says it this way: “The closer to the problem you find the bug, the easier and more cost effective it is to fix it.”
On the face of things, it sounds like testing throughout the software development process takes a lot of time. The other side of the coin is that testing software during development takes far less time (and produces a far better product) than waiting to test at the end.
Think of it this way: Imagine you’re writing a term paper for a class. You know when it’s due, and the professor has offered to look over your outline at the beginning of the semester before you spend a lot of time working on your paper.
You have two options. You can create an outline and give it to the professor for them to critique and correct, which gives you confidence and clear direction for your paper. Or you can wait until the night before the paper is due, crank it all out, and hope for the best.
Creating software is roughly similar. You can save all the testing until the end, but as with writing a paper the night before, your edits won’t be thorough, and if you find something that needs to change, it’s a huge ordeal. You have to undo work you’ve already done and possibly rewrite large chunks of the paper for everything to make sense with the change. Plus, you could turn it in to the professor only to find you misunderstood the concept completely and wrote the wrong paper.
On the other hand, if you test software along the way, like turning in a term paper outline for edits, you are able to catch any errors or make changes early and effectively. That way, by the time you reach the end of the process, you’re confident about the effectiveness and efficiency of a software system and any changes are generally quick and easy.
On a basic level, testing is risk mitigation. It’s important for the same reason chair testing is important. You don’t want to have to think before you sit down about whether the chair will hold you. You just want to sit.
Just like the chair you’re presumably using right now was tested when it was made to make sure it would hold you, software has to be tested. Rigorously. With testing, you can be sure your trust is well-founded. Without testing, you’re taking a risk that could very well end in pain.