Investigating Design Debt in Safety-Critical Systems: A Case Study
MetadataVis full innførsel
Software is contributing a substantial part of new functionality and innovation in safety-critical systems. These systems put a huge demand on software reliability, because a minor error can produce failure of a complete system. The evolution of software requires continuous development and maintenance. With size and complexity of safety-critical software growing as time goes, additional challenges arises, including implicit assumptions of technical debt. Technical debt refers to the sum of compromises that are made in software development and maintenance to meet a short-term business goal. For example, implementing a sub-optimal solution in a software to meet a deadline. Design debt is an instance of technical debt. As software systems evolve, their design tend to decay over time, which leads to design debt accumulation. Consequently, software design becomes more difficult to maintain. Therefore, the developers need to understand the reason for design debt accumulation so they can take proactive steps that may potentially reduce the debt in the future. The main goal of this thesis is to empirically investigate design debt in safety-critical systems. The goal is reflected in our attempt to answer the following research questions: RQ1: How can design debt be identified?RQ2: What kind of design debt can be found in safety-critical systems? RQ3: What are the effects of design debt? RQ4: How to pay design debt? A case study has been conducted to answer the research questions. The case study involves an analysis of a safety-critical system developed by Autronica Fire and Security AS. The system is written in C/C++. We have used object-oriented metrics to identify classes that are most likely to pose problems for the system. Quantitative data were collected and analyzed using descriptive statistics. A set of thresholds for the metrics were derived to identify classes that have higher metric values than its threshold values. In addition, automatic static analysis tools were applied to detect code smells. This work contributes mainly to improvement in software metrics and software quality. The stated contributions of this work are: C1: Empirical knowledge about design debt identification in safety-critical systems by object-oriented metric analysis and code smell detection. \newlineC1.1: A set of threshold values for object-oriented metrics. C2: Empirical knowledge about the different types of design debt in safety-critical systems. C3: Empirical knowledge about the effects of having design debt in safety-critical systems. C4: Empirical knowledge about paying design debt.