Under Construction
Software is composed of modules, perhaps developed by the same person or team or (more probably) developed by several teams who may or may not coordinate their work. Each module's users know its interface but not its implementation. The modules are connected (through their interfaces) to each other in a specific configuration, the software's architecture. All of these can be changing: a module's implementation, a module's interface, and how it is connected to other modules. How does software evolve?
Figure 1. Evolution, represented by red arrows.
Changes to a module's implementation that do not affect its interface have no effect on the modules connected to it or the subsystem in which it forms a part. Changes that affect a module's interface propagate outwards, affecting other modules and/or the configuration in which they are connected.
The typical case involves a change to the module's interface and the evolution of its implementation to match; or a change to the (sub)system's interface and some combination of module replacement, rearrangement of modules in a new configuration, and changes to a module's interface and implementation.
Figure 2. An increment in the evolution of a (sub)system.
Evolution of a single component
follows the same pattern,
only without Rearrangement of components
.
Figure 2 illustrates the possible paths from one development state of a system, subsystem, or module, to the next increment in its evolution.