Published online by Cambridge University Press: 27 February 2009
Present-day software applications are increasingly required to be “reuse-conscious” in terms of the operating platforms, topology, and evolutionary requirements. Traditionally, there has been much difficulty in communicating specialized knowledge like design intents, design recommendations, and design justifications in the discipline of software engineering. This paper presents a methodology based on the combination of design rationale and design patterns to design reusable software systems. Design rationale is the representation of the reasoning behind the design of an artifact. Design patterns are descriptions of communicating objects and classes that are customized to solve a general design problem in a particular context. The paper details the use of an explicit software development process to capture and disseminate the specialized knowledge (i.e., intents, recommendations, and justifications) that augments the description of the cases in a library (i.e., design patterns) during the development of software applications by heterogeneous groups. The importance of preserving and using this specialized knowledge has become apparent with the growing trend of combining the software development process with the product (i.e., software code). The importance of codifying corporate memory in this regard is also important considering the changing nature of the workplace, where more people are on contract. The information on how and why a software code was developed becomes essential for efficient and smooth continuity of the present software project as well as for reusing the code in future projects. It has become essential to capture the design rationale to develop and design software systems efficiently and reliably. The software prototype developed using the combined methodology will be used as a part of an integrated design environment for reusable software design. This environment supports collaborative development of software applications by a group of software specialists from a library of building block cases represented by design patterns.