Quality of Software Systems

During software evolution the internal structure of the systems undergoes continuous modifications that makes the source code more complex and drifts away from its original design. In consequence, more often than not, software quality decreases in time, resulting in more and more difficulties in changing existing software. In such cases a refactoring and/or restructuring of the system is recommended. However, find refactoring/restructuring opportunities is far from trivial, especially in large software systems. For this reason the main research topic in this area is the definition of new approaches able to improve some quality aspects of the software systems, e.g., extract class refactoring to improve class cohesion.

Empirical Software Engineering

Empirical software engineering is a sub-domain of software engineering focusing on experiments on software systems (software products, processes, and resources). It is interested in devising experiments on software, in collecting data from these experiments, and in devising laws and theories from this data. Proponents of experimental software engineering advocate that the nature of software is such that we can advance the knowledge on software through experiments only. The scientific method suggests a cycle of observations, laws, and theories to advance science. Empirical software engineering applies this method to software.

Traceability Management

Traceability has been defined as "the ability to describe and follow the life of an artefact, in both a forwards and backwards direction". Thus, traceability links help software engineers to understand the relationships and dependencies among various software artefacts (requirements, code, tests, models, etc.) developed during the software lifecycle. The two main research topics related to the traceability management are event-based systems for traceability management and information retrieval based methods and tools supporting the software engineer in the traceability link recovery.