1. IV
Software Testing: Testing Process, Design of Test Cases, Types of
Testing, Functional Testing, Structural Testing, Test Activities, Unit
Testing, Integration Testing and System Testing. Debugging
Activities.
Software Maintenance: Management of Maintenance, Maintenance
Process, Reverse Engineering, Software Re-engineering,
Configuration Management, Documentation.
10
Testing in Software Engineering
As per ANSI/IEEE 1059, Testing in Software Engineering is a process of
evaluating a software product to find whether the current software product
meets the required conditions or not. The testing process involves evaluating the
features of the software product for requirements in terms of any missing
requirements, bugs or errors, security, reliability and performance.
Why Software Testing is Important?
Software Testing is Important because if there are any bugs or errors in the
software, it can be identified early and can be solved before delivery of the
software product. Properly tested software product ensures reliability, security
and high performance which further results in time saving, cost effectiveness
and customer satisfaction.
What are the Steps of Software Testing?
Verification and Validation are two major steps in software testing. These steps
implement the fundamentals of software testing.
In software testing, verification is the process through which your team
checks whether the program, system, or framework is consistent and
aligned with the documentation requirements.
2. Validation is the procedure by which your team verifies the system's
accuracy. During this process, you will reflect on the product and the
system; and think of what users desire and what has been developed.
Types of Software Testing
In this section, we have covered the different aspects of some of the most
popular testing types and their subtypes.
White-box testing
It is conducted to test program and its implementation, in order to improve code
efficiency or structure. It is also known as ‘Structural’ testing.
3. In this testing method, the design and structure of the code are known to the
tester. Programmers of the code conduct this test on the code.
The below are some White-box testing techniques:
Control-flow testing - The purpose of the control-flow testing to set up
test cases which covers all statements and branch conditions. The branch
conditions are tested for both being true and false, so that all statements
can be covered.
Data-flow testing - This testing technique emphasis to cover all the data
variables included in the program. It tests where the variables were
declared and defined and where they were used or changed.
Working process of white box testing:
Input: Requirements, Functional specifications, design documents, source
code.
Processing: Performing risk analysis to guide through the entire process.
Proper test planning: Designing test cases so as to cover the entire code.
Execute rinse-repeat until error-free software is reached. Also, the results
are communicated.
Output: Preparing final report of the entire testing process.
Black-box testing
It is carried out to test functionality of the program. It is also called ‘Behavioral’
testing. The tester in this case, has a set of input values and respective desired
results. On providing input, if the output matches with the desired results, the
program is tested ‘ok’, and problematic otherwise.
4. In this testing method, the design and structure of the code are not known to the
tester, and testing engineers and end users conduct this test on the software.
Black-box testing techniques:
Equivalence class - The input is divided into similar classes. If one
element of a class passes the test, it is assumed that all the class is passed.
Boundary values - The input is divided into higher and lower end values.
If these values pass the test, it is assumed that all values in between may
pass too.
Cause-effect graphing - In both previous methods, only one input value
at a time is tested. Cause (input) – Effect (output) is a testing technique
where combinations of input values are tested in a systematic way.
Pair-wise Testing - The behavior of software depends on multiple
parameters. In pairwise testing, the multiple parameters are tested pair-
wise for their different values.
State-based testing - The system changes state on provision of input.
These systems are tested based on their states and input.
Black Box Testing White Box Testing
An application's internal workings
are not necessary.
Internal workings must be understood.
Also known as closed box/data-
driven testing.
Also known as structural testing or clear
box testing.
Performed by end users, testers, and
programmers
Typically performed by testers and
developers.
This can only be accomplished by
trial and error.
Data domains and internal bounds can be
tested more thoroughly.
Compatibility testing – The test case result not only depends on the product
but is also on the infrastructure for delivering functionality. When the
5. infrastructure parameters are changed it is still expected to work properly.
Some parameters that generally affect the compatibility of software are:
1. Processor (Pentium 3, Pentium 4) and several processors.
2. Architecture and characteristics of machine (32-bit or 64-bit).
3. Back-end components such as database servers.
4. Operating System (Windows, Linux, etc).
Black Box Testing Type
The following are the several categories of black box testing:
1. Functional Testing
2. Regression Testing
3. Nonfunctional Testing (NFT)
What is Functional Testing?
Functional Testing is a type of software testing that validates the software
system against the functional requirements/specifications. The purpose of
Functional tests is to test each function of the software application, by providing
appropriate input, verifying the output against the Functional requirements.
Functional testing mainly involves black box testing and it is not concerned
about the source code of the application. This testing checks User Interface,
APIs, Database, Security, Client/Server communication and other functionality
of the Application Under Test. The testing can be done either manually or using
automation.
What do you test in Functional Testing?
The prime objective of Functional testing is checking the functionalities of the
software system. It mainly concentrates on –
Mainline functions: Testing the main functions of an application
6. Basic Usability: It involves basic usability testing of the system. It
checks whether a user can freely navigate through the screens without
any difficulties.
Accessibility: Checks the accessibility of the system for the user
Error Conditions: Usage of testing techniques to check for error
conditions. It checks whether suitable error messages are displayed.
How to do Functional Testing
Following is a step by step process on How to do Functional Testing :
Understand the Functional Requirements
Identify test input or test data based on requirements
Compute the expected outcomes with selected test input values
Execute test cases
Compare actual and computed expected results
7. Functional Testing Types
Integration Testing
Integration testing is a type of software testing in which individual units are
combined and tested as a group. This testing aims to expose errors in the
interaction between integrated teams, and integration testing is often performed
after unit testing and before system testing.
Unit Testing
Unit testing is software testing in which individual units are tested to verify that
they are fit for use. A team is the smallest testable part of an application. In
object-oriented programming, a branch is usually an individual class or method.
Unit testing is often performed by the programmer who writes the code.
Regression Testing
The system is retested after changes have been made to ensure that the changes
did not introduce new bugs. This is important because it can help catch errors
introduced by the changes.
Acceptance Testing
Acceptance testing is an essential step in software testing. This step helps
ensure the software is correct and meets the end user's needs.
Functional Vs Non-Functional Testing:
Functional Testing Non-Functional Testing
Functional testing is performed using
the functional specification provided by
the client and verifies the system against
the functional requirements.
Non-Functional testing checks
the Performance, reliability,
scalability and other non-functional
aspects of the software system.
Functional testing is executed first Non-functional testing should be
performed after functional testing
Manual Testing or automation tools can Using tools will be effective for this
8. be used for functional testing testing
Business requirements are the inputs to
functional testing
Performance parameters like speed,
scalability are inputs to non-
functional testing.
Functional testing describes what the
product does
Nonfunctional testing describes how
good the product works
Easy to do Manual Testing Tough to do Manual Testing
Examples of Functional testing are
Unit Testing
Smoke Testing
Sanity Testing
Integration Testing
White box testing
Black Box testing
User Acceptance testing
Regression Testing
Examples of Non-functional testing
are
Performance Testing
Load Testing
Volume Testing
Stress Testing
Security Testing
Installation Testing
Penetration Testing
Compatibility Testing
Migration Testing
Functional Testing Tools
Here is a list of popular Functional Testing Tools. They are explained as
follows:
1) Selenium
Popular Open Source Functional Testing Tool
Selenium is an open-source web automation tool, currently in demand, and
widely used tool in the market. It is one of the best QA automation tools that
can automate across multiple OS Like Windows, Mac, and Linux and browsers
like Firefox, Chrome, IE, as well as Headless Browsers. Check our Selenium
tutorial.
9. Key Features:
Selenium test script can be written in programming languages like Java,
C#, Python, Ruby, PHP, Perl and JavaScript
Selenium offers record and playback features with its browser add-on
Selenium IDE
The powerful Selenium WebDriver helps you create more complex and
advanced automation scripts.
Price: Free to use
Visit Selenium >>
2) SoapUI
This is an open source functional testing tool, mainly used for Web service
testing. It supports multiple protocols such as HTTP, SOAP, and JDBC.
Key Features:
The GUI of the software is easy to handle and use
Vulnerability testing feature helps to secure website from hackers and
viruses.
It is possible to do the detailed analysis using its reporting feature.
The SQL Injection feature, which can be utilized to perform functional
testing, provides some standard SQL queries and methods to identify the
weak areas of the application.
10. Download Link: https://www.soapui.org/downloads/download-soapui-pro-
trial.html
3) Watir
This is a functional testing tool for web applications. It supports tests executed
at the web browser and uses a ruby scripting language. It is an open-source,
cross-platform web application performance testing tool. It is one of the best
open source test automation tools that interacts with a browser just like a human
being, so it clicks links, filling out forms, and validating text.
Key Features:
It is a free, so there are no costs to use the tool.
This automated testing tool, suitable for conducting functional tests, is
supported by a very active and growing community.
It supports multiple browsers on different platforms.
It is a powerful and lightweight tool.
4) QTP – Very user-friendly Functional Test tool by HP
5) JUnit– Used mainly for Java applications and this can be used in Unit
and System Testing
11. Explain the types of functional testing.
The main objective of functional testing is to test the functionality of the
component.
Functional testing is divided into multiple parts.
Here are the following types of functional testing.
12. Unit Testing: Unit testing is a type of software testing, where the individual
unit or component of the software tested. Unit testing, examine the different part
of the application, by unit testing functional testing also done, because unit
testing ensures each module is working correctly.
The developer does unit testing. Unit testing is done in the development phase
of the application.
Smoke Testing: Functional testing by smoke testing. Smoke testing includes
only the basic (feature) functionality of the system. Smoke testing is known as
"Build Verification Testing." Smoke testing aims to ensure that the most
important function work.
For example, Smoke testing verifies that the application launches successfully
will check that GUI is responsive.
Sanity Testing: Sanity testing involves the entire high-level business scenario
is working correctly. Sanity testing is done to check the functionality/bugs
fixed. Sanity testing is little advance than smoke testing.
For example, login is working fine; all the buttons are working correctly; after
clicking on the button navigation of the page is done or not.
13. Regression Testing: This type of testing concentrate to make sure that the code
changes should not side effect the existing functionality of the system.
Regression testing specifies when bug arises in the system after fixing the bug,
regression testing concentrate on that all parts are working or not. Regression
testing focuses on is there any impact on the system.
Integration Testing: Integration testing combined individual units and tested
as a group. The purpose of this testing is to expose the faults in the interaction
between the integrated units.
Developers and testers perform integration testing.
White box testing: White box testing is known as Clear Box testing, code-
based testing, structural testing, extensive testing, and glass box testing,
transparent box testing. It is a software testing method in which the internal
structure/design/ implementation tested known to the tester.
The white box testing needs the analysis of the internal structure of the
component or system.
Black box testing: It is also known as behavioral testing. In this testing, the
internal structure/ design/ implementation not known to the tester. This type of
testing is functional testing. Why we called this type of testing is black-box
testing, in this testing tester, can't see the internal code.
For example, A tester without the knowledge of the internal structures of a
website tests the web pages by using the web browser providing input and
verifying the output against the expected outcome.
User acceptance testing: It is a type of testing performed by the client to
certify the system according to requirement. The final phase of testing is user
acceptance testing before releasing the software to the market or production
environment. UAT is a kind of black-box testing where two or more end-users
will involve.
Retesting: Retesting is a type of testing performed to check the test cases that
were unsuccessful in the final execution are successfully pass after the defects
fixed. Usually, tester assigns the bug when they find it while testing the product
or its component. The bug allocated to a developer, and he fixes it. After fixing,
the bug is assigned to a tester for its verification. This testing is known as
retesting.
Database Testing: Database testing is a type of testing which checks the
schema, tables, triggers, etc. of the database under test. Database testing may
14. involve creating complex queries to load/stress test the database and check its
responsiveness. It checks the data integrity and consistency.
Example: let us consider a banking application whereby a user makes a
transaction. Now from database testing following, things are important. They
are:
o Application store the transaction information in the application database
and displays them correctly to the user.
o No information lost in this process
o The application does not keep partially performed or aborted operation
information.
o The user information is not allowed individuals to access by the
Ad-hoc testing: Ad-hoc testing is an informal testing type whose aim is to
break the system. This type of software testing is unplanned activity. It does not
follow any test design to create the test cases. Ad-hoc testing is done randomly
on any part of the application; it does not support any structured way of testing.
Recovery Testing: Recovery testing is used to define how well an application
can recover from crashes, hardware failure, and other problems. The purpose of
recovery testing is to verify the system's ability to recover from testing points of
failure.
Static Testing: Static testing is a software testing technique by which we can
check the defects in software without actually executing it. Static testing is done
to avoid errors in the early stage of the development as it is easier to find failure
in the early stages. Static testing used to detect the mistakes that may not found
in dynamic testing.
Why we use static testing?
Static testing helps to find the error in the early stages. With the help of static
testing, this will reduce the development timescales. It reduces the testing cost
and time. Static testing also used for development productivity.
Component Testing: Component Testing is also a type of software testing in
which testing is performed on each component separately without integrating
with other parts. Component testing is also a type of black-box testing.
Component testing also referred to as Unit testing, program testing, or module
testing.
15. Grey Box Testing: Grey Box Testing defined as a combination of both white
box and black-box testing. Grey Box testing is a testing technique which
performed with limited information about the internal functionality of the
system.
Nonfunctional Testing:
It’s in the name. Non functional tests check the non functional attributes of any
software – performance, usability, reliability, security, quality, responsiveness, etc.
These tests establish software quality and performance in real user conditions.
Example: Tests are created to simulate high user traffic so as to check if a site or
app can handle peak traffic hours/days/occasions.
The main sub-sets of non-functional testing are:
Performance Testing: Software is tested for how efficiently and resiliently it handles
increased loads in traffic or user function. Load testing, stress testing, spike testing, and
endurance testing are various ways in which software resilience is verified.
Compatibility Testing: Is your software compatible with different browsers, browser
versions, devices (mobile and desktop), operating systems and OS versions? Can a
Samsung user play with your app as easily as an iPhone user? Cross Browser Compatibility
tests help you check that.
Security Testing: Conducted from the POV of a hacker/attacker, security tests look
for gaps in security mechanisms that could be exploited for data theft or for making
unauthorized changes.
Usability Testing: Usability tests are run to verify if a software can be used without
hassle by actual target users. So, you put it in the hands of a few prospective users,
in order to get feedback before its actual deployment.
Visual Testing: Visual tests check if all UI elements are rendering as expected, with
the right shape, size, color, font, and placement. The question these tests answer is:
Does the software as it was meant to in the requirements?
16. Accessibility Testing: Accessibility testing evaluates if the software can be used by
individuals who are disabled. Its goal is to optimize the apps so that differently-abled
users can perform all key actions without external assistance.
Responsive Testing: Responsive tests verify if the app/site renders well on screen
sizes and resolutions offered by different devices, mobile, tablets, desktops, etc. A
site’s responsive design is massively important since most people access the internet
from their mobile devices, and expect software to work without hassle on their
personal endpoints.