Prospectus

nl en

Foundations of Software Testing

Course
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.

In MyTimetable, you can find all course and programme schedules, allowing you to create your personal timetable. Activities for which you have enrolled via MyStudyMap will automatically appear in your timetable.

Additionally, you can easily link MyTimetable to a calendar app on your phone, and schedule changes will be automatically updated in your calendar. You can also choose to receive email notifications about schedule changes. You can enable notifications in Settings after logging in.

Questions? Watch the video, read the instructions, or contact the ISSC helpdesk.

Note: Joint Degree students from Leiden/Delft need to combine information from both the Leiden and Delft MyTimetables to see a complete schedule. This video explains how to do it.

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

As a student, you are responsible for enrolling on time through MyStudyMap.

In this short video, you can see step-by-step how to enrol for courses in MyStudyMap.
Extensive information about the operation of MyStudyMap can be found here.

There are two enrolment periods per year:

  • Enrolment for the fall opens in July

  • Enrolment for the spring opens in December

See this page for more information about deadlines and enrolling for courses and exams.

Note:

  • It is mandatory to enrol for all activities of a course that you are going to follow.

  • Your enrolment is only complete when you submit your course planning in the ‘Ready for enrolment’ tab by clicking ‘Send’.

  • Not being enrolled for an exam/resit means that you are not allowed to participate in the exam/resit.

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.

Software
Starting from the 2024/2025 academic year, the Faculty of Science will use the software distribution platform Academic Software. Through this platform, you can access the software needed for specific courses in your studies. For some software, your laptop must meet certain system requirements, which will be specified with the software. It is important to install the software before the start of the course. More information about the laptop requirements can be found on the student website.