Coupling
Abstract
Dealing with complexity is a major issue of modern software system design. Complexity has been variously shown to be correlated with development cost, testing difficulty, residual errors, and maintenance effort. Coupling among distinct system elements has long been regarded as a major contributor to system complexity. Cohesion, or strength, characterizes the coupling internal to a subsystem, as distinct from the coupling among subsystems. Cohesion is a desirable quality because of the localization of the behavioral attributes of a subsystem. Understanding of a cohesive subsystem can be largely confined to understanding the subsystems themselves. Localized development and maintenance activities can be performed with greater confidence and with lower expenditure of resources.
Useful subsystems must interact, i.e., be coupled, with other subsystems in the larger context. Limiting these interactions facilitates understanding of system behavior, because most aspects of interest are then largely confined to a single subsystem. Evidently, exploring systemwide coupling and cohesion provides an overall assessment of design desirability or quality. A quantitative assessment of coupling not only provides an objective evaluation criteria but also can help focus attention on those aspects of a design for which additional effort will improve a systemwide score.
Meyer and Yourdon and Constantine describe several classes of coupling, both internal and external. These attributes are intended as qualitative design guidelines in the pairwise assessment of module properties. These article offers a relative weighting for the several types of coupling. Recent work provides an approach to quantitative measures of coupling and cohesion based on observing structural and syntactic properaties of Ada source code. The above classes of coupling suggest useful viewpoints of system design. The approach described here depends only on some linkage among objects (for which linkage and object can be abstractions at the conceptual level) or attributes such as source code syntax at the detailed design level. Thus, unlike the other referenced work, the following approach supports design analysis at any phase of the development.