Software Testing Fundamentals
Software Testing Fundamentals
• Software Testing
• Failure, Error, Fault & Defect
• Test Cases / Test Suites
• Software Testing Stages:
• Unit, System (Integration and Exploratory), and
Acceptance Testing
• Test planning considerations
2
• An investigation into system
quality.
• Based on sequences of stimuli
and observations.
• Stimuli that the system must
react to.
• Observations of system
reactions.
• Verdicts on correctness.
§ Failure
§ A failure is said to occur whenever the
external behavior of a system does not
conform to that prescribed in the system
specification
§ Error
§ An error is a state of the system.
§ An error state could lead to a failure in
the absence of any corrective action by
the system
§ Fault
§ A fault is the adjudged cause of an error
§ Mistake in the code, omission or misuse
§ Defect/Bug
§ It is synonymous of fault
4
• A test suite is a collection of test cases.
• Executed together.
• Each test case should be independent.
• May have multiple suites in one project Suite
Case
• Different types of tests, different Case
Case
resource/time needs. Case
8
Black Box (Functional) White Box (Structural)
• Examines the program that is • Examines source code with
accessible from outside focus on: Control flow & Data flow
• Applies the input to a program and • Control flow refers to flow of
observe the externally visible control between instructions
outcome • Data flow refers to propagation
• It is applied to both an entire of values from one variable or
program as well as to individual
constant to another variable
program units
• It is performed at the external • It is applied to individual units
interface level of a system of a program
• It is conducted by a separate • Software developers perform
software quality assurance group structural testing on the
individual program units
9
• A predicate that determines whether a program is correct or not.
• Based on observations of the program.
• Output, timing, speed, energy use, ...
• Will respond with a pass or a fail verdict.
• Information
• Embedded information to judge correctness
• Procedure
• Code that uses information and observations for verdict
• if (actual value != expected value) { fail (...); }
• assertEquals(actual value, expected value);
10
API GUI CLI
Detailed Subsystem
Design Testing
15
Account
16
• After testing units, test their integration.
• Integrate units in one subsystem.
• Then integrate the subsystems.
• Test input through a defined interface.
• Focus on showing that functionality accessed through
interfaces is correct.
• Subsystems: “Top-Level” Class, API
• System: API, GUI, CLI, …
17
Test Cases
Subsystem made up of
classes A, B, and C. We
have performed unit
testing... A B
• Classes work together to perform
subsystem functions.
C
• Tests applied to the interface of the
subsystem they form.
• Errors in combined behaviour not
caught by unit testing.
18
• Tests designed to reflect end-to-end
user journeys.
• From opening to closing.
• Often based on scenarios.
• GUI Testing
• Deliberate tests, specific input.
• May be automated or human-executed.
• Exploratory Testing
• Open-ended, human-driven exploration.
19
• Tests are not created in advance.
• Testers check the system on-the-fly.
• Guided by scenarios.
• Often based on ideas noted before beginning.
• Testing as a thinking idea.
• About discovery, investigation, and role-playing.
• Tests end-to-end journeys through app.
• Test design and execution done concurrently.
20
• Tester writes down ideas to give direction,
then create critical, practical, and useful tests.
• Requires minimal planning. Tester chooses next action
based on result of current action.
• Can find subtle faults missed by formal testing.
• Allows tester to better learn system functionality, and
identify new ways of using features.
21
• Unit tests verify behavior of
a single class.
• 70% of your tests.
• System tests verify class
interactions.
• 20% of your tests.
• GUI/exploratory tests
verify end-to-end
journeys.
• 10% of your tests.
22
Once the system is internally tested, it should be
placed in the hands of users for feedback.
• Users must ultimately approve the system.
• Many faults only emerge in the wild.
• Alternative operating environments.
• More eyes on the system.
• Wide variety of usage types.
23
• Alpha Testing
• A small group of users work closely with
development team to test the software.
• Beta Testing
• A release of the software is made available to a
larger group of interested users.
• Formal Acceptance Testing
• Customers decide whether or not the system is
ready to be released.
24
• Define acceptance criteria
• Work with customers to define how validation will be
conducted, and the conditions that will determine
acceptance.
• Plan acceptance testing
• Decide resources, time, and budget for acceptance
testing. Establish a schedule. Define order that features
should be tested. Define risks to testing process.
25
• Derive acceptance tests.
• Design tests to check whether or not the system is
acceptable.
• Test both functional and non-functional
characteristics of the system.
• Run acceptance tests
• Users complete the set of tests.
• Should take place in the production environment.
• Some training may be required. 26
• Negotiate test results
• It is unlikely that all of the tests will pass the first time.
Developer and customer negotiate to decide if the system
is good enough or if it needs more work.
• Reject or accept the system
• Developers and customer must meet to decide whether
the system is ready to be released.
27
• Plan for how we will test the system.
• What is being tested (units, subsystems, features).
• When it will be tested (required stage of completion).
• How it will be tested (what scenarios do we run?).
• Where we are testing it (types of environments).
• Why we are testing it (what purpose do tests serve?).
• Who will be responsible for writing test cases (assign
responsibility to team members).
28
• Guides development team.
• Rulebook for planning test cases.
• Helps people outside the team understand the
testing process.
• Documents rationale for scope of testing, how we
judge results, why we chose a strategy.
• Can be reused when making decisions in future projects.
29
• Must understand the product before you can test it.
• What are the needs of the users?
• Who will use the product?
• What will it be used for?
• What are the dependencies of the product?
• Review requirements and documentation.
• Interview stakeholders and developers.
• Perform a product walkthrough (if code is running).
30
Slides derived from https://www.guru99.com/what-everybody-ought-to-know-about-test-planing.html
• Banking Website
• What features do we
want to see?
• Account creation,
deletion,
manipulation.
• Fund transfers
• Fund withdrawal
• Check deposit
• …?
31
Slides derived from https://www.guru99.com/what-everybody-ought-to-know-about-test-planing.html
• Document defining:
• Test Objectives (and how to achieve them)
• Testing Effort and Cost
32
Slides derived from https://www.guru99.com/what-everybody-ought-to-know-about-test-planing.html
§ What are you planning to test?
§ Software, hardware, middleware, ...
§ … AND… What are you NOT
going to test?
§ Gives project members a clear
understanding about what you are
responsible for.
§ Must take into account:
§ Requirements, budget, skills of your
testing team
33
Slides derived from https://www.guru99.com/what-everybody-ought-to-know-about-test-planing.html
• Banking website
• Requirements specified for
functionality and external interface.
• These are in-scope.
• No requirements for database or
client hardware. No quality
requirements (performance,
availability).
• These are out-of-scope.
34
Slides derived from https://www.guru99.com/what-everybody-ought-to-know-about-test-planing.html
• Which should
For the banking site: we apply?
● System Testing
○ Focus on verifying access points and interfaces. • Consider the
○ Functionality likely spread over multiple classes, many project
features interact
● Exploratory Testing
domain.
Could limit: • Which can we
● Unit Testing (focus on integration/interfaces over individual
classes) skip or limit to
Can skip:
● Acceptance Testing
save money?
35
Slides derived from https://www.guru99.com/what-everybody-ought-to-know-about-test-planing.html
• Who will write and execute test cases?
• What types of testers do you need?
• Skills needed for the targeted domain
• What is the budget for testing?
• How many people can you hire to test?
58
• When have we completed our testing objectives?
• For qualities, set appropriate thresholds.
• Availability, ROCOF, throughput, etc.
• For functionality, commonly defined using:
• Run Rate: Number of Tests Executed / Number Specified
• Pass Rate: Number of Passing Tests / Number Executed
• Often aim for 100% run rate and a high pass rate (> 95%)
39
Slides derived from https://www.guru99.com/what-everybody-ought-to-know-about-test-planing.html
• Summarize resources that you have.
• Allows estimation and adjustment of testing scope,
objectives, and exit criteria.
• Human Resources: Managers, testers, developers
who assist in testing, system administration.
• System Resources: Servers, testing tools, network
resources, physical hardware.
40
Slides derived from https://www.guru99.com/what-everybody-ought-to-know-about-test-planing.html
• Where will you execute test cases?
• Software and hardware execution environment
• Often defined as part of continuous integration.
• Need to account for:
• Requirements on both server and client-side.
• Different networking conditions (bandwidth, load).
• Different client or server-side hardware.
• Different numbers of concurrent users.
62
• Break testing plans into individual tasks, each with
an effort estimation (in person-hours)
• Create test specification, 170 person-hours
• Write unit tests, 80 person-hours
• Write API tests, 50 person-hours
• Perform test execution, 1 person-hour (per suite
execution)
• Write test report, 10 person-hours
• …
Slides derived from https://www.guru99.com/what-everybody-ought-to-know-about-test-planing.html 63
• Testing terminology and definitions.
• Input, oracles
• Faults, failures
• Testing stages include unit testing, system testing,
exploratory/GUI testing, and acceptance testing.
• Test planning needs to consider resources, time,
scope, environment.
43