Tuesday 9 September 2014

What is Software Testing???


Software Testing is a process that consists of all test life cycle activities like static and dynamic testing concerned with planning, preparation and evaluation of software products to determine that the software products satisfy customer’s requirements and are fit for customers use. Software Testing is done to find software defects or failures in advance.

Software bugs will almost always exist in any software module with moderate size: not because programmers are careless or irresponsible, but because the complexity of software is generally intractable and humans have only limited ability to manage complexity. It is also true that for any complex systems, design defects can never be completely ruled out.

Testing allows developers to deliver software that meets expectations, prevents unexpected results, and improves the long term maintenance of the application. Depending upon the purpose of testing and the software requirements, the appropriate methodologies are applied. Where possible, testing can be automated.

Importance of Software Testing

As we all are human beings and human beings commit errors in any process, some of the errors do not impact much on our day to day life and can be ignored, however some errors are so severe that they can break the whole system or software. In such kind of situations you need to take care that such errors are caught well in advance before deploying the system/software in production environment.

Let’s take a real life example and see how our errors can cause critical failures or disasters if not caught early

Let’s take some ABC banks net banking website, if any net banking customer logs into the website and transfers some amount to other account. After transferring he got the confirmation that amount got transferred successfully and it got deducted from his account. After sometime when he confirmed with other person whom he transferred the amount he got to know that he has not received the amount, now you need to visit your bank to settle this dispute. Also you will get annoyed by the net banking experience of that bank.

This is one situation where testing your software is very important before deploying it. Testing cannot be ignored because it impacts all the end users of software. If the website would have got tested thoroughly for all the possible user operations this problem would have been found well in advance and got fixed before deploying the website.

Types of Testing:

Functional Testing- Module testing verifies that individual software unit performs as expected according to the requirements using a small subset of possible input parameters. At the application level, testing verifies that the entire application functions together according to the requirements.

Example: Passing in real world parameters as well as valid but unusual parameters.

Parametric Testing- At the module level, testing verifies that individual software unit performs as expected according to the requirements for the full range of valid input parameters.

Example: Passing in each parameter at its minimum, maximum and median values, as well as passing in parameters at the minimum and maximum values at the same time.

Fault Tolerant Testing- Module testing verifies that individual software unit does not perform in a detrimental or unexpected manner for illegal or out-of-range input parameters. At the application level, testing verifies that the entire application functions together in a graceful manner according to the requirements when presented with unexpected and/or out-of-range values.

Example: Passing null pointers and the full range of possible values for each parameter.

Integration Testing- Integration testing is an additional step that is used when different sub-systems are being developed simultaneously by independent developers. It verifies that the parameters passed between sub-systems are being handled correctly.

Example: Passing null pointers and the full range of possible values for each parameter.

Regression Testing- Regression testing is retesting sub-systems/modules/units to insure that modifications to one sub-system/module/unit does not cause unexpected results in another sub-system/module/unit. This is also known as ripple effect testing.