Managing Technical Debt in Software Engineering: Theory and Practice

Francesca Arcelli Fontana

ESSeRE Lab, University of Milano-Bicocca, Milano, Italy

Technical Debt is a metaphor describing the tradeoffs of technical development activities that are delayed in order to get short-term payoffs, such as a timely software release . The term debt is used because the consequences associated with these skipped activities accumulate in the software product as debt.
We can consider different forms of technical debt at different levels, e.g., architecture, code, test, social, documentation and technological gap. It is important to take into account technical debt and find the best way to prevent and measure it.
A particular focus in the course will be on architectural debt (AD) and the possible ways to identify the problems that contribute to it and to a progressive software architecture degradation. The possible causes of AD will be identified, studied with the aim to remove them through  the best refactoring strategies. The most critical problems to be solved first  will be identified also according to their impact on different software quality attributes and characteristics addressed by the current proposed Standards. With this aim, statistical analysis, correlation analysis, and machine learning techniques will be exploited and combined in different ways.