"Software testing is a process, or a series of processes, designed to make sure computer code does what it was designed to do and that it does not do anything unintended." (Myers et al. 1-2).
The goal of software testing must be find bugs, not to attest that a software has no bugs or that it works (Patton 10). If you are only testing the software to attest that it works you'll miss bugs. That's the right approach to software testing, which should guide all testing activities. It's only possible to say that a software has bugs. It's not possible to say that a software has no bugs, due to inumerous possibilities involving software testing. At best, all you can say is that in certain tests no bugs were found.
Another important issue is when a bug is found (the moment in the product's lifecycle). The testing activity has the purpose of finding bugs as soon as possible and make sure they get fixed. The sooner a bug is found, the cheaper it's to fix it (time vs money). The best time to find bugs is on early stages, like planning, requirement analysis, development, and the worst is after the product release.
So there are bugs, a lot of them, but what is a bug exactly? That might seem a silly question, but it's not. In fact, sometimes tricky issues arise and not all of them are bugs. This subject deserves an article itself, and I took the time to write about it, exposing solid parameters to be able to decide whether something really is a bug. If you've missed it, be sure to read it before proceeding:
Another important subject about software testing is the product specification. It is a key documentation and must exist for any product. I've written an article about that too:
"Today, most mature companies treat software testing as a technical engineering profession." (Patton 10).
Although some companies have dedicated software testers, there are many other companies where developers, project coordinators and quality assurance professionals perform software testing tasks, acting as a software tester in some degree. So when you see me using the term software tester I'm refering to anyone performing software testing tasks.
Software testers can't be shy or lazy. They must be disciplined, explorers, proactives, thoroughs, attentives, among others things. And beyond these skills, they also need other soft skills such as good communication, diplomacy and common sense. It's a considerable range of skills, but only the software tester by occupation should strive to achieve all of them. A good software tester doesn't need to know software programming, although it certainly helps in some cases.
Besides the software itself (the program), software testing techniques can be applied to test other artifacts of the product such as the product specification, user manuals, help files, setup and installation, readme files, error messages, etc.
Software testing is a huge and complex subject, but also very important and present nowadays. In next articles I'll be talking about several topics about it. Stay tuned.
Myers, Glenford J., et al. The Art of Software Testing. 2nd ed. John Wiley & Sons, 2004.
Patton, Ron. Software Testing. 2nd ed. Sams, 2005.
What is software testing? by Flavio Silva is licensed under a Creative Commons Attribution 4.0 International License.