Software
testing or Software Quality Assurance verifies and validates that the
application or program fulfills its process requirements. It identifies the
severity level of the errors in the system that requires fixing and defines its
quality factors in terms of reliability, usability, security, portability and
compatibility. Software Testing is generally
limited within budget and timeline. Adhering to predefined principles ensures
effective testing generating plausible results despite limitations.
Principles
of Testing
A principle
can be defined as an accepted rule or more appropriately a standard guideline
which helps in carrying out an action effectively and consistently. Certain
principles can be followed while software testing. In this article we have
tried listing as many of them.
1. Test until the program fails – The true value of testing is achieved when
errors are detected. Hence, this process should be executed with the intention
of exposing failures to the maximum extent.
2. Initiate Testing Early – Initiating the process of testing early in the
development cycle fixes huge errors and reduces cascading errors in the later
stages. This also reduces the risk of reworking on the same code in the final
phase.
3. Evaluate the Context – Testing differs as per the context of the
software being developed. Example: the testing of a security software or a
banking software will differ completely from that of a regular E-Commerce
software. Also, the testing process in a waterfall model differs from the process
followed in Agile methodology. The test objective as well differs at different
points in a software development life cycle. The testing approach should thus
be determined on requirements, risks, objective, knowledge, economy and time.
4. Define the Plan: Software Testing is carried out for achieving a
specific purpose that should be documented in quantifiable terms. Hence test
plans should be defined in terms of scope, objectives, strategy, environment,
risks, schedule, tools, techniques and end deliverable.
5. Design Test Cases: The requirements should be well understood
before designing test cases. The test cases should be written before the
performing the tests. If there is confusion over the test requirements and
product architecture then designing test cases will be ineffective. A test case definition should describe the
input data and the corresponding correct output. This documentation of the
expected output is necessary to provide an unambiguous testing result.
6. Review Test Cases: Executing same test cases will not generate new
errors after a certain period of time. Hence as debugging is carried out, the
test cases should be revised to find more defects.
7. Use Valid as well as Invalid Conditions: Along with valid input values, the testing
should also be performed with invalid or absurd input values. Invalid input
cases detect errors at a higher
rate by triggering failures.
8. Engage different Testers: As already stated, testing is context dependent
and so is are its purposes. Hence testing at various levels should be performed
by different people/team. This will yield better results. Example: Acceptance
testing should be performed by the users, unit testing should be performed by
developers, release testing should be performed by Quality Managers etc.
9. Innovate: It is practically impossible to guarantee the
absence of errors. Hence testing should be carried out more on the highly used
vulnerable components as compared to the lesser used components.
10. Perform Cross Dimensional Testing: Static testing goes into the depth of the
application by revealing the problems in the domain and the data structures.
Dynamic testing covers the breadth with extreme input values that are not
generally used.
11. Cluster the Defects: Errors keep occurring in the section where
errors were already found. Hence such sections should be subjected to more
rigorous testing.
12. Evaluate the Tests: Test cases should be evaluated to test its
effectiveness. This is determined by its rate of error detection.
13. Perform Negative Testing: Focus is usually put on establishing the fact
that the software performs as per the specifications. Another approach to test
an application is by ensuring that it does not function the way it is not
supposed to.
14. Conclude Realistically: Testing although a continuous process needs to
be concluded somewhere. A balance should be reached considering the factors of
time, budget and software quality.
While
following the various principles, the limiting factors should also be taken
into account. Independent Software Testing gives
appropriate results if the principles are followed accordingly.
Conclusion:
Defining the
best approaches, practices, methodologies for optimized testing still remains a
struggle as the this process is very informally approached. Even if there is no
automated or well defined tool in place for Quality Assurance, at least the
goals, principles and limitations should be conceptualized to attain the
maximum goals.

