Studiegids

nl en

Foundations of Software Testing

Vak
2024-2025

Admission requirements

Assumed prior knowledge

Students are expected to have basic knowledge of discrete mathematical structures, a solid understanding of object-oriented programming concepts, and be proficient in programming with Java, Python, or C++.

Description

Software testing is the process of executing a program with the intent of identifying failures. Most software faults stem from design errors, not due to the quality of programmers, but because the complexity of software is increasingly becoming intractable. Testing is a vital technique used in the validation and verification of software systems.

This course provides an introduction to the foundations of software testing without adhering to a specific methodology or technology. We will address three key problems related to testing:

  1. How extensively do we need to test?
  2. How can we generate effective test inputs?
  3. How can we determine the expected values for comparison against actual outcomes?

The course focuses on unit testing of object-oriented systems, emphasizing how to test a class in isolation.

Students are expected to actively participate in critical discussions in class. Three assignments related to the course material will be given for in-class problem-solving. At the end of the course, in a mini hackathon, students will be assigned to teams with the goal of implementing a prototype test environment for unit testing a class in Java, Python, or C++.

Course objectives

By the end of the course, students are expected to:

  1. Illustrate the correct use of test terminology, including concepts such as error, failure, fault, reachability, infection, and propagation.
  2. Design and develop unit tests for object-oriented software, focusing on aspects such as inheritance, drivers, mocks, and stub objects.
  3. Analyze and apply control and data flow coverage criteria, including node, edge, prime path coverage, and data interactions.
  4. Apply mutation testing and the RIP model to evaluate the effectiveness of testing suites.
  5. Use input partitioning methods to systematically divide the input space for comprehensive testing.
  6. Inspect boundary conditions and combine them with input space partitioning techniques.
  7. Discuss the principles and advantages of random testing.
  8. Implement various random adaptive testing strategies to identify software failures.
  9. Apply symbolic execution to generate test cases and assess their coverage and effectiveness.
  10. Discuss various strategies to address the oracle problem in practical scenarios and apply metamorphic testing to verify test results.

Timetable

The most recent timetable can be found at the Computer Science (MSc) student website.

You will find the timetables for all courses and degree programmes of Leiden University in the tool MyTimetable (login). Any teaching activities that you have sucessfully registered for in MyStudyMap will automatically be displayed in MyTimeTable. Any timetables that you add manually, will be saved and automatically displayed the next time you sign in.

Mode of instruction

Lectures, exercise classes, and a final hackathon.

Course load

Total hours of study: 168 hrs. (= 6 EC)
Lectures: 26:00 hrs.
Practical work: 34:00 hrs.
Examination: 8:00 hrs.
Self-study/Homework: 100:00 hrs.

Assessment method

The final grade is composed of:

  1. In-class discussion (10%)
  2. Three in-class assignments (40%)
  3. Programming hackathon (50%)

The in-class assignments cover all course objectives except the second one, which is primarily (but not exclusively) addressed by the programming hackathon. Solutions and inspections of the in-class assignments will be discussed in class. Attendance at the hackathon is crucial, as it will only occur once (see timetable).

Failing the course can be remedied with a retake that accounts for 100% of the grade and consists of exercises on the topics covered in class.

Reading list

  • P. Ammann and J. Offutt, Introduction to software testing, (2nd edition) Cambridge University Press, 2016. ISBN 978-1-107-17201-2

  • Slides and some lecture notes will be provided to the students for download.

Registration

Student has to register for this course using the enrollment tool MyStudyMap. FAQ's on MyStudymap can be found here.

Contact

Lecturer: Prof.dr. Marcello Bonsangue.

Remarks

Information about the course, including scheduling, partial grades, and news is distributed via the Brighspace page of the course.