In this video Perdita describes how a model gives precise, but partial, information about a software system to be developed. Different models can be kept consistent by bidirectional transformations.
I’m Perdita Stevens, member of the Laboratory for Foundations of Computer Science, and my field is software engineering, from a mathematical angle. I’m interested in how models are used in the development of software. A model is usually a formal picture, and you can think of it as saying SOME of the things that have to be true about a piece of software that’s being developed. Models are increasingly important in software engineering because most software systems are far too complex for any one person to understand everything about them. A model lets you limit the amount of information you have to consider. Model-driven development is the process of using models systematically, with tool support, to help develop software faster, cheaper, better.
In large-scale software development there will usually be several teams, each working with a model that says the things that are relevant to their work, leaving out stuff they don’t need to care about. For example the database team cares what the tables are, but probably doesn’t care which objects exchange messages under what circumstances. Because in the end there has to be one actual piece of software of which all these models are true descriptions, the models have to be kept consistent. If one team changes something in their model, there may, or may not, be knock-on effects on another team’s model. It would be impossibly time-consuming and error-prone for humans to have to check regularly whether models were consistent, and if not, negotiate what to do about it. It’s better to describe exactly what consistency you need, and how those knock-on effects can be carried out automatically, using a bidirectional transformation language. Your bidirectional transformation instructs a transformation engine on how to do the consistency checking and restoration. However, in the languages we have at the moment, it’s very difficult to write a bidirectional transformation and be confident about what effects it will have. My work aims to contribute to better languages in future and better tool support for using them and getting them right. For example, if our language is good we should be able to prove, once and for all, that any transformation written in it will behave “sensibly” – for example, that it won’t make any changes to models, which are already consistent. This field is an example of where mathematics can contribute to software engineering.
Find out more about Perdita’s Work:
This entry was posted in: