Course: Software Engineering and Technology 2020

Utrecht University, Utrecht
Monday January 27 – Thursday January 30, 2020
Centrum Wiskunde & Informatica (CWI), Amsterdam
Friday January 31, 2020

IPA organises Advanced Courses on each of its major research fields: Algorithmics and Complexity, Formal Methods and Software Technology. Each of these Advanced Courses intends to give an overview of (part of) the research of IPA in this specific field.

The Advanced Course, which is hosted by IPA at Utrecht University this time around, focusses on subject areas in software engineering and software technology where successful research is being conducted by groups in IPA. From several of these areas, such as functional programming, software analytics and language workbenches, software architecture and modelling, and software testing, topics are taken to which an entire course day is dedicated. Course days consist of lectures mixed with active training (exercises, assignments, etc.).

Dates, Location and Programme

The lectures will take place in room Ruppert 111 in the Marinus Ruppert building at UU. The overall schedule of the course is as follows: course days will start at 10.00 and last until approximately 16.30 hours. Short coffee breaks are planned mid-morning and mid-afternoon and an organised lunch break 12.15-13.30 with lunch at The Basket on the UU campus. On Friday January 31st, the course will take place in Amsterdam in the form of attending the Software Engineering Netherlands Symposium organised by VERSEN.

MONDAY 27 January Jeroen Fokker and Jurriaan Hage (UU)
[expand title=”Programming in Haskell and Property-based Testing”]

In the first part of the course, we will introduce the basics of programming in Haskell, as well as more general concepts, such as algebraic data types and programming with higher-order functions. No previous knowledge of Haskell or functional programming is required.
In the second half of the course day we shall be looking at property-based testing, which we shall do in the context of Haskell’s QuickCheck. Although property based testing was first introduced in the context of Haskell, it is now supported in almost all main stream languages and complements other testing strategies well.  In this part, you shall learn how to write properties in Haskell (e.g., is a list sorted?)  that can then be used by QuickCheck to
test for certain properties of your code (e.g., is the output of a sort function always sorted?). QuickCheck does this by means of clever random generators, and will display the smallest counterexamples it may find to the programmer. You shall also learn how to write random
generators for your own datatypes.[/expand]
TUESDAY 28 January Tijs van der Storm (CWI and RUG)
[expand title=”Implementing and Extending Software Languages with Rascal”]

In this tutorial we will apply the Rascal meta programing system as a language workbench. Language workbenches are “compiler-compilers on steroids”, which allows language developers to not only define type checkers, compilers, but also various editor services, such as syntax highlighting, outlines, jump-to-definition, error marking, etc. The running case in question will be a simple DSL for defining online questionnaires, called QL. We’ll start with exploring the basic architecture of a language implementation and the relevant Rascal features for defining the basic components of a language. Then we’ll dive into hands on exercises extending and/or modifying the basic skeleton of QL. Second we will explore how a tool like Rascal can be used to extend existing programming languages, by developing a number of Javascript extensions.[/expand]
WEDNESDAY 29 January Michel Chaudron (Chalmers & Gothenborg University)
[expand title=”Empirical Research in Software Engineering”]

Empirical research proposes the use of observations as a way of gaining knowledge about the world around us. Software Engineering (‘Informatica’) has only in the past decade started to mature in the use of empirical research. Empirical research can be used to discover problems, understand the nature of problems, as well as to evaluate solutions (such as methods, processes, technologies (tools, programming languages, …)).

This tutorial aims at acquainting participants with the main concepts and methods used in empirical research in software engineering, enabling them to evaluate empirical results as well as providing the basis for carrying out empirical studies. A wide range of empirical approaches are covered, including case studies and controlled experiments. These research methods will be illustrated by examples from the literature which also aims the participants to get a flavour of the breadth and depth of empirical studies. This tutorial will also point to key publications that give guidance on designing and performing empirical studies.

If time permits, we can discuss ideas/plans for empirical studies from the participants.[/expand]

THURSDAY 30 January Pekka Aho (OU)

[expand title=”Scriptless test automation through graphical user interface”]

Automated testing through graphical user interface (GUI) is usually based on scripts that are either recorded with a capture and replay tool or manually designed with a scripting tool. However, manually recording or writing test scripts for all the possible paths of the GUI takes simply too much effort to be practical, and even if the test cases are built with keywords and proper architecture, so many test scripts would result in serious maintenance issues. Obviously, there is a need to complement the script-based approach with another automated way of testing GUIs.

One possible solution is scriptless test automation through GUI. Instead of pre-defined scripts, in scriptless approach the tests are generated during the execution, based on the observed state of the system under test (SUT). The approach requires a way to loop the following steps:

1.    Obtain the state of the SUT

2.    Check the state-based test oracles

3.    Derive the possible actions that the end user could do

4.    Select and execute one of the possible actions

5.    Wait for the GUI to update its state

TESTAR ( is an open source tool for scriptless test automation through GUI. It is based on automated exploration of the GUI by emulating an end user interacting with the widgets, such as buttons, menus and text fields. The main idea is that the user does not have to define the test cases, TESTAR automatically generates and executes test sequences based on a structure that is automatically derived from the GUI. TESTAR can detect the violation of general-purpose system requirements through implicit oracles, for example, crashes and unresponsiveness. While the application under test is automatically being tested for stability, crashes and undesired outputs, more test oracles can be added for testing more specific requirements of the application. Incrementally defining the requirements has been very helpful when dealing with legacy systems. While exploring the GUI, TESTAR creates and maintains a state model that can be used for optimizing the action selection strategies, automatically detecting changes between consequent versions of the system under test, and visualization of the test results. TESTAR is used in academic research of scriptless and AI-driven testing[/expand]

FRIDAY 31 January SEN Symposium, CWI, Amsterdam


Registration is now open via this form and closes on 13 January. Note that if you plan to attend the Friday, you should both indicate so in this registration form (for IPA’s records), and also register for the SEN Symposium separately here.

As always, IPA PhD students can attend for free. For others, details on pricing will be made available upon request.


Unlike Fall Days, overnight accommodation is not included by default for this course. The schedule is set up in such a way that it is feasible for many students to commute. In the event this is not feasible, let us know and we will provide basic overnight accommodation. You can specify your accommodation needs on the registration form.