Ch2 - Software Testing Types
Ch2 - Software Testing Types
Design Documents
High Level Design (HLD) is the overall system design - covering the system architecture and database design. It describes
the relation between various modules and functions of the system. data flow, flow charts and data structures are covered
under HLD.
Low Level Design (LLD) is like detailing the HLD. It defines the actual logic for each and every component of the
system. Class diagrams with all the methods and relation between classes comes under LLD. Programs specs are covered
under LLD.
Software Testing Life Cycle & Bug Life Cycle Software Bug Life Cycle
Black Box testing: Black box testing is a software testing method where in testers are not required to know coding or
internal structure of the software. Black box testing method relies on testing software with various inputs and
validating results against expected output.
Functional Testing: Testing the application against business requirements. Functional testing is done using the functional
specifications provided by the client or by using the design specifications like use cases provided by the design team.
Functional Testing covers:
Unit Testing
Smoke testing / Sanity testing
Integration Testing (Top Down,Bottom up Testing)
Interface & Usability Testing
System Testing
Regression Testing
Pre User Acceptance Testing(Alpha & Beta)
User Acceptance Testing
White Box & Black Box Testing
Globalization & LocalizationTesting
Non-Functional Testing: Testing the application against client's and performance requirement. Non-Functioning testing is
done based on the requirements and test scenarios defined by the client.
Non-Functional Testing covers:
Load and Performance Testing
Ergonomics Testing
Stress & Volume Testing
Compatibility & Migration Testing
Data Conversion Testing
Security / Penetration Testing
Operational Readiness Testing
Installation Testing
Security Testing (ApplicationSecurity, Network Security, System Security)
Test Levels
Unit Testing
This type of testing is performed by the developers before the setup is handed over to the testing team to formally execute
the test cases. .The goal of unit testing is to isolate each part of the program and show that individual parts are correct in
terms of requirements and functionality.
Integration Testing
The testing of combined parts of an application to determine if they function correctly together is Integration testing.
There are two methods of doing Integration Testing Bottom-up Integration testing and Top Down Integration testing.
Top Down Testing is an approach to integrated testing where the top integrated modules are tested and the branch of the
module is tested step by step until the end of the related module.
Bottom Up Testing is an approach to integrated testing where the lowest level components are tested first, then used to
facilitate the testing of higher level components.
Big Bang In this approach, all or most of the developed modules are coupled together to form a complete software system
or major part of the system and then used for integration testing.
Stubs and drivers are dummy programs written while integration testing. Stubs are used during top down testing.In
this type highest level components are created first. To test if component written will function correctly when integrated
with lower level components a dummy program for lower level component is written as a substitute of actual code which
is called Stubs.Stubs will contain only functionality needed to be successfully called by a higher level component. It will
simulate the behavior of a lower level component.In bottom up approach, lower level components are created
first.temporary components called 'drvers' are written as substitutes for the missing code. Then the lowest level
components, can be tested using the test driver. For ex a empty block of code (driver) can be created which only calls a
function.
System Testing This is the next level in the testing and tests the system as a whole. Once all the components are
integrated, the application as a whole is tested rigorously to see that it meets Quality Standards. This type of testing is
performed by a specialized testing team. System testing is so important because of the following reasons:
System Testing is the first step in the Software Development Life Cycle, where the application is tested as a whole.The
application is tested thoroughly to verify that it meets the functional and technical specifications.The application is tested
in an environment which is very close to the production environment where the application will be deployed.System
Testing enables us to test, verify and validate both the business requirements as well as the Applications Architecture.
.
Acceptance Testing This is arguably the most importance type of testing as it is conducted by the Quality Assurance
Team who will gauge whether the application meets the intended specifications and satisfies the client.s requirements. The
QA team will have a set of pre written scenarios and Test Cases that will be used to test the application.
More ideas will be shared about the application and more tests can be performed on it to gauge its accuracy and the
reasons why the project was initiated. Acceptance tests are not only intended to point out simple spelling mistakes,
cosmetic errors or Interface gaps, but also to point out any bugs in the application that will result in system crashers or
major errors in the application.By performing acceptance tests on an application the testing team will deduce how the
application will perform in production. There are also legal and contractual requirements for acceptance of the system.
Alpha Testing This test is the first stage of testing and will be performed amongst the teams (developer and QA teams).
Unit testing, integration testing and system testing when combined are known as alpha testing. During this phase, the
following will be tested in the application:Spelling Mistakes, Broken Links, Cloudy Directions.The Application will be
tested on machines with the lowest specification to test loading times and any latency problems.
In Beta testing a sample of the intended audience tests the application. Beta testing is also known as pre-release testing.
Beta test versions of software are ideally distributed to a wide audience on the Web, partly to give the program a "real-
world" test and partly to provide a preview of the next release. In this phase the audience will be testing the
following:Users will install, run the application and send their feedback to the project team.Typographical errors,
confusing application flow, and even crashes.Getting the feedback, the project team can fix the problems before releasing
the software to the actual users.The more issues you fix that solve real user problems, the higher the quality of your
application will be.Having a higher-quality application when you release to the general public will increase customer
satisfaction.
Test Types:
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 the software is conducted on a complete, integrated system to evaluate the system's compliance with
its specified requirements.There are five steps that are involved when testing an application for functionality.
The determination of the functionality that the intended application is meant to perform ,The creation of test data based on
the specifications of the application ,The output based on the test data and the specifications of the application.
The writing of Test Scenarios and the execution of test cases, The comparison of actual and expected results based on the
executed test cases.
Sanity Testing: is a type of testing that is carried out mostly by testers and in some projects by developers as well. Sanity
testing is a quick evaluation of the software, environment, network, external systems are up & running,
software environment as a whole is stable enough to proceed with extensive testing. Sanity tests are narrow and most of
the time sanity tests are not documented.
Regression Testing: is a type of software testing that is carried out by software testers as functional regression tests and
developers as Unit regression tests. Objective of regression tests are to find defects that got introduction of new feature(s).
Regression tests are ideal candidate for automation.
Retesting: is a type of retesting that is carried out by software testers as a part of defect fix verification. For e.g. a tester is
verifying a defect fix and let us say that there are 3 test cases failed due to this defect. Once tester verifies defect fix as
resolved, tester will retest or test the same functionality again by executing the test cases that were failed earlier.
Smoke testing: is a type of testing that is carried out by software testers to check if the new build provided by
development team is stable enough i.e., major functionality is working as expected in order to carry out further or
detailed testing. Smoke testing is intended to find show stopper defects that can prevent testers from testing the
application in detail. Smoke testing carried out for a build is also known as build verification test.
Agile Testing: This is a type of software testing that accommodates agile software development approach. Agile
development treats testing as an integral part of software development and to be done along with coding. Agile testing
allows incremental and iterative coding and testing.
Ad-hoc testing: This is a informal type of software testing that is performed by software testers, business analyst,
developers or any stake holder without referring to test cases or documentation. Person performing ad-hoc testing usually
has a good understanding of software requirements and tries to break the software and find defects with the experience
and knowledge they have about the domain, requirements and functionality of the software. Ad hoc testing is
intended to find defects that were not found by existing test cases.
Compatibility testing: Compatibility testing is one of the test types performed by testing team. Compatibility testing
checks if the software can be run on different hardware, operating system, bandwidth, databases, web servers, application
servers, hardware peripherals, emulators, different configuration, processor, different browsers and different versions of
the browsers etc.,
Exploratory Testing: Exploratory testing is an informal type of testing conducted to learn the software at the same time
looking for errors or application behavior that seems non-obvious. Exploratory testing is usually done by testers but can be
done by other stake holders as well like Business Analysts, developers, end users etc. who are interested in learning
functions of the software and at the same time looking for errors or behavior is seems non-obvious.
Globalization Testing: Globalization testing is a type of testing which detects problems with in application design related
to usage of the software with different languages, different character sets. Software used should not
crash and should not be able to display information correctly. Globalization testing is applicable for software that is used
by people across different geographies and different language.
Gorilla Testing: is a type of software testing done by software testing team, has a scary name though ?. Objective of
Gorilla Testing is to exercise one or few functionality thoroughly or exhaustively by having multiple people test
the same functionality.
.
Risk based Testing: is a type of software testing and an different approach towards testing a software. In Risk based
testing, requirements and functionality of software to be tested are prioritized as Critical, High, Medium
and low. In this approach, all critical and High priority tests are tested and them followed by Medium. Low priority or low
risk functionality are tested at the end or may not based on the time available for testing.
Non functional testing: Software are built to fulfill functional and non-functional requirements, non-functional
requirements like performance, usability, localization etc., There are many types of testing like compatibility
testing, compliance testing, localization testing, usability testing, volume testing etc., that are carried out for checking non-
functional requirements
Performance Testing It is mostly used to identify any bottlenecks or performance issues rather than finding the bugs in
software. There are different causes which contribute in lowering the performance of software:
Network delay. Client side processing. Database transaction processing. Load balancing between servers.
Data rendering. Performance testing is considered as one of the important and mandatory testing type in terms of
following aspects: Speed (i.e. Response Time, data rendering and accessing) Capacity Stability Scalability
It can be either qualitative or quantitative testing activity and can be divided into different sub types such as Load testing
and Stress testing.
Load Testing A process of testing the behavior of the Software by applying maximum load in terms of Software accessing
and manipulating large input data. It can be done at both normal and peak load conditions. This type of testing identifies
the maximum capacity of Software and its behavior at peak time.
Stress Testing The main intent is to test the Software by applying the load to the system and taking over the resources used
by the Software to identify the breaking point. This testing can be performed by testing different scenarios such as:
Shutdown or restart of Network ports randomly.,Turning the database on or off. Running different processes that consume
resources such as CPU, Memory, server etc.
Usability Testing Usability can be defined in terms of five factors i.e. Efficiency of use, Learn-ability, Memor-ability,
Errors/safety, satisfaction.
Security Testing: is a type of software testing carried out by specialized team of software testers. Objective of security
testing is to secure the software is to external or internal threats from humans and malicious programs.
Security testing basically checks, how good is softwares authorization mechanism, how strong is authentication, how
software maintains confidentiality of the data, how does the software maintain integrity of the data, what is the
availability of the software in an event of an attack on the software by hackers and malicious programs is for Security
testing requires good knowledge of application, technology, networking, security testing tools. With increasing
number of web applications necessarily of security testing has increased to a greater extent.
Portability testing includes the testing of Software with intend that it should be re-usable and can be moved from another
Software as well. Following are the strategies that can be used for Portability testing.Transferred installed Software from
one computer to another.Building executable (.exe) to run the Software on different platforms.established.
Configuration Testing: Configuration testing is a type of testing which is used for performance testing as well as for
performance tuning by finding optimal configuration settings that can make software perform at its best for
hardware or for a given operating system.
Localization Testing: Localization testing a type of software testing performed by software testers, in this type of testing,
software is expected to adapt to a particular locale, it should support a particular locale/language in
terms of display, accepting input in that particular locale, display, font, date time, currency etc., related to a particular
locale. For e.g. many web applications allow choice of locale like English, French, German or Japanese. So
once locale is defined or set in the configuration of software, software is expected to work as expected with a set
language/locale.
A Test Strategy explains the Test Approach and so Testing Approach is a section in the Test Strategy document.
A Test Strategy document is a high-level document that states what you are going to test. It doesn't mention detailed information as a
Test Plan.
A Test Plan is a detailed document that states how you are going to
test the in-scope items. Realistically, a test plan would be written
once your requirements document has been signed off so that the
Test/QA Manager has enough info to devise a strategic plan to test
the solution.Test Strategy precedes the Test Plan
Test design is the act of creating and writing test suites for testing a
software.
Test Strategy (Objectives of testing for the release & team responsible - > Functional Testing)
Test Approach (Types of Testing in Functional with scope of testing is limited to 60 functionalities)
A document showing the relationship/mapping between Test Requirements and Test Cases.
Elements of RTM:
a. Requirements ID
b. Requirements Description
c. Test Case ID
d. Status [Open, Closed, Defer (Later), On hold]
Test coverage measures the amount of testing performed by a set of test. Wherever we can count
things and can tell whether or not each of those things has been tested by some test,