Reengineering legacy software with Dezyne

Reengineering legacy software is undesirable but nevertheless occasionally unavoidable. In this paper, we show how Dezyne can be used to recover lost or poorly understood behaviour from a legacy codebase. The models of the rediscovered behavior will be both formally complete and correct. These models then offer a solid foundation for the further development of a software system.

What is legacy software?

An unpleasant but nevertheless unavoidable truth of software development is that conventionally developed software “rots” in time. Rot occurs slowly and insidiously, driven by the very nature of source code itself and the human factors that impinge on developing and maintaining it. It often starts when changes to source code are not reflected in documentation, leading to a loss of readily accessible information. It accelerates when development teams change and knowledge of – in the meantime, poorly documented – code is lost. It proliferates when new features are added by fresh software engineers, based on incomplete documentation and knowledge. It reaches its zenith as the law of diminishing returns bites and development progress grinds to a halt. It is at this point that reengineering legacy software becomes unavoidable.

What do to with legacy software?

From a business perspective, reengineering software is a nightmare. It involves spending a lot of time and money just to stand still. It is also highly risky, simply because the existing legacy software is so poorly understood. In an ideal world, it would be possible to automatically reverse engineer an existing codebase using tooling. But then in ideal world water could flow uphill and time could be reversed. The simple fact is that the 2nd law of thermodynamics means that creating a more highly ordered system (re-engineered software) – from a lower ordered system (legacy code) – requires work. The trick is to perform that work as efficiently and effectively as possible.

Dezyne and reengineering legacy software

In this paper, we will consider the application of Dezyne to the problem of recovering lost or poorly understood behaviour from legacy software and turning it into verifiably complete and correct models. Dezyne is a model-driven software engineering tool that enables software engineers to create, explore and formally verify component-based software designs for embedded, technical and industrial software systems.