Software exists to fulfill needs that individuals and organizations have. Software is a complex artifact that fulfills those needs by providing services, while consuming reasonable levels of resource and conforming to constraints from its context. To develop software, developers bring their design knowledge to bear, translating their understanding of the requirements by adapting existing code and creating new specialized code. Unfortunately, the design knowledge and its rationale are usually not captured in a useful form.
展开▼