University of Oxford Logo University of OxfordSoftware Engineering - Home

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.

Course dates

20th October 2014Oxford University Department of Computer Science01 place remaining.
16th March 2015Oxford University Department of Computer Science15 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.