Checkable Code Decisions to Support Software Evolution.
Martin Küster, Klaus Krogmann · Softwaretechnik-Trends · 2014
For the evolution of software, understanding of the context, i.e. history and rationale of the existing artifacts, is crucial to avoid “ignorant surgery” [3], i.e. modifications to the software without understanding its design intent. Existing works on recording architecture decisions have mostly focused on architectural models. We extend this to code models, and introduce a catalog of code decisions that can be found in object-oriented systems. With the presented approach, we make it possible to record design decisions that are concerned with the decomposition of the system into interfaces, classes, and references between them, or how exceptions are handled. Furthermore, we indicate how decisions on the usage of Java frameworks (e.g. for dependency injection) can be recorded. All decision types presented are supplied with OCLconstraints to check the validity of the decision based on the linked code model. We hope to solve a problem of all long-lived systems: that late modifications are not in line with the initial design of the system and that decisions are (unconciously) overruled. The problem is that developers will not check all decisions taken in earlier stages, and whether the current implementation still complies with them. Automation of the validation of a large set of decisions, as presented in this work, is a key factor for more concious evolution of software systems.