Professional Documents
Culture Documents
Software Testing
Software Testing
Software Testing
Testing Fundamentals
i. Software Testing - Introduction - Importance
Chapter 2
Types of Testing
I. Unit Testing
v. Testing Tools
Chapter 4
Chapter 5
Testing Techniques
i. Equivalence Partitioning & Boundary Value Analysis
Chapter 4
Testing Methodology
i. Agile Testing Methodology
Chapter 7
Difference between
Defect Severity in Software Testing
Chapter 9
Chapter 10
Performance Testing
i. Performance Testing
v. Scalability Testing
Chapter 11
o Meets the business and technical requirements that guided it’s design and
development
o Works as expected
o Can be implemented with the same characteristic.
2) All Life Cycle Activities: Testing is a process that’s take place throughout the Software
Development Life Cycle (SDLC).
The process of designing tests early in the life cycle can help to prevent defects from
being introduced in the code. Sometimes it’s referred as “verifying the test basis via
the test design”.
The test basis includes documents such as the requirements and design specifications.
3) Static Testing: It can test and find defects without executing code. Static Testing is
done during verification process. This testing includes reviewing of the documents
In software testing industry, there are 7 principles of testing. It’s very important to
learn about this principle because these are nothing but the pillars of your testing
efforts.
But let me ask you one question. Do you really know the meaning of principle? If
yes, then please skip next paragraphs and start reading about the principle from
“What is Software Testing Principle?” section. If you don’t know the meaning of
principle, then please continue with this post.
What is Principle?
Basically, the principle is nothing but the rules or law which must be followed.
Or you can say principles are the essential characteristic of the system which
needs to follow for developing the best system. Ignoring any one principle may
cost the effectiveness towards the performance of the system. A principle of
software testing refers to the brief mentioned and proven concepts which guide
testing professionals during software testing process.
According to this principle; if you are testing web application and mobile
application using same testing strategy, then it is wrong. This principle says the
testing approach should be different and that’s depending on the application.
Strategy for testing web application would be different from android mobile app
testing.
SDLC
Software Development Life Cycle (SDLC) is a process used by the software
industry to design, develop and test high quality softwares. The SDLC aims
to produce a high-quality software that meets or exceeds customer
expectations, reaches completion within times and cost estimates.
What is SDLC?
SDLC is a process followed for a software project, within a software
organization. It consists of a detailed plan describing how to develop,
maintain, replace and alter or enhance specific software. The life cycle
defines a methodology for improving the quality of software and the overall
development process.
SDLC Models
There are various software development life cycle models defined and
designed which are followed during the software development process.
These models are also referred as Software Development Process Models".
Each process model follows a Series of steps unique to its type to ensure
success in the process of software development.
Following are the most important and popular SDLC models followed in the
industry & minus ;
Waterfall Model
Iterative Model
Spiral Model
V-Model
Other related methodologies are Agile Model, RAD Model, Rapid Application
Development and Prototyping Models.
STLC is an integral part of Software Development Life Cycle (SDLC). But, STLC
deals only with the testing phases.
STLC starts as soon as requirements are defined or SRD (Software Requirement
Document) is shared by stakeholders.
STLC provides a step-by-step process to ensure quality software.
In the early stage of STLC, while the software or the product is developing, the
tester can analyze and define the scope of testing, entry and exit criteria and
also the Test Cases. It helps to reduce the test cycle time along with better
quality.
As soon as the development phase is over, the testers are ready with test cases
and start with execution. This helps to find bugs in the initial phase.
STLC Phases
STLC has the following different phases but it is not mandatory to follow all
phases. Phases are dependent on the nature of the software or the product,
time and resources allocated for the testing and the model of SDLC that is
to be followed.
Requirement Analysis − When the SRD, FRD is ready and shared with the
stakeholders, the testing team starts high level analysis concerning the AUT
(Application under Test).
Test Planning − Test Team plans the strategy and approach.
Test Case Designing − Develop the test cases based on scope and criteria’s.
STLC is part of SDLC. It can be said that STLC is a subset of the SDLC set.
However, STLC is a very important phase of SDLC and the final product or the
software cannot be released without passing through the STLC process.
STLC is also a part of the post-release/ update cycle, the maintenance phase of
SDLC where known defects get fixed or a new functionality is added to the
software.
The following table lists down the factors of comparison between SDLC and
STLC based on their phases −
systems. product.
provided. behavior.
Types of Testing
There are different levels during the process of testing. In this chapter, a
brief description is provided about these levels.
Functional Testing
Non-functional Testing
Functional Testing
This is a type of black -box testing that is based on the specifications of the
software that is to be tested. The application is tested by providing input
and then the results are examined that need to conform to the functionality
it was intended for. Functional testing of software is conducted on a
complete, integrated system to evaluate the system's compliance with its
specified requirements.
3. Functional Testing means Testing the 3. Non- Functional Testing means Testing the
application against business requirements. application against clients and performance
requirements.
5. Functional Testing Validating the behavior of 5. Non- Functional Testing Validating the
application. characteristics performance of application.
6. This Testing covers Unit Testing, Integration 6. This Testing covers Load/Performance Testing,
Testing, Smoke Testing, Sanity Testing, Stress/Volume Testing, Security Testing,
Regression Testing and so on. Installation Testing and so on.
8. Functional Testing means how is your system 8. Non- Functional Testing means how well your
is doing. system is doing example usability, performance
and stress testing.
Unit tests are basically written and executed by software developers to make sure that
code meets its design and requirements and behaves as expected.
The goal of unit testing is to segregate each part of the program and test that the
individual parts are working correctly.
This means that for any function or procedure when a set of inputs are given then it
should return the proper values. It should handle the failures gracefully during execution
when any invalid input is given.
A unit test provides a written contract that the piece of code must assure. Hence it has
several benefits.
Unit testing is basically done before integration as shown in the image below.
Method Used for unit testing: White Box Testing method is used for executing the unit test.
4. Unit testing helps in simplifying the debugging process. If suppose a test fails then only latest
changes made in code needs to be debugged.
Component testing
Component testing is also known as module and program testing. It finds the defects in
the module and verifies the functioning of software.
Component testing is done by the tester.
Component testing may be done in isolation from rest of the system depending on the
development life cycle model chosen for that application. In such case the missing
As discussed in the previous article of the ‘Unit testing’ it is done by the developers where they
do the testing of the individual functionality or procedure. After unit testing is executed,
component testing comes into the picture. Component testing is done by the testers.
Component testing plays a very important role in finding the bugs. Before we start with the
integration testing it’s always preferable to do the component testing in order to ensure that each
component of an application is working effectively.
Integration testing
In Big Bang integration testing all components or modules are integrated simultaneously, after
which everything is tested. As per the below image all the modules from ‘Module 1’ to ‘Module
2. Top-down integration testing: Testing takes place from top to bottom, following the control
flow or architectural structure (e.g. starting from the GUI or main menu). Components or
systems are substituted by stubs. Below is the diagram of ‘Top down Approach’:
3. Bottom-up integration testing: Testing takes place from the bottom of the control flow
upwards. Components or systems are substituted by drivers. Below is the image of ‘Bottom up
approach’:
Acceptance testing is basically done by the user or customer although other stakeholders may
be involved as well.
The goal of acceptance testing is to establish confidence in the system.
Acceptance testing is most often focused on a validation type testing.
When actual result deviates from the expected result while testing a software application
or product then it results into a defect. Hence, any deviation from the specification
mentioned in the product functional specification document is a defect. In different
organizations it’s called differently like bug, issue, incidents or problem.
When the result of the software application or product does not meet with the end user
expectations or the software requirements then it results into a Bug or Defect. These
defects or bugs occur because of an error in logic or in coding which results into
the failure or unpredicted or unanticipated results.
While testing software application or product if large number of defects is found then it’s called
Buggy.
When a tester finds a bug or defect it’s required to convey the same to the developers. Thus they
report bugs with the detail steps and are called as Bug Reports, issue report, problem report, etc.
What is a Bug?
A Bug is the result of a coding Error or Fault in the program which causes the program
to behave in an unintended or unanticipated manner. It is an evidence of fault in the
program. Bugs arise from mistakes and errors, made by people, in either a program’s
source code or its design. Normally, there are bugs in all useful computer programs,
but well-written programs contain relatively few bugs, and these bugs typically do not
prevent the program from performing its task.
The bug has different states in the Life Cycle. The Life cycle of the bug can be shown
diagrammatically as follows:
1. New: When a defect is logged and posted for the first time. It’s state is given as new.
2. Assigned: After the tester has posted the bug, the lead of the tester approves that the bug is
genuine and he assigns the bug to corresponding developer and the developer team. It’s state
given as assigned.
3. Open: At this state the developer has started analyzing and working on the defect fix.
4. Fixed: When developer makes necessary code changes and verifies the changes then he/she
can make bug status as ‘Fixed’ and the bug is passed to testing team.
5. Pending retest: After fixing the defect the developer has given that particular code for retesting
to the tester. Here the testing is pending on the testers end. Hence its status is pending retest.
6. Retest: At this stage the tester do the retesting of the changed code which developer has given
to him to check whether the defect got fixed or not.
7. Verified: The tester tests the bug again after it got fixed by the developer. If the bug is not
present in the software, he approves that the bug is fixed and changes the status to “verified”.
8. Reopen: If the bug still exists even after the bug is fixed by the developer, the tester changes
the status to “reopened”. The bug goes through the life cycle once again.
9. Closed: Once the bug is fixed, it is tested by the tester. If the tester feels that the bug no longer
exists in the software, he changes the status of the bug to “closed”. This state means that the
bug is fixed, tested and approved.
10. Duplicate: If the bug is repeated twice or the two bugs mention the same concept of the bug,
then one bug status is changed to “duplicate“.
11. Rejected/ Not a bug: If the developer feels that the bug is not genuine, he rejects the bug. Then
the state of the bug is changed to “rejected”.
12. Deferred: The bug, changed to deferred state means the bug is expected to be fixed in next
releases. The reasons for changing the bug to this state have many factors. Some of them
are priority of the bug may be low, lack of time for the release or the bug may not have major
effect on the software.