Software Testing

Software testing evaluates the capabilities of a given program in order to determine if it meets the given requirements. Basically, when the programmers finish their job, the software application is examined for quality assurance so that it can be determined whether or not it has all the features that it's supposed to and if it performs the way it should. Some even say that software testing is actually a form of art, because it involves a deep understanding of the founding principles of software in general. The main difficulty in software testing comes from the complexity of the software. Software testing is not just debugging, it involves quality assurance, validation and verification and reliability estimation. Software testers try to balance between budget, quality and time.

The general definition of software testing is that it's a process of running an application for the sole purpose of finding errors in it and determining if it meets its required results. The biggest difficulty here is that software, unlike physical objects, can fail in completely bizzare and strange ways and sometimes it's not absolutely evident where the problem is coming from. Of course, software doesn't suffer from corrosion or wear-out. Generally, software doesn't change until it's upgraded so if there are errors, they will remain buried in until fixed.

There will always be bugs in any software. It's impossible to find a flawless piece of source code. We are humans and as such, we make errors. Usually, the discovery of these errors is harder than actually fixing them. This is where QA comes in. There are cases though, when fixing one errors leads to the occurrence of another. Computers and the respective software applications running on them are often used in critical applications, that's why the results of having a bug can be severe. There are cases where bugs have lead to airplane crashes, stock market confusions and worse. Bugs can kill and cause disasters. We are living in a computerized world where the quality and reliability of software is of crucial importance. Having top quality software means that it does all the functions it's supposed to (as specified in the design plan), no more, no less. Debugging is just one of the many methods of software testing and it's made in order to find out design defects.

As mentioned, there is a wide range of software testing methods, each one of them serving different purpose during the different life cycle phases. Divided in terms of the goal served, software testing can be divided in the following way - reliability testing, correctness testing, security testing, performance testing.