My research focuses on the design and development of advanced, scalable techniques and tools for the exploration, assessment and evolution of large industrial software systems. This involves the combination of several subfields of software engineering, such as program comprehension, reverse engineering, program analysis, software visualization and empirical software engineering. Usually, I try to find answer to these questions in close collaboration with industry.
At Simula, I lead the EvolveIT project aimed at devising recommendation systems to support the evolution of safety-critical component-based cyber-physical product families and the EvoTest project that builds on software analytics to enable smarter testing of evolving systems. In these projects we collaborate closely with Kongsberg Maritime and Cisco.
Other topics that we currently are, or previously have been, investigating include:
- assessing and improving the cost-effectiveness of automated software inspections by building on our work on static program analysis & (static) profiling;
- measuring and managing technical debt;
- empirically investigating the relation between source code characteristics (such as code smells) and software process characteristics (such as observed maintenance problems);
- software analytics and software repository mining to find and monitor software engineering characteristics and qualities (e.g., maintainability);
- reconstruction of models from existing software artifacts;
- source-based and model-based techniques for software verification and validation;
- identification of crosscutting concerns in source code (a.k.a. aspect mining), both for the purpose of improving program comprehension and to support evolution of those systems;
- methods and techniques to reverse engineer and visualize (architectural) views on existing software systems to improve their understanding.
An overview of our results in these areas can be found in my publications.