Blog‎ > ‎

Fundamentals of Software Testing - Summary

posted Apr 13, 2012, 8:08 PM by Unknown user

When we’re testing we often find the presence of errors, which are awful mistakes made by humans that lead to defects, which means the system’s doing something that it’s not supposed to do, and that brings us to failure, and since no one wants a failing product, we should definitely avoid this. Therefore, early testing is of vital importance if we’re trying to reduce costs, time loss and rework, and trying to increase quality.

There are two sides of testing: verification and validation. The first one involves verifying if we’re doing the right it by comparing it to customer requirements, system requirements and all the analysis previously done. The second one implies testing the functionalities of the units, how they integrate with each other, how the whole system works, etc.

So we all know what testing is for, to find defects and correct them before delivering to our clients poor quality software, but we may not all know that there are a lot of different types of testing.

First, we have two approaches, positive and negative. Positive is meant to prove that the system does what it should, and negative is meant to prove that it doesn’t do what it shouldn’t. Then we have two main techniques: white box testing, which is conducted by developers to check if the system works as expected, and black box testing, which is conducted by test engineers to check if it meets clients’ requirements. Those can be for testing both functional and non functional requirements.

For functional requirements we have exhaustive testing, which is evaluating every single possibility. Since that is practically impossible, we also have risk based testing, which is testing first those features that are more likely to fail. There’s also dynamic testing, which has 4 levels: unit, integration, system and user acceptance testing, these serve as validation, as we mentioned before. We also have regression testing, end to end testing, exploratory testing, among others.

For non functional requirements there’s UI testing, usability testing, security testing, performance testing, load testing and recovery testing, among others, all of them to check how the system interacts with everything that surrounds it, like users, OS, databases, etcetera, and how it reacts to anything that happens to it.

So, just like everything else, there’s a life cycle to software testing, which is: test planning, test analysis, test design, test execution and test closure.

Software Testing Life Cycle

This works just like the software development life cycle, first we plan what we’re going to do, establishing scope, schedules and all, then we analyze the system’s requirements so that we can afterwards design the test scenarios, test cases and all the tools needed. After everything’s ready to go, we execute them to get results and finally we close the cycle by registering these results into summary reports.

In conclusion, although the absence of errors in software doesn’t exist, we surely can diminish it by starting to test every piece of it as early as possible.

Manual Testing Help eBook by