The group size for a CRC session should be around five or six participants. Larger groups tend to have differences in views among the participants. Also the number of disagreements increases because the number of potential paths of communication increases as the number of participants grow.
Two kind of participants should attend every CRC session. There are a domain expert and a object-oriented technology facilitator. Also there is a question of whether allowing a manager to attend, but for the tutorial, we will exclude the manager from our CRC session.
The domain expert should understand what the system should do and accomplish. Also he or she should help create the different scenarios and to choose what classes are problem-related. A good person for the domain expert is the author of the requirements document.
The object-oriented technology facilitator should have more experience than others in the group about the object-oriented approach. He or she can aid the CRC session by choosing good classes with meaningful names and minimal but sufficient set of responsibilities. The facilitator should be domain ignorant and help bring up some insightful questions about the application.
The group dynamics should bring together participants who have common goals and agendas, work well together, not dominanted by one or few of the members, and respect each other.
Usually the CRC session will be doomed if the group dynamics are not good. If the participants do not agree and communicate poorly, the session is bound for failure.
This partitioning of the problem is important even in object-oriented design. A object-oriented system can be seen a set of subsystems which then interface through objects of an interface class. This analysis and design is best done one subsystem at a time.
Then the requirements of the system is mentioned again to every participant so that no one is lost or unclear about them. This should take only a few minutes because every participant should have read the requirements prior to the CRC session.
Classes can be derived from the requirements document. This practice helps ensure that all known requirements are considered when deciding class names.
Also everybody should understand what is meant by each class when deciding precise, and short abstractions for the classes. These abstractions will eventually be entered on the back of the CRC cards.
If no one understands what is meant by a certain class or classes, the domain expert should decide what is the meaning of the class or classes. Everyone should agree on the final classes that are on the board. These classes will turn out to be CRC cards soon.
Each participant takes a index card for each class they were assigned. He or she will write a short description of the class on the back of each index card (the side without lines). Each participant then reads their class descriptions to the group for approval and understanding.
Many times prior to a CRC session, the group tries to identify the subclasses and superclasses, responsibilities, and attributes of each class. This can be a good idea only if the relationships are obvious. For the tutorial, we will let these relationships arise from the scenarios.
The scenarios should be very specific. Also related scenarios should be modeled separately. It might seem tedious to model similar scenarios but many of the necessary responsibilities already exist to fulfill it. The group should always execute easy and nonexceptional scenarios first. Only when a there is a working model of the system should exceptional scenarios be introduced.
The people who hold and own particular cards should hold the card in the air and "become" the object when a scenario causes control to pass to them. When executing scenarios, cards are lifted to simulate the behavior of the system where messages are sent to actual objects performing their tasks. A card is a class when on the table and an object when lifted in the air.
During the scenarios, responsibilities will arise and should be assigned to the necessary card or cards. Also the collaborators should be written down when responsibilities are known. There may be a time when superclasses or subclasses as well as new classes during the scenario execution.
There are no right and wrong ways for scenario executions. Groups should do what makes the CRC session flow good for them.
Hierarchies of classes should be stacked on top of each other or placed very close together. Classes that collaborate with other classes should be close together as well.
Card clustering can now be seen by the grouping of cards. Classes that seem to be doing too much work or too little can be evaluated by the group for further action.
This helps the participants see more clearly the sets of interactions. Also the collaboration drawing can point out errors in the system caused by collaborators.
There even may be classes with inward collaborations but no outward collaborations. These classes that require no knowledge of the application can be classified as abstract classes. See figure 2.1
Figure 2.1
For further record keeping of the CRC session, a automated CRC card technique tool can be used. I have found one from Rational Software Corporation call Rational CRC. This tool should only used as a supplement to the CRC session and not a substitute.
There is a free demo version of Rational CRC at the Rational Software Corporation homepage. If you look in the references section, you will find a link to their page and the setup for the demo is in the System Requirements section. Good luck.