It can be categorized as static (analyzable at compile-time) or dynamic (detectable at runtime) and includes forms such as Connascence of Name, Type, and Position, each representing different dependency characteristics and levels of fragility.
[1][2] Coupling describes the degree and nature of dependency between software components, focusing on what they share (e.g., data, control flow, technology) and how tightly they are bound.
[1][3][2] Connascence, introduced by Meilir Page-Jones, provides a systematic framework for analyzing and measuring coupling dependencies.
[1][3][2] While coupling identifies what is shared between components, connascence evaluates how those dependencies behave, how changes propagate, and how difficult they are to refactor.
Together, coupling provides a high-level overview of dependency relationships, while connascence offers a granular framework for analyzing dependency strength, locality, degree, and resilience to change, supporting the design of maintainable and robust systems.