My research focuses on the design and development of advanced data-driven techniques and tools that support software engineers with the understanding, assessment and evolution of large industrial software systems. This work combines several fields such as software analytics, program comprehension, software reverse engineering, software repository mining, machine learning and empirical software engineering. Usually, I try to find answer to these questions in close collaboration with industry.
At Simula, I lead projects that are aimed at supporting smarter evolution and testing of safety-critical cyber-physical product families, enabling high integrity, and anti-fragile software engineering, and devising software analytics for continuous software quality and maintainability assessments. In several of these projects we collaborate closely with industrial partners Kongsberg Maritime and Cisco Norway.
Other topics that we are, or 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.