You are on page 1of 37

INFS3203 Systems Deployment and Implementation

Dr. Seifeddine Bouallegue

www.udst.edu.qa
Week 05: Software Testing
Plan
- What is Software Testing?
- Why do we need it?
- Approaches
- Levels
What is Software Testing?
Software is a set of instructions or programs that tell a computer what to do. It can
be divided into two main categrories ie., system software and application
software.

System software includes the operating system and all the utilities that help keep
the computer running. Application software includes programs that do specific
tasks, such as word processing or playing games.

Other types of software, including: middleware, driver software, programming


software.
What is Software Testing?
According to ANSI/IEEE 1059 standard, Testing in Software Engineering is a
process of analyzing a software product or system to examining a software
product or system to determine whether it satisfies or fails to satisfy established
conditions (i.e., defects).

The testing process evaluates the software products characteristics for


requirements such as missing requirements, bugs, or errors in order to evaluate
its reliability, security, and performance.
What is Software Testing?
According to Global Market Insights, the global software testing market is forecast
to grow from USD 40 billion in 2020 to $60 billion by 2027, at a Compound annual
growth rate (CAGR) of 7%.

The IT sector is growing with technological advancements in artificial intelligence,


machine learning, and CI/CD, which is likely to result in a significant growth in the
market.
Why do we need it?
Digitization changed the world as we know it.

We access almost everything online or through software: food, banking, shopping,


etc.

What if these systems turn out to be defective?

One small bug shows a huge impact on business in terms of financial loss and
goodwill.
Why do we need it?
We need Software testing to deliver quality products.

There is a huge difference between marketing about quality and building quality.

Testing is an art to evaluate the functionality of a software application with an


intent to find whether the developed software meets the specified requirements or
not and to identify the defects to ensure that the product is defect-free in
order to produce a quality product.
Why do we need it?
Some of the Software Testing benefits:

1. Cost-effectiveness
2. Customer Satisfaction
3. Security
4. Product Quality
Cost Effectiveness
Design defects can never be completely ruled out for any complex system.

It is not because developers are careless but because the complexity of a system
is intractable.

If the design issues go undetected, then it will become more difficult to trace back
defects and rectify it. It will become more expensive to fix it.
Cost Effectiveness
Sometimes, while fixing one bug we may introduce another one in some other
module unknowingly. If the bugs can be identified in the early stages of
development then it costs much less to fix them.

That is why it is important to find defects in the early stages of the software
development life cycle.

It is better to start testing earlier and introduce it in every phase of the software
development life cycle and regular testing is needed to ensure that the application
is developed as per the requirement.
Customer Satisfaction
The ultimate goal is to give the best customer satisfaction

“Our highest priority is to satisfy the customer through early and continuous
delivery of valuable software.” Agile Manifesto

Software testing improves the user experience of an application and gives


satisfaction to the customers.

Happy customers mean more revenue for a business.


Security
The most sensitive and vulnerable part of testing.

Hackers gain unauthorized access to data.

If your product is not secured, users won’t prefer your product.

Testing helps in removing vulnerabilities in the product.


Product Quality
Software Testing is an art that helps in strengthening the market reputation of a
company by delivering a quality product to the client as mentioned in the
requirement specification documents.

Software testing becomes a very significant and integral part of the Software
Development process.
Testing Approaches
Static, dynamic, and passive testing

Exploratory approach

White/Black/Grey-box testing
Static, dynamic, and passive testing
Static: Reviews, walkthroughs, or inspections are referred to as static testing.
Proofreading which involves verification.

Dynamic: Executing programmed code with a given set of test cases is referred to
as dynamic testing. It takes place when the program itself is run. It involves
validation.

Passive: Verifying the system behavior without any interaction with the software
product, i.e. looking at system traces, logs to mine for specific patterns.
Exploratory Approach

“A style of software testing that emphasizes the personal freedom and


responsibility of the individual tester to continually optimize the quality of his/her
work by treating test-related learning, test design, test execution, and test result
interpretation as mutually supportive activities that run in parallel throughout the
project.“, Cem Kaner, 1984
White/Black/Grey-box testing
Two approaches are used to describe the point of view that the tester takes when
designing test cases. A hybrid approach called grey-box testing may also be
applied to software testing methodology.

White box (structural testing):


• verifies the internal structures or workings of a program, as opposed to the
functionality exposed to the end-user.

• internal perspective of the system (the source code) and programming skills
are used to design test cases
White/Black/Grey-box testing
White/Black/Grey-box testing
Black box (functional testing):
• treats the software as a "black box," examining functionality without any
knowledge of internal implementation, without seeing the source code.

• testers are only aware of what the software is supposed to do, not how it does
it.

• no programming knowledge is required


White/Black/Grey-box testing
Grey:
• combination of both White Box and Black Box Testing.

• involves having knowledge of internal data structures and algorithms for


purposes of designing tests while executing those tests at the user, or black-
box level.

• tester will often have access to both "the source code and the executable
binary
Test Levels
Unit Testing

Integration Testing

System Testing

Acceptance Testing
Unit Testing
Tests that verify the functionality of a specific section of code, usually at the
function level. In an object-oriented environment, this is usually at the class level,
and the minimal unit tests include the constructors and destructors.

These types of tests are usually written by developers as they work on code
(white-box style), to ensure that the specific function is working as expected.

One function might have multiple tests, to catch corner cases or other branches in
the code.
Unit Testing
Unit testing alone cannot verify the functionality of a piece of software, but rather
is used to ensure that the building blocks of the software work independently from
each other.

Unit testing aims to eliminate construction errors before code is promoted to


additional testing; this strategy is intended to increase the quality of the resulting
software as well as the efficiency of the overall development process.
Integration Testing
Any type of software testing that seeks to verify the interfaces between
components against a software design.

Software components may be integrated in an iterative way or all together ("big


bang")

Integration testing works to expose defects in the interfaces and interaction


between integrated components (modules)
Integration Testing
Progressively larger groups of tested software components corresponding to
elements of the architectural design are integrated and tested until the software
works as a system.

Integration tests usually involve a lot of code, and produce traces that are larger
than those produced by unit tests.

This has an impact on the ease of localizing the fault when an integration test
fails. To overcome this issue, it has been proposed to automatically cut the large
tests in smaller pieces to improve fault localization.
System Testing
Tests a completely integrated system to verify that the system meets its
requirements.

System testing takes, as its input, all of the integrated components that have
passed integration testing.
System Testing
System testing is performed on the entire system in the context of either
functional requirement specifications (FRS) or system requirement specification
(SRS), or both.

System testing tests not only the design, but also the behaviour and even the
believed expectations of the customer.
Acceptance Testing
Acceptance testing commonly includes the following four types:

• User acceptance testing (UAT)


• Operational acceptance testing (OAT)
• Contractual and regulatory acceptance testing
• Alpha and beta testing
Acceptance Testing
Acceptance testing commonly includes the following four types:

• User acceptance testing (UAT)


• Operational acceptance testing (OAT)
• Contractual and regulatory acceptance testing
• Alpha and beta testing
Acceptance Testing
User acceptance testing (UAT):

Performed by the end user or the client to verify/accept the software system
before moving the software application to the production environment.

UAT is done in the final phase of testing after functional, integration and system
testing is done.

Validate end to end business flow. It does not focus on cosmetic errors, spelling
mistakes or system testing.
Acceptance Testing
Operational acceptance testing (OAT):

Conduct operational readiness (pre-release) of a product, service or system as


part of a quality management system.

A quality management system (QMS) is a collection of business processes


focused on consistently meeting customer requirements and enhancing their
satisfaction.
Acceptance Testing
Operational acceptance testing (OAT):

OAT is a common type of non-functional software testing, used mainly in software


development and software maintenance projects.

Ensure that the portability of the system, as well as working as expected, does
not also damage or partially corrupt its operating environment or cause other
processes within that environment to become inoperative.
Acceptance Testing
Contractual and regulatory acceptance testing:

Contractual acceptance testing is performed based on the contract's acceptance


criteria defined during the agreement of the contract.

Regulatory acceptance testing is performed based on the relevant regulations to


the software product.

Regulation acceptance testing sometimes involves the regulatory agencies


auditing the test results.
Acceptance Testing
Alpha testing:

Simulated or actual operational testing by potential users/customers or an


independent test team at the developers' site.

Often employed for off-the-shelf software as a form of internal acceptance testing


before the software goes to beta testing.
Acceptance Testing
Beta testing:

Comes after alpha testing and can be considered a form of external user
acceptance testing.

Versions of the software, known as beta versions, are released to a limited


audience outside of the programming team known as beta testers.

The software is released to groups of people so that further testing can ensure
the product has few faults or bugs.
Thank you
+974 4495 2222

info@udst.edu.qa

Location
University of Doha for Science & Technology
68 Al Tarfa, Duhail North
P.O. Box 24449 Doha, Qatar

You might also like