Software Testing
Fundamentals
Régis ATEMENGUE
Software Engineer | Technical Instructor.
@regis_ate | www.regisatemengue.com
Course Objectives
Understanding the fundamentals
of Software Quality
Understanding the fundamentals
of Software Testing
Understanding the difference between Testing and
Debugging
Explain the limits of testing
@regis_ate | www.regisatemengue.com
2
Course overview
Fundamentals of Software Quality
Software Engineering Refresher
Fundamentals of Software Testing
@regis_ate | www.regisatemengue.com
33
Fundamentals of Software Quality
@regis_ate | www.regisatemengue.com
4
Fundamentals of Software Quality
Importance of Quality Software
Goal of Software Quality
Definition of Software Quality
History Failtures
Modern Software Quality Management
@regis_ate | www.regisatemengue.com
5
Importance of Quality Software
@regis_ate | www.regisatemengue.com
6
Fundamentals of Software Quality
Importance of Quality Software
The mission of a software company is to develop high-quality innovative products
and services at a competitive price to its customers and to do so ahead of its
competitors.
This requires a clear vision of the business, a culture of innovation, an
emphasis on quality, detailed knowledge of the business domain, and a sound
product development strategy.
It requires a focus on software quality and customer satisfaction, and quality
must be built into the software product so that customers remain loyal to the
company
@regis_ate | www.regisatemengue.com
7
Fundamentals of Software Quality
Importance of Quality Software
Customers have very high expectations of quality and
expect high-quality software products to be consistently
delivered on time and within budget.
The focus on quality requires effective software processes to
be in place so that
quality software may be consistently produced.
Software quality is crucial for the success and
sustainability of any software product. It ensures that the
software meets user expectations, performs reliably, and
delivers value.
@regis_ate | www.regisatemengue.com
8
The goal of Software Quality
@regis_ate | www.regisatemengue.com
9
Fundamentals of Software Quality
The goal of Software Quality
The goal of software quality is to ensure that a
software product meets specified requirements,
functions correctly and provides a seamless,
reliable, and secure experience for users.
It focuses on delivering software that is efficient,
maintainable, scalable, and free of defects while
aligning with business objectives and user
expectations
@regis_ate | www.regisatemengue.com
10
The definition of Software Quality
@regis_ate | www.regisatemengue.com
11
Fundamentals of Software Quality
Definition of Software Quality
Software quality refers to the degree to which a software product
meets specified requirements, satisfies user needs, and functions
efficiently, securely, and reliably under different condition.
@regis_ate | www.regisatemengue.com
12
Software failures in the story
@regis_ate | www.regisatemengue.com
13
Fundamentals of Software Quality
Software failures in the story
Facebook's Outage (2021)
In October 2021, Facebook and its other
platforms, like Instagram and WhatsApp,
experienced a global outage that lasted for
several hours.
The outage was caused by a configuration
change with unintended consequences, making
the platforms inaccessible to users worldwide
@regis_ate | www.regisatemengue.com
14
Fundamentals of Software Quality
Software failures in the story
Microsoft's Azure Cloud (2020)
Microsoft's Azure cloud services faced a
widespread outage that affected multiple
Microsoft services for several hours.
An error caused the outage during a routine code
update, which resulted in servers becoming
overwhelmed and causing disruptions to services
like Office 365, Teams, and Azure
@regis_ate | www.regisatemengue.com
15
Fundamentals of Software Quality
Software failures in the story
The Boeing Starliner Orbital Flight Test (2019):
During an uncrewed test flight to the International
Space Station, Boeing's Starliner spacecraft
encountered software issues that prevented it from
reaching the intended orbit, leading to a premature
end of the mission.
source wikipedia: Boeing Orbital Flight Test
@regis_ate | www.regisatemengue.com
16
Fundamentals of Software Quality
Summary of Lessons
Importance of Thorough Testing
Importance of Thorough Testing: Comprehensive and rigorous testing of software
systems is crucial to identify and rectify potential issues before deployment. Testing
should cover various scenarios and edge cases to minimize the chances of critical
failures.
User Experience and Feedback Incorporation: Considering user feedback and focusing
on user experience during software development can help identify potential issues
before they become widespread problem
Source: Biggest Software Failures in History
@regis_ate | www.regisatemengue.com
17
Modern Software Quality Management
@regis_ate | www.regisatemengue.com
18
Fundamentals of Software Quality
Modern Software Quality Management
• Project management
• Estimation
• Risk management
• Requirements’ development and management
• Design and development
• Software development lifecycles
• Quality assurance/management
@regis_ate | www.regisatemengue.com
19
Fundamentals of Software Quality
Modern Software Quality Management
• Software inspections
• Software testing
• Supplier selection and management
• Configuration management
• Customer satisfaction process
• Continuous improvement.
@regis_ate | www.regisatemengue.com
20
Fundamentals of Software Quality
Modern Software Quality Management(Software Inspections)
Software Inspection: The process
mandates that requirement documents,
design documents, source code, and test
plans all be formally inspected by experts
independent of the author of the
deliverable.
@regis_ate | www.regisatemengue.com
21
Fundamentals of Software Quality
Modern Software Quality Management(Software Inspections)
Software testing plays a key role in verifying that the
software is fit for purpose, and two key types of
software testing are black box and white box
testing.
White box testing involves checking that every path
in a module has been tested and involves
defining and executing test cases to ensure code
and branch coverage.
The goal of black box testing is to verify the
functionality of a module or feature or the com-
plete system itself.
@regis_ate | www.regisatemengue.com
22
Software Engineering Refresher
What’s software Engineering (SE)
Software Process and Lifecycle
Software Development LifeCyle
@regis_ate | www.regisatemengue.com
23
What’s software Engineering ?
@regis_ate | www.regisatemengue.com
24
What’s software Engineering ?
The IEEE 610.12 definition is as follows:
Software engineering is the application of a systematic, disciplined, quantifiable
approach to the development, operation, and maintenance of software; that is,
the application of engineering to software, and the study of such approaches
inerized applications”
@regis_ate | www.regisatemengue.com
25
Software Engineering Refresher
Challenge
The challenge in software engineering is to
deliver high-quality software on time
and on budget to customers
@regis_ate | www.regisatemengue.com
26
Software Process and Lifecycle
@regis_ate | www.regisatemengue.com
27
Software Process and Lifecycle
There are several well-known lifecycles employed, such as the waterfall model
the spiral model, the Rational Unified Process, and the Agile methodology
The choice of a particular software development lifecycle for is determined from
the needs of the specific project.
Waterfall Lifecycle
Spiral Lifecycle
Agile Development
@regis_ate | www.regisatemengue.com
28
Software Process and Lifecycle
Waterfall Lifecycle
The waterfall model starts with requirements gathering and definition. It
is followed by the system specification (of the functional and non-functional
requirements), the design and implementation of the software, and
comprehensive testing.
The testing generally includes unit, system, and user acceptance testing.
The waterfall model is employed for projects where the requirements can be
identified early in the project lifecycle or are known in advance
@regis_ate | www.regisatemengue.com
29
Software Process and Lifecycle
Waterfall Lifecycle
@regis_ate | www.regisatemengue.com
30
Software Process and Lifecycle
The Spiral Model
The spiral model is useful for projects where the
requirements are not fully known at project
initiation, or where the requirements evolve as a
part of the development
lifecycle.
The development proceeds in a number of spirals,
where each spiral
implements new functionality and typically
involves determining objectives and
analysing the risks, updates to the requirements,
design, code, testing, and a user
review of the particular iteration or spiral
@regis_ate | www.regisatemengue.com
31
Fundamentals of Software Testing
What’s Testing ?
What’s Software Testing ?
What’s should we test ?
Principles of Testing
Refresh Concepts Functional and Non functional
Requirement
@regis_ate | www.regisatemengue.com
32
What’s Testing ?
@regis_ate | www.regisatemengue.com
31
What’s Testing ?
Testing is the process of executing the program with the intent of finding faults.
As we know Software testing is the fourth phase of the software development life
cycle (SDLC). About 70% of development time is spent on testing
Testing is not a one-time event but a continuous process that begins in the early
stages of development and continues throughout the software’s life cycle.
@regis_ate | www.regisatemengue.com
34
Debbuging vs Testing
@regis_ate | www.regisatemengue.com
35
Debbuging vs Testing
@regis_ate | www.regisatemengue.com
36
Debbuging vs Testing
@regis_ate | www.regisatemengue.com
37
Debbuging vs Testing
@regis_ate | www.regisatemengue.com
38
Debbuging vs Testing
@regis_ate | www.regisatemengue.com
39
Debbuging vs Testing
@regis_ate | www.regisatemengue.com
40
Debbuging vs Testing
Testing is different from debugging. Removing errors
from your programs is known as debugging but testing
aims to locate as yet undiscovered errors.
We test our programs with both valid and invalid inputs
and then compare our expected outputs as well as the
observed outputs (after execution of software).
Remark
Please note that testing starts from the requirements analysis
phase only and goes until the last maintenance phase
@regis_ate | www.regisatemengue.com
41
What’s Software Testing ?
@regis_ate | www.regisatemengue.com
42
What’s Software Testing ?
Software testing is a crucial part of the software development process. It is the
process of evaluating a software system or application to find defects, errors, or
bugs and verifying that it meets its intended requirements and functions
correctly.
@regis_ate | www.regisatemengue.com
43
What’s Software Testing ?
There are various definitions of testing that are given below:
“Testing is the process of exercising or evaluating a system or
system component by manual or automated means to verify that it
satisfies specified requirements.” [IEEE 83a]
“Software testing is the process of executing a program or system
with the intent of finding errors.” [Myers]
It involves any activity aimed at evaluating an attribute or
capability of a program or system and determining that it meets its
required results. [Hetzel]
@regis_ate | www.regisatemengue.com 44
What’s Software Testing ?
Testing is not:
The process of demonstrating that errors are not present.
The process of showing that a program performs its intended
functions correctly.
The process of establishing confidence that a program does
what it is supposed to do.
@regis_ate | www.regisatemengue.com
45
Why Should We Test?
@regis_ate | www.regisatemengue.com
46
Why Should We Test?
Testing is necessary. why:
The Technical Case:
Competent developers are not infallible.
The implications of requirements are not always foreseeable.
The behavior of a system is not necessarily predictable from its components.
Languages, databases, user interfaces, and operating systems
have bugs that can cause application failures.
@regis_ate | www.regisatemengue.com
47
Why Should We Test?
Testing is necessary. why:
The Business Case:
1 If you don’t find bugs, your customers or users will.
.
2 Post-release debugging is the most expensive form of development.
.
3 Buggy software hurts operations, sales, and reputation.
@regis_ate | www.regisatemengue.com
48
Why Should We Test?
Testing is necessary. why:
The Professional Case:
1 Test case design is a challenging and rewarding task.
2 Good testing allows confidence in your work.
3 Systematic testing allows you to be most effective.
4 Your credibility is increased and you have pride in your efforts
@regis_ate | www.regisatemengue.com
49
Why
WhyShould
ShouldWe
WeTest?
Test?
Some key figures:
About 70% of development time was spent on testing phase,
30 to 50% of the total project budget was spent on the testing
phase only.
Software testing constitutes about 40% of overall effort.
@regis_ate | www.regisatemengue.com
50
Principles of Testing
@regis_ate | www.regisatemengue.com
51
Principles of Testing
1. Testing should be based on user requirements: This is in order
to uncover any defects that might cause the program or system
to fail to meet the client’s requirements.
2. Testing time and resources are limited: Avoid redundant tests.
3. Exhaustive testing is impossible: As stated by Myer, it is
impossible to test everything due to the huge data space and the
large number of paths that a program flow might take.
@regis_ate | www.regisatemengue.com
52
Principles of Testing
5. Test planning should be done early: This is because test
planning can begin independently of coding and as soon as the
client requirements are set.
6. Testing should begin “in small” and progress toward testing
“in large”: The smallest programming units (or modules)
should be tested first and then expanded to other parts of the
system.
@regis_ate | www.regisatemengue.com
53
Principles of Testing
7. Testing should be conducted by an independent third party.
8. All tests should be traceable to customer requirements.
9. Assign best people for testing. Avoid programmers.
10. Test should be planned to show software defects and not their
absence.
@regis_ate | www.regisatemengue.com
54
Principles of Testing
7. Testing should be conducted by an independent third party.
8. All tests should be traceable to customer requirements.
9. Assign best people for testing. Avoid programmers.
10. Test should be planned to show software defects and not their
absence.
11. Prepare test reports including test cases and test results to
summarize the results of testing.
12. Advance test planning is a must and should be updated in a
timely manner.
@regis_ate | www.regisatemengue.com
55
Important Concepts Refresher
55
Important Concepts Refresher
Functional and non-functional requirements
In computer science the software requirements are the descriptions
of what the system should do and/or not do, and the constraints
on how it work. There are two types
Functional
Requirements
Non-Functional
Requirements
@regis_ate | www.regisatemengue.com
57
Important Concepts Refresher
Functional vs Non-functional
Functional Non-Functional
Description of what the system Description of how the system
should do should work
Defines a system or its Defines the quality attribute of
component. software.
Helps you verify the Helps you to verify the
functionality of the software. performance of the software.
Specified by User or Customer. Specified by Software
developer .
@regis_ate | www.regisatemengue.com
58
Important Concepts Refresher
Functionnals Requirement & Functional Testing
This type of testing is performed to validate that the software is working as
expected and meets the user’s requirements. The primary focus is on the
software’s functionality and includes various levels of testing such as unit
testing, integration testing, system testing, and acceptance testing
@regis_ate | www.regisatemengue.com
59
Important Concepts Refresher
Functionnals Requirement & Functional Testing
Test Pyramind
@regis_ate | www.regisatemengue.com 60
Important Concepts Refresher
Non Functionanl Requirement & Non functinal Testing
This type of testing focuses on the software’s nonfunctional aspects, such
as performance, security, and usability. The objective is to ensure that the
software meets its nonfunctional requirements and provides a positive
user experience.
@regis_ate | www.regisatemengue.com
4
Important Concepts Refresher
Non Functionanl Requirement & Non functinal Testing
Performance testing involves testing the software’s performance
under various conditions, such as load, stress, and scalability.
Security testing involves testing the software’s security features to
ensure that it is secure from various types of attacks and vulnerabilities.
Usability testing involves testing the software’s user interface and user
experience to ensure that it is user-friendly and easy to use.
Compatibility testing is testing whether the system can work with
different software, hardware, and operating systems.
Scalability testing is testing whether the system can handle increasing
amounts of data and users. 4
Limitations of Testing
@regis_ate | www.regisatemengue.com
16
Limitations of Testing
1. Testing can show the presence of errors—not their absence.
2. No matter how hard you try, you will never find the last bug in
an application.
3. The domain of possible inputs is too large to test.
4. There are too many possible paths through the program to test.
5. In short, maximum coverage through minimum test-cases. That
is the challenge of testing.
6. Various testing techniques are complementary in nature and it
is only through their combined use that one can hope to detect
most errors
@regis_ate | www.regisatemengue.com
4