University of Oxford Logo University of OxfordSoftware Engineering - Home
On Facebook
Follow us on twitter
Linked in
Linked in
Google plus
Google plus
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.


This course normally runs once a year.

Course dates

3rd March 2025Oxford University Department of Computer Science - Held in the Department13 places remaining.


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.


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.


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.