nl en

Foundations of Software Testing


Admission requirements

Assumed prior knowledge

Students are assumed to have good knowledge of object oriented programming concepts and that can write large programs in either Java, Python, or C++.


Software testing is the process of executing a program with the intent of finding errors. Most of the defects in software are design errors, due not to the goodness of programmers, but because the complexity of software is becoming intractable. Testing is more than just debugging. Testing is not only used to locate defects and correct them. It is also used in validation and verification of software systems.

The course is an introduction to the foundations software testing and to software testing activities, without using a specific methodology or technology. In particular we will discuss several coverage criteria, and techniques for the generation of concrete test cases, such as symbolic execution. The focus of the course is on unit testing of object-oriented system, so to understand how a class can be tested in isolation.
During the course students will learn state of the art techniques and methods used for testing today’s programs. Students are expected to participate to a critical discussion in class. Small exercises to test the understanding of the material will be given as homework or to be done in class. At the end of the course students will be grouped in small teams with the goal of implementing a prototype test environment for unit testing a class in Java, Python, or C++.

Course objectives

At the end of the course students are expected to understand the fundamentals of software testing, the basic test types and activities, the principles behind testing coverage criteria, the theoretical foundations of symbolic execution for test case generation. Further, students will have a deep understanding of unit testing in the context of object-orientation, and will be able to design and program in teams (part of) a test environment for unit testing, in which classes can be tested in isolation.


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.

MyTimetable allows you to integrate your timetable with your calendar apps such as Outlook, Google Calendar, Apple Calendar and other calendar apps on your smartphone. Any timetable changes will be automatically synced with your calendar. If you wish, you can also receive an email notification of the change. You can turn notifications on in ‘Settings’ (after login).

For more information, watch the video or go the the 'help-page' in MyTimetable. Please note: Joint Degree students Leiden/Delft have to merge their two different timetables into one. This video explains how to do this.

Mode of instruction

Lectures and one 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 a combination of grades for (1) In-class participation (10%), (2) the in-class or at take-home exercises (40%), and (3) the programming assignment (hackathon) (50%).

Solutions of the exercises and of the programming assignments will be discussed in class. There is no exam and retake for this course. It is thus important to be present at the hackathon, which will only take place once (see timetable).

The teacher will inform the students how the inspection of and follow-up discussion of the exams will take place.

Reading list

  • P. Ammann and J. Offutt, Introduction to software testing, Cambridge University Press, 2008. ISBN 978-0-521-88038-1

  • A choice of selected scientific research papers will be distributed in class. Slides will be provided to the students for download.


From the academic year 2022-2023 on every student has to register for courses with the new enrollment tool MyStudyMap. There are two registration periods per year: registration for the fall semester opens in July and registration for the spring semester opens in December. Please see this page for more information.

Please note that it is compulsory to both preregister and confirm your participation for every exam and retake. Not being registered for a course means that you are not allowed to participate in the final exam of the course. Confirming your exam participation is possible until ten days before the exam.

Extensive FAQ's on MyStudymap can be found here.


Lecturer: Prof.dr. Marcello Bonsangue.


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