Software testing, also known as application testing is a collection of techniques whose purpose is to evaluate and verify the quality and integrity of computer software. Using this process, software developers can guarantee that a product is in agreement with the industry standards, the technical requirements and the user specifications. The goal of software testing is often mistakenly thought to be the discovery of each and every one of the bugs that exist in the vast majority of software products but to bring to light cases in which the client (individual or business) could be affected, to actualize the good use and the maintainability of the product. Software testing, in its usual form cannot provide reassurance that a product could work under all possible circumstances but it can authorize its satisfying performance under specific circumstances. Having different teams that develop and execute the code, it is not uncommon for lack of communication to lead to failure of effective software testing.
Since it is practically impossible to implement every available test method in order to check a software product, developers more than often will have to choose a certain technique having in mind the resources and the time needed. As soon as executable software exists, they can begin to test it and it is the level of completion that quite often advises them to judge as to what method of testing will be pursued. Moreover, software testing developers have to keep in mind the final user of the product. For example, the software for an MRI machine is neither acceptable nor desirable to have the same testing method with a video game, or a business oriented application. A reason behind coding errors is originated in the early days of programming and in the presumption that software is written and meant only for machine execution and not designed for other programmers to read as well and the only way to evaluate the software aforementioned is to run the code. Slowly but steadily that attitude changed from developers who appreciated the problem in the early 1970s through the efforts of program, developers who first saw the purpose in comprehending code as a condition in order to fix the problems that arose.
It comes as no surprise that software testing is considered among developers to be the most difficult part in a software development assignment. In many cases it is more time consuming testing the program than writing it. The complications that arise while testing increase the lines of code that have to be written, and cause delays resulting in further setbacks in the product’s delivery date. Putting the blame of the complications that emerge during that phase to any single variable, seems to be highly problematic. According to Technopedia a software bug is a “problem causing a program to crash or produce invalid output. The problem is caused by insufficient or erroneous logic. A bug can be an error, mistake, defect or fault, which may cause failure or deviation from expected results”. While the majority of bugs occur due to human errors, mistakes that developers make in code writing or program architecture, a handful occur due to compilers causing the creation of incorrect code. Bug reports are the result of thorough software testing and document the errors found through the procedure. A product in which a bug cannot be found but is not functioning properly, as an outcome of a design mistake is said to have a “failure” rather than a “fault”, a situation which refers to finding a bug in a software product. Another source of errors other than coding is requirement gaps, or unidentified requirements which can be generated due to developing oversight. The cost of bugs according to a report from the National Institute of Standards and Technologies in 2002, evaluated the annual total cost of software bugs for the American economy in the amount of around $ 60 billion and further estimated that one third of that cost could be prevented should better software testing.
Image 1: Bug Fixing Cost
The methods of software testing include at a first glance static vs. dynamic testing. Static testing involves methods like inspection or walkthroughs, while dynamic testing is about running the code and can be done while the program is not yet completed. There is also the box approach that is split between white-box testing, black box testing and grey-box testing.
So what is it that makes software testing so difficult? Having seen the impact of fixing bugs, we should carefully examine the factors that trivialize software testing. An important part in this plays the ramification of the code written. As the software gets more elaborate, the lines of code are increased and so does the possibility of a human error. In addition, large projects usually include a sizable number of developers that more than often have communication issues, as they may not even work in the same organization. It was clarified earlier that human error is by far the most common explanation of software trouble so it comes as little surprise that Moreover, another common explanation for bugs includes inadequately detailed code and a firm’s turnover ratio as employees coming and going from the company could possibly mean, projects left in the middle with the subsequent problems of new employees having to begin from where other employees left the code. Things become worse, if the code was not accurately documented.
A different cause for software failure is the failure to segregate the groups of developers in “makers” and “testers”. Programmers who have experience in testing are needed for that cause since in most cases they possess a more thorough insight when dealing with software bugs not to mention that a new set of eyes could reveal problems that the original group, the makers” failed to detect. Another problem is the execution of untested code, caused especially due to tight timeframes that developers have to work at. Also, the users sometimes fail to execute the program’s code in the right order an error which could result if the program fails.
In order, to aid in software testing a plethora of software applications are available. With the provision that they will work with the program that we want tested, those applications aim in the facilitation and enhancement of the testing phase. It becomes clear that the primary objective in testing is to uncover the bugs that lie hidden, and according to an informal quote in the programming community, there is always at least one bug, and if your code runs immediately, you did something wrong. With the uncovering of errors we can fix them. On the other hand, even the most thorough testing can never fully guarantee that the software has zero problems.
Finally, despite the undeniable problems in testing, it is common ground that the earlier a bug is detected, the less it costs in terms of the overall project. This is also the purpose that every software product has a beta version, released.
- IBM. Endlessly Curious. 4 September 2008. 23 11 2014.
2. Kaner, Cem et. al. Testing Computer Software. 2nd Edition. New York: John Wiley and Sons, 1999.
3. NIST. ASHI Reporter. October 2002. 2014 November 2014.
4. Technopedias. n.d. 23 November 2014.