One of the difficulties software practitioners often encounter in maintaining a large scale complex software system is tracing back the original decisions which lead to the creation of a module or a program structure. Too often this information is lost in the process as the associated documents only show the final layout or structure of the software but not the process as to how the structure was created. Although there are some reverse engineering scCASE tools on the market, none are capable of recovering such information from existing code.; This dissertation presents an approach to representing design history with respect to module evolution using first-order logic. In this approach, the design history of a typical software development is viewed as comprising a number of design actions. Each design action involves the evolution of a module into a number of modules. The sequence and semantics of all design actions depend on the procedures, guidelines, and heuristics of the underlying programming paradigm and design method applied in the design process. Each design action can be further considered as a transformation from a design input into a design output. Accordingly, each design action is represented with its involving design input components, design output components, and their mutual relationships. Derivation rules for each type of the design action are formally defined with which the derivation of a subset of design output components from a particular subset of design input components can be formally specified. This provides traceability for design actions as well as design components. First order formalism is chosen as a tool to represent the design history information in this approach. This formalism is chosen because its inference power would facilitate the application of this information in a variety of ways such as tracing design decisions that lead to a particular program structure, checking consistency of each design action, and deducing new design information from existing ones.; To illustrate the application as well as effectiveness of this approach, the well known structured design method, and the stepwise refinement with data abstraction design method are used as examples in two different phases of software development life-cycle.; Although the intent of this research lies on helping software practitioners in performing large scale software maintenance tasks through explicit recognition of design dependencies and availability of semantics of design actions, this formal approach to design history representation can be applied in the development stage as well since it provides an effective tool for software developers to validate their design decisions.* ftn*Originally published in DAI Vol. 57, No. 7. Reprinted here with corrected bibliographic information.
展开▼