Supporting software development

From automatic test generation to model-driven development — techniques that support the work of building software.

Beyond measuring reliability, we work on techniques that support the act of building reliable software. We aim to carry theory all the way into released tools that people actually use.

Generating test cases automatically

Defects tend to hide at the boundaries between conditions. Boundary value analysis targets exactly those points and is among the most widely used techniques in practice, yet how many cases to place near a boundary, and where, has long been left to experience.

We formulate that choice as an optimisation problem and derive selections that maximise the probability of finding defects within a limited number of test cases. We have extended the approach to programs whose specification is not written down, using machine learning to estimate the boundary itself.

For generating test inputs we also use deep generative models — generative adversarial networks (GAN) and diffusion models. More recently we have turned to large language models, asking whether generative AI can strengthen N-version programming and how cooperation among multiple agents should be designed.

In every case we pair the technique with conventional probabilistic evaluation, because what matters is showing quantitatively how much the quality actually improved.

Model-driven development

Model-driven development (MBD) describes a specification as block diagrams or state machines and generates implementation code from it. Design and implementation are less likely to drift apart, which is why the approach is used where reliability matters, such as embedded systems.

We develop tooling that brings MBD to Julia, and release it together with a mechanism that generates embedded code from state machines.

Predicting development effort

We also study how to predict, from past data, how much effort a development project of a given size will take.

Research highlights in this area

Software from this area

JuliaMBD.jl Julia

A block-diagram based tool for model-based development (MBD) in Julia.