Software Engineering basics - Coupling and Connascence Theory

Coupling refers to the degree of interdependence between software modules, while Connascence Theory provides a more granular way to analyze how and why modules are dependent. Proposed by Meilir Page-Jones, connascence goes beyond traditional coupling metrics by classifying dependencies based on the type of knowledge modules share.

Connascence is defined as a situation where a change in one component requires a corresponding change in another to maintain correctness. The theory identifies multiple forms of connascence, such as connascence of name, type, meaning, position, algorithm, and timing. Each type represents a different risk level and maintenance burden.

Lower-risk connascence, such as connascence of name, occurs when modules depend only on identifiers (e.g., method names). Higher-risk forms, such as connascence of algorithm or timing, indicate deeper behavioral dependencies and are harder to manage. The goal is to reduce the strength and scope of connascence, especially across module boundaries.

Connascence Theory introduces three key dimensions: strength, locality, and degree. Stronger forms of connascence are more harmful than weaker ones. Local connascence (within a module) is preferable to non-local connascence (across modules). Lower degrees (fewer dependent elements) are easier to maintain.

 

By applying connascence principles, designers can refactor systems to improve modularity, reduce ripple effects of change, and achieve loosely coupled architectures. This theory is particularly valuable in large, long-lived systems where maintainability is a primary concern.