1. Focuses early attention on the option of re-using existing software or software components. In the upper left quadrant and upper right quadrant, attention is on considering alternatives, constraints, and risks.
2. Accommmodates preparation for product growth, evolution, changes.
3. Incorporates quality objectives as integral parts of the process and not as side-effects.
4. Focuses on eliminating errors and unattractive alternatives early on.
5. Answers the process ``how much is enough'' question. The spiral starts with a hypothesis that a particular goal (or set of goals) could be improved by a software effort. It terminates when the hypothesis is proved false (cost of continuing judged greater than benefit) or true (installation).
6. Maintenance is not a second-class citizen in the process, but starts a new cycle.
7. The incremental approach is more suited towards families of applications.
8. It encourages a prototyping approach which is well suited for addressing user interfaces. Gets early user feedback based on prototypes.
9. Its prototype-based approach avoids the risk of spending too much time on not-so-important aspects and helps concentrate attention on the relevant issues and risks.
10. Recognizes that specification and implementation are inevitably intertwined.
11. According to some experiments, took 40% less development time and resulted in a product with roughly 40% less source instructions.
The purpose of the class is to provide fields and methods which are common to several related classes, which extend the abstract class.
An abstract class may have an ``is composed of'' relation to the classes that extend it.
Insures common methods exist in inherited classes, without having to provide bodies of those methods in the parent, abstract class. Acts as a template for child classes.
(See the textbook, p. 51.) The modules will tend to have very little cohesion, because most 15 inch cubes will contain several quite different parts of the car, e.g. base of a seat, interior carpeting, body, and axle. The modules lack cohesion because they do not follow the structure of the car. Many modules will contain parts that are linked only in physical proximity, and not in function, use, design, etc.
The coupling of the modules will vary greatly, but will tend to be larger than desirable. Much will depend of the exact alignment of the 15 inch cubes, and leaving such an important feature to chance is not good. For instance, if the battery happens to be split among two or more modules, then they will show high coupling, because it will be impossible to understand them, or for them to function, without referencing the others. (12 points for first half.)
The modules of a complex system should not be arbitrary or designed in a ``one size fits all'' manner. Placing elements in the same module merely because of physical proximity is a poor choice. Module structure should be based on the form and function of the system. A modularization based on form might put the tires in one module, the gas tank in another, etc. A modularization based on function or user need might place elements designed to attract families with small children (built-in car seats, child-proof locks, Barney-themed paint) into a common module. Modularization should follow the principle of separation of concerns, and concerns in a car are not demarcated by 15 inch boundaries. The 15 inch cube modularization is not useful for describing a car because the modules will tend not to be understandable when considered individually. A complex system may benefit from a hierarchical decomposition, where high level modules (e.g. body, engine) are themselves decomposed into modules, based on the same principle of separation of concerns.