Historical analysis of architectural violations in Clojure systems: a longitudinal quantitative study
Software Architecture; Architectural Degradation; Dependency Validation; Clj-Depend.
Software architecture consists of fundamental decisions that guide the construction and
evolution of a system. Over time, accumulated modifications throughout the software
lifecycle can violate previously defined criteria, characterizing architectural degradation.
The absence of a formal continuous evaluation process causes these problems to be
detected reactively, often only after causing significant impacts. To mitigate these risks,
static analysis tools can be adopted to validate architecture proactively, enabling constant
monitoring. One example of a tool that follows this approach is Clj-Depend, which validates
dependencies between modules in systems implemented using the Clojure programming
language. In this context, this work aims to investigate the occurrence and evolution
of these violations in systems implemented in Clojure. For this purpose, a quantitative
longitudinal study based on software repository mining was conducted, involving five
services from a multinational technology company, where they process on average more than
eight hundred requests per minute. The results showed that all services presented violation
accumulation correlated with code base growth, with concentration in few critical rules.
Statistical analyses confirmed significant association between lines of code and architectural
degradation when adequate governance is absent. Despite scope limitations, the study
demonstrated that architectural degradation is monitorable and can be integrated into
the team’s development workflow through automated processes. The developed protocol
offers a systematic approach for continuous architectural auditing, contributing to more
sustainable software evolution practices.