CSC/ECE 517 Fall 2010/ch1 S6 CC: Difference between revisions

From Expertiza_Wiki
Jump to navigation Jump to search
Line 155: Line 155:
= '''Example''' =
= '''Example''' =


Problem Statement :
== '''Problem Statement''' ==


Our aim is to design an airline self check in system.  
Our aim is to design an airline Self Check-In system.  


* A self check-in Kiosk at the air port consists of passport scanner, display console, baggage check in controller, boarding pass dispenser and card swiper.
* A Self Check-In Kiosk at the airport consists of Passport scanner, Display console, Baggage check in controller, Boarding pass dispenser and Card Swipe reader.
* Kiosk should be able to start a new session when the booking reference number is typed in or passport is scanned. It should provide access to component parts for each session
* Kiosk should be able to start a new session when the booking reference number is typed in or passport is scanned. It should provide access to component parts for each session
* The passport scanner should be able to scan the bar-code on the passport and check if any record exist corresponding to the scanned passport by connecting to the database.
* The passport scanner should be able to scan the bar code on the passport and check if any record exists corresponding to the scanned passport by connecting to the database.
* The Display console should provide a touch based console to accept the entered airline pnr. It should be able to pass the query onto the reservations database and display the result. Based on the result it should also be able to provide access to the baggage check in system.
* The Display console should provide a touch based console to accept the entered airline "Booking reference number". It should be able to pass the query onto the reservations database and display the result. Based on the result it should also be able to provide access to the baggage check in system.
* Baggage check in controller should provide a count for the maximum number of check in bags allowed based on the data retrieved by scanning the passport and should also be able to weigh the bag and check if the weight of the bag is in the allowed limit or not. It should also provide an option for the user to check in extra bags if he/she wants to. Based on the number of extra bags entered by the user, it should calculate the required amount.
* Baggage Check-In controller should provide a count for the maximum number of Check-In bags allowed based on the data retrieved by scanning the passport and should also be able to weigh the bag and check if the weight of the bag is in the allowed limit or not. It should also provide an option for the user to check in extra bags if he/she wants to. Based on the number of extra bags entered by the user, it should calculate the required amount.
* Boarding pass dispenser should be able to print the boarding passes and should pass the message to the Kiosk to start a new session
* Boarding pass dispenser should be able to print the boarding passes and should pass the message to the Kiosk to start a new session


'''Discovery of Classes'''
== '''Discovery of Classes''' ==


Now that we are given a problem statement, we should carefully go through the whole statement and using the nouns present in it we should be able to prepare the first set of nouns. As we go through the problem statement, we come across the following nouns -
Now that we are given a problem statement, we should carefully go through the whole statement and using the nouns present in it we should be able to prepare the first set of nouns. As we go through the problem statement, we come across the following nouns -
Line 176: Line 176:
* Baggage check in controller
* Baggage check in controller
* Boarding pass dispenser
* Boarding pass dispenser
* Card swipe  
* Card swipe reader


If we rigidly list all the nouns in the summary statement, then the above list would have been longer. But by applying heuristics we should be able to extract an essential list of classes. Domain analysts also play an important role in selecting a set of essential classes.
If we rigidly list all the nouns in the summary statement, then the above list would have been longer. But by applying heuristics we should be able to extract an essential list of classes. Domain analysts also play an important role in selecting a set of essential classes.


'''Discovery of responsibilities'''
== '''Discovery of responsibilities''' ==


Our next step is to identify the responsibilities of each class listed above.
Our next step is to identify the responsibilities of each class listed above.
Line 187: Line 187:


* Kiosk : should be able to start a new session and provide access to component parts.
* Kiosk : should be able to start a new session and provide access to component parts.
* Passport scanner : scan the bar code on the passport and should be able to query the reservations database
* Passport scanner : scan the bar code on the passport and should be able to query the reservations database.
* Database class : should be able to process the query and transfer the results
* Database class : should be able to process the query and transfer the results.
* Display console : should be able to accept the booking reference no from the customer, query the reservations database, display the result.
* Display console : should be able to accept the booking reference number from the customer, query the reservations database, display the result.
* Baggage check in controller : count the maximum no of allowed bags, weigh each bag, beep if a bag exceeds limit, pass the bags to personnel, facilitate the customer to check in additional baggage
* Baggage check in controller : count the maximum number of allowed bags, weigh each bag, beep if a bag exceeds limit, pass the bags to personnel, facilitate the customer to check in additional baggage.
* Boarding pass dispenser : should dispense boarding passes corresponding to the passport scanned, should pass the information to Kiosk that the session has ended after all the boarding pass have been dispensed
* Boarding pass dispenser : should dispense boarding passes corresponding to the passport scanned, should pass the information to Kiosk that the session has ended after all the boarding passes have been dispensed.
* Card swipe : should scan the magnetic strip on the card, authenticate it and should pass the information to the database such as amount to be transferred for the extra baggage.
* Card swipe : should scan the magnetic strip on the card, authenticate it and should pass the information to the database such as amount to be transferred for the extra baggage.


'''Discovery of Collaborations'''
== '''Discovery of Collaborations''' ==


Our next step is to discover all the collaborations that exist in the system. In order to discover the relations between different classes, we need to use various use cases. We will deal each event step by step.
Our next step is to discover all the collaborations that exist in the system. In order to discover the relations between different classes, we need to use various use cases. We will deal with each event step by step.


'''Kiosk'''
=== '''Kiosk''' ===
* The whole airline check in system is called as Kiosk. This system consists of sub-parts scanner, display console etc. Kiosk is the class that provides access to all these sub classes. So it should have collaborations with all the sub classes.
* The whole airline check in system is called as Kiosk. This system consists of components like Scanner, Display console etc. Kiosk is the class that provides access to all these sub classes. So it should have collaborations with all the sub classes.
Collaborators : [Scanner, Display console, Database controller, Baggage check in controller, Boarding pass dispenser, Card swipe]


'''Passport Scanner'''
Collaborators : [Scanner, Display console, Database controller, Baggage check in controller, Boarding pass dispenser, Card swipe reader]
 
=== '''Passport Scanner''' ===
* As the user scans his/her passport, the scanner should recognize the passport number and check if there is a reservation corresponding to that number in the reservations database. So the scanner class should have a collaboration with the db class. It should also pass the necessary information to the baggage check in controller, for example : maximum number of bags that can be allowed.
* As the user scans his/her passport, the scanner should recognize the passport number and check if there is a reservation corresponding to that number in the reservations database. So the scanner class should have a collaboration with the db class. It should also pass the necessary information to the baggage check in controller, for example : maximum number of bags that can be allowed.
Collaborators : [Database controller, Baggage check in controller]
Collaborators : [Database controller, Baggage check in controller]


'''Display Console'''
=== '''Display Console''' ===
* Instead of scanning the passport, the user may also enter the reference number through the display console. The display console should check if there is any reservation corresponding to that reference number by connecting to the db class. So it should have a collaboration with the db class. It should also pass the necessary information to the baggage check in controller, for example : maximum number of bags that can be allowed.
* Instead of scanning the passport, the user may also enter the reference number through the display console. The display console should check if there is any reservation corresponding to that reference number by connecting to the db class. So it should have a collaboration with the db class. It should also pass the necessary information to the baggage check in controller, for example : maximum number of bags that can be allowed.
Collaborators : [Database controller, Baggage check in controller]
Collaborators : [Database controller, Baggage check in controller]


'''Baggage check in controller'''
=== '''Baggage check in controller''' ===
* Baggage check in controller receives the information from either the display console or the scanner and should update its count. As the user passes that bags, it weighs the bags and beeps if they cross the weight limit. It also provides an option to the user if he/she wants to check in extra bags. Based on the number of extra bags, it counts the amount to be received and prompts the user to swipe the card. As the user swipes the card, it access the bank database and deducts the required amount. So it should also be able to access the db class.
* Baggage check in controller receives the information from either the display console or the scanner and should update its count. As the user passes that bags, it weighs the bags and beeps if they cross the weight limit. It also provides an option to the user if he/she wants to check in extra bags. Based on the number of extra bags, it counts the amount to be received and prompts the user to swipe the card. As the user swipes the card, it access the bank database and deducts the required amount. So it should also be able to access the DB class.
Collaborators : [Database Controller, Card swipe, passport scanner, display console, Boarding pass dispenser]


'''Boarding pass dispenser'''
Collaborators : [Database Controller, Card swipe reader, Passport scanner, Display console, Boarding pass dispenser]
 
=== '''Boarding pass dispenser''' ===
* Boarding pass dispenser : After all the things are done by the user, necessary information has to be passed to the boarding pass dispenser. It dispenses the boarding passes and sends the information to the kiosk that the session has been completed so that it can start a new session.
* Boarding pass dispenser : After all the things are done by the user, necessary information has to be passed to the boarding pass dispenser. It dispenses the boarding passes and sends the information to the kiosk that the session has been completed so that it can start a new session.
Collaborators : [Display console, Scanner, Kiosk]
Collaborators : [Display console, Scanner, Kiosk]



Revision as of 00:50, 18 September 2010

Usually most of the real world problems are large, complex and less well defined. Therefore the analysis and refinement of design would be a longer and complex process. As our problem becomes large and complicated, it is unlikely that our initial designs are perfect. Therefore it is a good practice to repeatedly check these initial designs and make necessary changes before we can convert these into final ones. One way of refining our initial designs is by using CRC cards.

Introduction

CRC stands for Class Responsibility Collaborator. CRC cards modeling is one of the venerable Object Oriented Design Technique. This technique is used in determining the various classes, their functionalities and their collaborations in the software system. Class, Responsibilities and Collaborators are recorded on index cards to facilitate team-based role play.

Class-Responsibility-Collaboration cards have been first introduced by Kent Beck and Ward Cunningham in their paper "A Laboratory for teaching Object-Oriented Thinking" as a way to help beginners learn object oriented design. More recently, the technique has become regarded useful beyond teaching because of the subtle way it supports critical characteristics of design. CRC cards are used to document all the classes and their collaboration with the other classes in the system. This helps us in the process of designing a flawless system. This is also a cheap way of designing a system. Not just one but multiple designers can work together in designing a system using CRC cards modeling technique.

The CRC card technique has three basic strengths. The three strengths are:

  • CRC cards facilitate open discussion of static structure of system.
  • CRC cards have built-in heuristics that guide design, in the name of determining the Class name, the Responsibilities, and the Collaborators.
  • CRC cards facilitate open discussion of dynamic structure, the "what-if" exploration, by use of role play.

Structure of a CRC card

CRC cards explicitly represent multiple objects simultaneously. CRC card components are explained as follows:

Class Name

The class name appears across the top of the card. The class represents a collection of similar objects. Objects are things of interest in the system being designed. They can be a person, place, thing or any other important concept information to the system at hand.

Class Responsibilities

A Responsibility is anything that the class knows or does. These responsibilities are the things that the class has knowledge about itself, or the things the class can do with the knowledge it has.

For example a person class might have knowledge for its name, address and phone number. In other example an automobile class might have knowledge of its size, the number of doors or it might be able to do things like stop and go. The responsibilities of the class appear on the left side of the card.

Collaborators

A Collaborator is another class that is used to get information from or perform actions for the class at hand. It often works with a particular class to complete a step in a scenario. All the collaborator classes appear on the right side of the card.

Structure of a CRC Card
Structure of a CRC Card

A CRC card might also contain additional information such as Super and Sub classes, name of the author of the class etc. The back side of the card is generally used to give a detailed explanation of the class the card represents.

CRC Modeling

A CRC Model is a collection of CRC cards that represent whole or part of an application or problem domain. The degree of collaboration between any two classes in the model determines the relative placement of their corresponding cards in the model. Cards that collaborate with one another are placed close to each other, cards that don't collaborate are not placed near each other.

CRC Model
CRC Model of NCSU Libraries System

CRC Modeling is an iterative process. In a nutshell, CRC Modeling comprises of the following steps :

1. Creating a CRC Modeling team
2. Brainstorming
3. Iteratively perform the steps of CRC Modeling
4. Perform use-case scenario testing

Creating a CRC Modeling team

The CRC session is conducted by different types of people involved in the project. The overall size of the CRC team should be limited to six. Because as the team size increases the number of conversations increase exponentially. Generally five types of people participate in the CRC session. They are:

1 . Business Domain Experts (BDEs)

The Business Domain Experts (BDEs) are the real users of the application system. These are the people who have the complete business knowledge about how the application works day in and day out. There are typically four or five BDEs involved in CRC modeling. If there are not enough BDEs then the team might not have wide enough range of knowledge and experience. And, if there are more than five people involved in the team we will find that they might get in each others way. So, it is very essential that we pick the right amount of people for our team.

Good BDEs should be possessing excellent communication skills, wide range of business knowledge and should be able to think clearly and logically.


2 . Design Analyst

Design Analysts are the ones who are familiar with the Object oriented methodologies and techniques. Their responsibilities on the project are well beyond the CRC modelling sessions. These may include fleshing out the CRC cards to create a formal object model, and interpreting the CRC collaborators to document the OID's (Object Interaction Diagrams)

Good Design Analyst should be very experienced in developing Objected oriented systems and should clearly understand the CRC modeling and methodologies and Object oriented modeling and methodologies.


3 . Facilitator

Facilitator is the most important member of the team. This person runs the CRC session.

This person is responsible to keep the CRC session progressing forward and to make sure that the team sessions conform to the agenda. Facilitator maintains the status of the CRC Modeling process from session to session and leads the team towards completion of the CRC Modeling phase.

Good Facilitator should possess good meeting skills, clearly understand the CRC modeling and methodologies and Object oriented modeling and methodologies.


4 . Scribe

Scribes are the members who are responsible for documenting any business logic and discussion that is not captured on the CRC cards. This documentation is often used to rollback the system into requirements and business case documents.

Scribes must have good oral and written communication skills, and should have good ear for business logic.


5. Observer

For training purposes, one may wish to have one or more people sit in on the CRC modeling session as observers. Observers sit at the back of the meeting room and do not participate in the discussions but just observe.


Brainstorming

Brainstorming is the phase in which the modeling team will try to identify and understand the requirements of the application system they are designing. It is more of an Idea-generation technique rather than an Idea-evaluation technique. Using the brainstorming process, the team members build on ideas of each other.

Some of the potential questions in a brainstorming session which could generate ideas are as follows :

  • Who is this system for?
  • What are the customer or business needs and requirements of the system?
  • How can we do this better?
  • What are the skills or knowledge to be possessed by the customer in order to use the system?
  • Is there any training required for the customers?
  • How can we do this faster and cheaper?

Iteratively perform the steps of CRC Modeling

BDEs are heavily involved in this particular phase of CRC Modeling. The CRC model comprising the CRC cards are filled out on a large table, while the whole team spends time discussing the system. BDEs will try to get better feel of the overall application by standing or sitting around the table so that they can get a bird's eye view of their model.

The steps of CRC Modeling are as follows:

Discovery of Class names

The initial work that is carried on in the CRC session is the discovery of classes and their responsibilities.

For the sake of designing a better system, the problem statement has to be clearly stated. Discovery of classes is a non-trivial process. The names of the classes can be extracted from the nouns present in the problem summary statement.

This may not be the final list. Some of the class names stated may not be required and other class names might not be listed.

Discovery of Class responsibilities

Responsibilities are related to actions. They are generally identified by selecting the verbs from the summary of requirements.

Although verbs relate to responsibilities, verbs are not the only way of discovering responsibilities. Multiple verbs can be combined for discovering new responsibilities.

If two or more responsibilities are shared by multiple classes then each class will have the responsibility. As this is an iterative process, the summary statement and the set of responsibilities have to be revised regularly. The final set of responsibilities may not contain all the responsibilities in the initial draft.

Discovery of Class Collaborations

To identify the Collaborations, it is necessary to study the responsibilities and the classes the object interacts with.

We can also discover collaborations by making a note of classes the present object should interact with in order to complete the assigned set of responsibilities.

At the time of collaborations we might even discover new classes that might be required for completing the set of responsibilities. In order to discover a collaboration, use cases are required. An use case is a sequence of events performed in response to the request or event.

Moving the cards around

This phase involves moving the cards around, such that team members will be able to identify relationships and associations between the corresponding classes and help them to understand the application system better.

Cards that collaborate with each other should be close one another on the desk. The more the two cards collaborate with each other, the closer they should be on the desk.

Cards which are highly associated to several other cards should be placed at the center.

Perform Use-Case scenario testing

It is a task process pattern in which users are actively involved with insuring that user requirements are accurate. The basic idea is that a group of Business Domain Experts (BDEs), with the aid of a facilitator, step through a series of defined use cases to verify that CRC model accurately reflects their requirements. The facilitator distributes the cards to the BDEs, trying to ensure that two cards that collaborate are given to two different people. The facilitator then leads the group through acting out each scenario one at a time.

In this process, we can more accurately determine the responsibilities of each class and update the cards whenever necessary. As the BDEs describe the business logic of the responsibility, they will often describe a step where they need to collaborate with another card to complete.

This particular phase is also known as "Role play".

Example

Problem Statement

Our aim is to design an airline Self Check-In system.

  • A Self Check-In Kiosk at the airport consists of Passport scanner, Display console, Baggage check in controller, Boarding pass dispenser and Card Swipe reader.
  • Kiosk should be able to start a new session when the booking reference number is typed in or passport is scanned. It should provide access to component parts for each session
  • The passport scanner should be able to scan the bar code on the passport and check if any record exists corresponding to the scanned passport by connecting to the database.
  • The Display console should provide a touch based console to accept the entered airline "Booking reference number". It should be able to pass the query onto the reservations database and display the result. Based on the result it should also be able to provide access to the baggage check in system.
  • Baggage Check-In controller should provide a count for the maximum number of Check-In bags allowed based on the data retrieved by scanning the passport and should also be able to weigh the bag and check if the weight of the bag is in the allowed limit or not. It should also provide an option for the user to check in extra bags if he/she wants to. Based on the number of extra bags entered by the user, it should calculate the required amount.
  • Boarding pass dispenser should be able to print the boarding passes and should pass the message to the Kiosk to start a new session

Discovery of Classes

Now that we are given a problem statement, we should carefully go through the whole statement and using the nouns present in it we should be able to prepare the first set of nouns. As we go through the problem statement, we come across the following nouns -

  • Kiosk
  • Passport scanner
  • Database class
  • Display Console
  • Baggage check in controller
  • Boarding pass dispenser
  • Card swipe reader

If we rigidly list all the nouns in the summary statement, then the above list would have been longer. But by applying heuristics we should be able to extract an essential list of classes. Domain analysts also play an important role in selecting a set of essential classes.

Discovery of responsibilities

Our next step is to identify the responsibilities of each class listed above.

For every class we should be able to identify a set of responsibilities from the given summary statement. The verbs present in the summary statement helps us in identifying the set of responsibilities for each class.

  • Kiosk : should be able to start a new session and provide access to component parts.
  • Passport scanner : scan the bar code on the passport and should be able to query the reservations database.
  • Database class : should be able to process the query and transfer the results.
  • Display console : should be able to accept the booking reference number from the customer, query the reservations database, display the result.
  • Baggage check in controller : count the maximum number of allowed bags, weigh each bag, beep if a bag exceeds limit, pass the bags to personnel, facilitate the customer to check in additional baggage.
  • Boarding pass dispenser : should dispense boarding passes corresponding to the passport scanned, should pass the information to Kiosk that the session has ended after all the boarding passes have been dispensed.
  • Card swipe : should scan the magnetic strip on the card, authenticate it and should pass the information to the database such as amount to be transferred for the extra baggage.

Discovery of Collaborations

Our next step is to discover all the collaborations that exist in the system. In order to discover the relations between different classes, we need to use various use cases. We will deal with each event step by step.

Kiosk

  • The whole airline check in system is called as Kiosk. This system consists of components like Scanner, Display console etc. Kiosk is the class that provides access to all these sub classes. So it should have collaborations with all the sub classes.

Collaborators : [Scanner, Display console, Database controller, Baggage check in controller, Boarding pass dispenser, Card swipe reader]

Passport Scanner

  • As the user scans his/her passport, the scanner should recognize the passport number and check if there is a reservation corresponding to that number in the reservations database. So the scanner class should have a collaboration with the db class. It should also pass the necessary information to the baggage check in controller, for example : maximum number of bags that can be allowed.

Collaborators : [Database controller, Baggage check in controller]

Display Console

  • Instead of scanning the passport, the user may also enter the reference number through the display console. The display console should check if there is any reservation corresponding to that reference number by connecting to the db class. So it should have a collaboration with the db class. It should also pass the necessary information to the baggage check in controller, for example : maximum number of bags that can be allowed.

Collaborators : [Database controller, Baggage check in controller]

Baggage check in controller

  • Baggage check in controller receives the information from either the display console or the scanner and should update its count. As the user passes that bags, it weighs the bags and beeps if they cross the weight limit. It also provides an option to the user if he/she wants to check in extra bags. Based on the number of extra bags, it counts the amount to be received and prompts the user to swipe the card. As the user swipes the card, it access the bank database and deducts the required amount. So it should also be able to access the DB class.

Collaborators : [Database Controller, Card swipe reader, Passport scanner, Display console, Boarding pass dispenser]

Boarding pass dispenser

  • Boarding pass dispenser : After all the things are done by the user, necessary information has to be passed to the boarding pass dispenser. It dispenses the boarding passes and sends the information to the kiosk that the session has been completed so that it can start a new session.

Collaborators : [Display console, Scanner, Kiosk]

Advantages

There are many advantages to CRC Modeling :

  • The people who understand the problem domain, the business domain experts (BDEs) are the people who create the model.
  • Users and developers work together side-by-side to create the CRC model.
  • This technique is very inexpensive and portable. Buying and maintaining index cards is very easy.
  • The approach is simple and straightforward. Does not need any complex equipment or even a computer for this in fact.
  • CRC Modeling and prototyping are both iterative processes in which users are greatly involved.
  • Because users are actively involved in designing the application, their satisfaction with work is much greater.


Conclusion

CRC Modeling is very effective technique for identifying and user requirements. As illustrated by the above advantages, it would be greatly beneficial to include CRC Modeling in the Software Development Cycle. This technique works hand in hand with use cases and prototypes and leads directly to class modeling.

References

A laboratory for teaching object oriented thinking [1]

Introduction to CRC Models [2]

Object Oriented Thought Process [3]

Validation CRC Cards [4]

Reflections on CRC Cards [5]