The flip-side of success in cyber-physical systems is that the body of embedded software grows without structural changes being made. So-called legacy software is often associated with:
It explains why an estimated (and staggering) 40% of software engineering budgets in the high-tech industry is presently consumed by software maintenance. These are costs to stand still, but add no value to customers. As a rule of thumb, every 50 to 100 thousand lines of code requires one software engineer for maintenance, every year.
“Legacy software grows like annual tree rings. Pruning legacy software feels like peeling an onion: layer by layer, tears come to your eyes." (Arjan Mooij, ESI (TNO))
Companies are aiming for faster development of new features, and hence more time for innovation. Roughly speaking there are three main approaches to deal with legacy software:
Keep the legacy software as-is
Gradually reduce the technical debt
Green-field redesign of the software
Using the first option all future changes will be made around the legacy software, which adds even more rings to the tree. The third option can easily block the normal innovation rate, which is often infeasible. In practice many companies are looking at the second option.
Making changes in legacy software is known to be expensive, time-consuming, and error-prone. ESI (TNO) performs applied research on methodologies to:
Improve human understanding by analyzing the legacy code;
Improve code evolvability by transforming the legacy code.
As high-tech companies often have many millions of lines of code in their systems, it is almost impossible to go over all this by hand. ESI (TNO) aims for a toolkit consisting of generic tools that can easily be tailored to specific pieces of legacy software. There are three categories of methods:
The use of such methodologies frees up resources, which are currently stuck in maintenance of legacy software, for the development of new, innovative features which are valuable to customers.