The effectiveness of a modularization is dependent upon the criteria used in dividing the system into modules. Where a module is a work assignment unit.
Benefits of modularization:
Development time should be shortened as separate groups can work on each module with little need for communication.
Product flexibility should be increased changes should be able to be made in one module without changing others.
Comprehesibility should be increased as the system can be studied one module at a time with the result the system can be better designed because it was better understood.
Note Given what we now know from systems theory and complexity theory this may be too much of a simplification.
- Decomposition should be performed on the basis of information hiding.
The interface and definition of each module should be chosen to reveal as little as possible about its inner workings.
Note If not careful this can lead to inefficiencies as it may result in elaborate calling sequences ( Chatty systems ) due to repeated switching between modules.
Decompose based on a list of difficult design decisions or decisions which are likely to change.
The connections between module is not just the interface that they communicate over and the data that they transfer but also the assumptions which they make.
You can only make changes that do not violate the assumptions that other modules have made about it.