author: Hans van der Laan
title: Automatic Learning of Java Models
topics: Algorithms and Data Structures , Logics and semantics
committee: Arend Rensink
started: April 2017
end: July 2017
type: Research Project


There is a branch of research called Automata Learning (or Model Learning), which is about generating an atomaton that describes the behaviour of a dynamic (i.e., running) system by observing its actions and "guessing" how these hang together. This is thought to be a good alternative to the manual construction of such models at design time, for two reasons: (1) design-time models are typically hard to construct, especially if they should be complete; and (2) (design-time models are almost guaranteed to get out of sync with the actual code.

In this assignment you are challenged to apply the theory of automata learning to Java programs. This involves

  1. Understanding the theory behind automata learning
  2. Identifying what "actions" you can observe on a Java program; probably this involves defining appropriate annotations to let the user define his own observables
  3. Synthesizing input data or tests that you want to apply to the Java program, in order to check hypotheses about the learned model (this is part of the learning process)
  4. Providing a prototype implementation and applying this to a few sample programs to validate the outcome of the research project

It should be noted that there is prior work on this topic; part of the assignment (as always) is to get acquainted with that and better identify what questions are left open.


  1. LearnLib: A Framework for Automata Learning (Digital version available here)

Additional Resources

  1. The paper