Methods and tools

Object-oriented software development is a relatively new technology. Consequently, ideas with respect to methodologies supporting an object-oriented approach are still in flux. Nevertheless, a plethora of methods and tools does exist supporting object-oriented analysis and design. See slide 11-methods.

Methods


slide: Software development methods

In the list above, we have collected a number of development methods. With the exception of OOSA (which proposes a model-driven approach to analysis), OOSD (which introduces a structured design representation method) and Fusion (which presents a promising synthesis of ideas found in a number of other methods, such as CRC, RDD and OMT) we have encountered these methods previously in chapters 1 and 3. We have based our discussion of the object-oriented lifecycle in section life on the OOA/D method proposed in  [CY90] and  [CY91b], which stresses the gradual transition from the analysis to the design and implementation phase. In section process we have briefly discussed the Objectory method, which proposes employing a use case analysis to arrive at a model specifying system requirements. In section process and contracts, we have discussed the responsibility-driven approach proposed in  [Wirfs89], and the various modeling perspectives suggested by  [Rum91]. Our discussion of object-oriented development in section identifying has been based on Booch (1986, 1991, 1994). Some of these methods (and corresponding tools) directly stem from a more conventional approach to software development. Others are more radical and propose new tools to support the decomposition principles underlying object-oriented technology. Naturally, those who wish to make a gradual shift from conventional technology to adopting an object-oriented approach may benefit from methods that adapt familiar techniques to the new concepts. In this section we will look at a variety of existing methods and the tools they offer. We do not discuss the tools and diagram techniques used in any detail. However, we will discuss the Fusion method in some detail. Fusion is a strongly systematic approach to object-oriented software development that integrates various concepts and modeling techniques from the other methods, notably OMT, Booch OOD and CRC. We will discuss the process view underlying Fusion and sketch the models it supports in relation to the other methods. For the reader this section may supply an overview and references needed for a more detailed study of a particular method or tool.

Structured methods

Initially, structured methods (which were developed the beginning of the 1970s) were primarily concerned with modeling processes in a modular way. Based on software engineering principles such as module coupling and cohesion, tools were developed to represent the structure of a design (within what we have previously called the procedural or modular paradigm). See, for example,  [Yourdon79]. Apart from diagrams to describe the modular architecture of a system (such as structure charts and process specifications), structured methods also employ data flow diagrams to depict processes and the flow of data between them, and hierarchy diagrams to model the structure of the data involved. See slide 11-structured.

Structured methods

tools

  • structure chart
  • process specification
  • dataflow diagrams
  • hierarchy diagram
  • entity-relationship diagrams
  • data dictionary
  • state transition diagram

slide: Tools for a structured approach

Later, structured methods were extended to encompass analysis, and the focus shifted to modeling the data by means of entity-relationship diagrams and data dictionaries. Also, state transition diagrams were employed to represent the behavioral aspects of a system. As observed in  [Fichman], {\em in the late 1970s and early 1980s, planning and modeling of data began to take on a more central role in system development, culminating in data oriented methodologies, such as information engineering} (which may be regarded as precursors to object-oriented methods). Information engineering, however, is primarily concerned with analysis and strategic planning. In addition to the modeling techniques mentioned, tools were developed to model the information needs of an enterprise and to perform risk analysis. Also, extensions to the data dictionary were proposed in order to have an integrated repository, serving all phases of the development. Currently, repository-based techniques are again of interest since, in combination with modern hypermedia technology, they may serve as the organizational basis for reuse.

Requirements engineering {\em -- Fusion}

The Fusion method is presented in  [Fusion] as a second generation object-oriented method. The phrase second generation is meant to indicate the method transcends and incorporates the ideas and techniques that were employed in the early object-oriented methods. Above all, the Fusion method focuses on a strongly systematic approach to object-oriented software development, with an emphasis on the process of development and the validation of the consistency between the models delivered in the various phases of a project. The software lifecycle model underlying Fusion is the traditional waterfall model, consisting of the subsequent phases of analysis, design and implementation. Each phase results in a number of models describing particular aspects of the system. See slide 11-fusion. A data dictionary is to be kept as a means to unify the terminology employed in the various phases.

Analysis -- Fusion

Fusion

  • Object Model -- concepts and relations
  • LifeCycle Model -- sequences of operations
  • Operation Model -- semantics of system operations

Design -- data dictionary

\zline{\fbox{data dictionary}}
  • Object Interaction Graph -- functional dependencies
  • Visibility Graphs -- communication structure
  • Class Descriptions -- attributes and methods
  • Inheritance Graphs -- subtype refinement

Implementation -- validation

validation

  • System Lifecycle -- state machines
  • Class Descriptions -- coding, performance

slide: The Fusion method

The models produced as the result of analysis, design and implementation serve to document the decisions made during the development. Each of the phases covers different aspects of the system. Analysis serves to document the system requirements from a user perspective. The Fusion method describes how to construct an Object Model that captures the basic concepts of the application domain. These concepts are represented as entities or objects and are connected by relations, similar to entity-relationship diagrams employed in semantic modeling. Analysis also results in an Operation Model, describing the semantics of the operations that may be performed by a user by means of pre- and post-conditions, in a formal manner. In addition, Fusion defines a Lifecycle Model that describes, by means of regular expressions, which sequences of operations are allowed, as in the JSD method. Design may be considered as the transition between analysis and implementation. During design, decisions are made with respect to the realization of the system operations identified during analysis. Design according to the Fusion method results in an Object Interaction Graph, that for each system operation describes which objects are involved and which methods are invoked. Fusion also allows one to label the arrows representing method calls in the interaction diagram with sequencing information. In addition, design involves the construction of Visibility Graphs, indicating the attribute and method interface for each object, Class Descriptions, defining the attributes and methods of objects, and Inheritance Graphs, specifying the subtype refinement relation between classes. Implementation is considered in the Fusion method as a phase in which to work out the details of the decisions taken during analysis and design. It results in a System Lifecycle description for each object identified in the Object Model, in the form of a finite state machine, and precise Class Descriptions, in the form of (preferably) efficient code.

Validation

An important aspect of the Fusion method is the validation of the completeness and consistency of the collection of models. Completeness, obviously, is a relative matter and can only be established with respect to explicitly stated user requirements. However, the models developed in a particular phase impose additional requirements upon the efforts engaged in the later phases and in the end maintenance. Consistency involves verifying whether the various models are not contradictory. For both development and validation, the data dictionary plays an important role, as a common point of reference.

Tools for analysis and design {\em -- a comparative study}

In  [Fichman] a comparative review of a selected number of object-oriented analysis and design methods is given. Criteria for selection were the availability of documentation and acceptance in the object-oriented community, measured in terms of refereed articles. Paraphrasing  [Fichman] again: As with traditional analysis, the primary goal of object-oriented analysis is the development of an accurate and complete description of the problem domain. The three analysis models described in  [Fichman] share a number of diagram techniques with both structured methods and methods for object-oriented design. However, in particular the method proposed in  [Shlaer88] reflects the domain oriented focus of analysis. A similar focus on domain requirements and analysis may be found in the Objectory method. See slide 11-compar-1. Objectory is one of the methods that has inspired Fusion, in particular because it presents a systematic approach to the process of software development. The Objectory method centers around use case analysis. Use case analysis involves a precise description of the interaction between the user of a system and the components representing domain-specific functionality. The Objectory method gives precise guidelines on how to proceed from the identification of use cases, which include user interface aspects, to their realization in the subsequent phases of design and implementation. Objects are called blocks in Objectory. Use case analysis corresponds in a loose way with the identification of system operations in Fusion.

Objectory -- systematic process

  • requirements -- use cases, domain object model, user interface
  • analysis -- subsystems
  • design, implementation -- block model, interaction diagrams

OMT -- few rules for discovering inconsistencies

  • analysis -- object model, dynamic model, functional model
  • design, implementation -- heuristics to implement analysis models

Booch -- descriptive

  • diagrams -- class, object, timing, state, module, process

CRC -- exploratory

  • analysis, design -- class,responsibilities, collaborators

Formal methods

  • operations -- pre- and post-conditions

slide: Comparison of methods (1)

There is a close correspondence between the OMT object model and the analysis object model of Fusion. Both OMT and Fusion employ extended entity-relationship diagrams. Also, the dynamic model of OMT reoccurs in the Fusion method, albeit in a later phase. The functional model of OMT, which has the form of a dataflow diagram, is generally considered to be inappropriate for object-oriented analysis. Instead, Fusion employs a model in which the semantics of system operations are captured by means of formal pre- and post-conditions. In  [Fusion], OMT is characterized as a very loose method, giving few rules for discovering inconsistencies between the various models and lacking a clear view with respect to the process of development. OMT is strongly focused on analysis, giving nothing but heuristics to implement the models that result from analysis. However, what is called the light-weight Fusion method almost coincides with OMT. A lack of detailed guidelines for the process of software development is also characteristic for the Booch OOD method. Booch offers a wealth of descriptive diagrams, giving detailed information on the various aspects of a system, but offers merely heuristics for the actual process of development. The CRC method must be regarded primarily as a means to explore the interaction between the various objects of a domain. It is powerful in generating ideas, but offers poor support for documenting the decisions with respect to the objects and how they interact. Formal methods have been another important source of inspiration for the Fusion method. The description of system operations during analysis employs a characterization of the functionality of operations that is directly related to the specification of operations in model-based specification methods such as VDM and Z. See section formal-coop. The Fusion method may be regarded as being composed of elements of the methods mentioned above. It shares its object model with OMT, its approach to the characterization of system operations with formal methods, its focus on object interaction with CRC and its explicit description of classes and their relations with Booch. See slide 11-compar-2.

Comparison - as a systematic approach

Objectory OMT Booch CRC Fusion
development++--x+
maintenance++-+-+
structure+-+-+++
management++-+--+
tool support+-+-+--+

slide: Comparison of methods (2)

In comparison with these methods, however, it provides a much more systematic approach to the process of development and, moreover, is explicitly concerned with issues of validation and consistency between models. In addition,  [Fusion] claim to provide explicit semantics for their various models, whereas the other methods fail to do so. However, it must be remarked that the Fusion method remains somewhat obscure about the nature of system operations. System operations are characterized as asynchronous. Yet, if they are to be taken as methods, such operations may return a result, which is quite hard to reconcile with their asynchronous nature. The claim that the models have a precise semantics, which is essential for tool support, must be substantiated by providing an explicit semantics in a formal manner! With regard to the process of development, both Objectory and Fusion provide precise guidelines. The CRC method may be valuable as an additional exploratory device. For maintenance, the extent to which a method enforces the documentation of design decisions is of the utmost importance. Both the Objectory and Booch method satisfys this criterion, as does the Fusion method. OMT is lacking in this respect, and CRC is clearly inadequate. Whether a method leads to a good object-oriented design of the system architecture, depends to a large extent upon the ability and experience of the development team. Apart from Fusion, both the Booch method and CRC may be characterized as purely object-oriented, whereas Objectory and OMT are considered to be impure. A strongly systematic approach to the process of development is important in particular from the point of view of project management. Project management support entails a precise definition of the deliverables associated with each phase, as well as an indication of the timing of their deliverance and validation. Both the OMT method and Booch are lacking in this respect, since they primarily provide techniques to develop descriptive models. Clearly, CRC lacks any support for project management. Tool support is dependent on the existence of a well-defined semantics for the models employed. For both Objectory and OMT commercial tools are available, despite their loosely specified semantics. The Fusion diagraming techniques are also supported, for example by Paradigm Plus, which also supports the diagraming techniques of OMT. See section pde. For CRC, tool support is considered to be useless. The success of the method depends upon flexibility, the ease with which new ideas can be tried, a flexibility which even hypertext cannot offer, according its authors. An important question, when considering methods for software development, is what means we wish to have to represent the decisions taken during design.

Design representation

As phrased in  [Fichman], {\em design is the process of mapping system requirements defined during analysis to an abstract representation of a specific system-based implementation meeting cost and performance constraints}. In other words, design is concerned with architectural issues, whereas analysis is concerned with requirements and constraints. Although different in objective, in an object-oriented approach analysis and design may share a common object model. Both in the method proposed by  [CY91b] and the method proposed in  [Booch91], the difference between analysis and design lies primarily in the level of detail in which the respective components of the system are specified. Many of the diagram techniques employed, however, have no clear semantics, and rely on an informal description of common cases only. In slide 11-diagrams a number of the diagram types proposed in  [Booch91] are listed.

Diagrams

Booch

  • class diagram/template
  • object diagram/template -- dynamics
  • module diagram/template
  • process diagram/template -- physical design
  • state transition diagram
  • timing diagram

slide: Diagrams for design

Apart from class diagrams and templates to describe the functionality of classes and their (static) relations to other classes, the methods also uses object diagrams (and templates) to characterize the dynamic behavior of (collections of) objects. Moreover, the method provides for module diagrams to depict the relations between modules and to describe the physical architecture of distributed systems. As additional techniques to describe the behavioral characteristics of object,  [Booch91] employs state-transition diagrams and timing diagrams (expressing constraints on the order in which methods may be invoked). These diagram techniques have as a common objective to represent the important properties and aspects of a design. Along the dimensions by which we may classify design representation technologies, expressiveness and formality, object-oriented technology may be ranked as being midway between non-formal, highly expressive techniques such as hypertext, and highly formal (logic-based) techniques which require a lot of expertise to express relationships and properties. However, object-oriented techniques cover a broad range. For example, collaboration graphs (Wirfs-Brock {\it et al.}, 1990) and contracts[Meyer88]) offer (in principle) a high degree of formality, whereas many of the diagram techniques seem to be amenable to an extension with hypertext features to support browsing and the retrieval of information. See  [CY91b],  [Bigelow88] and  [Webster]. A major problem that is still not satisfactorily solved by any of the existing methods is to support what may be called the harvesting of reuse, that is the actual exploitation of the reuse potential that is intrinsic to object-oriented technology. Both at the level of analysis and design, a repository-based approach to managing reuse (in combination with appropriate retrieval techniques) seems to be the most promising. Another issue about which opinions diverge is by what principles objects should be clustered, and what techniques must be provided to support system partitioning. Perhaps the solution to these problems is not strictly a matter of technology, but instead requires us to wait for appropriate conventions and styles to emerge within each particular application domain.

Program development environments -- OODBMS

A method provides guidelines with respect to the development of a system, possibly including maintenance and project management. We speak of a CASE (Computer Aided Software Engineering) tool, when the tool supports a method in its various aspects. Support may even include the generation of code. Usually, a distinction is made between Upper CASE tools, supporting the first phases of software development, and Lower CASE tools, providing support primarily for the later phases, include code generation. At the lower end of the spectrum of tools we have program development environments. A program development environment is a collection of more or less well-integrated software tools that support the various activities that arise in the course of realizing the project aims in actual software. Program development environments may include configuration management facilities, a graphical interface builder, various browsers (for example for the class inheritance structure, cross referencing and source code module dependencies), and facilities for interactive debugging. An example of a CASE tool is the tool accompanying the Objectory method. Paradigm Plus may be characterized as a meta CASE tool, in that it supports multiple diagraming techniques, including those of OMT and Fusion. See slide 11-pde.

CASE tools

\zline{\fbox{C++}}
  • Rational Rose -- www.rational.com
  • Paradigm Plus -- OMT, Fusion
  • HP/Softbench -- Fusion

Program development environments

  • ObjectCenter -- SaberC++ \zline{CenterLine}
  • Objectworks/C++
  • Microsoft Visual C++ -- Foundation Classes
  • Sniff \zline{info@takefive.co.at}

Public domain

  • ET++PE \zline{iamsun.unibe.ch:/C++}
  • Cweb \zline{labrea.stanford.edu:/pub/cweb}

slide: Program development environments

HP/Softbench may be characterized as a broad spectrum tool. It supports a variety of diagram techniques (via third party Softbench-compatible tools, such as Protosoft's Paradigm Plus), among which are the techniques employed in the HP Fusion method. Moreover, it provides a C++ workbench, including editors, browsers, profilers as well as additional libraries with utilities. A veritable programming environment is CenterLine's ObjectCenter. ObjectCenter is a descendant of SaberC++. It includes a variety of browsers, a configuration management facility and quite impressive interactive debugging facilities. An interesting feature of ObjectCenter is that it supports both interpreted and compiled code, thus facilitating rapid incremental development. Apart from the latter facility, which is quite a unique feature, ObjectCenter provides a rather shallow interface to standard Unix facilities. Beware, using ObjectCenter requires a powerful workstation with lots of memory. For an evaluation of ObjectCenter, consult  [ObjectCenter]. Another example of a program development environment is Objectworks/C++, which provides a functionality similar to Objectworks/Smalltalk, including class hierarchy browsers, editors and debugging facilities. Not really a program development, but rather a graphical user interface development tool, is provided by Microsoft Visual C++. Visual C++, together with the Microsoft Foundation Classes, allows one to develop an application, including the graphical user interface interactively. The advantage of such an approach is that it relieves the programmer of coding the graphical layout and organizing the code related to the window-based events. Sniff is another interactive program development environment with a visual flavor. It supports a repository-based approach and allows for browsing and editing in a unified fashion. Information may be obtained by email from {\tt info@takefive.co.at}. In the public domain, we have, for example, ET++PE, which is closely coupled with a C++ library for the development of graphical interfaces. See section libraries. An essential ingredient of any CASE tool is documentation support. Some even go so far as to denounce CASE tools altogether by stating that these tools do {\em produce nothing but PostScript (documentation)}. As a package that in principle may valuably be incorporated in a program development tool, the Cweb package may be mentioned which may be used for producing literate C++ code. See section static. Documentation tools are also part of the OSE library that is mentioned in section libraries.

OODBMS

Many applications require data storage facilities as offered by (object) data base systems. The list of systems in slide 11-oodbms is taken from  [Harmon93].

Object database systems

\zline{\fbox{C++}}
  • ObjectDesign \zline{ObjectStore}
  • Ontos \zline{Ontos Inc.}
  • Objectivity \zline{Objectivity Inc.}
  • O2 \zline{O2 Technology}
  • GemStone \zline{Servio Corp.}
  • Versant ODBS \zline{Versant \c{Object Technology}}

Research

  • OBST -- Stone \zline{ftp.fzi.de}
  • ODE/O++ -- AT&T \zline{netlib.att.com}

slide: Object database systems

Above, we have listed some of the popular object database systems with an interface to C++. These include ObjectDesign, Ontos, Objectivity, O2, GemStone and Versant ODBS. As packages available for research we may mention OBST (which is the result of an ESPRIT research project) and ODE/O++ which provides an extension of C++ with persistent objects and transactions.