University of Oxford Logo University of OxfordSoftware Engineering - Home
On Facebook
Facebook
Follow us on twitter
Twitter
Linked in
Linked in
Google plus
Google plus
Digg
Digg
Pinterest
Pinterest
Stumble Upon
Stumble Upon

Software Testing

The main focus of this course is on realistic, pragmatic steps for rigorous and organized software testing. It clarifies testing terminology and covers the different types of testing performed at each phase of the software lifecycle together with the issues involved in these types of testing.

The course will discuss how tests can be derived from requirements and specifications, design artifacts, or the source code, and introduce proper testing tools that will be used in a number of ad-hoc exercises.

Frequency

This course normally runs once a year.

Course dates

3rd March 2025Oxford University Department of Computer Science - Held in the Department05 places remaining.
2nd March 2026Oxford University Department of Computer Science - Held in the Department16 places remaining.

Objectives

At the end of the course, students will have an appreciation of a range of testing techniques, and an understanding of rigorous testing theory. They will be able to select an appropriate testing strategy, devise suitable test cases, and formulate correctness hypotheses.

Contents

Introduction:
attitude adjustment; testing in context; basic terminology; types of testing; testing in the development life-cycle; general testing principles.
Black Box Testing
static black box testing; equivalence class partitioning boundary values analysis; combinatorial models: decision tables, cause-and-effect graphs, test generation heuristics; binary decision trees; state transition graphs.
White Box Testing
static white box testing: formal reviews and inspections; programs as directed graphs; control-flow analysis and cyclomatic complexity; data-flow analysis, test data, and assignment-use graphs; program slicing; mutation testing.
Levels of Testing
unit testing (JUnit); integration testing; system testing; performance, stress, and configuration testing; regression testing; acceptance testing
Object-oriented testing
problems specific to OO testing adapting classic testing techniques to OO.

Requirements

There are no prerequisites for this course. However, familiarity with programming in an imperative or object-oriented language is essential, as general principles will be taught through practical examples, using Java as a lingua franca.