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.