Andrei Radulescu is a software architect at Thermo Fisher Scientific’s Materials & Structural Analysis (formerly FEI). He and his colleagues, senior software engineers Paul Janson and Pepijn Kramer, are, in cooperation with TNO-ESI, using Model Driven Engineering (MDE) tools to restructure legacy code. Together they have used MDE tooling to analyze and successfully restructure 30,000 lines of code. They modularized the software design by introducing interfaces between internal components, separating the algorithms from the infrastructure introduced interfaces, and added a test harness. Because of these good results, Andrei and his team are currently scaling up these techniques to the over 3 million lines of source code. They are simplifying the interface design, disentangling wrong dependencies that have occurred over time and reducing the design complexity.
Photo: Example images of a Vacuum representation (system and behavior, respectively). Copyright: Thermo Fisher Scientific
Thermo Fisher Scientific’s Materials & Structural Analysis develops high-end electron microscopes and is based in the city of Eindhoven. Thermo Fisher Scientific has 55,000 employees globally from which 750 employees are working at the Eindhoven site. At this site there are about 220 R&D engineers covering all disciplines necessary to develop a microscope, including physics, mechatronics, electronics and software. Eighty of these engineers are software engineers.
Software Engineering is rapidly evolving
Software development and maintenance is a constant challenge as technologies evolve rapidly, and systems continue to increase in complexity. Model Driven Engineering or Model Driven Software Development aims at improving the efficiency of software development. Instead of using multi-purpose programming languages like C++, Java or C#, a modeling language is used that describes the functionality of a system at a higher abstraction level. In MDE, a system is specified in models from which a well-functioning application can be directly generated. Modeling helps in creating focus on the essential aspects of the application that is developed, and not on the technical details of coding. Additionally, modeling enables engineers with less affinity with a certain technology to directly contribute to creating new applications.
Capturing complexity as soon as possible
“When applying model driven engineering, you actually make an abstract representation of a system so that the engineer can focus on the essence of the system” Andrei explains. “The vision behind model driven software development is that you work with models to define the required functionality, and to generate a high-quality implementation of the modeled system. Models offer a compact representation of a system, which makes it much easier to early capture all the details necessary to define a correct system. Additionally, models can be complemented with tools that can verify system correctness, and can generate high-quality implementations. Such tools significantly speed up software development, which results in a shorter time to market, increased efficiency and lower development cost.”
“As opposed to software code, models are accessible to a larger engineering community, including system engineers, scientist and users. As a result, these engineers get a common language and can closely work together to continuously experiment, innovate, adjust, validate and test. This is of course much more efficient than traditional approaches. Additionally, through continuous engineering, issues are found early and can be corrected much easier.”
A common language for all engineering disciplines
“An example of such a model is a schematic representation of a vacuum subsystem, which consists of valves, pumps, gauges, tubes and how they are interconnected. All of these components are controlled by software. When we specify how these components behave, we have all the ingredients to simulate the subsystem behavior. What you get is a graphical image of the system that can be understood by all persons involved. The model can be created and changed by a system engineer, who can easily simulate and verify all kinds of scenarios.”
“Models can also be used to generate code and validate interfaces. Also in this case, the focus shifts from technology details to the actual interface definition. Technology-specific code, such as COM, is generated. Additionally, once the interface behavior is modeled, interface tests and simulators can be generated. We have made a proof of concept that shows that both the code and test generation is feasible, and we are now in the process of productizing it.”
Cleanup of legacy interfaces
“The MDE tools help us in the analysis and refactoring of large code bases. If you do that by hand you run a risk of missing items or introducing errors. Moreover, repetitive refactoring tasks are both tedious and error prone. Using an MDE-based tool is both more efficient and produces better results. A developer provides a recipe, and the tool repeatedly applies it. Again, the developer focuses on the essence of the refactoring, and the tool takes over the work.”
“This approach works for a large-scale refactoring, such as refactoring about 1,000 internal interfaces in our server. For such a large code base, the tools solve about 80-90 per cent. They do not solve everything as there are also exceptions that are more efficiently addressed manually than with tools. We have automatically analyzed the interface-related code: where they are implemented and who uses them. Next we have visualized these relationships. We have also been able to refactor interface code based on code-transformation rules.”
Faster software development, better architecture
“As you can see, MDE techniques can be applied in a variety of places,” Andrei continues. “For now, we chose to focus on aspects that boost the speed and efficiency of the software development: interface models, and large-scale refactoring of legacy code. We are using MDE-based refactoring to improve our software architecture by defining smaller components that are loosely coupled and interact with each other via well-defined interfaces.”
Opportunity to make a difference
“Projects like these are some of the reasons why I love working for Thermo Fisher Scientific. Working here is very dynamic. Despite of us being a relatively small division, we run many development projects and we also get room to run more experimental projects that allow us to try new technologies that have the potential of improving our software development. These projects have produced tools, which have been enthusiastically received and adopted by our colleagues. You can achieve a lot, both on product and improvement projects. You can really make a difference.”
Andrei, Paul and Pepijn work at Thermo Fisher Scientific’s Materials & Structural Analysis in the Brainport Eindhoven region - a place where technology and IT are used for solving societal challenges. Are you interested in learning more about Thermo Fisher Scientific or other companies in Brainport Eindhoven? Or are you interested in working for one of these companies? Then upload your profile and TalentBOX automatically matches you to relevant jobs in the Brainport Eindhoven Region.