The Case for Explicit Coupling Constraints
Mikal Ziane, Mel \'O Cinn\'eide

TL;DR
This paper advocates for explicit coupling constraints in software to better manage dependencies and evolution, demonstrating how they can be expressed and automatically detected, addressing limitations of encapsulation.
Contribution
It introduces a language for expressing general coupling constraints and shows how violations can be automatically detected in real-world Java projects.
Findings
Coupling constraints can be effectively expressed in a dedicated language.
Automatic detection of constraint violations is feasible and practical.
Explicit constraints improve software maintainability and evolution.
Abstract
A software element defined in one place is typically used in many places. When it is changed, all its occurrences may need to be changed too, which can severely hinder software evolution. This has led to the support of encapsulation in modern programming languages. Unfortunately, as is shown in this paper, this is not enough to express all the constraints that are needed to decouple programming elements that evolve at different paces. In this paper we show that: a language can be defined to easily express very general coupling constraints; violations to these constraints can be detected automatically. We then demonstrate several places where the need for coupling constraints arose in open-source Java projects. These constraints were expressed in comments when explicit constraints would have enabled automatic treatment.
Peer Reviews
No public reviews on file for this paper yet. If you reviewed it on a platform where reviews are public (OpenReview, ICLR, NeurIPS, ICML), you can paste yours below so the community can read it here.
Videos
No videos yet. Explain this paper in a talk, walkthrough, or lecture? Add one.
Taxonomy
TopicsSoftware Engineering Research · Advanced Software Engineering Methodologies · Logic, programming, and type systems
