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.
|3rd April 2017||Oxford University Department of Computer Science||0 places remaining.|
|16th April 2018||Oxford University Department of Computer Science||13 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.