Lecture07-Testing
Lecture07-Testing
Program testing
Testing is intended to show that a program does what it is intended to do and to discover
program defects before it is put into use.
When you test software, you execute a program using artificial data.
Running test allows you to identify errors and anomalies in the program.
Testing is part of a more general verification and validation process, which also includes
static validation techniques.
2
Program testing goals
To demonstrate to the developer and the customer that the software meets its requirements.
For custom software, this means that there should be at least one test for every requirement in the
requirements document.
For generic software products, it means that there should be tests for all of the system features, plus
combinations of these features, that will be incorporated in the product release.
3
Validation and defect testing
4
An input-output model of program testing
5
Verification vs validation
Verification.
"Are we building the product right”.
The software should conform to its specification.
Validation.
"Are we building the right product”.
The software should do what the user really requires.
6
V & V confidence
Aim of V & V is to establish confidence that the system is ‘fit for purpose’.
7
Inspections and testing
Software testing Concerned with exercising and observing product behaviour (dynamic
verification).
The system is executed with test data and its operational behaviour is observed.
8
Inspections and testing
9
Inspections and testing
Inspections and testing are complementary and not opposing verification techniques.
Inspections can check conformance with a specification but not conformance with the
customer’s real requirements.
10
Inspections
These involve people examining the source representation with the aim of discovering
anomalies and defects.
They have been shown to be an effective technique for discovering program errors.
11
Advantages of software inspection over testing
During testing, errors can mask (hide) other errors. Because inspection is a static process,
you don’t have to be concerned with interactions between errors.
As well as searching for program defects, an inspection can also consider broader quality
attributes of a program, such as compliance with standards, portability and maintainability.
12
A model of the software testing process
13
Stages of testing
Development testing, where the system is tested during development to discover bugs and
defects.
Release testing, where a separate testing team test a complete version of the system
before it is released to users.
User testing, where users or potential users of a system test the system in their own
environment.
14
Development testing
Development testing includes all testing activities that are carried out by the team that
develops the system.
Unit testing, where individual program units or object classes are tested. Unit testing should focus on
testing the functionality of objects or methods.
Component testing, where several individual units are integrated to create composite components.
Component testing should focus on testing component interfaces.
System testing, where some or all of the components in a system are integrated and the system is tested
as a whole. System testing should focus on testing component interactions.
15
Unit testing
16
Object class testing
Set and check the value of all attributes associated with the object.
17
Object class testing
18
Object class testing
19
Automated testing
20
Unit testing using PHPUnit
21
Unit testing using PHPUnit
22
Unit testing using PHPUnit
23
Unit testing using PHPUnit
24
Unit testing using PHPUnit
25
Unit testing using PHPUnit
Folder name
You can also run a single test by providing the path to the test file.
26
Unit testing using PHPUnit
Test Output.
The output shows that we ran 1 test, and made 3 assertions in it. We also see how long it took to
run the test, as well as how much memory was used in running the test.
27
Unit testing using PHPUnit
Edit the code to check if the user age is the same as 21.
28
Unit testing using PHPUnit
29
Unit testing using PHPUnit
Test tellName.
30
Unit testing using PHPUnit
Test tellAge.
31
Unit testing using PHPUnit
Test addFavoriteMovie.
32
Unit testing using PHPUnit
Test removeFavoriteMovie.
33
Component testing
Software components are often composite components that are made up of several
interacting objects.
In the weather station system, the reconfiguration component includes objects that deal with each
aspect of the reconfiguration.
You access the functionality of these objects through the defined component
interface.
34
Component testing
Shared memory interfaces where a block of memory is shared between components. This type of
interface is often used in embedded systems.
Message passing interfaces where one component requests a service from another component.
35
Component testing
Interface misuse. An error in the use of its interface when calling a component (wrong type
parameters, parameters passed in the wrong order, wrong number of parameters are passed).
Timing errors. These occur in real-time systems that use a shared memory or a message-passing
interface (the consumer can access out-of-date information).
36
System testing
It obviously overlaps with component testing but there are two important differences:
Reusable components that have been separately developed and off-the-shelf systems may be
integrated with newly developed components.
Components developed by different team members or groups may be integrated at this stage.
37
System testing - Use-case testing
38
Test-driven development
Essentially, you develop the code incrementally, along with a test for that increment.
You don’t move on to the next increment until the code that you have developed
passes its test.
39
Test-driven development
40
Test-driven development
Essentially, you develop the code incrementally, along with a test for that increment.
You don’t move on to the next increment until the code that you have developed
passes its test.
41
Benefits of test-driven development
Code coverage
Every code segment that you write has at least one associated test so all code written has at least
one test.
Regression testing
A regression test suite is developed incrementally as a program is developed.
Simplified debugging
When a test fails, it should be obvious where the problem lies. The newly written code needs to be
checked and modified.
Simplified debugging
The tests themselves are a form of documentation that describe what the code should be doing.
42
Regression testing
Regression testing is testing the system to check that changes have not ‘broken’
previously working code.
43
Release testing
There are two important distinctions between release testing and system testing.
A separate team that has not been involved in the system development, should be responsible for
release testing.
System testing by the development team should focus on discovering bugs in the system (defect
testing). The objective of release testing is to check that the system meets its requirements and is
good enough for external use (validation testing).
The primary goal of the release testing process is to convince the supplier of the
system that it is good enough for use. If so, it can be released as a product or
delivered to the customer. 44
Requirements-based testing
MHC-PMS requirements:
If a patient is known to be allergic to any particular medication, then prescription of that medication
shall result in a warning message being issued to the system user.
If a prescriber chooses to ignore an allergy warning, they shall provide a reason why this has been
ignored.
45
Requirements-based testing
To check if these requirements have been satisfied, you may need to develop the
above related tests.
Set up a patient record with no known allergies. Prescribe medication for allergies that are known
to exist. Check that a warning message is not issued by the system.
Set up a patient record with a known allergy. Prescribe the medication to that the patient is allergic
to, and check that the warning is issued by the system.
Set up a patient record in which allergies to two or more drugs are recorded. Prescribe both of
these drugs separately and check that the correct warning for each drug is issued.
Prescribe two drugs that the patient is allergic to. Check that two warnings are correctly issued.
Prescribe a drug that issues a warning and overrule that warning. Check that the system requires
the user to provide information explaining why the warning was overruled.
46
Scenario testing
Kate is a nurse who specializes in mental health care. One of her responsibilities is to visit
patients at home to check that their treatment is effective and that they are not suffering from
medication side -effects.
On a day for home visits, Kate logs into the MHC-PMS and uses it to print her schedule of
home visits for that day, along with summary information about the patients to be visited. She
requests that the records for these patients be downloaded to her laptop. She is prompted for
her key phrase to encrypt the records on the laptop.
One of the patients that she visits is Jim, who is being treated with medication for depression.
Jim feels that the medication is helping him but believes that it has the side -effect of keeping
him awake at night. Kate looks up Jim’s record and is prompted for her key phrase to decrypt
the record. She checks the drug prescribed and queries its side effects. Sleeplessness is a
known side effect so she notes the problem in Jim’s record and suggests that he visits the
clinic to have his medication changed. He agrees so Kate enters a prompt to call him when
she gets back to the clinic to make an appointment with a physician. She ends the
consultation and the system re-encrypts Jim’s record.
After, finishing her consultations, Kate returns to the clinic and uploads the records of
patients visited to the database. The system generates a call list for Kate of those patients
who she has to contact for follow-up information and make clinic appointments.
47
Scenario testing
48
Performance testing
Part of release testing may involve testing the emergent properties of a system, such
as performance and reliability.
Performance tests usually involve planning a series of tests where the load is
steadily increased until the system performance becomes unacceptable.
User testing is essential, even when comprehensive system and release testing have
been carried out.
50
Types of user testing
Alpha testing
Users of the software work with the development team to test the software at the developer’s site.
Beta testing
A release of the software is made available to users to allow them to experiment and to raise
problems that they discover with the system developers. Beta testers may be early adopters of the
system or anyone who is interested in it (if it is publicly available).
Alpha testing
Customers test a system to decide whether or not it is ready to be accepted from the system
developers and deployed in the customer environment. Primarily for custom systems.
51