CSci 581-01: Special Topics in Computer Science
Object-Oriented Design & Programming
Spring Semester 1999

Assignment #2
Due Tuesday, 23 March, 8:00 A.M.
CRC Card Tools (Group Assignment)


An Informal Specification of the CRC Card Tool(s)

As we have discussed in class, the CRC card technique is a useful way to approach object-oriented analysis and design. It is probably best to keep the CRC cards informal and on physical index cards. However, automated tools may be quite helpful in the documentation and preservation of CRC card information.

The purpose of this project is to develop a software tool (or set of tools) to support use of CRC cards in analysis, design, and implementation of object-oriented software systems by teams of software professionals as we have discussed in class. In particular, the tool(s) must support the development of software systems using the Java language.

The tool must support the creation, deletion, modification, display, and printing of CRC cards associated with a software system project. To support the work of the development team, the tool may also support useful analyses of and reports on a project's cards.

The "front" side of the card records the information about a component that is "visible" to clients of the component. As we have discussed in class, the primary information on the "front" of a card includes the component name, zero or more responsibilities, and, for each responsibility, zero or more collaborations (e.g., other components). The cards must also allow the definition of hierarchies of components (e.g., Java extends and implements relationships among classes) and the association of components with subsystems of the project (e.g., Java packages). The tool should also include other information such as component type (e.g., unspecified? class? interface?), important component characteristics (e.g., none? public? abstract? final?), a brief comment on the purpose of the component, and status information on the component development. The "front" may also include information such as an interface invariant for the class and preconditions and postconditions for each responsibility.

The "back" of the card can be used to record information about a component that is "not visible" to clients of the component. It should include private information such as the data fields (i.e., attributes) of the component and implementation invariants. It may also include design and implementation notes.

The development of a set of CRC cards for a software system is incremental and iterative. At any point in time various aspects of the system will be unspecified; these may be specified as the set of CRC cards are refined over time. However, a set of cards may also be modified in arbitrary ways to correct errors and to incorporate an enhanced understanding of the system's functionality and structure.

The tool may also provide other useful features such as support for role playing of scenarios through a set of cards, generation of Unified Modeling Language (UML) drawings of a project's set of cards, and generation of Java code templates for the component (e.g., class or interface) associated with a card. The tool may also support various kinds of analyses of a set of cards (e.g., consistency checking).

In determining the scope of your project and in identifying "hot spots" to support reuse and future enhancements, consider the following questions: Does the tool support "simultaneous access" to the set of cards by multiple members of a team? multiple software projects at once? multiple experimental configurations of the components of a system? backing up to an earlier system configuration? reuse of components from a library or among projects? What about support for languages other than Java (such as C++ or Smalltalk).


The Tasks for this Assignment

This is a group assignment. The groups have been assigned by Professor Cunningham. Each group is to carry out the following tasks.


UP to CSci 581 Assignments page?


Copyright © 1999, H. Conrad Cunningham
Last modified: Tue Feb 23 16:09:21 CST