<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.expertiza.ncsu.edu/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Bluehat</id>
	<title>Expertiza_Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.expertiza.ncsu.edu/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Bluehat"/>
	<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Special:Contributions/Bluehat"/>
	<updated>2026-05-10T01:34:50Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.41.0</generator>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6d_NM&amp;diff=42498</id>
		<title>CSC/ECE 517 Fall 2010/ch6 6d NM</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6d_NM&amp;diff=42498"/>
		<updated>2010-11-23T21:51:59Z</updated>

		<summary type="html">&lt;p&gt;Bluehat: /* Spiral model */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Agile vs. other software-development methods'''&lt;br /&gt;
==Software development methodologies==&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Software_development_methodology Software development methodology] is a methodical approach or a framework to the software development process, in order to develop software with high quality and less defects. It helps the development team to plan and structure the process in advance. A wide range of such methodologies	exist in the Software engineering field with their own characteristics. &lt;br /&gt;
&lt;br /&gt;
===Types of Software development methodologies===&lt;br /&gt;
There are wide variety of software development approaches used in the industry. Few of them are,&lt;br /&gt;
*Waterfall Approach : linear framework type.&lt;br /&gt;
*Prototyping Approach : iterative framework type&lt;br /&gt;
*Incremental Approach: combination of linear and iterative framework type&lt;br /&gt;
*Spiral Approach : combination of linear and iterative framework type&lt;br /&gt;
*Rapid Application Development (RAD) Approach: Iterative Framework Type&lt;br /&gt;
*Agile Methodologies&lt;br /&gt;
&lt;br /&gt;
==Agile Methodology==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Software_development_methodology Software development methodology Agile]  means – moving quickly and lightly. Similarly, the goal of [http://en.wikipedia.org/wiki/Agile_software_development Agile methodology] is to offer lighter weight solution to the rapidly paced software development processes. It refers to the group of software development methodologies that are based on iterative software development methods. In the Iterative approach the requirements and solutions evolve through the collaboration between self-organizing cross-functional teams. &lt;br /&gt;
	Agile methods break the entire software development into small increments. Each of these iteration involves a team all the essential parts of the software development cycle including planning, requirements analysis, design, coding, and testing. Thus, it reduces the risk involved with the software development and makes it easy to adapt to the new changes. Completion of multiple iterations eventually results into final product. Agile methodology follows principles such as Customer satisfaction, face-to-face communication, simplicity, Self-organizing teams, etc..&lt;br /&gt;
Well-known agile methods include&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Agile_Unified_Process Agile Unified Process (AUP)]- simple, easy to understand approach to developing business application software using agile techniques and concepts yet still remaining true to the RUP&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Dynamic_Systems_Development_Method Dynamic Systems Development Method (DSDM)]-  iterative and incremental approach that emphasizes continuous user involvement&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Essential_Unified_Process Essential Unified Process (EssUP) ]-  identifies practices, such as use cases, iterative development, architecture driven development, team practices and process practices, which are borrowed from RUP, CMMI and agile development&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Extreme_Programming Extreme Programming (XP)]-  intended to improve software quality and responsiveness to changing customer requirements&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Feature_Driven_Development Feature Driven Development (FDD)]- model-driven short-iteration process&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Open_Unified_Process Open Unified Process (OpenUP)]-  a part of the Eclipse Process Framework (EPF), an open source process framework developed within the Eclipse Foundation. Its goals are to make it easy to adopt the core of the RUP / Unified Process&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Scrum_(development)Scrum]- a process skeleton that contains sets of practices and predefined roles.&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Velocity_tracking Velocity tracking]– tracking a measure of productivity sometimes used in agile software development&lt;br /&gt;
&lt;br /&gt;
[[Image:agile.gif|frame|center|Agile Software development]]&lt;br /&gt;
&lt;br /&gt;
==Agile vs waterfall==&lt;br /&gt;
===Waterfall===&lt;br /&gt;
Waterfall model is the traditional sequential process of software development. Like in a waterfall, the water progressively falls from the higher attitude to the lower, in a similar way, the software production cycle progresses sequentially. The waterfall model phases of software development are as follows: requirement specification, conception, analysis, design, coding, testing &amp;amp; debugging, installation and finally maintenance.&lt;br /&gt;
[[Image:waterfall1.png|frame|center|Water Fall model]]&lt;br /&gt;
&lt;br /&gt;
===Comparison with Agile===&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Customer requirements: &amp;lt;/strong&amp;gt; For the team using Agile method, They are totally unclear and evolves as the work progresses. But for the Waterfall method it is known completely before moving to the next step of the development. They are more stable compared with the requirements of the Agile. The requirement gathering phase consumes considerable amount of time of the entire software development life cycle. No last minute changes are possible in Waterfall whereas they can be easily incorporated using the Agile methodology.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Team Structure: &amp;lt;/strong&amp;gt; The team structure in Agile is cross functional, closely knit and self-organizing. The team work on the entire iteration which includes all the phases of software development. Whereas in Waterfall, each team is dedicated for each phase of the software development cycle.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Customer interaction: &amp;lt;/strong&amp;gt;For Waterfall model, the customer interaction is only in the earlier stage of the cycle. Whereas in Agile, there needs to be continuous interaction of the customer with the development team&lt;br /&gt;
*&amp;lt;strong&amp;gt;Contract (cost):&amp;lt;/strong&amp;gt; As the requirements are unclear and not stable, It is very difficult to decide on the cost of the developing the software in the case of Agile methodology. However, in the case of Waterfall, the cost can be easily manipulated using the requirements defined in the first stage.&lt;br /&gt;
&lt;br /&gt;
==Agile Vs Spiral==&lt;br /&gt;
===Spiral model===&lt;br /&gt;
Spiral model takes the advantage of top down and bottom up approaches of software development. It takes the good features of waterfall as well as prototype modeling. The model is incremental  as well and iterative. The spiral method is planned methodically, with tasks  identified for each step. A prototype is first created based on requirements.It is then tested across several iterations.Once it is approved it  is scaled to the final product. It is then analyzed again for improvements and a better and efficient prototype is built. This process is continued till the best prototype is created.&lt;br /&gt;
&lt;br /&gt;
[[Image:spiral.png|frame|center|Spiral model]]&lt;br /&gt;
&lt;br /&gt;
===Comparison with Agile===&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Requirement: &amp;lt;/strong&amp;gt; in spiral methodology, the system requirement are described in detail and once the requirements are defined and considered final, work is started. However, in agile methodology requirements are not very clear in initial iterations. It becomes clear after few iterations of product development. &lt;br /&gt;
*&amp;lt;strong&amp;gt;Design: &amp;lt;/strong&amp;gt;The basic difference is that most Spiral models of development still insist on big, up-front design. The emphasis is on knowing as much as you can about how the system will be used; discovering all the use cases. Once you know these, then you design the system and break it down into phases that follow an iterative detail-design, implementation, test, refactor-design loop. In Agile, their is some up-front planning -- perhaps gathering large grain understanding (story titles) -- so that reasonable releases can be described, but each release is planned independently and we delay discovery of the details until we are ready to begin implementation of that release. We expect change and don't try to know everything first.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Customer Involvement: &amp;lt;/strong&amp;gt; Customer is involved in the requirement specification stage and in reviewing the prototypes. Constant customer involvement is not necessary. However, agile methodology involves heavy interaction with customers. Success depends on timely and adequate feedback from customer.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Project size: &amp;lt;/strong&amp;gt;The spiral model is intended for large and complicated projects. Agile model works best with small projects&lt;br /&gt;
*&amp;lt;strong&amp;gt;Cycles:&amp;lt;/strong&amp;gt;Spiral model has limited cycles till the best prototype is decided upon while agile model has numerous cycles. Cycles in spiral model are prototype cycles as against getting what customer wants as final product in agile model.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Risk: &amp;lt;/strong&amp;gt;Spiral model has known risks while &lt;br /&gt;
*&amp;lt;strong&amp;gt;Cost: &amp;lt;/strong&amp;gt;spiral models are usually expensive compared to Agile models&lt;br /&gt;
*&amp;lt;strong&amp;gt;Testing: &amp;lt;/strong&amp;gt;Another thing that differs is that most Agile philosophies involve &amp;quot;test-first&amp;quot; methods. This is different from spiral where testing is often an activity unto itself and tests are not developed prior to code. Most often they are planned in advance, but developed in parallel or after coding. Many agile methods insist on developing tests first as the specification for the code.&lt;br /&gt;
&lt;br /&gt;
==Agile vs Iterative==&lt;br /&gt;
===Iterative Software development===&lt;br /&gt;
Iterative development starts with an initial planning followed by many iterations of requirement, analysis, design, testing and implementation steps and ends with deployment. After each iteration, analysis is done to make sure that the required functionality is implemented and additional functionalities that need to be implemented are identified. Such iterations make modification and implementation easy. Iterative development prescribes the construction of initially small but ever larger portions of a software project to help all those involved to uncover important issues early before problems or faulty assumptions can lead to disaster.&lt;br /&gt;
&lt;br /&gt;
[[Image:iterative.gif|frame|center|Iterative Software development model]]&lt;br /&gt;
&lt;br /&gt;
===Comparison with Agile===&lt;br /&gt;
&lt;br /&gt;
Agile software development uses iterative development as a basis but advocates a lighter and more people-centric viewpoint than traditional approaches. Agile processes use feedback, rather than planning, as their primary control mechanism. The feedback is driven by regular tests and releases of the evolving software.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Time period: &amp;lt;/strong&amp;gt;Agile methods differ from iterative methods in that their time period is measured in weeks rather than months. Most agile methods also differ by treating their time period as a strict timebox.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Process and People Orientation: &amp;lt;/strong&amp;gt;A team doing iterative software development could value processes and tools over people and interactions while agile is people oriented interacting more with the customer.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Documentation: &amp;lt;/strong&amp;gt;Iterative model values comprehensive documentation over working software while agile model is characterized by low documentation and more thrust on working software.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Contract: &amp;lt;/strong&amp;gt;Iterative models follow a fixed contract with the customer. However, agile models allows customer to pay for first few iterations and then decide on the type of contract to be entered into.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Customer role: &amp;lt;/strong&amp;gt;In iterative model, customer’s involvement is focused on contract supervision while in agile model has dedicated, knowledgeable, collaborated, collocated onsite customers &lt;br /&gt;
*&amp;lt;strong&amp;gt;Team size: &amp;lt;/strong&amp;gt;Iterative model has large team size while agile model has large team size.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Developers: &amp;lt;/strong&amp;gt;In iterative model developers are plan oriented while in agile model developers flexible and can work with changes in plan.&lt;br /&gt;
&lt;br /&gt;
==Agility in context==&lt;br /&gt;
Agility in context is a new trend to make agile methodologies more relevant to a wide range of projects. This makes it stand out from other software development methodologies. Instead of applying all the steps by-the-book, the process is customized to accommodate changes. Few examples are as follows&lt;br /&gt;
*Insufficient customer involvement can result in confused and incomplete requirement document and bring project to a standstill. To avoid this, methods such as story owner and customer proxy are used.&lt;br /&gt;
*The constraints in fixed bid contract make it difficult to make the project agile. Options like offering a customer to buy few iterations to see how the development is going and then sign the contract or swapping a feature or two makes pricing flexible.&lt;br /&gt;
*Communication with clients that cannot come on site and teams that are located in different geographical areas   is improved using video conferencing, frequent sync calls and sharing wiki pages.&lt;br /&gt;
*Even though some projects are characterized by slow Rate of change making them fall into other software development category, they can be good candidates for agile if other agile development methods can be applied to the project effectively&lt;br /&gt;
&lt;br /&gt;
==Limitations of agile methodology ==&lt;br /&gt;
&lt;br /&gt;
*They are difficult when used with the large teams. (Team having members more than 20).&lt;br /&gt;
*Customer is considered as part of the development team throughout the whole development of the software. Change in the customer side representative may result into change in the requirements.&lt;br /&gt;
*It does not support traditional walkthroughs and code inspections during the life-cycle. Instead it emphasizes on pair programming and informal reviews as their quality control mechanism. This is not enough of the critical software.&lt;br /&gt;
*It relies on tacit knowledge embodied by the team, rather than writing the knowledge down as documentation. Thus, there is a risk that this may lead to architectural mistakes that cannot be easily detected by external reviewers due to the lack of documentation.&lt;br /&gt;
*It does not work best, when the requirements are predictable.&lt;br /&gt;
*Lack of documentation may result into failure in understanding the project in future by an outside expert.&lt;br /&gt;
*User interface are developed using the paper prototype based approach rather than model-driven design. &lt;br /&gt;
&lt;br /&gt;
==Limitations of other software development methodologies==&lt;br /&gt;
*Lack of customer interaction results into last moment surprises.&lt;br /&gt;
*Incorporation of the changes during the software development cycle is very difficult task.&lt;br /&gt;
*High amount of prediction is required which result into higher risk involved.&lt;br /&gt;
*Documentation consumes lot of time in the software development cycle.&lt;br /&gt;
*More pre-planning is required compared to agile methods.&lt;br /&gt;
*Stringent team structure may result into conflicts.&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
Agile methods work well for projects characterized by small; co-located teams; interactive customers involved in decisions on requirements; frequently changing requirements (weeks or months); variable price contracts; and few legal or regulatory constraints on development processes where as heavyweight methods can handle complex  large software team dispersed over multiple domains, functions, and geographical areas efficiently. &lt;br /&gt;
Heavyweight approaches have their need in large, long lived projects that have a special safety, reliability or security requirements. However, the steps in agile models can be modified and customized to suit the demands of a project. This agility in context offers many benefits and is the reason for adoption of agile methodologies widely in these areas too.&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&lt;br /&gt;
[1] http://www.buzzle.com/articles/waterfall-model-vs-agile.html&lt;br /&gt;
&lt;br /&gt;
[2] M. A. Awad, &amp;lt;i&amp;gt;&amp;quot;A Comparison between Agile and Traditional Software Development Methodologies&amp;quot;&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[3] Boehm B, &amp;lt;i&amp;gt;&amp;quot;A Spiral Model of Software Development and Enhancement&amp;quot;&amp;lt;/i&amp;gt;ACM SIGSOFT Software Engineering Notes&amp;quot;, &amp;quot;ACM&amp;quot;, 11(4):14-24, August 1986&lt;br /&gt;
&lt;br /&gt;
[4] Rashina H, Philippe K, James N and Stuart M, &amp;lt;i&amp;gt;”Agility in Context”&amp;lt;/i&amp;gt;, ACM OOOPSLA 2010&lt;/div&gt;</summary>
		<author><name>Bluehat</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6d_NM&amp;diff=41955</id>
		<title>CSC/ECE 517 Fall 2010/ch6 6d NM</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6d_NM&amp;diff=41955"/>
		<updated>2010-11-18T04:52:51Z</updated>

		<summary type="html">&lt;p&gt;Bluehat: /* Comparison with Agile */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Agile vs. other software-development methods'''&lt;br /&gt;
==Software development methodologies==&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Software_development_methodology Software development methodology] is a methodical approach or a framework to the software development process, in order to develop software with high quality and less defects. It helps the development team to plan and structure the process in advance. A wide range of such methodologies	exist in the Software engineering field with their own characteristics. &lt;br /&gt;
&lt;br /&gt;
===Types of Software development methodologies===&lt;br /&gt;
There are wide variety of software development approaches used in the industry. Few of them are,&lt;br /&gt;
*Waterfall Approach : linear framework type.&lt;br /&gt;
*Prototyping Approach : iterative framework type&lt;br /&gt;
*Incremental Approach: combination of linear and iterative framework type&lt;br /&gt;
*Spiral Approach : combination of linear and iterative framework type&lt;br /&gt;
*Rapid Application Development (RAD) Approach: Iterative Framework Type&lt;br /&gt;
*Agile Methodologies&lt;br /&gt;
&lt;br /&gt;
==Agile Methodology==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Software_development_methodology Software development methodology Agile]  means – moving quickly and lightly. Similarly, the goal of [http://en.wikipedia.org/wiki/Agile_software_development Agile methodology] is to offer lighter weight solution to the rapidly paced software development processes. It refers to the group of software development methodologies that are based on iterative software development methods. In the Iterative approach the requirements and solutions evolve through the collaboration between self-organizing cross-functional teams. &lt;br /&gt;
	Agile methods break the entire software development into small increments. Each of these iteration involves a team all the essential parts of the software development cycle including planning, requirements analysis, design, coding, and testing. Thus, it reduces the risk involved with the software development and makes it easy to adapt to the new changes. Completion of multiple iterations eventually results into final product. Agile methodology follows principles such as Customer satisfaction, face-to-face communication, simplicity, Self-organizing teams, etc..&lt;br /&gt;
Well-known agile methods include&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Agile_Unified_Process Agile Unified Process (AUP)]- simple, easy to understand approach to developing business application software using agile techniques and concepts yet still remaining true to the RUP&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Dynamic_Systems_Development_Method Dynamic Systems Development Method (DSDM)]-  iterative and incremental approach that emphasizes continuous user involvement&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Essential_Unified_Process Essential Unified Process (EssUP) ]-  identifies practices, such as use cases, iterative development, architecture driven development, team practices and process practices, which are borrowed from RUP, CMMI and agile development&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Extreme_Programming Extreme Programming (XP)]-  intended to improve software quality and responsiveness to changing customer requirements&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Feature_Driven_Development Feature Driven Development (FDD)]- model-driven short-iteration process&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Open_Unified_Process Open Unified Process (OpenUP)]-  a part of the Eclipse Process Framework (EPF), an open source process framework developed within the Eclipse Foundation. Its goals are to make it easy to adopt the core of the RUP / Unified Process&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Scrum_(development)Scrum]- a process skeleton that contains sets of practices and predefined roles.&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Velocity_tracking Velocity tracking]– tracking a measure of productivity sometimes used in agile software development&lt;br /&gt;
&lt;br /&gt;
[[Image:agile.gif|frame|center|Agile Software development]]&lt;br /&gt;
&lt;br /&gt;
==Agile vs waterfall==&lt;br /&gt;
===Waterfall===&lt;br /&gt;
Waterfall model is the traditional sequential process of software development. Like in a waterfall, the water progressively falls from the higher attitude to the lower, in a similar way, the software production cycle progresses sequentially. The waterfall model phases of software development are as follows: requirement specification, conception, analysis, design, coding, testing &amp;amp; debugging, installation and finally maintenance.&lt;br /&gt;
[[Image:waterfall1.png|frame|center|Water Fall model]]&lt;br /&gt;
&lt;br /&gt;
===Comparison with Agile===&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Customer requirements: &amp;lt;/strong&amp;gt; For the team using Agile method, They are totally unclear and evolves as the work progresses. But for the Waterfall method it is known completely before moving to the next step of the development. They are more stable compared with the requirements of the Agile. The requirement gathering phase consumes considerable amount of time of the entire software development life cycle. No last minute changes are possible in Waterfall whereas they can be easily incorporated using the Agile methodology.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Team Structure: &amp;lt;/strong&amp;gt; The team structure in Agile is cross functional, closely knit and self-organizing. The team work on the entire iteration which includes all the phases of software development. Whereas in Waterfall, each team is dedicated for each phase of the software development cycle.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Customer interaction: &amp;lt;/strong&amp;gt;For Waterfall model, the customer interaction is only in the earlier stage of the cycle. Whereas in Agile, there needs to be continuous interaction of the customer with the development team&lt;br /&gt;
*&amp;lt;strong&amp;gt;Contract (cost):&amp;lt;/strong&amp;gt; As the requirements are unclear and not stable, It is very difficult to decide on the cost of the developing the software in the case of Agile methodology. However, in the case of Waterfall, the cost can be easily manipulated using the requirements defined in the first stage.&lt;br /&gt;
&lt;br /&gt;
==Agile Vs Spiral==&lt;br /&gt;
===Spiral model===&lt;br /&gt;
Spiral model combines good features of top down and bottom up approach of software development. It combines the features of waterfall as well as prototype modeling. The model is both incremental and iterative. The spiral method is planned methodically, with tasks and deliverables identified for each step in the spiral. A prototype is first created based on requirements and scaled down to represent the final product. It is then analyzed for improvements and a better and efficient prototype is built. This process is continued till the best prototype is created.&lt;br /&gt;
&lt;br /&gt;
[[Image:spiral.png|frame|center|Spiral model]]&lt;br /&gt;
&lt;br /&gt;
===Comparison with Agile===&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Requirement: &amp;lt;/strong&amp;gt; in spiral methodology, the system requirement are described in detail and once the requirements are defined and considered final, work is started. However, in agile methodology requirements are not very clear in initial iterations. It becomes clear after few iterations of product development. &lt;br /&gt;
*&amp;lt;strong&amp;gt;Design: &amp;lt;/strong&amp;gt;The basic difference is that most Spiral models of development still insist on big, up-front design. The emphasis is on knowing as much as you can about how the system will be used; discovering all the use cases. Once you know these, then you design the system and break it down into phases that follow an iterative detail-design, implementation, test, refactor-design loop. In Agile, their is some up-front planning -- perhaps gathering large grain understanding (story titles) -- so that reasonable releases can be described, but each release is planned independently and we delay discovery of the details until we are ready to begin implementation of that release. We expect change and don't try to know everything first.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Customer Involvement: &amp;lt;/strong&amp;gt; Customer is involved in the requirement specification stage and in reviewing the prototypes. Constant customer involvement is not necessary. However, agile methodology involves heavy interaction with customers. Success depends on timely and adequate feedback from customer.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Project size: &amp;lt;/strong&amp;gt;The spiral model is intended for large and complicated projects. Agile model works best with small projects&lt;br /&gt;
*&amp;lt;strong&amp;gt;Cycles:&amp;lt;/strong&amp;gt;Spiral model has limited cycles till the best prototype is decided upon while agile model has numerous cycles. Cycles in spiral model are prototype cycles as against getting what customer wants as final product in agile model.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Risk: &amp;lt;/strong&amp;gt;Spiral model has known risks while &lt;br /&gt;
*&amp;lt;strong&amp;gt;Cost: &amp;lt;/strong&amp;gt;spiral models are usually expensive compared to Agile models&lt;br /&gt;
*&amp;lt;strong&amp;gt;Testing: &amp;lt;/strong&amp;gt;Another thing that differs is that most Agile philosophies involve &amp;quot;test-first&amp;quot; methods. This is different from spiral where testing is often an activity unto itself and tests are not developed prior to code. Most often they are planned in advance, but developed in parallel or after coding. Many agile methods insist on developing tests first as the specification for the code.&lt;br /&gt;
&lt;br /&gt;
==Agile vs Iterative==&lt;br /&gt;
===Iterative Software development===&lt;br /&gt;
Iterative development starts with an initial planning followed by many iterations of requirement, analysis, design, testing and implementation steps and ends with deployment. After each iteration, analysis is done to make sure that the required functionality is implemented and additional functionalities that need to be implemented are identified. Such iterations make modification and implementation easy. Iterative development prescribes the construction of initially small but ever larger portions of a software project to help all those involved to uncover important issues early before problems or faulty assumptions can lead to disaster.&lt;br /&gt;
&lt;br /&gt;
[[Image:iterative.gif|frame|center|Iterative Software development model]]&lt;br /&gt;
&lt;br /&gt;
===Comparison with Agile===&lt;br /&gt;
&lt;br /&gt;
Agile software development uses iterative development as a basis but advocates a lighter and more people-centric viewpoint than traditional approaches. Agile processes use feedback, rather than planning, as their primary control mechanism. The feedback is driven by regular tests and releases of the evolving software.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Time period: &amp;lt;/strong&amp;gt;Agile methods differ from iterative methods in that their time period is measured in weeks rather than months. Most agile methods also differ by treating their time period as a strict timebox.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Process and People Orientation: &amp;lt;/strong&amp;gt;A team doing iterative software development could value processes and tools over people and interactions while agile is people oriented interacting more with the customer.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Documentation: &amp;lt;/strong&amp;gt;Iterative model values comprehensive documentation over working software while agile model is characterized by low documentation and more thrust on working software.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Contract: &amp;lt;/strong&amp;gt;Iterative models follow a fixed contract with the customer. However, agile models allows customer to pay for first few iterations and then decide on the type of contract to be entered into.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Customer role: &amp;lt;/strong&amp;gt;In iterative model, customer’s involvement is focused on contract supervision while in agile model has dedicated, knowledgeable, collaborated, collocated onsite customers &lt;br /&gt;
*&amp;lt;strong&amp;gt;Team size: &amp;lt;/strong&amp;gt;Iterative model has large team size while agile model has large team size.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Developers: &amp;lt;/strong&amp;gt;In iterative model developers are plan oriented while in agile model developers flexible and can work with changes in plan.&lt;br /&gt;
&lt;br /&gt;
==Agility in context==&lt;br /&gt;
Agility in context is a new trend to make agile methodologies more relevant to a wide range of projects. This makes it stand out from other software development methodologies. Instead of applying all the steps by-the-book, the process is customized to accommodate changes. Few examples are as follows&lt;br /&gt;
*Insufficient customer involvement can result in confused and incomplete requirement document and bring project to a standstill. To avoid this, methods such as story owner and customer proxy are used.&lt;br /&gt;
*The constraints in fixed bid contract make it difficult to make the project agile. Options like offering a customer to buy few iterations to see how the development is going and then sign the contract or swapping a feature or two makes pricing flexible.&lt;br /&gt;
*Communication with clients that cannot come on site and teams that are located in different geographical areas   is improved using video conferencing, frequent sync calls and sharing wiki pages.&lt;br /&gt;
*Even though some projects are characterized by slow Rate of change making them fall into other software development category, they can be good candidates for agile if other agile development methods can be applied to the project effectively&lt;br /&gt;
&lt;br /&gt;
==Limitations of agile methodology ==&lt;br /&gt;
&lt;br /&gt;
*They are difficult when used with the large teams. (Team having members more than 20).&lt;br /&gt;
*Customer is considered as part of the development team throughout the whole development of the software. Change in the customer side representative may result into change in the requirements.&lt;br /&gt;
*It does not support traditional walkthroughs and code inspections during the life-cycle. Instead it emphasizes on pair programming and informal reviews as their quality control mechanism. This is not enough of the critical software.&lt;br /&gt;
*It relies on tacit knowledge embodied by the team, rather than writing the knowledge down as documentation. Thus, there is a risk that this may lead to architectural mistakes that cannot be easily detected by external reviewers due to the lack of documentation.&lt;br /&gt;
*It does not work best, when the requirements are predictable.&lt;br /&gt;
*Lack of documentation may result into failure in understanding the project in future by an outside expert.&lt;br /&gt;
*User interface are developed using the paper prototype based approach rather than model-driven design. &lt;br /&gt;
&lt;br /&gt;
==Limitations of other software development methodologies==&lt;br /&gt;
*Lack of customer interaction results into last moment surprises.&lt;br /&gt;
*Incorporation of the changes during the software development cycle is very difficult task.&lt;br /&gt;
*High amount of prediction is required which result into higher risk involved.&lt;br /&gt;
*Documentation consumes lot of time in the software development cycle.&lt;br /&gt;
*More pre-planning is required compared to agile methods.&lt;br /&gt;
*Stringent team structure may result into conflicts.&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
Agile methods work well for projects characterized by small; co-located teams; interactive customers involved in decisions on requirements; frequently changing requirements (weeks or months); variable price contracts; and few legal or regulatory constraints on development processes where as heavyweight methods can handle complex  large software team dispersed over multiple domains, functions, and geographical areas efficiently. &lt;br /&gt;
Heavyweight approaches have their need in large, long lived projects that have a special safety, reliability or security requirements. However, the steps in agile models can be modified and customized to suit the demands of a project. This agility in context offers many benefits and is the reason for adoption of agile methodologies widely in these areas too.&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&lt;br /&gt;
[1] http://www.buzzle.com/articles/waterfall-model-vs-agile.html&lt;br /&gt;
&lt;br /&gt;
[2] M. A. Awad, &amp;lt;i&amp;gt;&amp;quot;A Comparison between Agile and Traditional Software Development Methodologies&amp;quot;&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[3] Boehm B, &amp;lt;i&amp;gt;&amp;quot;A Spiral Model of Software Development and Enhancement&amp;quot;&amp;lt;/i&amp;gt;ACM SIGSOFT Software Engineering Notes&amp;quot;, &amp;quot;ACM&amp;quot;, 11(4):14-24, August 1986&lt;br /&gt;
&lt;br /&gt;
[4] Rashina H, Philippe K, James N and Stuart M, &amp;lt;i&amp;gt;”Agility in Context”&amp;lt;/i&amp;gt;, ACM OOOPSLA 2010&lt;/div&gt;</summary>
		<author><name>Bluehat</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Waterfall1.png&amp;diff=41947</id>
		<title>File:Waterfall1.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Waterfall1.png&amp;diff=41947"/>
		<updated>2010-11-18T04:38:08Z</updated>

		<summary type="html">&lt;p&gt;Bluehat: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Bluehat</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6d_NM&amp;diff=41946</id>
		<title>CSC/ECE 517 Fall 2010/ch6 6d NM</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6d_NM&amp;diff=41946"/>
		<updated>2010-11-18T04:37:40Z</updated>

		<summary type="html">&lt;p&gt;Bluehat: /* Waterfall */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Agile vs. other software-development methods'''&lt;br /&gt;
==Software development methodologies==&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Software_development_methodology Software development methodology] is a methodical approach or a framework to the software development process, in order to develop software with high quality and less defects. It helps the development team to plan and structure the process in advance. A wide range of such methodologies	exist in the Software engineering field with their own characteristics. &lt;br /&gt;
&lt;br /&gt;
===Types of Software development methodologies===&lt;br /&gt;
There are wide variety of software development approaches used in the industry. Few of them are,&lt;br /&gt;
*Waterfall Approach : linear framework type.&lt;br /&gt;
*Prototyping Approach : iterative framework type&lt;br /&gt;
*Incremental Approach: combination of linear and iterative framework type&lt;br /&gt;
*Spiral Approach : combination of linear and iterative framework type&lt;br /&gt;
*Rapid Application Development (RAD) Approach: Iterative Framework Type&lt;br /&gt;
*Agile Methodologies&lt;br /&gt;
&lt;br /&gt;
==Agile Methodology==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Software_development_methodology Software development methodology Agile]  means – moving quickly and lightly. Similarly, the goal of [http://en.wikipedia.org/wiki/Agile_software_development Agile methodology] is to offer lighter weight solution to the rapidly paced software development processes. It refers to the group of software development methodologies that are based on iterative software development methods. In the Iterative approach the requirements and solutions evolve through the collaboration between self-organizing cross-functional teams. &lt;br /&gt;
	Agile methods break the entire software development into small increments. Each of these iteration involves a team all the essential parts of the software development cycle including planning, requirements analysis, design, coding, and testing. Thus, it reduces the risk involved with the software development and makes it easy to adapt to the new changes. Completion of multiple iterations eventually results into final product. Agile methodology follows principles such as Customer satisfaction, face-to-face communication, simplicity, Self-organizing teams, etc..&lt;br /&gt;
Well-known agile methods include&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Agile_Unified_Process Agile Unified Process (AUP)]- simple, easy to understand approach to developing business application software using agile techniques and concepts yet still remaining true to the RUP&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Dynamic_Systems_Development_Method Dynamic Systems Development Method (DSDM)]-  iterative and incremental approach that emphasizes continuous user involvement&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Essential_Unified_Process Essential Unified Process (EssUP) ]-  identifies practices, such as use cases, iterative development, architecture driven development, team practices and process practices, which are borrowed from RUP, CMMI and agile development&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Extreme_Programming Extreme Programming (XP)]-  intended to improve software quality and responsiveness to changing customer requirements&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Feature_Driven_Development Feature Driven Development (FDD)]- model-driven short-iteration process&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Open_Unified_Process Open Unified Process (OpenUP)]-  a part of the Eclipse Process Framework (EPF), an open source process framework developed within the Eclipse Foundation. Its goals are to make it easy to adopt the core of the RUP / Unified Process&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Scrum_(development)Scrum]- a process skeleton that contains sets of practices and predefined roles.&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Velocity_tracking Velocity tracking]– tracking a measure of productivity sometimes used in agile software development&lt;br /&gt;
&lt;br /&gt;
[[Image:agile.gif|frame|center|Agile Software development]]&lt;br /&gt;
&lt;br /&gt;
==Agile vs waterfall==&lt;br /&gt;
===Waterfall===&lt;br /&gt;
Waterfall model is the traditional sequential process of software development. Like in a waterfall, the water progressively falls from the higher attitude to the lower, in a similar way, the software production cycle progresses sequentially. The waterfall model phases of software development are as follows: requirement specification, conception, analysis, design, coding, testing &amp;amp; debugging, installation and finally maintenance.&lt;br /&gt;
[[Image:waterfall1.png|frame|center|Water Fall model]]&lt;br /&gt;
&lt;br /&gt;
===Comparison with Agile===&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Customer requirements: &amp;lt;/strong&amp;gt; For the team using Agile method, They are totally unclear and evolves as the work progresses. But for the Waterfall method it is known completely before moving to the next step of the development. They are more stable compared with the requirements of the Agile. The requirement gathering phase consumes considerable amount of time of the entire software development life cycle. No last minute changes are possible in Waterfall whereas they can be easily incorporated using the Agile methodology.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Team Structure: &amp;lt;/strong&amp;gt; The team structure in Agile is cross functional, closely knit and self-organizing. The team work on the entire iteration which includes all the phases of software development. Whereas in Waterfall, each team is dedicated for each phase of the software development cycle.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Customer interaction: &amp;lt;/strong&amp;gt;For Agile, the customer interaction is only in the earlier stage of the cycle. Whereas in Agile, there needs to be continuous interaction of the customer with the development team&lt;br /&gt;
*&amp;lt;strong&amp;gt;Contract (cost):&amp;lt;/strong&amp;gt; As the requirements are unclear and not stable, It is very difficult to decide on the cost of the developing the software in the case of Agile methodology. However, in the case of Waterfall, the cost can be easily manipulated using the requirements defined in the first stage.&lt;br /&gt;
&lt;br /&gt;
==Agile Vs Spiral==&lt;br /&gt;
===Spiral model===&lt;br /&gt;
Spiral model combines good features of top down and bottom up approach of software development. It combines the features of waterfall as well as prototype modeling. The model is both incremental and iterative. The spiral method is planned methodically, with tasks and deliverables identified for each step in the spiral. A prototype is first created based on requirements and scaled down to represent the final product. It is then analyzed for improvements and a better and efficient prototype is built. This process is continued till the best prototype is created.&lt;br /&gt;
&lt;br /&gt;
[[Image:spiral.png|frame|center|Spiral model]]&lt;br /&gt;
&lt;br /&gt;
===Comparison with Agile===&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Requirement: &amp;lt;/strong&amp;gt; in spiral methodology, the system requirement are described in detail and once the requirements are defined and considered final, work is started. However, in agile methodology requirements are not very clear in initial iterations. It becomes clear after few iterations of product development. &lt;br /&gt;
*&amp;lt;strong&amp;gt;Design: &amp;lt;/strong&amp;gt;The basic difference is that most Spiral models of development still insist on big, up-front design. The emphasis is on knowing as much as you can about how the system will be used; discovering all the use cases. Once you know these, then you design the system and break it down into phases that follow an iterative detail-design, implementation, test, refactor-design loop. In Agile, their is some up-front planning -- perhaps gathering large grain understanding (story titles) -- so that reasonable releases can be described, but each release is planned independently and we delay discovery of the details until we are ready to begin implementation of that release. We expect change and don't try to know everything first.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Customer Involvement: &amp;lt;/strong&amp;gt; Customer is involved in the requirement specification stage and in reviewing the prototypes. Constant customer involvement is not necessary. However, agile methodology involves heavy interaction with customers. Success depends on timely and adequate feedback from customer.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Project size: &amp;lt;/strong&amp;gt;The spiral model is intended for large and complicated projects. Agile model works best with small projects&lt;br /&gt;
*&amp;lt;strong&amp;gt;Cycles:&amp;lt;/strong&amp;gt;Spiral model has limited cycles till the best prototype is decided upon while agile model has numerous cycles. Cycles in spiral model are prototype cycles as against getting what customer wants as final product in agile model.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Risk: &amp;lt;/strong&amp;gt;Spiral model has known risks while &lt;br /&gt;
*&amp;lt;strong&amp;gt;Cost: &amp;lt;/strong&amp;gt;spiral models are usually expensive compared to Agile models&lt;br /&gt;
*&amp;lt;strong&amp;gt;Testing: &amp;lt;/strong&amp;gt;Another thing that differs is that most Agile philosophies involve &amp;quot;test-first&amp;quot; methods. This is different from spiral where testing is often an activity unto itself and tests are not developed prior to code. Most often they are planned in advance, but developed in parallel or after coding. Many agile methods insist on developing tests first as the specification for the code.&lt;br /&gt;
&lt;br /&gt;
==Agile vs Iterative==&lt;br /&gt;
===Iterative Software development===&lt;br /&gt;
Iterative development starts with an initial planning followed by many iterations of requirement, analysis, design, testing and implementation steps and ends with deployment. After each iteration, analysis is done to make sure that the required functionality is implemented and additional functionalities that need to be implemented are identified. Such iterations make modification and implementation easy. Iterative development prescribes the construction of initially small but ever larger portions of a software project to help all those involved to uncover important issues early before problems or faulty assumptions can lead to disaster.&lt;br /&gt;
&lt;br /&gt;
[[Image:iterative.gif|frame|center|Iterative Software development model]]&lt;br /&gt;
&lt;br /&gt;
===Comparison with Agile===&lt;br /&gt;
&lt;br /&gt;
Agile software development uses iterative development as a basis but advocates a lighter and more people-centric viewpoint than traditional approaches. Agile processes use feedback, rather than planning, as their primary control mechanism. The feedback is driven by regular tests and releases of the evolving software.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Time period: &amp;lt;/strong&amp;gt;Agile methods differ from iterative methods in that their time period is measured in weeks rather than months. Most agile methods also differ by treating their time period as a strict timebox.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Process and People Orientation: &amp;lt;/strong&amp;gt;A team doing iterative software development could value processes and tools over people and interactions while agile is people oriented interacting more with the customer.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Documentation: &amp;lt;/strong&amp;gt;Iterative model values comprehensive documentation over working software while agile model is characterized by low documentation and more thrust on working software.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Contract: &amp;lt;/strong&amp;gt;Iterative models follow a fixed contract with the customer. However, agile models allows customer to pay for first few iterations and then decide on the type of contract to be entered into.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Customer role: &amp;lt;/strong&amp;gt;In iterative model, customer’s involvement is focused on contract supervision while in agile model has dedicated, knowledgeable, collaborated, collocated onsite customers &lt;br /&gt;
*&amp;lt;strong&amp;gt;Team size: &amp;lt;/strong&amp;gt;Iterative model has large team size while agile model has large team size.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Developers: &amp;lt;/strong&amp;gt;In iterative model developers are plan oriented while in agile model developers flexible and can work with changes in plan.&lt;br /&gt;
&lt;br /&gt;
==Agility in context==&lt;br /&gt;
Agility in context is a new trend to make agile methodologies more relevant to a wide range of projects. This makes it stand out from other software development methodologies. Instead of applying all the steps by-the-book, the process is customized to accommodate changes. Few examples are as follows&lt;br /&gt;
*Insufficient customer involvement can result in confused and incomplete requirement document and bring project to a standstill. To avoid this, methods such as story owner and customer proxy are used.&lt;br /&gt;
*The constraints in fixed bid contract make it difficult to make the project agile. Options like offering a customer to buy few iterations to see how the development is going and then sign the contract or swapping a feature or two makes pricing flexible.&lt;br /&gt;
*Communication with clients that cannot come on site and teams that are located in different geographical areas   is improved using video conferencing, frequent sync calls and sharing wiki pages.&lt;br /&gt;
*Even though some projects are characterized by slow Rate of change making them fall into other software development category, they can be good candidates for agile if other agile development methods can be applied to the project effectively&lt;br /&gt;
&lt;br /&gt;
==Limitations of agile methodology ==&lt;br /&gt;
&lt;br /&gt;
*They are difficult when used with the large teams. (Team having members more than 20).&lt;br /&gt;
*Customer is considered as part of the development team throughout the whole development of the software. Change in the customer side representative may result into change in the requirements.&lt;br /&gt;
*It does not support traditional walkthroughs and code inspections during the life-cycle. Instead it emphasizes on pair programming and informal reviews as their quality control mechanism. This is not enough of the critical software.&lt;br /&gt;
*It relies on tacit knowledge embodied by the team, rather than writing the knowledge down as documentation. Thus, there is a risk that this may lead to architectural mistakes that cannot be easily detected by external reviewers due to the lack of documentation.&lt;br /&gt;
*It does not work best, when the requirements are predictable.&lt;br /&gt;
*Lack of documentation may result into failure in understanding the project in future by an outside expert.&lt;br /&gt;
*User interface are developed using the paper prototype based approach rather than model-driven design. &lt;br /&gt;
&lt;br /&gt;
==Limitations of other software development methodologies==&lt;br /&gt;
*Lack of customer interaction results into last moment surprises.&lt;br /&gt;
*Incorporation of the changes during the software development cycle is very difficult task.&lt;br /&gt;
*High amount of prediction is required which result into higher risk involved.&lt;br /&gt;
*Documentation consumes lot of time in the software development cycle.&lt;br /&gt;
*More pre-planning is required compared to agile methods.&lt;br /&gt;
*Stringent team structure may result into conflicts.&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
Agile methods work well for projects characterized by small; co-located teams; interactive customers involved in decisions on requirements; frequently changing requirements (weeks or months); variable price contracts; and few legal or regulatory constraints on development processes where as heavyweight methods can handle complex  large software team dispersed over multiple domains, functions, and geographical areas efficiently. &lt;br /&gt;
Heavyweight approaches have their need in large, long lived projects that have a special safety, reliability or security requirements. However, the steps in agile models can be modified and customized to suit the demands of a project. This agility in context offers many benefits and is the reason for adoption of agile methodologies widely in these areas too.&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&lt;br /&gt;
[1] http://www.buzzle.com/articles/waterfall-model-vs-agile.html&lt;br /&gt;
&lt;br /&gt;
[2] M. A. Awad, &amp;lt;i&amp;gt;&amp;quot;A Comparison between Agile and Traditional Software Development Methodologies&amp;quot;&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[3] Boehm B, &amp;lt;i&amp;gt;&amp;quot;A Spiral Model of Software Development and Enhancement&amp;quot;&amp;lt;/i&amp;gt;ACM SIGSOFT Software Engineering Notes&amp;quot;, &amp;quot;ACM&amp;quot;, 11(4):14-24, August 1986&lt;br /&gt;
&lt;br /&gt;
[4] Rashina H, Philippe K, James N and Stuart M, &amp;lt;i&amp;gt;”Agility in Context”&amp;lt;/i&amp;gt;, ACM OOOPSLA 2010&lt;/div&gt;</summary>
		<author><name>Bluehat</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6d_NM&amp;diff=41945</id>
		<title>CSC/ECE 517 Fall 2010/ch6 6d NM</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6d_NM&amp;diff=41945"/>
		<updated>2010-11-18T04:37:26Z</updated>

		<summary type="html">&lt;p&gt;Bluehat: /* Comparison with Agile */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Agile vs. other software-development methods'''&lt;br /&gt;
==Software development methodologies==&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Software_development_methodology Software development methodology] is a methodical approach or a framework to the software development process, in order to develop software with high quality and less defects. It helps the development team to plan and structure the process in advance. A wide range of such methodologies	exist in the Software engineering field with their own characteristics. &lt;br /&gt;
&lt;br /&gt;
===Types of Software development methodologies===&lt;br /&gt;
There are wide variety of software development approaches used in the industry. Few of them are,&lt;br /&gt;
*Waterfall Approach : linear framework type.&lt;br /&gt;
*Prototyping Approach : iterative framework type&lt;br /&gt;
*Incremental Approach: combination of linear and iterative framework type&lt;br /&gt;
*Spiral Approach : combination of linear and iterative framework type&lt;br /&gt;
*Rapid Application Development (RAD) Approach: Iterative Framework Type&lt;br /&gt;
*Agile Methodologies&lt;br /&gt;
&lt;br /&gt;
==Agile Methodology==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Software_development_methodology Software development methodology Agile]  means – moving quickly and lightly. Similarly, the goal of [http://en.wikipedia.org/wiki/Agile_software_development Agile methodology] is to offer lighter weight solution to the rapidly paced software development processes. It refers to the group of software development methodologies that are based on iterative software development methods. In the Iterative approach the requirements and solutions evolve through the collaboration between self-organizing cross-functional teams. &lt;br /&gt;
	Agile methods break the entire software development into small increments. Each of these iteration involves a team all the essential parts of the software development cycle including planning, requirements analysis, design, coding, and testing. Thus, it reduces the risk involved with the software development and makes it easy to adapt to the new changes. Completion of multiple iterations eventually results into final product. Agile methodology follows principles such as Customer satisfaction, face-to-face communication, simplicity, Self-organizing teams, etc..&lt;br /&gt;
Well-known agile methods include&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Agile_Unified_Process Agile Unified Process (AUP)]- simple, easy to understand approach to developing business application software using agile techniques and concepts yet still remaining true to the RUP&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Dynamic_Systems_Development_Method Dynamic Systems Development Method (DSDM)]-  iterative and incremental approach that emphasizes continuous user involvement&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Essential_Unified_Process Essential Unified Process (EssUP) ]-  identifies practices, such as use cases, iterative development, architecture driven development, team practices and process practices, which are borrowed from RUP, CMMI and agile development&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Extreme_Programming Extreme Programming (XP)]-  intended to improve software quality and responsiveness to changing customer requirements&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Feature_Driven_Development Feature Driven Development (FDD)]- model-driven short-iteration process&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Open_Unified_Process Open Unified Process (OpenUP)]-  a part of the Eclipse Process Framework (EPF), an open source process framework developed within the Eclipse Foundation. Its goals are to make it easy to adopt the core of the RUP / Unified Process&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Scrum_(development)Scrum]- a process skeleton that contains sets of practices and predefined roles.&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Velocity_tracking Velocity tracking]– tracking a measure of productivity sometimes used in agile software development&lt;br /&gt;
&lt;br /&gt;
[[Image:agile.gif|frame|center|Agile Software development]]&lt;br /&gt;
&lt;br /&gt;
==Agile vs waterfall==&lt;br /&gt;
===Waterfall===&lt;br /&gt;
Waterfall model is the traditional sequential process of software development. Like in a waterfall, the water progressively falls from the higher attitude to the lower, in a similar way, the software production cycle progresses sequentially. The waterfall model phases of software development are as follows: requirement specification, conception, analysis, design, coding, testing &amp;amp; debugging, installation and finally maintenance.&lt;br /&gt;
&lt;br /&gt;
===Comparison with Agile===&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Customer requirements: &amp;lt;/strong&amp;gt; For the team using Agile method, They are totally unclear and evolves as the work progresses. But for the Waterfall method it is known completely before moving to the next step of the development. They are more stable compared with the requirements of the Agile. The requirement gathering phase consumes considerable amount of time of the entire software development life cycle. No last minute changes are possible in Waterfall whereas they can be easily incorporated using the Agile methodology.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Team Structure: &amp;lt;/strong&amp;gt; The team structure in Agile is cross functional, closely knit and self-organizing. The team work on the entire iteration which includes all the phases of software development. Whereas in Waterfall, each team is dedicated for each phase of the software development cycle.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Customer interaction: &amp;lt;/strong&amp;gt;For Agile, the customer interaction is only in the earlier stage of the cycle. Whereas in Agile, there needs to be continuous interaction of the customer with the development team&lt;br /&gt;
*&amp;lt;strong&amp;gt;Contract (cost):&amp;lt;/strong&amp;gt; As the requirements are unclear and not stable, It is very difficult to decide on the cost of the developing the software in the case of Agile methodology. However, in the case of Waterfall, the cost can be easily manipulated using the requirements defined in the first stage.&lt;br /&gt;
&lt;br /&gt;
==Agile Vs Spiral==&lt;br /&gt;
===Spiral model===&lt;br /&gt;
Spiral model combines good features of top down and bottom up approach of software development. It combines the features of waterfall as well as prototype modeling. The model is both incremental and iterative. The spiral method is planned methodically, with tasks and deliverables identified for each step in the spiral. A prototype is first created based on requirements and scaled down to represent the final product. It is then analyzed for improvements and a better and efficient prototype is built. This process is continued till the best prototype is created.&lt;br /&gt;
&lt;br /&gt;
[[Image:spiral.png|frame|center|Spiral model]]&lt;br /&gt;
&lt;br /&gt;
===Comparison with Agile===&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Requirement: &amp;lt;/strong&amp;gt; in spiral methodology, the system requirement are described in detail and once the requirements are defined and considered final, work is started. However, in agile methodology requirements are not very clear in initial iterations. It becomes clear after few iterations of product development. &lt;br /&gt;
*&amp;lt;strong&amp;gt;Design: &amp;lt;/strong&amp;gt;The basic difference is that most Spiral models of development still insist on big, up-front design. The emphasis is on knowing as much as you can about how the system will be used; discovering all the use cases. Once you know these, then you design the system and break it down into phases that follow an iterative detail-design, implementation, test, refactor-design loop. In Agile, their is some up-front planning -- perhaps gathering large grain understanding (story titles) -- so that reasonable releases can be described, but each release is planned independently and we delay discovery of the details until we are ready to begin implementation of that release. We expect change and don't try to know everything first.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Customer Involvement: &amp;lt;/strong&amp;gt; Customer is involved in the requirement specification stage and in reviewing the prototypes. Constant customer involvement is not necessary. However, agile methodology involves heavy interaction with customers. Success depends on timely and adequate feedback from customer.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Project size: &amp;lt;/strong&amp;gt;The spiral model is intended for large and complicated projects. Agile model works best with small projects&lt;br /&gt;
*&amp;lt;strong&amp;gt;Cycles:&amp;lt;/strong&amp;gt;Spiral model has limited cycles till the best prototype is decided upon while agile model has numerous cycles. Cycles in spiral model are prototype cycles as against getting what customer wants as final product in agile model.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Risk: &amp;lt;/strong&amp;gt;Spiral model has known risks while &lt;br /&gt;
*&amp;lt;strong&amp;gt;Cost: &amp;lt;/strong&amp;gt;spiral models are usually expensive compared to Agile models&lt;br /&gt;
*&amp;lt;strong&amp;gt;Testing: &amp;lt;/strong&amp;gt;Another thing that differs is that most Agile philosophies involve &amp;quot;test-first&amp;quot; methods. This is different from spiral where testing is often an activity unto itself and tests are not developed prior to code. Most often they are planned in advance, but developed in parallel or after coding. Many agile methods insist on developing tests first as the specification for the code.&lt;br /&gt;
&lt;br /&gt;
==Agile vs Iterative==&lt;br /&gt;
===Iterative Software development===&lt;br /&gt;
Iterative development starts with an initial planning followed by many iterations of requirement, analysis, design, testing and implementation steps and ends with deployment. After each iteration, analysis is done to make sure that the required functionality is implemented and additional functionalities that need to be implemented are identified. Such iterations make modification and implementation easy. Iterative development prescribes the construction of initially small but ever larger portions of a software project to help all those involved to uncover important issues early before problems or faulty assumptions can lead to disaster.&lt;br /&gt;
&lt;br /&gt;
[[Image:iterative.gif|frame|center|Iterative Software development model]]&lt;br /&gt;
&lt;br /&gt;
===Comparison with Agile===&lt;br /&gt;
&lt;br /&gt;
Agile software development uses iterative development as a basis but advocates a lighter and more people-centric viewpoint than traditional approaches. Agile processes use feedback, rather than planning, as their primary control mechanism. The feedback is driven by regular tests and releases of the evolving software.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Time period: &amp;lt;/strong&amp;gt;Agile methods differ from iterative methods in that their time period is measured in weeks rather than months. Most agile methods also differ by treating their time period as a strict timebox.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Process and People Orientation: &amp;lt;/strong&amp;gt;A team doing iterative software development could value processes and tools over people and interactions while agile is people oriented interacting more with the customer.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Documentation: &amp;lt;/strong&amp;gt;Iterative model values comprehensive documentation over working software while agile model is characterized by low documentation and more thrust on working software.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Contract: &amp;lt;/strong&amp;gt;Iterative models follow a fixed contract with the customer. However, agile models allows customer to pay for first few iterations and then decide on the type of contract to be entered into.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Customer role: &amp;lt;/strong&amp;gt;In iterative model, customer’s involvement is focused on contract supervision while in agile model has dedicated, knowledgeable, collaborated, collocated onsite customers &lt;br /&gt;
*&amp;lt;strong&amp;gt;Team size: &amp;lt;/strong&amp;gt;Iterative model has large team size while agile model has large team size.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Developers: &amp;lt;/strong&amp;gt;In iterative model developers are plan oriented while in agile model developers flexible and can work with changes in plan.&lt;br /&gt;
&lt;br /&gt;
==Agility in context==&lt;br /&gt;
Agility in context is a new trend to make agile methodologies more relevant to a wide range of projects. This makes it stand out from other software development methodologies. Instead of applying all the steps by-the-book, the process is customized to accommodate changes. Few examples are as follows&lt;br /&gt;
*Insufficient customer involvement can result in confused and incomplete requirement document and bring project to a standstill. To avoid this, methods such as story owner and customer proxy are used.&lt;br /&gt;
*The constraints in fixed bid contract make it difficult to make the project agile. Options like offering a customer to buy few iterations to see how the development is going and then sign the contract or swapping a feature or two makes pricing flexible.&lt;br /&gt;
*Communication with clients that cannot come on site and teams that are located in different geographical areas   is improved using video conferencing, frequent sync calls and sharing wiki pages.&lt;br /&gt;
*Even though some projects are characterized by slow Rate of change making them fall into other software development category, they can be good candidates for agile if other agile development methods can be applied to the project effectively&lt;br /&gt;
&lt;br /&gt;
==Limitations of agile methodology ==&lt;br /&gt;
&lt;br /&gt;
*They are difficult when used with the large teams. (Team having members more than 20).&lt;br /&gt;
*Customer is considered as part of the development team throughout the whole development of the software. Change in the customer side representative may result into change in the requirements.&lt;br /&gt;
*It does not support traditional walkthroughs and code inspections during the life-cycle. Instead it emphasizes on pair programming and informal reviews as their quality control mechanism. This is not enough of the critical software.&lt;br /&gt;
*It relies on tacit knowledge embodied by the team, rather than writing the knowledge down as documentation. Thus, there is a risk that this may lead to architectural mistakes that cannot be easily detected by external reviewers due to the lack of documentation.&lt;br /&gt;
*It does not work best, when the requirements are predictable.&lt;br /&gt;
*Lack of documentation may result into failure in understanding the project in future by an outside expert.&lt;br /&gt;
*User interface are developed using the paper prototype based approach rather than model-driven design. &lt;br /&gt;
&lt;br /&gt;
==Limitations of other software development methodologies==&lt;br /&gt;
*Lack of customer interaction results into last moment surprises.&lt;br /&gt;
*Incorporation of the changes during the software development cycle is very difficult task.&lt;br /&gt;
*High amount of prediction is required which result into higher risk involved.&lt;br /&gt;
*Documentation consumes lot of time in the software development cycle.&lt;br /&gt;
*More pre-planning is required compared to agile methods.&lt;br /&gt;
*Stringent team structure may result into conflicts.&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
Agile methods work well for projects characterized by small; co-located teams; interactive customers involved in decisions on requirements; frequently changing requirements (weeks or months); variable price contracts; and few legal or regulatory constraints on development processes where as heavyweight methods can handle complex  large software team dispersed over multiple domains, functions, and geographical areas efficiently. &lt;br /&gt;
Heavyweight approaches have their need in large, long lived projects that have a special safety, reliability or security requirements. However, the steps in agile models can be modified and customized to suit the demands of a project. This agility in context offers many benefits and is the reason for adoption of agile methodologies widely in these areas too.&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&lt;br /&gt;
[1] http://www.buzzle.com/articles/waterfall-model-vs-agile.html&lt;br /&gt;
&lt;br /&gt;
[2] M. A. Awad, &amp;lt;i&amp;gt;&amp;quot;A Comparison between Agile and Traditional Software Development Methodologies&amp;quot;&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[3] Boehm B, &amp;lt;i&amp;gt;&amp;quot;A Spiral Model of Software Development and Enhancement&amp;quot;&amp;lt;/i&amp;gt;ACM SIGSOFT Software Engineering Notes&amp;quot;, &amp;quot;ACM&amp;quot;, 11(4):14-24, August 1986&lt;br /&gt;
&lt;br /&gt;
[4] Rashina H, Philippe K, James N and Stuart M, &amp;lt;i&amp;gt;”Agility in Context”&amp;lt;/i&amp;gt;, ACM OOOPSLA 2010&lt;/div&gt;</summary>
		<author><name>Bluehat</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6d_NM&amp;diff=41944</id>
		<title>CSC/ECE 517 Fall 2010/ch6 6d NM</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6d_NM&amp;diff=41944"/>
		<updated>2010-11-18T04:36:46Z</updated>

		<summary type="html">&lt;p&gt;Bluehat: /* Comparison with Agile */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Agile vs. other software-development methods'''&lt;br /&gt;
==Software development methodologies==&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Software_development_methodology Software development methodology] is a methodical approach or a framework to the software development process, in order to develop software with high quality and less defects. It helps the development team to plan and structure the process in advance. A wide range of such methodologies	exist in the Software engineering field with their own characteristics. &lt;br /&gt;
&lt;br /&gt;
===Types of Software development methodologies===&lt;br /&gt;
There are wide variety of software development approaches used in the industry. Few of them are,&lt;br /&gt;
*Waterfall Approach : linear framework type.&lt;br /&gt;
*Prototyping Approach : iterative framework type&lt;br /&gt;
*Incremental Approach: combination of linear and iterative framework type&lt;br /&gt;
*Spiral Approach : combination of linear and iterative framework type&lt;br /&gt;
*Rapid Application Development (RAD) Approach: Iterative Framework Type&lt;br /&gt;
*Agile Methodologies&lt;br /&gt;
&lt;br /&gt;
==Agile Methodology==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Software_development_methodology Software development methodology Agile]  means – moving quickly and lightly. Similarly, the goal of [http://en.wikipedia.org/wiki/Agile_software_development Agile methodology] is to offer lighter weight solution to the rapidly paced software development processes. It refers to the group of software development methodologies that are based on iterative software development methods. In the Iterative approach the requirements and solutions evolve through the collaboration between self-organizing cross-functional teams. &lt;br /&gt;
	Agile methods break the entire software development into small increments. Each of these iteration involves a team all the essential parts of the software development cycle including planning, requirements analysis, design, coding, and testing. Thus, it reduces the risk involved with the software development and makes it easy to adapt to the new changes. Completion of multiple iterations eventually results into final product. Agile methodology follows principles such as Customer satisfaction, face-to-face communication, simplicity, Self-organizing teams, etc..&lt;br /&gt;
Well-known agile methods include&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Agile_Unified_Process Agile Unified Process (AUP)]- simple, easy to understand approach to developing business application software using agile techniques and concepts yet still remaining true to the RUP&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Dynamic_Systems_Development_Method Dynamic Systems Development Method (DSDM)]-  iterative and incremental approach that emphasizes continuous user involvement&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Essential_Unified_Process Essential Unified Process (EssUP) ]-  identifies practices, such as use cases, iterative development, architecture driven development, team practices and process practices, which are borrowed from RUP, CMMI and agile development&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Extreme_Programming Extreme Programming (XP)]-  intended to improve software quality and responsiveness to changing customer requirements&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Feature_Driven_Development Feature Driven Development (FDD)]- model-driven short-iteration process&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Open_Unified_Process Open Unified Process (OpenUP)]-  a part of the Eclipse Process Framework (EPF), an open source process framework developed within the Eclipse Foundation. Its goals are to make it easy to adopt the core of the RUP / Unified Process&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Scrum_(development)Scrum]- a process skeleton that contains sets of practices and predefined roles.&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Velocity_tracking Velocity tracking]– tracking a measure of productivity sometimes used in agile software development&lt;br /&gt;
&lt;br /&gt;
[[Image:agile.gif|frame|center|Agile Software development]]&lt;br /&gt;
&lt;br /&gt;
==Agile vs waterfall==&lt;br /&gt;
===Waterfall===&lt;br /&gt;
Waterfall model is the traditional sequential process of software development. Like in a waterfall, the water progressively falls from the higher attitude to the lower, in a similar way, the software production cycle progresses sequentially. The waterfall model phases of software development are as follows: requirement specification, conception, analysis, design, coding, testing &amp;amp; debugging, installation and finally maintenance.&lt;br /&gt;
&lt;br /&gt;
===Comparison with Agile===&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Customer requirements: &amp;lt;/strong&amp;gt; For the team using Agile method, They are totally unclear and evolves as the work progresses. But for the Waterfall method it is known completely before moving to the next step of the development. They are more stable compared with the requirements of the Agile. The requirement gathering phase consumes considerable amount of time of the entire software development life cycle. No last minute changes are possible in Waterfall whereas they can be easily incorporated using the Agile methodology.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Team Structure: &amp;lt;/strong&amp;gt; The team structure in Agile is cross functional, closely knit and self-organizing. The team work on the entire iteration which includes all the phases of software development. Whereas in Waterfall, each team is dedicated for each phase of the software development cycle.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Customer interaction: &amp;lt;/strong&amp;gt;For Agile, the customer interaction is only in the earlier stage of the cycle. Whereas in Agile, there needs to be continuous interaction of the customer with the development team&lt;br /&gt;
*&amp;lt;strong&amp;gt;Contract (cost):&amp;lt;/strong&amp;gt; As the requirements are unclear and not stable, It is very difficult to decide on the cost of the developing the software in the case of Agile methodology. However, in the case of Waterfall, the cost can be easily manipulated using the requirements defined in the first stage.&lt;br /&gt;
[[Image:waterfall.png|frame|center|Water Fall model]]&lt;br /&gt;
&lt;br /&gt;
==Agile Vs Spiral==&lt;br /&gt;
===Spiral model===&lt;br /&gt;
Spiral model combines good features of top down and bottom up approach of software development. It combines the features of waterfall as well as prototype modeling. The model is both incremental and iterative. The spiral method is planned methodically, with tasks and deliverables identified for each step in the spiral. A prototype is first created based on requirements and scaled down to represent the final product. It is then analyzed for improvements and a better and efficient prototype is built. This process is continued till the best prototype is created.&lt;br /&gt;
&lt;br /&gt;
[[Image:spiral.png|frame|center|Spiral model]]&lt;br /&gt;
&lt;br /&gt;
===Comparison with Agile===&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Requirement: &amp;lt;/strong&amp;gt; in spiral methodology, the system requirement are described in detail and once the requirements are defined and considered final, work is started. However, in agile methodology requirements are not very clear in initial iterations. It becomes clear after few iterations of product development. &lt;br /&gt;
*&amp;lt;strong&amp;gt;Design: &amp;lt;/strong&amp;gt;The basic difference is that most Spiral models of development still insist on big, up-front design. The emphasis is on knowing as much as you can about how the system will be used; discovering all the use cases. Once you know these, then you design the system and break it down into phases that follow an iterative detail-design, implementation, test, refactor-design loop. In Agile, their is some up-front planning -- perhaps gathering large grain understanding (story titles) -- so that reasonable releases can be described, but each release is planned independently and we delay discovery of the details until we are ready to begin implementation of that release. We expect change and don't try to know everything first.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Customer Involvement: &amp;lt;/strong&amp;gt; Customer is involved in the requirement specification stage and in reviewing the prototypes. Constant customer involvement is not necessary. However, agile methodology involves heavy interaction with customers. Success depends on timely and adequate feedback from customer.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Project size: &amp;lt;/strong&amp;gt;The spiral model is intended for large and complicated projects. Agile model works best with small projects&lt;br /&gt;
*&amp;lt;strong&amp;gt;Cycles:&amp;lt;/strong&amp;gt;Spiral model has limited cycles till the best prototype is decided upon while agile model has numerous cycles. Cycles in spiral model are prototype cycles as against getting what customer wants as final product in agile model.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Risk: &amp;lt;/strong&amp;gt;Spiral model has known risks while &lt;br /&gt;
*&amp;lt;strong&amp;gt;Cost: &amp;lt;/strong&amp;gt;spiral models are usually expensive compared to Agile models&lt;br /&gt;
*&amp;lt;strong&amp;gt;Testing: &amp;lt;/strong&amp;gt;Another thing that differs is that most Agile philosophies involve &amp;quot;test-first&amp;quot; methods. This is different from spiral where testing is often an activity unto itself and tests are not developed prior to code. Most often they are planned in advance, but developed in parallel or after coding. Many agile methods insist on developing tests first as the specification for the code.&lt;br /&gt;
&lt;br /&gt;
==Agile vs Iterative==&lt;br /&gt;
===Iterative Software development===&lt;br /&gt;
Iterative development starts with an initial planning followed by many iterations of requirement, analysis, design, testing and implementation steps and ends with deployment. After each iteration, analysis is done to make sure that the required functionality is implemented and additional functionalities that need to be implemented are identified. Such iterations make modification and implementation easy. Iterative development prescribes the construction of initially small but ever larger portions of a software project to help all those involved to uncover important issues early before problems or faulty assumptions can lead to disaster.&lt;br /&gt;
&lt;br /&gt;
[[Image:iterative.gif|frame|center|Iterative Software development model]]&lt;br /&gt;
&lt;br /&gt;
===Comparison with Agile===&lt;br /&gt;
&lt;br /&gt;
Agile software development uses iterative development as a basis but advocates a lighter and more people-centric viewpoint than traditional approaches. Agile processes use feedback, rather than planning, as their primary control mechanism. The feedback is driven by regular tests and releases of the evolving software.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Time period: &amp;lt;/strong&amp;gt;Agile methods differ from iterative methods in that their time period is measured in weeks rather than months. Most agile methods also differ by treating their time period as a strict timebox.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Process and People Orientation: &amp;lt;/strong&amp;gt;A team doing iterative software development could value processes and tools over people and interactions while agile is people oriented interacting more with the customer.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Documentation: &amp;lt;/strong&amp;gt;Iterative model values comprehensive documentation over working software while agile model is characterized by low documentation and more thrust on working software.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Contract: &amp;lt;/strong&amp;gt;Iterative models follow a fixed contract with the customer. However, agile models allows customer to pay for first few iterations and then decide on the type of contract to be entered into.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Customer role: &amp;lt;/strong&amp;gt;In iterative model, customer’s involvement is focused on contract supervision while in agile model has dedicated, knowledgeable, collaborated, collocated onsite customers &lt;br /&gt;
*&amp;lt;strong&amp;gt;Team size: &amp;lt;/strong&amp;gt;Iterative model has large team size while agile model has large team size.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Developers: &amp;lt;/strong&amp;gt;In iterative model developers are plan oriented while in agile model developers flexible and can work with changes in plan.&lt;br /&gt;
&lt;br /&gt;
==Agility in context==&lt;br /&gt;
Agility in context is a new trend to make agile methodologies more relevant to a wide range of projects. This makes it stand out from other software development methodologies. Instead of applying all the steps by-the-book, the process is customized to accommodate changes. Few examples are as follows&lt;br /&gt;
*Insufficient customer involvement can result in confused and incomplete requirement document and bring project to a standstill. To avoid this, methods such as story owner and customer proxy are used.&lt;br /&gt;
*The constraints in fixed bid contract make it difficult to make the project agile. Options like offering a customer to buy few iterations to see how the development is going and then sign the contract or swapping a feature or two makes pricing flexible.&lt;br /&gt;
*Communication with clients that cannot come on site and teams that are located in different geographical areas   is improved using video conferencing, frequent sync calls and sharing wiki pages.&lt;br /&gt;
*Even though some projects are characterized by slow Rate of change making them fall into other software development category, they can be good candidates for agile if other agile development methods can be applied to the project effectively&lt;br /&gt;
&lt;br /&gt;
==Limitations of agile methodology ==&lt;br /&gt;
&lt;br /&gt;
*They are difficult when used with the large teams. (Team having members more than 20).&lt;br /&gt;
*Customer is considered as part of the development team throughout the whole development of the software. Change in the customer side representative may result into change in the requirements.&lt;br /&gt;
*It does not support traditional walkthroughs and code inspections during the life-cycle. Instead it emphasizes on pair programming and informal reviews as their quality control mechanism. This is not enough of the critical software.&lt;br /&gt;
*It relies on tacit knowledge embodied by the team, rather than writing the knowledge down as documentation. Thus, there is a risk that this may lead to architectural mistakes that cannot be easily detected by external reviewers due to the lack of documentation.&lt;br /&gt;
*It does not work best, when the requirements are predictable.&lt;br /&gt;
*Lack of documentation may result into failure in understanding the project in future by an outside expert.&lt;br /&gt;
*User interface are developed using the paper prototype based approach rather than model-driven design. &lt;br /&gt;
&lt;br /&gt;
==Limitations of other software development methodologies==&lt;br /&gt;
*Lack of customer interaction results into last moment surprises.&lt;br /&gt;
*Incorporation of the changes during the software development cycle is very difficult task.&lt;br /&gt;
*High amount of prediction is required which result into higher risk involved.&lt;br /&gt;
*Documentation consumes lot of time in the software development cycle.&lt;br /&gt;
*More pre-planning is required compared to agile methods.&lt;br /&gt;
*Stringent team structure may result into conflicts.&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
Agile methods work well for projects characterized by small; co-located teams; interactive customers involved in decisions on requirements; frequently changing requirements (weeks or months); variable price contracts; and few legal or regulatory constraints on development processes where as heavyweight methods can handle complex  large software team dispersed over multiple domains, functions, and geographical areas efficiently. &lt;br /&gt;
Heavyweight approaches have their need in large, long lived projects that have a special safety, reliability or security requirements. However, the steps in agile models can be modified and customized to suit the demands of a project. This agility in context offers many benefits and is the reason for adoption of agile methodologies widely in these areas too.&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&lt;br /&gt;
[1] http://www.buzzle.com/articles/waterfall-model-vs-agile.html&lt;br /&gt;
&lt;br /&gt;
[2] M. A. Awad, &amp;lt;i&amp;gt;&amp;quot;A Comparison between Agile and Traditional Software Development Methodologies&amp;quot;&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[3] Boehm B, &amp;lt;i&amp;gt;&amp;quot;A Spiral Model of Software Development and Enhancement&amp;quot;&amp;lt;/i&amp;gt;ACM SIGSOFT Software Engineering Notes&amp;quot;, &amp;quot;ACM&amp;quot;, 11(4):14-24, August 1986&lt;br /&gt;
&lt;br /&gt;
[4] Rashina H, Philippe K, James N and Stuart M, &amp;lt;i&amp;gt;”Agility in Context”&amp;lt;/i&amp;gt;, ACM OOOPSLA 2010&lt;/div&gt;</summary>
		<author><name>Bluehat</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Iterative.gif&amp;diff=41940</id>
		<title>File:Iterative.gif</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Iterative.gif&amp;diff=41940"/>
		<updated>2010-11-18T04:31:06Z</updated>

		<summary type="html">&lt;p&gt;Bluehat: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Bluehat</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6d_NM&amp;diff=41939</id>
		<title>CSC/ECE 517 Fall 2010/ch6 6d NM</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6d_NM&amp;diff=41939"/>
		<updated>2010-11-18T04:30:54Z</updated>

		<summary type="html">&lt;p&gt;Bluehat: /* Iterative Software development */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Agile vs. other software-development methods'''&lt;br /&gt;
==Software development methodologies==&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Software_development_methodology Software development methodology] is a methodical approach or a framework to the software development process, in order to develop software with high quality and less defects. It helps the development team to plan and structure the process in advance. A wide range of such methodologies	exist in the Software engineering field with their own characteristics. &lt;br /&gt;
&lt;br /&gt;
===Types of Software development methodologies===&lt;br /&gt;
There are wide variety of software development approaches used in the industry. Few of them are,&lt;br /&gt;
*Waterfall Approach : linear framework type.&lt;br /&gt;
*Prototyping Approach : iterative framework type&lt;br /&gt;
*Incremental Approach: combination of linear and iterative framework type&lt;br /&gt;
*Spiral Approach : combination of linear and iterative framework type&lt;br /&gt;
*Rapid Application Development (RAD) Approach: Iterative Framework Type&lt;br /&gt;
*Agile Methodologies&lt;br /&gt;
&lt;br /&gt;
==Agile Methodology==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Software_development_methodology Software development methodology Agile]  means – moving quickly and lightly. Similarly, the goal of [http://en.wikipedia.org/wiki/Agile_software_development Agile methodology] is to offer lighter weight solution to the rapidly paced software development processes. It refers to the group of software development methodologies that are based on iterative software development methods. In the Iterative approach the requirements and solutions evolve through the collaboration between self-organizing cross-functional teams. &lt;br /&gt;
	Agile methods break the entire software development into small increments. Each of these iteration involves a team all the essential parts of the software development cycle including planning, requirements analysis, design, coding, and testing. Thus, it reduces the risk involved with the software development and makes it easy to adapt to the new changes. Completion of multiple iterations eventually results into final product. Agile methodology follows principles such as Customer satisfaction, face-to-face communication, simplicity, Self-organizing teams, etc..&lt;br /&gt;
Well-known agile methods include&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Agile_Unified_Process Agile Unified Process (AUP)]- simple, easy to understand approach to developing business application software using agile techniques and concepts yet still remaining true to the RUP&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Dynamic_Systems_Development_Method Dynamic Systems Development Method (DSDM)]-  iterative and incremental approach that emphasizes continuous user involvement&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Essential_Unified_Process Essential Unified Process (EssUP) ]-  identifies practices, such as use cases, iterative development, architecture driven development, team practices and process practices, which are borrowed from RUP, CMMI and agile development&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Extreme_Programming Extreme Programming (XP)]-  intended to improve software quality and responsiveness to changing customer requirements&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Feature_Driven_Development Feature Driven Development (FDD)]- model-driven short-iteration process&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Open_Unified_Process Open Unified Process (OpenUP)]-  a part of the Eclipse Process Framework (EPF), an open source process framework developed within the Eclipse Foundation. Its goals are to make it easy to adopt the core of the RUP / Unified Process&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Scrum_(development)Scrum]- a process skeleton that contains sets of practices and predefined roles.&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Velocity_tracking Velocity tracking]– tracking a measure of productivity sometimes used in agile software development&lt;br /&gt;
&lt;br /&gt;
[[Image:agile.gif|frame|center|Agile Software development]]&lt;br /&gt;
&lt;br /&gt;
==Agile vs waterfall==&lt;br /&gt;
===Waterfall===&lt;br /&gt;
Waterfall model is the traditional sequential process of software development. Like in a waterfall, the water progressively falls from the higher attitude to the lower, in a similar way, the software production cycle progresses sequentially. The waterfall model phases of software development are as follows: requirement specification, conception, analysis, design, coding, testing &amp;amp; debugging, installation and finally maintenance.&lt;br /&gt;
&lt;br /&gt;
[[Image:|frame|center|Waterfall model]]&lt;br /&gt;
&lt;br /&gt;
===Comparison with Agile===&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Customer requirements: &amp;lt;/strong&amp;gt; For the team using Agile method, They are totally unclear and evolves as the work progresses. But for the Waterfall method it is known completely before moving to the next step of the development. They are more stable compared with the requirements of the Agile. The requirement gathering phase consumes considerable amount of time of the entire software development life cycle. No last minute changes are possible in Waterfall whereas they can be easily incorporated using the Agile methodology.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Team Structure: &amp;lt;/strong&amp;gt; The team structure in Agile is cross functional, closely knit and self-organizing. The team work on the entire iteration which includes all the phases of software development. Whereas in Waterfall, each team is dedicated for each phase of the software development cycle.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Customer interaction: &amp;lt;/strong&amp;gt;For Agile, the customer interaction is only in the earlier stage of the cycle. Whereas in Agile, there needs to be continuous interaction of the customer with the development team&lt;br /&gt;
*&amp;lt;strong&amp;gt;Contract (cost):&amp;lt;/strong&amp;gt; As the requirements are unclear and not stable, It is very difficult to decide on the cost of the developing the software in the case of Agile methodology. However, in the case of Waterfall, the cost can be easily manipulated using the requirements defined in the first stage.&lt;br /&gt;
&lt;br /&gt;
==Agile Vs Spiral==&lt;br /&gt;
===Spiral model===&lt;br /&gt;
Spiral model combines good features of top down and bottom up approach of software development. It combines the features of waterfall as well as prototype modeling. The model is both incremental and iterative. The spiral method is planned methodically, with tasks and deliverables identified for each step in the spiral. A prototype is first created based on requirements and scaled down to represent the final product. It is then analyzed for improvements and a better and efficient prototype is built. This process is continued till the best prototype is created.&lt;br /&gt;
&lt;br /&gt;
[[Image:spiral.png|frame|center|Spiral model]]&lt;br /&gt;
&lt;br /&gt;
===Comparison with Agile===&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Requirement: &amp;lt;/strong&amp;gt; in spiral methodology, the system requirement are described in detail and once the requirements are defined and considered final, work is started. However, in agile methodology requirements are not very clear in initial iterations. It becomes clear after few iterations of product development. &lt;br /&gt;
*&amp;lt;strong&amp;gt;Design: &amp;lt;/strong&amp;gt;The basic difference is that most Spiral models of development still insist on big, up-front design. The emphasis is on knowing as much as you can about how the system will be used; discovering all the use cases. Once you know these, then you design the system and break it down into phases that follow an iterative detail-design, implementation, test, refactor-design loop. In Agile, their is some up-front planning -- perhaps gathering large grain understanding (story titles) -- so that reasonable releases can be described, but each release is planned independently and we delay discovery of the details until we are ready to begin implementation of that release. We expect change and don't try to know everything first.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Customer Involvement: &amp;lt;/strong&amp;gt; Customer is involved in the requirement specification stage and in reviewing the prototypes. Constant customer involvement is not necessary. However, agile methodology involves heavy interaction with customers. Success depends on timely and adequate feedback from customer.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Project size: &amp;lt;/strong&amp;gt;The spiral model is intended for large and complicated projects. Agile model works best with small projects&lt;br /&gt;
*&amp;lt;strong&amp;gt;Cycles:&amp;lt;/strong&amp;gt;Spiral model has limited cycles till the best prototype is decided upon while agile model has numerous cycles. Cycles in spiral model are prototype cycles as against getting what customer wants as final product in agile model.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Risk: &amp;lt;/strong&amp;gt;Spiral model has known risks while &lt;br /&gt;
*&amp;lt;strong&amp;gt;Cost: &amp;lt;/strong&amp;gt;spiral models are usually expensive compared to Agile models&lt;br /&gt;
*&amp;lt;strong&amp;gt;Testing: &amp;lt;/strong&amp;gt;Another thing that differs is that most Agile philosophies involve &amp;quot;test-first&amp;quot; methods. This is different from spiral where testing is often an activity unto itself and tests are not developed prior to code. Most often they are planned in advance, but developed in parallel or after coding. Many agile methods insist on developing tests first as the specification for the code.&lt;br /&gt;
&lt;br /&gt;
==Agile vs Iterative==&lt;br /&gt;
===Iterative Software development===&lt;br /&gt;
Iterative development starts with an initial planning followed by many iterations of requirement, analysis, design, testing and implementation steps and ends with deployment. After each iteration, analysis is done to make sure that the required functionality is implemented and additional functionalities that need to be implemented are identified. Such iterations make modification and implementation easy. Iterative development prescribes the construction of initially small but ever larger portions of a software project to help all those involved to uncover important issues early before problems or faulty assumptions can lead to disaster.&lt;br /&gt;
&lt;br /&gt;
[[Image:iterative.gif|frame|center|Iterative Software development model]]&lt;br /&gt;
&lt;br /&gt;
===Comparison with Agile===&lt;br /&gt;
&lt;br /&gt;
Agile software development uses iterative development as a basis but advocates a lighter and more people-centric viewpoint than traditional approaches. Agile processes use feedback, rather than planning, as their primary control mechanism. The feedback is driven by regular tests and releases of the evolving software.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Time period: &amp;lt;/strong&amp;gt;Agile methods differ from iterative methods in that their time period is measured in weeks rather than months. Most agile methods also differ by treating their time period as a strict timebox.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Process and People Orientation: &amp;lt;/strong&amp;gt;A team doing iterative software development could value processes and tools over people and interactions while agile is people oriented interacting more with the customer.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Documentation: &amp;lt;/strong&amp;gt;Iterative model values comprehensive documentation over working software while agile model is characterized by low documentation and more thrust on working software.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Contract: &amp;lt;/strong&amp;gt;Iterative models follow a fixed contract with the customer. However, agile models allows customer to pay for first few iterations and then decide on the type of contract to be entered into.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Customer role: &amp;lt;/strong&amp;gt;In iterative model, customer’s involvement is focused on contract supervision while in agile model has dedicated, knowledgeable, collaborated, collocated onsite customers &lt;br /&gt;
*&amp;lt;strong&amp;gt;Team size: &amp;lt;/strong&amp;gt;Iterative model has large team size while agile model has large team size.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Developers: &amp;lt;/strong&amp;gt;In iterative model developers are plan oriented while in agile model developers flexible and can work with changes in plan.&lt;br /&gt;
&lt;br /&gt;
==Agility in context==&lt;br /&gt;
Agility in context is a new trend to make agile methodologies more relevant to a wide range of projects. This makes it stand out from other software development methodologies. Instead of applying all the steps by-the-book, the process is customized to accommodate changes. Few examples are as follows&lt;br /&gt;
*Insufficient customer involvement can result in confused and incomplete requirement document and bring project to a standstill. To avoid this, methods such as story owner and customer proxy are used.&lt;br /&gt;
*The constraints in fixed bid contract make it difficult to make the project agile. Options like offering a customer to buy few iterations to see how the development is going and then sign the contract or swapping a feature or two makes pricing flexible.&lt;br /&gt;
*Communication with clients that cannot come on site and teams that are located in different geographical areas   is improved using video conferencing, frequent sync calls and sharing wiki pages.&lt;br /&gt;
*Even though some projects are characterized by slow Rate of change making them fall into other software development category, they can be good candidates for agile if other agile development methods can be applied to the project effectively&lt;br /&gt;
&lt;br /&gt;
==Limitations of agile methodology ==&lt;br /&gt;
&lt;br /&gt;
*They are difficult when used with the large teams. (Team having members more than 20).&lt;br /&gt;
*Customer is considered as part of the development team throughout the whole development of the software. Change in the customer side representative may result into change in the requirements.&lt;br /&gt;
*It does not support traditional walkthroughs and code inspections during the life-cycle. Instead it emphasizes on pair programming and informal reviews as their quality control mechanism. This is not enough of the critical software.&lt;br /&gt;
*It relies on tacit knowledge embodied by the team, rather than writing the knowledge down as documentation. Thus, there is a risk that this may lead to architectural mistakes that cannot be easily detected by external reviewers due to the lack of documentation.&lt;br /&gt;
*It does not work best, when the requirements are predictable.&lt;br /&gt;
*Lack of documentation may result into failure in understanding the project in future by an outside expert.&lt;br /&gt;
*User interface are developed using the paper prototype based approach rather than model-driven design. &lt;br /&gt;
&lt;br /&gt;
==Limitations of other software development methodologies==&lt;br /&gt;
*Lack of customer interaction results into last moment surprises.&lt;br /&gt;
*Incorporation of the changes during the software development cycle is very difficult task.&lt;br /&gt;
*High amount of prediction is required which result into higher risk involved.&lt;br /&gt;
*Documentation consumes lot of time in the software development cycle.&lt;br /&gt;
*More pre-planning is required compared to agile methods.&lt;br /&gt;
*Stringent team structure may result into conflicts.&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
Agile methods work well for projects characterized by small; co-located teams; interactive customers involved in decisions on requirements; frequently changing requirements (weeks or months); variable price contracts; and few legal or regulatory constraints on development processes where as heavyweight methods can handle complex  large software team dispersed over multiple domains, functions, and geographical areas efficiently. &lt;br /&gt;
Heavyweight approaches have their need in large, long lived projects that have a special safety, reliability or security requirements. However, the steps in agile models can be modified and customized to suit the demands of a project. This agility in context offers many benefits and is the reason for adoption of agile methodologies widely in these areas too.&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&lt;br /&gt;
[1] http://www.buzzle.com/articles/waterfall-model-vs-agile.html&lt;br /&gt;
&lt;br /&gt;
[2] M. A. Awad, &amp;lt;i&amp;gt;&amp;quot;A Comparison between Agile and Traditional Software Development Methodologies&amp;quot;&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[3] Boehm B, &amp;lt;i&amp;gt;&amp;quot;A Spiral Model of Software Development and Enhancement&amp;quot;&amp;lt;/i&amp;gt;ACM SIGSOFT Software Engineering Notes&amp;quot;, &amp;quot;ACM&amp;quot;, 11(4):14-24, August 1986&lt;br /&gt;
&lt;br /&gt;
[4] Rashina H, Philippe K, James N and Stuart M, &amp;lt;i&amp;gt;”Agility in Context”&amp;lt;/i&amp;gt;, ACM OOOPSLA 2010&lt;/div&gt;</summary>
		<author><name>Bluehat</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Spiral.png&amp;diff=41938</id>
		<title>File:Spiral.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Spiral.png&amp;diff=41938"/>
		<updated>2010-11-18T04:29:14Z</updated>

		<summary type="html">&lt;p&gt;Bluehat: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Bluehat</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6d_NM&amp;diff=41937</id>
		<title>CSC/ECE 517 Fall 2010/ch6 6d NM</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6d_NM&amp;diff=41937"/>
		<updated>2010-11-18T04:29:02Z</updated>

		<summary type="html">&lt;p&gt;Bluehat: /* Spiral model */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Agile vs. other software-development methods'''&lt;br /&gt;
==Software development methodologies==&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Software_development_methodology Software development methodology] is a methodical approach or a framework to the software development process, in order to develop software with high quality and less defects. It helps the development team to plan and structure the process in advance. A wide range of such methodologies	exist in the Software engineering field with their own characteristics. &lt;br /&gt;
&lt;br /&gt;
===Types of Software development methodologies===&lt;br /&gt;
There are wide variety of software development approaches used in the industry. Few of them are,&lt;br /&gt;
*Waterfall Approach : linear framework type.&lt;br /&gt;
*Prototyping Approach : iterative framework type&lt;br /&gt;
*Incremental Approach: combination of linear and iterative framework type&lt;br /&gt;
*Spiral Approach : combination of linear and iterative framework type&lt;br /&gt;
*Rapid Application Development (RAD) Approach: Iterative Framework Type&lt;br /&gt;
*Agile Methodologies&lt;br /&gt;
&lt;br /&gt;
==Agile Methodology==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Software_development_methodology Software development methodology Agile]  means – moving quickly and lightly. Similarly, the goal of [http://en.wikipedia.org/wiki/Agile_software_development Agile methodology] is to offer lighter weight solution to the rapidly paced software development processes. It refers to the group of software development methodologies that are based on iterative software development methods. In the Iterative approach the requirements and solutions evolve through the collaboration between self-organizing cross-functional teams. &lt;br /&gt;
	Agile methods break the entire software development into small increments. Each of these iteration involves a team all the essential parts of the software development cycle including planning, requirements analysis, design, coding, and testing. Thus, it reduces the risk involved with the software development and makes it easy to adapt to the new changes. Completion of multiple iterations eventually results into final product. Agile methodology follows principles such as Customer satisfaction, face-to-face communication, simplicity, Self-organizing teams, etc..&lt;br /&gt;
Well-known agile methods include&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Agile_Unified_Process Agile Unified Process (AUP)]- simple, easy to understand approach to developing business application software using agile techniques and concepts yet still remaining true to the RUP&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Dynamic_Systems_Development_Method Dynamic Systems Development Method (DSDM)]-  iterative and incremental approach that emphasizes continuous user involvement&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Essential_Unified_Process Essential Unified Process (EssUP) ]-  identifies practices, such as use cases, iterative development, architecture driven development, team practices and process practices, which are borrowed from RUP, CMMI and agile development&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Extreme_Programming Extreme Programming (XP)]-  intended to improve software quality and responsiveness to changing customer requirements&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Feature_Driven_Development Feature Driven Development (FDD)]- model-driven short-iteration process&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Open_Unified_Process Open Unified Process (OpenUP)]-  a part of the Eclipse Process Framework (EPF), an open source process framework developed within the Eclipse Foundation. Its goals are to make it easy to adopt the core of the RUP / Unified Process&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Scrum_(development)Scrum]- a process skeleton that contains sets of practices and predefined roles.&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Velocity_tracking Velocity tracking]– tracking a measure of productivity sometimes used in agile software development&lt;br /&gt;
&lt;br /&gt;
[[Image:agile.gif|frame|center|Agile Software development]]&lt;br /&gt;
&lt;br /&gt;
==Agile vs waterfall==&lt;br /&gt;
===Waterfall===&lt;br /&gt;
Waterfall model is the traditional sequential process of software development. Like in a waterfall, the water progressively falls from the higher attitude to the lower, in a similar way, the software production cycle progresses sequentially. The waterfall model phases of software development are as follows: requirement specification, conception, analysis, design, coding, testing &amp;amp; debugging, installation and finally maintenance.&lt;br /&gt;
&lt;br /&gt;
[[Image:|frame|center|Waterfall model]]&lt;br /&gt;
&lt;br /&gt;
===Comparison with Agile===&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Customer requirements: &amp;lt;/strong&amp;gt; For the team using Agile method, They are totally unclear and evolves as the work progresses. But for the Waterfall method it is known completely before moving to the next step of the development. They are more stable compared with the requirements of the Agile. The requirement gathering phase consumes considerable amount of time of the entire software development life cycle. No last minute changes are possible in Waterfall whereas they can be easily incorporated using the Agile methodology.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Team Structure: &amp;lt;/strong&amp;gt; The team structure in Agile is cross functional, closely knit and self-organizing. The team work on the entire iteration which includes all the phases of software development. Whereas in Waterfall, each team is dedicated for each phase of the software development cycle.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Customer interaction: &amp;lt;/strong&amp;gt;For Agile, the customer interaction is only in the earlier stage of the cycle. Whereas in Agile, there needs to be continuous interaction of the customer with the development team&lt;br /&gt;
*&amp;lt;strong&amp;gt;Contract (cost):&amp;lt;/strong&amp;gt; As the requirements are unclear and not stable, It is very difficult to decide on the cost of the developing the software in the case of Agile methodology. However, in the case of Waterfall, the cost can be easily manipulated using the requirements defined in the first stage.&lt;br /&gt;
&lt;br /&gt;
==Agile Vs Spiral==&lt;br /&gt;
===Spiral model===&lt;br /&gt;
Spiral model combines good features of top down and bottom up approach of software development. It combines the features of waterfall as well as prototype modeling. The model is both incremental and iterative. The spiral method is planned methodically, with tasks and deliverables identified for each step in the spiral. A prototype is first created based on requirements and scaled down to represent the final product. It is then analyzed for improvements and a better and efficient prototype is built. This process is continued till the best prototype is created.&lt;br /&gt;
&lt;br /&gt;
[[Image:spiral.png|frame|center|Spiral model]]&lt;br /&gt;
&lt;br /&gt;
===Comparison with Agile===&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Requirement: &amp;lt;/strong&amp;gt; in spiral methodology, the system requirement are described in detail and once the requirements are defined and considered final, work is started. However, in agile methodology requirements are not very clear in initial iterations. It becomes clear after few iterations of product development. &lt;br /&gt;
*&amp;lt;strong&amp;gt;Design: &amp;lt;/strong&amp;gt;The basic difference is that most Spiral models of development still insist on big, up-front design. The emphasis is on knowing as much as you can about how the system will be used; discovering all the use cases. Once you know these, then you design the system and break it down into phases that follow an iterative detail-design, implementation, test, refactor-design loop. In Agile, their is some up-front planning -- perhaps gathering large grain understanding (story titles) -- so that reasonable releases can be described, but each release is planned independently and we delay discovery of the details until we are ready to begin implementation of that release. We expect change and don't try to know everything first.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Customer Involvement: &amp;lt;/strong&amp;gt; Customer is involved in the requirement specification stage and in reviewing the prototypes. Constant customer involvement is not necessary. However, agile methodology involves heavy interaction with customers. Success depends on timely and adequate feedback from customer.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Project size: &amp;lt;/strong&amp;gt;The spiral model is intended for large and complicated projects. Agile model works best with small projects&lt;br /&gt;
*&amp;lt;strong&amp;gt;Cycles:&amp;lt;/strong&amp;gt;Spiral model has limited cycles till the best prototype is decided upon while agile model has numerous cycles. Cycles in spiral model are prototype cycles as against getting what customer wants as final product in agile model.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Risk: &amp;lt;/strong&amp;gt;Spiral model has known risks while &lt;br /&gt;
*&amp;lt;strong&amp;gt;Cost: &amp;lt;/strong&amp;gt;spiral models are usually expensive compared to Agile models&lt;br /&gt;
*&amp;lt;strong&amp;gt;Testing: &amp;lt;/strong&amp;gt;Another thing that differs is that most Agile philosophies involve &amp;quot;test-first&amp;quot; methods. This is different from spiral where testing is often an activity unto itself and tests are not developed prior to code. Most often they are planned in advance, but developed in parallel or after coding. Many agile methods insist on developing tests first as the specification for the code.&lt;br /&gt;
&lt;br /&gt;
==Agile vs Iterative==&lt;br /&gt;
===Iterative Software development===&lt;br /&gt;
Iterative development starts with an initial planning followed by many iterations of requirement, analysis, design, testing and implementation steps and ends with deployment. After each iteration, analysis is done to make sure that the required functionality is implemented and additional functionalities that need to be implemented are identified. Such iterations make modification and implementation easy. Iterative development prescribes the construction of initially small but ever larger portions of a software project to help all those involved to uncover important issues early before problems or faulty assumptions can lead to disaster.&lt;br /&gt;
&lt;br /&gt;
[[Image:Crccard2.jpg|frame|center|Iterative Software development model]]&lt;br /&gt;
&lt;br /&gt;
===Comparison with Agile===&lt;br /&gt;
&lt;br /&gt;
Agile software development uses iterative development as a basis but advocates a lighter and more people-centric viewpoint than traditional approaches. Agile processes use feedback, rather than planning, as their primary control mechanism. The feedback is driven by regular tests and releases of the evolving software.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Time period: &amp;lt;/strong&amp;gt;Agile methods differ from iterative methods in that their time period is measured in weeks rather than months. Most agile methods also differ by treating their time period as a strict timebox.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Process and People Orientation: &amp;lt;/strong&amp;gt;A team doing iterative software development could value processes and tools over people and interactions while agile is people oriented interacting more with the customer.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Documentation: &amp;lt;/strong&amp;gt;Iterative model values comprehensive documentation over working software while agile model is characterized by low documentation and more thrust on working software.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Contract: &amp;lt;/strong&amp;gt;Iterative models follow a fixed contract with the customer. However, agile models allows customer to pay for first few iterations and then decide on the type of contract to be entered into.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Customer role: &amp;lt;/strong&amp;gt;In iterative model, customer’s involvement is focused on contract supervision while in agile model has dedicated, knowledgeable, collaborated, collocated onsite customers &lt;br /&gt;
*&amp;lt;strong&amp;gt;Team size: &amp;lt;/strong&amp;gt;Iterative model has large team size while agile model has large team size.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Developers: &amp;lt;/strong&amp;gt;In iterative model developers are plan oriented while in agile model developers flexible and can work with changes in plan.&lt;br /&gt;
&lt;br /&gt;
==Agility in context==&lt;br /&gt;
Agility in context is a new trend to make agile methodologies more relevant to a wide range of projects. This makes it stand out from other software development methodologies. Instead of applying all the steps by-the-book, the process is customized to accommodate changes. Few examples are as follows&lt;br /&gt;
*Insufficient customer involvement can result in confused and incomplete requirement document and bring project to a standstill. To avoid this, methods such as story owner and customer proxy are used.&lt;br /&gt;
*The constraints in fixed bid contract make it difficult to make the project agile. Options like offering a customer to buy few iterations to see how the development is going and then sign the contract or swapping a feature or two makes pricing flexible.&lt;br /&gt;
*Communication with clients that cannot come on site and teams that are located in different geographical areas   is improved using video conferencing, frequent sync calls and sharing wiki pages.&lt;br /&gt;
*Even though some projects are characterized by slow Rate of change making them fall into other software development category, they can be good candidates for agile if other agile development methods can be applied to the project effectively&lt;br /&gt;
&lt;br /&gt;
==Limitations of agile methodology ==&lt;br /&gt;
&lt;br /&gt;
*They are difficult when used with the large teams. (Team having members more than 20).&lt;br /&gt;
*Customer is considered as part of the development team throughout the whole development of the software. Change in the customer side representative may result into change in the requirements.&lt;br /&gt;
*It does not support traditional walkthroughs and code inspections during the life-cycle. Instead it emphasizes on pair programming and informal reviews as their quality control mechanism. This is not enough of the critical software.&lt;br /&gt;
*It relies on tacit knowledge embodied by the team, rather than writing the knowledge down as documentation. Thus, there is a risk that this may lead to architectural mistakes that cannot be easily detected by external reviewers due to the lack of documentation.&lt;br /&gt;
*It does not work best, when the requirements are predictable.&lt;br /&gt;
*Lack of documentation may result into failure in understanding the project in future by an outside expert.&lt;br /&gt;
*User interface are developed using the paper prototype based approach rather than model-driven design. &lt;br /&gt;
&lt;br /&gt;
==Limitations of other software development methodologies==&lt;br /&gt;
*Lack of customer interaction results into last moment surprises.&lt;br /&gt;
*Incorporation of the changes during the software development cycle is very difficult task.&lt;br /&gt;
*High amount of prediction is required which result into higher risk involved.&lt;br /&gt;
*Documentation consumes lot of time in the software development cycle.&lt;br /&gt;
*More pre-planning is required compared to agile methods.&lt;br /&gt;
*Stringent team structure may result into conflicts.&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
Agile methods work well for projects characterized by small; co-located teams; interactive customers involved in decisions on requirements; frequently changing requirements (weeks or months); variable price contracts; and few legal or regulatory constraints on development processes where as heavyweight methods can handle complex  large software team dispersed over multiple domains, functions, and geographical areas efficiently. &lt;br /&gt;
Heavyweight approaches have their need in large, long lived projects that have a special safety, reliability or security requirements. However, the steps in agile models can be modified and customized to suit the demands of a project. This agility in context offers many benefits and is the reason for adoption of agile methodologies widely in these areas too.&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&lt;br /&gt;
[1] http://www.buzzle.com/articles/waterfall-model-vs-agile.html&lt;br /&gt;
&lt;br /&gt;
[2] M. A. Awad, &amp;lt;i&amp;gt;&amp;quot;A Comparison between Agile and Traditional Software Development Methodologies&amp;quot;&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[3] Boehm B, &amp;lt;i&amp;gt;&amp;quot;A Spiral Model of Software Development and Enhancement&amp;quot;&amp;lt;/i&amp;gt;ACM SIGSOFT Software Engineering Notes&amp;quot;, &amp;quot;ACM&amp;quot;, 11(4):14-24, August 1986&lt;br /&gt;
&lt;br /&gt;
[4] Rashina H, Philippe K, James N and Stuart M, &amp;lt;i&amp;gt;”Agility in Context”&amp;lt;/i&amp;gt;, ACM OOOPSLA 2010&lt;/div&gt;</summary>
		<author><name>Bluehat</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Agile.gif&amp;diff=41936</id>
		<title>File:Agile.gif</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Agile.gif&amp;diff=41936"/>
		<updated>2010-11-18T04:26:17Z</updated>

		<summary type="html">&lt;p&gt;Bluehat: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Bluehat</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6d_NM&amp;diff=41935</id>
		<title>CSC/ECE 517 Fall 2010/ch6 6d NM</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6d_NM&amp;diff=41935"/>
		<updated>2010-11-18T04:26:02Z</updated>

		<summary type="html">&lt;p&gt;Bluehat: /* Agile Methodology */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Agile vs. other software-development methods'''&lt;br /&gt;
==Software development methodologies==&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Software_development_methodology Software development methodology] is a methodical approach or a framework to the software development process, in order to develop software with high quality and less defects. It helps the development team to plan and structure the process in advance. A wide range of such methodologies	exist in the Software engineering field with their own characteristics. &lt;br /&gt;
&lt;br /&gt;
===Types of Software development methodologies===&lt;br /&gt;
There are wide variety of software development approaches used in the industry. Few of them are,&lt;br /&gt;
*Waterfall Approach : linear framework type.&lt;br /&gt;
*Prototyping Approach : iterative framework type&lt;br /&gt;
*Incremental Approach: combination of linear and iterative framework type&lt;br /&gt;
*Spiral Approach : combination of linear and iterative framework type&lt;br /&gt;
*Rapid Application Development (RAD) Approach: Iterative Framework Type&lt;br /&gt;
*Agile Methodologies&lt;br /&gt;
&lt;br /&gt;
==Agile Methodology==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Software_development_methodology Software development methodology Agile]  means – moving quickly and lightly. Similarly, the goal of [http://en.wikipedia.org/wiki/Agile_software_development Agile methodology] is to offer lighter weight solution to the rapidly paced software development processes. It refers to the group of software development methodologies that are based on iterative software development methods. In the Iterative approach the requirements and solutions evolve through the collaboration between self-organizing cross-functional teams. &lt;br /&gt;
	Agile methods break the entire software development into small increments. Each of these iteration involves a team all the essential parts of the software development cycle including planning, requirements analysis, design, coding, and testing. Thus, it reduces the risk involved with the software development and makes it easy to adapt to the new changes. Completion of multiple iterations eventually results into final product. Agile methodology follows principles such as Customer satisfaction, face-to-face communication, simplicity, Self-organizing teams, etc..&lt;br /&gt;
Well-known agile methods include&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Agile_Unified_Process Agile Unified Process (AUP)]- simple, easy to understand approach to developing business application software using agile techniques and concepts yet still remaining true to the RUP&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Dynamic_Systems_Development_Method Dynamic Systems Development Method (DSDM)]-  iterative and incremental approach that emphasizes continuous user involvement&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Essential_Unified_Process Essential Unified Process (EssUP) ]-  identifies practices, such as use cases, iterative development, architecture driven development, team practices and process practices, which are borrowed from RUP, CMMI and agile development&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Extreme_Programming Extreme Programming (XP)]-  intended to improve software quality and responsiveness to changing customer requirements&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Feature_Driven_Development Feature Driven Development (FDD)]- model-driven short-iteration process&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Open_Unified_Process Open Unified Process (OpenUP)]-  a part of the Eclipse Process Framework (EPF), an open source process framework developed within the Eclipse Foundation. Its goals are to make it easy to adopt the core of the RUP / Unified Process&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Scrum_(development)Scrum]- a process skeleton that contains sets of practices and predefined roles.&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Velocity_tracking Velocity tracking]– tracking a measure of productivity sometimes used in agile software development&lt;br /&gt;
&lt;br /&gt;
[[Image:agile.gif|frame|center|Agile Software development]]&lt;br /&gt;
&lt;br /&gt;
==Agile vs waterfall==&lt;br /&gt;
===Waterfall===&lt;br /&gt;
Waterfall model is the traditional sequential process of software development. Like in a waterfall, the water progressively falls from the higher attitude to the lower, in a similar way, the software production cycle progresses sequentially. The waterfall model phases of software development are as follows: requirement specification, conception, analysis, design, coding, testing &amp;amp; debugging, installation and finally maintenance.&lt;br /&gt;
&lt;br /&gt;
[[Image:|frame|center|Waterfall model]]&lt;br /&gt;
&lt;br /&gt;
===Comparison with Agile===&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Customer requirements: &amp;lt;/strong&amp;gt; For the team using Agile method, They are totally unclear and evolves as the work progresses. But for the Waterfall method it is known completely before moving to the next step of the development. They are more stable compared with the requirements of the Agile. The requirement gathering phase consumes considerable amount of time of the entire software development life cycle. No last minute changes are possible in Waterfall whereas they can be easily incorporated using the Agile methodology.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Team Structure: &amp;lt;/strong&amp;gt; The team structure in Agile is cross functional, closely knit and self-organizing. The team work on the entire iteration which includes all the phases of software development. Whereas in Waterfall, each team is dedicated for each phase of the software development cycle.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Customer interaction: &amp;lt;/strong&amp;gt;For Agile, the customer interaction is only in the earlier stage of the cycle. Whereas in Agile, there needs to be continuous interaction of the customer with the development team&lt;br /&gt;
*&amp;lt;strong&amp;gt;Contract (cost):&amp;lt;/strong&amp;gt; As the requirements are unclear and not stable, It is very difficult to decide on the cost of the developing the software in the case of Agile methodology. However, in the case of Waterfall, the cost can be easily manipulated using the requirements defined in the first stage.&lt;br /&gt;
&lt;br /&gt;
==Agile Vs Spiral==&lt;br /&gt;
===Spiral model===&lt;br /&gt;
Spiral model combines good features of top down and bottom up approach of software development. It combines the features of waterfall as well as prototype modeling. The model is both incremental and iterative. The spiral method is planned methodically, with tasks and deliverables identified for each step in the spiral. A prototype is first created based on requirements and scaled down to represent the final product. It is then analyzed for improvements and a better and efficient prototype is built. This process is continued till the best prototype is created.&lt;br /&gt;
&lt;br /&gt;
[[Image:Crccard2.jpg|frame|center|Spiral model]]&lt;br /&gt;
&lt;br /&gt;
===Comparison with Agile===&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Requirement: &amp;lt;/strong&amp;gt; in spiral methodology, the system requirement are described in detail and once the requirements are defined and considered final, work is started. However, in agile methodology requirements are not very clear in initial iterations. It becomes clear after few iterations of product development. &lt;br /&gt;
*&amp;lt;strong&amp;gt;Design: &amp;lt;/strong&amp;gt;The basic difference is that most Spiral models of development still insist on big, up-front design. The emphasis is on knowing as much as you can about how the system will be used; discovering all the use cases. Once you know these, then you design the system and break it down into phases that follow an iterative detail-design, implementation, test, refactor-design loop. In Agile, their is some up-front planning -- perhaps gathering large grain understanding (story titles) -- so that reasonable releases can be described, but each release is planned independently and we delay discovery of the details until we are ready to begin implementation of that release. We expect change and don't try to know everything first.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Customer Involvement: &amp;lt;/strong&amp;gt; Customer is involved in the requirement specification stage and in reviewing the prototypes. Constant customer involvement is not necessary. However, agile methodology involves heavy interaction with customers. Success depends on timely and adequate feedback from customer.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Project size: &amp;lt;/strong&amp;gt;The spiral model is intended for large and complicated projects. Agile model works best with small projects&lt;br /&gt;
*&amp;lt;strong&amp;gt;Cycles:&amp;lt;/strong&amp;gt;Spiral model has limited cycles till the best prototype is decided upon while agile model has numerous cycles. Cycles in spiral model are prototype cycles as against getting what customer wants as final product in agile model.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Risk: &amp;lt;/strong&amp;gt;Spiral model has known risks while &lt;br /&gt;
*&amp;lt;strong&amp;gt;Cost: &amp;lt;/strong&amp;gt;spiral models are usually expensive compared to Agile models&lt;br /&gt;
*&amp;lt;strong&amp;gt;Testing: &amp;lt;/strong&amp;gt;Another thing that differs is that most Agile philosophies involve &amp;quot;test-first&amp;quot; methods. This is different from spiral where testing is often an activity unto itself and tests are not developed prior to code. Most often they are planned in advance, but developed in parallel or after coding. Many agile methods insist on developing tests first as the specification for the code.&lt;br /&gt;
&lt;br /&gt;
==Agile vs Iterative==&lt;br /&gt;
===Iterative Software development===&lt;br /&gt;
Iterative development starts with an initial planning followed by many iterations of requirement, analysis, design, testing and implementation steps and ends with deployment. After each iteration, analysis is done to make sure that the required functionality is implemented and additional functionalities that need to be implemented are identified. Such iterations make modification and implementation easy. Iterative development prescribes the construction of initially small but ever larger portions of a software project to help all those involved to uncover important issues early before problems or faulty assumptions can lead to disaster.&lt;br /&gt;
&lt;br /&gt;
[[Image:Crccard2.jpg|frame|center|Iterative Software development model]]&lt;br /&gt;
&lt;br /&gt;
===Comparison with Agile===&lt;br /&gt;
&lt;br /&gt;
Agile software development uses iterative development as a basis but advocates a lighter and more people-centric viewpoint than traditional approaches. Agile processes use feedback, rather than planning, as their primary control mechanism. The feedback is driven by regular tests and releases of the evolving software.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Time period: &amp;lt;/strong&amp;gt;Agile methods differ from iterative methods in that their time period is measured in weeks rather than months. Most agile methods also differ by treating their time period as a strict timebox.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Process and People Orientation: &amp;lt;/strong&amp;gt;A team doing iterative software development could value processes and tools over people and interactions while agile is people oriented interacting more with the customer.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Documentation: &amp;lt;/strong&amp;gt;Iterative model values comprehensive documentation over working software while agile model is characterized by low documentation and more thrust on working software.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Contract: &amp;lt;/strong&amp;gt;Iterative models follow a fixed contract with the customer. However, agile models allows customer to pay for first few iterations and then decide on the type of contract to be entered into.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Customer role: &amp;lt;/strong&amp;gt;In iterative model, customer’s involvement is focused on contract supervision while in agile model has dedicated, knowledgeable, collaborated, collocated onsite customers &lt;br /&gt;
*&amp;lt;strong&amp;gt;Team size: &amp;lt;/strong&amp;gt;Iterative model has large team size while agile model has large team size.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Developers: &amp;lt;/strong&amp;gt;In iterative model developers are plan oriented while in agile model developers flexible and can work with changes in plan.&lt;br /&gt;
&lt;br /&gt;
==Agility in context==&lt;br /&gt;
Agility in context is a new trend to make agile methodologies more relevant to a wide range of projects. This makes it stand out from other software development methodologies. Instead of applying all the steps by-the-book, the process is customized to accommodate changes. Few examples are as follows&lt;br /&gt;
*Insufficient customer involvement can result in confused and incomplete requirement document and bring project to a standstill. To avoid this, methods such as story owner and customer proxy are used.&lt;br /&gt;
*The constraints in fixed bid contract make it difficult to make the project agile. Options like offering a customer to buy few iterations to see how the development is going and then sign the contract or swapping a feature or two makes pricing flexible.&lt;br /&gt;
*Communication with clients that cannot come on site and teams that are located in different geographical areas   is improved using video conferencing, frequent sync calls and sharing wiki pages.&lt;br /&gt;
*Even though some projects are characterized by slow Rate of change making them fall into other software development category, they can be good candidates for agile if other agile development methods can be applied to the project effectively&lt;br /&gt;
&lt;br /&gt;
==Limitations of agile methodology ==&lt;br /&gt;
&lt;br /&gt;
*They are difficult when used with the large teams. (Team having members more than 20).&lt;br /&gt;
*Customer is considered as part of the development team throughout the whole development of the software. Change in the customer side representative may result into change in the requirements.&lt;br /&gt;
*It does not support traditional walkthroughs and code inspections during the life-cycle. Instead it emphasizes on pair programming and informal reviews as their quality control mechanism. This is not enough of the critical software.&lt;br /&gt;
*It relies on tacit knowledge embodied by the team, rather than writing the knowledge down as documentation. Thus, there is a risk that this may lead to architectural mistakes that cannot be easily detected by external reviewers due to the lack of documentation.&lt;br /&gt;
*It does not work best, when the requirements are predictable.&lt;br /&gt;
*Lack of documentation may result into failure in understanding the project in future by an outside expert.&lt;br /&gt;
*User interface are developed using the paper prototype based approach rather than model-driven design. &lt;br /&gt;
&lt;br /&gt;
==Limitations of other software development methodologies==&lt;br /&gt;
*Lack of customer interaction results into last moment surprises.&lt;br /&gt;
*Incorporation of the changes during the software development cycle is very difficult task.&lt;br /&gt;
*High amount of prediction is required which result into higher risk involved.&lt;br /&gt;
*Documentation consumes lot of time in the software development cycle.&lt;br /&gt;
*More pre-planning is required compared to agile methods.&lt;br /&gt;
*Stringent team structure may result into conflicts.&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
Agile methods work well for projects characterized by small; co-located teams; interactive customers involved in decisions on requirements; frequently changing requirements (weeks or months); variable price contracts; and few legal or regulatory constraints on development processes where as heavyweight methods can handle complex  large software team dispersed over multiple domains, functions, and geographical areas efficiently. &lt;br /&gt;
Heavyweight approaches have their need in large, long lived projects that have a special safety, reliability or security requirements. However, the steps in agile models can be modified and customized to suit the demands of a project. This agility in context offers many benefits and is the reason for adoption of agile methodologies widely in these areas too.&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&lt;br /&gt;
[1] http://www.buzzle.com/articles/waterfall-model-vs-agile.html&lt;br /&gt;
&lt;br /&gt;
[2] M. A. Awad, &amp;lt;i&amp;gt;&amp;quot;A Comparison between Agile and Traditional Software Development Methodologies&amp;quot;&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[3] Boehm B, &amp;lt;i&amp;gt;&amp;quot;A Spiral Model of Software Development and Enhancement&amp;quot;&amp;lt;/i&amp;gt;ACM SIGSOFT Software Engineering Notes&amp;quot;, &amp;quot;ACM&amp;quot;, 11(4):14-24, August 1986&lt;br /&gt;
&lt;br /&gt;
[4] Rashina H, Philippe K, James N and Stuart M, &amp;lt;i&amp;gt;”Agility in Context”&amp;lt;/i&amp;gt;, ACM OOOPSLA 2010&lt;/div&gt;</summary>
		<author><name>Bluehat</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6d_NM&amp;diff=41934</id>
		<title>CSC/ECE 517 Fall 2010/ch6 6d NM</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6d_NM&amp;diff=41934"/>
		<updated>2010-11-18T04:24:32Z</updated>

		<summary type="html">&lt;p&gt;Bluehat: /* Agile introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Agile vs. other software-development methods'''&lt;br /&gt;
==Software development methodologies==&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Software_development_methodology Software development methodology] is a methodical approach or a framework to the software development process, in order to develop software with high quality and less defects. It helps the development team to plan and structure the process in advance. A wide range of such methodologies	exist in the Software engineering field with their own characteristics. &lt;br /&gt;
&lt;br /&gt;
===Types of Software development methodologies===&lt;br /&gt;
There are wide variety of software development approaches used in the industry. Few of them are,&lt;br /&gt;
*Waterfall Approach : linear framework type.&lt;br /&gt;
*Prototyping Approach : iterative framework type&lt;br /&gt;
*Incremental Approach: combination of linear and iterative framework type&lt;br /&gt;
*Spiral Approach : combination of linear and iterative framework type&lt;br /&gt;
*Rapid Application Development (RAD) Approach: Iterative Framework Type&lt;br /&gt;
*Agile Methodologies&lt;br /&gt;
&lt;br /&gt;
==Agile Methodology==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Software_development_methodology Software development methodology Agile]  means – moving quickly and lightly. Similarly, the goal of [http://en.wikipedia.org/wiki/Agile_software_development Agile methodology] is to offer lighter weight solution to the rapidly paced software development processes. It refers to the group of software development methodologies that are based on iterative software development methods. In the Iterative approach the requirements and solutions evolve through the collaboration between self-organizing cross-functional teams. &lt;br /&gt;
	Agile methods break the entire software development into small increments. Each of these iteration involves a team all the essential parts of the software development cycle including planning, requirements analysis, design, coding, and testing. Thus, it reduces the risk involved with the software development and makes it easy to adapt to the new changes. Completion of multiple iterations eventually results into final product. Agile methodology follows principles such as Customer satisfaction, face-to-face communication, simplicity, Self-organizing teams, etc..&lt;br /&gt;
Well-known agile methods include&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Agile_Unified_Process Agile Unified Process (AUP)]- simple, easy to understand approach to developing business application software using agile techniques and concepts yet still remaining true to the RUP&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Dynamic_Systems_Development_Method Dynamic Systems Development Method (DSDM)]-  iterative and incremental approach that emphasizes continuous user involvement&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Essential_Unified_Process Essential Unified Process (EssUP) ]-  identifies practices, such as use cases, iterative development, architecture driven development, team practices and process practices, which are borrowed from RUP, CMMI and agile development&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Extreme_Programming Extreme Programming (XP)]-  intended to improve software quality and responsiveness to changing customer requirements&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Feature_Driven_Development Feature Driven Development (FDD)]- model-driven short-iteration process&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Open_Unified_Process Open Unified Process (OpenUP)]-  a part of the Eclipse Process Framework (EPF), an open source process framework developed within the Eclipse Foundation. Its goals are to make it easy to adopt the core of the RUP / Unified Process&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Scrum_(development)Scrum]- a process skeleton that contains sets of practices and predefined roles.&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Velocity_tracking Velocity tracking]– tracking a measure of productivity sometimes used in agile software development&lt;br /&gt;
&lt;br /&gt;
[[Image:Crccard2.jpg|frame|center|Agile Software development]]&lt;br /&gt;
&lt;br /&gt;
==Agile vs waterfall==&lt;br /&gt;
===Waterfall===&lt;br /&gt;
Waterfall model is the traditional sequential process of software development. Like in a waterfall, the water progressively falls from the higher attitude to the lower, in a similar way, the software production cycle progresses sequentially. The waterfall model phases of software development are as follows: requirement specification, conception, analysis, design, coding, testing &amp;amp; debugging, installation and finally maintenance.&lt;br /&gt;
&lt;br /&gt;
[[Image:|frame|center|Waterfall model]]&lt;br /&gt;
&lt;br /&gt;
===Comparison with Agile===&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Customer requirements: &amp;lt;/strong&amp;gt; For the team using Agile method, They are totally unclear and evolves as the work progresses. But for the Waterfall method it is known completely before moving to the next step of the development. They are more stable compared with the requirements of the Agile. The requirement gathering phase consumes considerable amount of time of the entire software development life cycle. No last minute changes are possible in Waterfall whereas they can be easily incorporated using the Agile methodology.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Team Structure: &amp;lt;/strong&amp;gt; The team structure in Agile is cross functional, closely knit and self-organizing. The team work on the entire iteration which includes all the phases of software development. Whereas in Waterfall, each team is dedicated for each phase of the software development cycle.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Customer interaction: &amp;lt;/strong&amp;gt;For Agile, the customer interaction is only in the earlier stage of the cycle. Whereas in Agile, there needs to be continuous interaction of the customer with the development team&lt;br /&gt;
*&amp;lt;strong&amp;gt;Contract (cost):&amp;lt;/strong&amp;gt; As the requirements are unclear and not stable, It is very difficult to decide on the cost of the developing the software in the case of Agile methodology. However, in the case of Waterfall, the cost can be easily manipulated using the requirements defined in the first stage.&lt;br /&gt;
&lt;br /&gt;
==Agile Vs Spiral==&lt;br /&gt;
===Spiral model===&lt;br /&gt;
Spiral model combines good features of top down and bottom up approach of software development. It combines the features of waterfall as well as prototype modeling. The model is both incremental and iterative. The spiral method is planned methodically, with tasks and deliverables identified for each step in the spiral. A prototype is first created based on requirements and scaled down to represent the final product. It is then analyzed for improvements and a better and efficient prototype is built. This process is continued till the best prototype is created.&lt;br /&gt;
&lt;br /&gt;
[[Image:Crccard2.jpg|frame|center|Spiral model]]&lt;br /&gt;
&lt;br /&gt;
===Comparison with Agile===&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Requirement: &amp;lt;/strong&amp;gt; in spiral methodology, the system requirement are described in detail and once the requirements are defined and considered final, work is started. However, in agile methodology requirements are not very clear in initial iterations. It becomes clear after few iterations of product development. &lt;br /&gt;
*&amp;lt;strong&amp;gt;Design: &amp;lt;/strong&amp;gt;The basic difference is that most Spiral models of development still insist on big, up-front design. The emphasis is on knowing as much as you can about how the system will be used; discovering all the use cases. Once you know these, then you design the system and break it down into phases that follow an iterative detail-design, implementation, test, refactor-design loop. In Agile, their is some up-front planning -- perhaps gathering large grain understanding (story titles) -- so that reasonable releases can be described, but each release is planned independently and we delay discovery of the details until we are ready to begin implementation of that release. We expect change and don't try to know everything first.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Customer Involvement: &amp;lt;/strong&amp;gt; Customer is involved in the requirement specification stage and in reviewing the prototypes. Constant customer involvement is not necessary. However, agile methodology involves heavy interaction with customers. Success depends on timely and adequate feedback from customer.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Project size: &amp;lt;/strong&amp;gt;The spiral model is intended for large and complicated projects. Agile model works best with small projects&lt;br /&gt;
*&amp;lt;strong&amp;gt;Cycles:&amp;lt;/strong&amp;gt;Spiral model has limited cycles till the best prototype is decided upon while agile model has numerous cycles. Cycles in spiral model are prototype cycles as against getting what customer wants as final product in agile model.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Risk: &amp;lt;/strong&amp;gt;Spiral model has known risks while &lt;br /&gt;
*&amp;lt;strong&amp;gt;Cost: &amp;lt;/strong&amp;gt;spiral models are usually expensive compared to Agile models&lt;br /&gt;
*&amp;lt;strong&amp;gt;Testing: &amp;lt;/strong&amp;gt;Another thing that differs is that most Agile philosophies involve &amp;quot;test-first&amp;quot; methods. This is different from spiral where testing is often an activity unto itself and tests are not developed prior to code. Most often they are planned in advance, but developed in parallel or after coding. Many agile methods insist on developing tests first as the specification for the code.&lt;br /&gt;
&lt;br /&gt;
==Agile vs Iterative==&lt;br /&gt;
===Iterative Software development===&lt;br /&gt;
Iterative development starts with an initial planning followed by many iterations of requirement, analysis, design, testing and implementation steps and ends with deployment. After each iteration, analysis is done to make sure that the required functionality is implemented and additional functionalities that need to be implemented are identified. Such iterations make modification and implementation easy. Iterative development prescribes the construction of initially small but ever larger portions of a software project to help all those involved to uncover important issues early before problems or faulty assumptions can lead to disaster.&lt;br /&gt;
&lt;br /&gt;
[[Image:Crccard2.jpg|frame|center|Iterative Software development model]]&lt;br /&gt;
&lt;br /&gt;
===Comparison with Agile===&lt;br /&gt;
&lt;br /&gt;
Agile software development uses iterative development as a basis but advocates a lighter and more people-centric viewpoint than traditional approaches. Agile processes use feedback, rather than planning, as their primary control mechanism. The feedback is driven by regular tests and releases of the evolving software.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Time period: &amp;lt;/strong&amp;gt;Agile methods differ from iterative methods in that their time period is measured in weeks rather than months. Most agile methods also differ by treating their time period as a strict timebox.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Process and People Orientation: &amp;lt;/strong&amp;gt;A team doing iterative software development could value processes and tools over people and interactions while agile is people oriented interacting more with the customer.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Documentation: &amp;lt;/strong&amp;gt;Iterative model values comprehensive documentation over working software while agile model is characterized by low documentation and more thrust on working software.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Contract: &amp;lt;/strong&amp;gt;Iterative models follow a fixed contract with the customer. However, agile models allows customer to pay for first few iterations and then decide on the type of contract to be entered into.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Customer role: &amp;lt;/strong&amp;gt;In iterative model, customer’s involvement is focused on contract supervision while in agile model has dedicated, knowledgeable, collaborated, collocated onsite customers &lt;br /&gt;
*&amp;lt;strong&amp;gt;Team size: &amp;lt;/strong&amp;gt;Iterative model has large team size while agile model has large team size.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Developers: &amp;lt;/strong&amp;gt;In iterative model developers are plan oriented while in agile model developers flexible and can work with changes in plan.&lt;br /&gt;
&lt;br /&gt;
==Agility in context==&lt;br /&gt;
Agility in context is a new trend to make agile methodologies more relevant to a wide range of projects. This makes it stand out from other software development methodologies. Instead of applying all the steps by-the-book, the process is customized to accommodate changes. Few examples are as follows&lt;br /&gt;
*Insufficient customer involvement can result in confused and incomplete requirement document and bring project to a standstill. To avoid this, methods such as story owner and customer proxy are used.&lt;br /&gt;
*The constraints in fixed bid contract make it difficult to make the project agile. Options like offering a customer to buy few iterations to see how the development is going and then sign the contract or swapping a feature or two makes pricing flexible.&lt;br /&gt;
*Communication with clients that cannot come on site and teams that are located in different geographical areas   is improved using video conferencing, frequent sync calls and sharing wiki pages.&lt;br /&gt;
*Even though some projects are characterized by slow Rate of change making them fall into other software development category, they can be good candidates for agile if other agile development methods can be applied to the project effectively&lt;br /&gt;
&lt;br /&gt;
==Limitations of agile methodology ==&lt;br /&gt;
&lt;br /&gt;
*They are difficult when used with the large teams. (Team having members more than 20).&lt;br /&gt;
*Customer is considered as part of the development team throughout the whole development of the software. Change in the customer side representative may result into change in the requirements.&lt;br /&gt;
*It does not support traditional walkthroughs and code inspections during the life-cycle. Instead it emphasizes on pair programming and informal reviews as their quality control mechanism. This is not enough of the critical software.&lt;br /&gt;
*It relies on tacit knowledge embodied by the team, rather than writing the knowledge down as documentation. Thus, there is a risk that this may lead to architectural mistakes that cannot be easily detected by external reviewers due to the lack of documentation.&lt;br /&gt;
*It does not work best, when the requirements are predictable.&lt;br /&gt;
*Lack of documentation may result into failure in understanding the project in future by an outside expert.&lt;br /&gt;
*User interface are developed using the paper prototype based approach rather than model-driven design. &lt;br /&gt;
&lt;br /&gt;
==Limitations of other software development methodologies==&lt;br /&gt;
*Lack of customer interaction results into last moment surprises.&lt;br /&gt;
*Incorporation of the changes during the software development cycle is very difficult task.&lt;br /&gt;
*High amount of prediction is required which result into higher risk involved.&lt;br /&gt;
*Documentation consumes lot of time in the software development cycle.&lt;br /&gt;
*More pre-planning is required compared to agile methods.&lt;br /&gt;
*Stringent team structure may result into conflicts.&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
Agile methods work well for projects characterized by small; co-located teams; interactive customers involved in decisions on requirements; frequently changing requirements (weeks or months); variable price contracts; and few legal or regulatory constraints on development processes where as heavyweight methods can handle complex  large software team dispersed over multiple domains, functions, and geographical areas efficiently. &lt;br /&gt;
Heavyweight approaches have their need in large, long lived projects that have a special safety, reliability or security requirements. However, the steps in agile models can be modified and customized to suit the demands of a project. This agility in context offers many benefits and is the reason for adoption of agile methodologies widely in these areas too.&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&lt;br /&gt;
[1] http://www.buzzle.com/articles/waterfall-model-vs-agile.html&lt;br /&gt;
&lt;br /&gt;
[2] M. A. Awad, &amp;lt;i&amp;gt;&amp;quot;A Comparison between Agile and Traditional Software Development Methodologies&amp;quot;&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[3] Boehm B, &amp;lt;i&amp;gt;&amp;quot;A Spiral Model of Software Development and Enhancement&amp;quot;&amp;lt;/i&amp;gt;ACM SIGSOFT Software Engineering Notes&amp;quot;, &amp;quot;ACM&amp;quot;, 11(4):14-24, August 1986&lt;br /&gt;
&lt;br /&gt;
[4] Rashina H, Philippe K, James N and Stuart M, &amp;lt;i&amp;gt;”Agility in Context”&amp;lt;/i&amp;gt;, ACM OOOPSLA 2010&lt;/div&gt;</summary>
		<author><name>Bluehat</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6d_NM&amp;diff=41933</id>
		<title>CSC/ECE 517 Fall 2010/ch6 6d NM</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6d_NM&amp;diff=41933"/>
		<updated>2010-11-18T04:23:30Z</updated>

		<summary type="html">&lt;p&gt;Bluehat: /* Agility in context */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Agile vs. other software-development methods'''&lt;br /&gt;
==Software development methodologies==&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Software_development_methodology Software development methodology] is a methodical approach or a framework to the software development process, in order to develop software with high quality and less defects. It helps the development team to plan and structure the process in advance. A wide range of such methodologies	exist in the Software engineering field with their own characteristics. &lt;br /&gt;
&lt;br /&gt;
===Types of Software development methodologies===&lt;br /&gt;
There are wide variety of software development approaches used in the industry. Few of them are,&lt;br /&gt;
*Waterfall Approach : linear framework type.&lt;br /&gt;
*Prototyping Approach : iterative framework type&lt;br /&gt;
*Incremental Approach: combination of linear and iterative framework type&lt;br /&gt;
*Spiral Approach : combination of linear and iterative framework type&lt;br /&gt;
*Rapid Application Development (RAD) Approach: Iterative Framework Type&lt;br /&gt;
*Agile Methodologies&lt;br /&gt;
&lt;br /&gt;
==Agile introduction==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Software_development_methodology Software development methodology Agile]  means – moving quickly and lightly. Similarly, the goal of [http://en.wikipedia.org/wiki/Agile_software_development Agile methodology] is to offer lighter weight solution to the rapidly paced software development processes. It refers to the group of software development methodologies that are based on iterative software development methods. In the Iterative approach the requirements and solutions evolve through the collaboration between self-organizing cross-functional teams. &lt;br /&gt;
	Agile methods break the entire software development into small increments. Each of these iteration involves a team all the essential parts of the software development cycle including planning, requirements analysis, design, coding, and testing. Thus, it reduces the risk involved with the software development and makes it easy to adapt to the new changes. Completion of multiple iterations eventually results into final product. Agile methodology follows principles such as Customer satisfaction, face-to-face communication, simplicity, Self-organizing teams, etc..&lt;br /&gt;
Well-known agile methods include&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Agile_Unified_Process Agile Unified Process (AUP)]- simple, easy to understand approach to developing business application software using agile techniques and concepts yet still remaining true to the RUP&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Dynamic_Systems_Development_Method Dynamic Systems Development Method (DSDM)]-  iterative and incremental approach that emphasizes continuous user involvement&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Essential_Unified_Process Essential Unified Process (EssUP) ]-  identifies practices, such as use cases, iterative development, architecture driven development, team practices and process practices, which are borrowed from RUP, CMMI and agile development&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Extreme_Programming Extreme Programming (XP)]-  intended to improve software quality and responsiveness to changing customer requirements&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Feature_Driven_Development Feature Driven Development (FDD)]- model-driven short-iteration process&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Open_Unified_Process Open Unified Process (OpenUP)]-  a part of the Eclipse Process Framework (EPF), an open source process framework developed within the Eclipse Foundation. Its goals are to make it easy to adopt the core of the RUP / Unified Process&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Scrum_(development)Scrum]- a process skeleton that contains sets of practices and predefined roles.&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Velocity_tracking Velocity tracking]– tracking a measure of productivity sometimes used in agile software development&lt;br /&gt;
&lt;br /&gt;
[[Image:Crccard2.jpg|frame|center|Agile Software development]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Agile vs waterfall==&lt;br /&gt;
===Waterfall===&lt;br /&gt;
Waterfall model is the traditional sequential process of software development. Like in a waterfall, the water progressively falls from the higher attitude to the lower, in a similar way, the software production cycle progresses sequentially. The waterfall model phases of software development are as follows: requirement specification, conception, analysis, design, coding, testing &amp;amp; debugging, installation and finally maintenance.&lt;br /&gt;
&lt;br /&gt;
[[Image:|frame|center|Waterfall model]]&lt;br /&gt;
&lt;br /&gt;
===Comparison with Agile===&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Customer requirements: &amp;lt;/strong&amp;gt; For the team using Agile method, They are totally unclear and evolves as the work progresses. But for the Waterfall method it is known completely before moving to the next step of the development. They are more stable compared with the requirements of the Agile. The requirement gathering phase consumes considerable amount of time of the entire software development life cycle. No last minute changes are possible in Waterfall whereas they can be easily incorporated using the Agile methodology.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Team Structure: &amp;lt;/strong&amp;gt; The team structure in Agile is cross functional, closely knit and self-organizing. The team work on the entire iteration which includes all the phases of software development. Whereas in Waterfall, each team is dedicated for each phase of the software development cycle.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Customer interaction: &amp;lt;/strong&amp;gt;For Agile, the customer interaction is only in the earlier stage of the cycle. Whereas in Agile, there needs to be continuous interaction of the customer with the development team&lt;br /&gt;
*&amp;lt;strong&amp;gt;Contract (cost):&amp;lt;/strong&amp;gt; As the requirements are unclear and not stable, It is very difficult to decide on the cost of the developing the software in the case of Agile methodology. However, in the case of Waterfall, the cost can be easily manipulated using the requirements defined in the first stage.&lt;br /&gt;
&lt;br /&gt;
==Agile Vs Spiral==&lt;br /&gt;
===Spiral model===&lt;br /&gt;
Spiral model combines good features of top down and bottom up approach of software development. It combines the features of waterfall as well as prototype modeling. The model is both incremental and iterative. The spiral method is planned methodically, with tasks and deliverables identified for each step in the spiral. A prototype is first created based on requirements and scaled down to represent the final product. It is then analyzed for improvements and a better and efficient prototype is built. This process is continued till the best prototype is created.&lt;br /&gt;
&lt;br /&gt;
[[Image:Crccard2.jpg|frame|center|Spiral model]]&lt;br /&gt;
&lt;br /&gt;
===Comparison with Agile===&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Requirement: &amp;lt;/strong&amp;gt; in spiral methodology, the system requirement are described in detail and once the requirements are defined and considered final, work is started. However, in agile methodology requirements are not very clear in initial iterations. It becomes clear after few iterations of product development. &lt;br /&gt;
*&amp;lt;strong&amp;gt;Design: &amp;lt;/strong&amp;gt;The basic difference is that most Spiral models of development still insist on big, up-front design. The emphasis is on knowing as much as you can about how the system will be used; discovering all the use cases. Once you know these, then you design the system and break it down into phases that follow an iterative detail-design, implementation, test, refactor-design loop. In Agile, their is some up-front planning -- perhaps gathering large grain understanding (story titles) -- so that reasonable releases can be described, but each release is planned independently and we delay discovery of the details until we are ready to begin implementation of that release. We expect change and don't try to know everything first.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Customer Involvement: &amp;lt;/strong&amp;gt; Customer is involved in the requirement specification stage and in reviewing the prototypes. Constant customer involvement is not necessary. However, agile methodology involves heavy interaction with customers. Success depends on timely and adequate feedback from customer.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Project size: &amp;lt;/strong&amp;gt;The spiral model is intended for large and complicated projects. Agile model works best with small projects&lt;br /&gt;
*&amp;lt;strong&amp;gt;Cycles:&amp;lt;/strong&amp;gt;Spiral model has limited cycles till the best prototype is decided upon while agile model has numerous cycles. Cycles in spiral model are prototype cycles as against getting what customer wants as final product in agile model.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Risk: &amp;lt;/strong&amp;gt;Spiral model has known risks while &lt;br /&gt;
*&amp;lt;strong&amp;gt;Cost: &amp;lt;/strong&amp;gt;spiral models are usually expensive compared to Agile models&lt;br /&gt;
*&amp;lt;strong&amp;gt;Testing: &amp;lt;/strong&amp;gt;Another thing that differs is that most Agile philosophies involve &amp;quot;test-first&amp;quot; methods. This is different from spiral where testing is often an activity unto itself and tests are not developed prior to code. Most often they are planned in advance, but developed in parallel or after coding. Many agile methods insist on developing tests first as the specification for the code.&lt;br /&gt;
&lt;br /&gt;
==Agile vs Iterative==&lt;br /&gt;
===Iterative Software development===&lt;br /&gt;
Iterative development starts with an initial planning followed by many iterations of requirement, analysis, design, testing and implementation steps and ends with deployment. After each iteration, analysis is done to make sure that the required functionality is implemented and additional functionalities that need to be implemented are identified. Such iterations make modification and implementation easy. Iterative development prescribes the construction of initially small but ever larger portions of a software project to help all those involved to uncover important issues early before problems or faulty assumptions can lead to disaster.&lt;br /&gt;
&lt;br /&gt;
[[Image:Crccard2.jpg|frame|center|Iterative Software development model]]&lt;br /&gt;
&lt;br /&gt;
===Comparison with Agile===&lt;br /&gt;
&lt;br /&gt;
Agile software development uses iterative development as a basis but advocates a lighter and more people-centric viewpoint than traditional approaches. Agile processes use feedback, rather than planning, as their primary control mechanism. The feedback is driven by regular tests and releases of the evolving software.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Time period: &amp;lt;/strong&amp;gt;Agile methods differ from iterative methods in that their time period is measured in weeks rather than months. Most agile methods also differ by treating their time period as a strict timebox.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Process and People Orientation: &amp;lt;/strong&amp;gt;A team doing iterative software development could value processes and tools over people and interactions while agile is people oriented interacting more with the customer.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Documentation: &amp;lt;/strong&amp;gt;Iterative model values comprehensive documentation over working software while agile model is characterized by low documentation and more thrust on working software.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Contract: &amp;lt;/strong&amp;gt;Iterative models follow a fixed contract with the customer. However, agile models allows customer to pay for first few iterations and then decide on the type of contract to be entered into.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Customer role: &amp;lt;/strong&amp;gt;In iterative model, customer’s involvement is focused on contract supervision while in agile model has dedicated, knowledgeable, collaborated, collocated onsite customers &lt;br /&gt;
*&amp;lt;strong&amp;gt;Team size: &amp;lt;/strong&amp;gt;Iterative model has large team size while agile model has large team size.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Developers: &amp;lt;/strong&amp;gt;In iterative model developers are plan oriented while in agile model developers flexible and can work with changes in plan.&lt;br /&gt;
&lt;br /&gt;
==Agility in context==&lt;br /&gt;
Agility in context is a new trend to make agile methodologies more relevant to a wide range of projects. This makes it stand out from other software development methodologies. Instead of applying all the steps by-the-book, the process is customized to accommodate changes. Few examples are as follows&lt;br /&gt;
*Insufficient customer involvement can result in confused and incomplete requirement document and bring project to a standstill. To avoid this, methods such as story owner and customer proxy are used.&lt;br /&gt;
*The constraints in fixed bid contract make it difficult to make the project agile. Options like offering a customer to buy few iterations to see how the development is going and then sign the contract or swapping a feature or two makes pricing flexible.&lt;br /&gt;
*Communication with clients that cannot come on site and teams that are located in different geographical areas   is improved using video conferencing, frequent sync calls and sharing wiki pages.&lt;br /&gt;
*Even though some projects are characterized by slow Rate of change making them fall into other software development category, they can be good candidates for agile if other agile development methods can be applied to the project effectively&lt;br /&gt;
&lt;br /&gt;
==Limitations of agile methodology ==&lt;br /&gt;
&lt;br /&gt;
*They are difficult when used with the large teams. (Team having members more than 20).&lt;br /&gt;
*Customer is considered as part of the development team throughout the whole development of the software. Change in the customer side representative may result into change in the requirements.&lt;br /&gt;
*It does not support traditional walkthroughs and code inspections during the life-cycle. Instead it emphasizes on pair programming and informal reviews as their quality control mechanism. This is not enough of the critical software.&lt;br /&gt;
*It relies on tacit knowledge embodied by the team, rather than writing the knowledge down as documentation. Thus, there is a risk that this may lead to architectural mistakes that cannot be easily detected by external reviewers due to the lack of documentation.&lt;br /&gt;
*It does not work best, when the requirements are predictable.&lt;br /&gt;
*Lack of documentation may result into failure in understanding the project in future by an outside expert.&lt;br /&gt;
*User interface are developed using the paper prototype based approach rather than model-driven design. &lt;br /&gt;
&lt;br /&gt;
==Limitations of other software development methodologies==&lt;br /&gt;
*Lack of customer interaction results into last moment surprises.&lt;br /&gt;
*Incorporation of the changes during the software development cycle is very difficult task.&lt;br /&gt;
*High amount of prediction is required which result into higher risk involved.&lt;br /&gt;
*Documentation consumes lot of time in the software development cycle.&lt;br /&gt;
*More pre-planning is required compared to agile methods.&lt;br /&gt;
*Stringent team structure may result into conflicts.&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
Agile methods work well for projects characterized by small; co-located teams; interactive customers involved in decisions on requirements; frequently changing requirements (weeks or months); variable price contracts; and few legal or regulatory constraints on development processes where as heavyweight methods can handle complex  large software team dispersed over multiple domains, functions, and geographical areas efficiently. &lt;br /&gt;
Heavyweight approaches have their need in large, long lived projects that have a special safety, reliability or security requirements. However, the steps in agile models can be modified and customized to suit the demands of a project. This agility in context offers many benefits and is the reason for adoption of agile methodologies widely in these areas too.&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&lt;br /&gt;
[1] http://www.buzzle.com/articles/waterfall-model-vs-agile.html&lt;br /&gt;
&lt;br /&gt;
[2] M. A. Awad, &amp;lt;i&amp;gt;&amp;quot;A Comparison between Agile and Traditional Software Development Methodologies&amp;quot;&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[3] Boehm B, &amp;lt;i&amp;gt;&amp;quot;A Spiral Model of Software Development and Enhancement&amp;quot;&amp;lt;/i&amp;gt;ACM SIGSOFT Software Engineering Notes&amp;quot;, &amp;quot;ACM&amp;quot;, 11(4):14-24, August 1986&lt;br /&gt;
&lt;br /&gt;
[4] Rashina H, Philippe K, James N and Stuart M, &amp;lt;i&amp;gt;”Agility in Context”&amp;lt;/i&amp;gt;, ACM OOOPSLA 2010&lt;/div&gt;</summary>
		<author><name>Bluehat</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6d_NM&amp;diff=41932</id>
		<title>CSC/ECE 517 Fall 2010/ch6 6d NM</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch6_6d_NM&amp;diff=41932"/>
		<updated>2010-11-18T04:20:37Z</updated>

		<summary type="html">&lt;p&gt;Bluehat: /* Agility in context */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Agile vs. other software-development methods'''&lt;br /&gt;
==Software development methodologies==&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Software_development_methodology Software development methodology] is a methodical approach or a framework to the software development process, in order to develop software with high quality and less defects. It helps the development team to plan and structure the process in advance. A wide range of such methodologies	exist in the Software engineering field with their own characteristics. &lt;br /&gt;
&lt;br /&gt;
===Types of Software development methodologies===&lt;br /&gt;
There are wide variety of software development approaches used in the industry. Few of them are,&lt;br /&gt;
*Waterfall Approach : linear framework type.&lt;br /&gt;
*Prototyping Approach : iterative framework type&lt;br /&gt;
*Incremental Approach: combination of linear and iterative framework type&lt;br /&gt;
*Spiral Approach : combination of linear and iterative framework type&lt;br /&gt;
*Rapid Application Development (RAD) Approach: Iterative Framework Type&lt;br /&gt;
*Agile Methodologies&lt;br /&gt;
&lt;br /&gt;
==Agile introduction==&lt;br /&gt;
[http://en.wikipedia.org/wiki/Software_development_methodology Software development methodology Agile]  means – moving quickly and lightly. Similarly, the goal of [http://en.wikipedia.org/wiki/Agile_software_development Agile methodology] is to offer lighter weight solution to the rapidly paced software development processes. It refers to the group of software development methodologies that are based on iterative software development methods. In the Iterative approach the requirements and solutions evolve through the collaboration between self-organizing cross-functional teams. &lt;br /&gt;
	Agile methods break the entire software development into small increments. Each of these iteration involves a team all the essential parts of the software development cycle including planning, requirements analysis, design, coding, and testing. Thus, it reduces the risk involved with the software development and makes it easy to adapt to the new changes. Completion of multiple iterations eventually results into final product. Agile methodology follows principles such as Customer satisfaction, face-to-face communication, simplicity, Self-organizing teams, etc..&lt;br /&gt;
Well-known agile methods include&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Agile_Unified_Process Agile Unified Process (AUP)]- simple, easy to understand approach to developing business application software using agile techniques and concepts yet still remaining true to the RUP&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Dynamic_Systems_Development_Method Dynamic Systems Development Method (DSDM)]-  iterative and incremental approach that emphasizes continuous user involvement&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Essential_Unified_Process Essential Unified Process (EssUP) ]-  identifies practices, such as use cases, iterative development, architecture driven development, team practices and process practices, which are borrowed from RUP, CMMI and agile development&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Extreme_Programming Extreme Programming (XP)]-  intended to improve software quality and responsiveness to changing customer requirements&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Feature_Driven_Development Feature Driven Development (FDD)]- model-driven short-iteration process&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Open_Unified_Process Open Unified Process (OpenUP)]-  a part of the Eclipse Process Framework (EPF), an open source process framework developed within the Eclipse Foundation. Its goals are to make it easy to adopt the core of the RUP / Unified Process&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Scrum_(development)Scrum]- a process skeleton that contains sets of practices and predefined roles.&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Velocity_tracking Velocity tracking]– tracking a measure of productivity sometimes used in agile software development&lt;br /&gt;
&lt;br /&gt;
[[Image:Crccard2.jpg|frame|center|Agile Software development]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Agile vs waterfall==&lt;br /&gt;
===Waterfall===&lt;br /&gt;
Waterfall model is the traditional sequential process of software development. Like in a waterfall, the water progressively falls from the higher attitude to the lower, in a similar way, the software production cycle progresses sequentially. The waterfall model phases of software development are as follows: requirement specification, conception, analysis, design, coding, testing &amp;amp; debugging, installation and finally maintenance.&lt;br /&gt;
&lt;br /&gt;
[[Image:|frame|center|Waterfall model]]&lt;br /&gt;
&lt;br /&gt;
===Comparison with Agile===&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Customer requirements: &amp;lt;/strong&amp;gt; For the team using Agile method, They are totally unclear and evolves as the work progresses. But for the Waterfall method it is known completely before moving to the next step of the development. They are more stable compared with the requirements of the Agile. The requirement gathering phase consumes considerable amount of time of the entire software development life cycle. No last minute changes are possible in Waterfall whereas they can be easily incorporated using the Agile methodology.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Team Structure: &amp;lt;/strong&amp;gt; The team structure in Agile is cross functional, closely knit and self-organizing. The team work on the entire iteration which includes all the phases of software development. Whereas in Waterfall, each team is dedicated for each phase of the software development cycle.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Customer interaction: &amp;lt;/strong&amp;gt;For Agile, the customer interaction is only in the earlier stage of the cycle. Whereas in Agile, there needs to be continuous interaction of the customer with the development team&lt;br /&gt;
*&amp;lt;strong&amp;gt;Contract (cost):&amp;lt;/strong&amp;gt; As the requirements are unclear and not stable, It is very difficult to decide on the cost of the developing the software in the case of Agile methodology. However, in the case of Waterfall, the cost can be easily manipulated using the requirements defined in the first stage.&lt;br /&gt;
&lt;br /&gt;
==Agile Vs Spiral==&lt;br /&gt;
===Spiral model===&lt;br /&gt;
Spiral model combines good features of top down and bottom up approach of software development. It combines the features of waterfall as well as prototype modeling. The model is both incremental and iterative. The spiral method is planned methodically, with tasks and deliverables identified for each step in the spiral. A prototype is first created based on requirements and scaled down to represent the final product. It is then analyzed for improvements and a better and efficient prototype is built. This process is continued till the best prototype is created.&lt;br /&gt;
&lt;br /&gt;
[[Image:Crccard2.jpg|frame|center|Spiral model]]&lt;br /&gt;
&lt;br /&gt;
===Comparison with Agile===&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Requirement: &amp;lt;/strong&amp;gt; in spiral methodology, the system requirement are described in detail and once the requirements are defined and considered final, work is started. However, in agile methodology requirements are not very clear in initial iterations. It becomes clear after few iterations of product development. &lt;br /&gt;
*&amp;lt;strong&amp;gt;Design: &amp;lt;/strong&amp;gt;The basic difference is that most Spiral models of development still insist on big, up-front design. The emphasis is on knowing as much as you can about how the system will be used; discovering all the use cases. Once you know these, then you design the system and break it down into phases that follow an iterative detail-design, implementation, test, refactor-design loop. In Agile, their is some up-front planning -- perhaps gathering large grain understanding (story titles) -- so that reasonable releases can be described, but each release is planned independently and we delay discovery of the details until we are ready to begin implementation of that release. We expect change and don't try to know everything first.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Customer Involvement: &amp;lt;/strong&amp;gt; Customer is involved in the requirement specification stage and in reviewing the prototypes. Constant customer involvement is not necessary. However, agile methodology involves heavy interaction with customers. Success depends on timely and adequate feedback from customer.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Project size: &amp;lt;/strong&amp;gt;The spiral model is intended for large and complicated projects. Agile model works best with small projects&lt;br /&gt;
*&amp;lt;strong&amp;gt;Cycles:&amp;lt;/strong&amp;gt;Spiral model has limited cycles till the best prototype is decided upon while agile model has numerous cycles. Cycles in spiral model are prototype cycles as against getting what customer wants as final product in agile model.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Risk: &amp;lt;/strong&amp;gt;Spiral model has known risks while &lt;br /&gt;
*&amp;lt;strong&amp;gt;Cost: &amp;lt;/strong&amp;gt;spiral models are usually expensive compared to Agile models&lt;br /&gt;
*&amp;lt;strong&amp;gt;Testing: &amp;lt;/strong&amp;gt;Another thing that differs is that most Agile philosophies involve &amp;quot;test-first&amp;quot; methods. This is different from spiral where testing is often an activity unto itself and tests are not developed prior to code. Most often they are planned in advance, but developed in parallel or after coding. Many agile methods insist on developing tests first as the specification for the code.&lt;br /&gt;
&lt;br /&gt;
==Agile vs Iterative==&lt;br /&gt;
===Iterative Software development===&lt;br /&gt;
Iterative development starts with an initial planning followed by many iterations of requirement, analysis, design, testing and implementation steps and ends with deployment. After each iteration, analysis is done to make sure that the required functionality is implemented and additional functionalities that need to be implemented are identified. Such iterations make modification and implementation easy. Iterative development prescribes the construction of initially small but ever larger portions of a software project to help all those involved to uncover important issues early before problems or faulty assumptions can lead to disaster.&lt;br /&gt;
&lt;br /&gt;
[[Image:Crccard2.jpg|frame|center|Iterative Software development model]]&lt;br /&gt;
&lt;br /&gt;
===Comparison with Agile===&lt;br /&gt;
&lt;br /&gt;
Agile software development uses iterative development as a basis but advocates a lighter and more people-centric viewpoint than traditional approaches. Agile processes use feedback, rather than planning, as their primary control mechanism. The feedback is driven by regular tests and releases of the evolving software.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;strong&amp;gt;Time period: &amp;lt;/strong&amp;gt;Agile methods differ from iterative methods in that their time period is measured in weeks rather than months. Most agile methods also differ by treating their time period as a strict timebox.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Process and People Orientation: &amp;lt;/strong&amp;gt;A team doing iterative software development could value processes and tools over people and interactions while agile is people oriented interacting more with the customer.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Documentation: &amp;lt;/strong&amp;gt;Iterative model values comprehensive documentation over working software while agile model is characterized by low documentation and more thrust on working software.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Contract: &amp;lt;/strong&amp;gt;Iterative models follow a fixed contract with the customer. However, agile models allows customer to pay for first few iterations and then decide on the type of contract to be entered into.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Customer role: &amp;lt;/strong&amp;gt;In iterative model, customer’s involvement is focused on contract supervision while in agile model has dedicated, knowledgeable, collaborated, collocated onsite customers &lt;br /&gt;
*&amp;lt;strong&amp;gt;Team size: &amp;lt;/strong&amp;gt;Iterative model has large team size while agile model has large team size.&lt;br /&gt;
*&amp;lt;strong&amp;gt;Developers: &amp;lt;/strong&amp;gt;In iterative model developers are plan oriented while in agile model developers flexible and can work with changes in plan.&lt;br /&gt;
&lt;br /&gt;
==Agility in context==&lt;br /&gt;
Agility in context is a new trend to make agile methodologies more relevant to a wide range of projects. This makes it stand out from other software development methodologies. Instead of applying all the steps by-the-book, the process is customized to accommodate changes. Few examples are as follows&lt;br /&gt;
*Insufficient customer involvement can result in confused and incomplete requirement document and bring project to a standstill. To avoid this, methods such as story owner and customer proxy are used.&lt;br /&gt;
*The constraints in fixed bid contract make it difficult to make the project agile. Options like offering a customer to buy few iterations to see how the development is going and then sign the contract or swapping a feature or two makes pricing flexible.&lt;br /&gt;
*Communication with clients that cannot come on site and teams that are located in different geographical areas   is improved using video conferencing, frequency sync calls and sharing wiki pages.&lt;br /&gt;
*Even though some projects are characterized by Slow Rate of Change making them fall into other software methodology development category, they can be good candidates for agile if other agile development methods can be applied to the project&lt;br /&gt;
&lt;br /&gt;
==Limitations of agile methodology ==&lt;br /&gt;
&lt;br /&gt;
*They are difficult when used with the large teams. (Team having members more than 20).&lt;br /&gt;
*Customer is considered as part of the development team throughout the whole development of the software. Change in the customer side representative may result into change in the requirements.&lt;br /&gt;
*It does not support traditional walkthroughs and code inspections during the life-cycle. Instead it emphasizes on pair programming and informal reviews as their quality control mechanism. This is not enough of the critical software.&lt;br /&gt;
*It relies on tacit knowledge embodied by the team, rather than writing the knowledge down as documentation. Thus, there is a risk that this may lead to architectural mistakes that cannot be easily detected by external reviewers due to the lack of documentation.&lt;br /&gt;
*It does not work best, when the requirements are predictable.&lt;br /&gt;
*Lack of documentation may result into failure in understanding the project in future by an outside expert.&lt;br /&gt;
*User interface are developed using the paper prototype based approach rather than model-driven design. &lt;br /&gt;
&lt;br /&gt;
==Limitations of other software development methodologies==&lt;br /&gt;
*Lack of customer interaction results into last moment surprises.&lt;br /&gt;
*Incorporation of the changes during the software development cycle is very difficult task.&lt;br /&gt;
*High amount of prediction is required which result into higher risk involved.&lt;br /&gt;
*Documentation consumes lot of time in the software development cycle.&lt;br /&gt;
*More pre-planning is required compared to agile methods.&lt;br /&gt;
*Stringent team structure may result into conflicts.&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
Agile methods work well for projects characterized by small; co-located teams; interactive customers involved in decisions on requirements; frequently changing requirements (weeks or months); variable price contracts; and few legal or regulatory constraints on development processes where as heavyweight methods can handle complex  large software team dispersed over multiple domains, functions, and geographical areas efficiently. &lt;br /&gt;
Heavyweight approaches have their need in large, long lived projects that have a special safety, reliability or security requirements. However, the steps in agile models can be modified and customized to suit the demands of a project. This agility in context offers many benefits and is the reason for adoption of agile methodologies widely in these areas too.&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&lt;br /&gt;
[1] http://www.buzzle.com/articles/waterfall-model-vs-agile.html&lt;br /&gt;
&lt;br /&gt;
[2] M. A. Awad, &amp;lt;i&amp;gt;&amp;quot;A Comparison between Agile and Traditional Software Development Methodologies&amp;quot;&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[3] Boehm B, &amp;lt;i&amp;gt;&amp;quot;A Spiral Model of Software Development and Enhancement&amp;quot;&amp;lt;/i&amp;gt;ACM SIGSOFT Software Engineering Notes&amp;quot;, &amp;quot;ACM&amp;quot;, 11(4):14-24, August 1986&lt;br /&gt;
&lt;br /&gt;
[4] Rashina H, Philippe K, James N and Stuart M, &amp;lt;i&amp;gt;”Agility in Context”&amp;lt;/i&amp;gt;, ACM OOOPSLA 2010&lt;/div&gt;</summary>
		<author><name>Bluehat</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch2_S20_st&amp;diff=34536</id>
		<title>CSC/ECE 517 Fall 2010/ch2 S20 st</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch2_S20_st&amp;diff=34536"/>
		<updated>2010-09-09T02:38:02Z</updated>

		<summary type="html">&lt;p&gt;Bluehat: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;*[[CSC/ECE 517 Fall 2010/ch1 1a vc]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch1 S10 MS]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch1 1a br]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch1 S10 MM]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch1 S23 GP]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch1 S6 aa]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch1 1e bb]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch1 n 00]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch1 1c JF]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch1 S10 GP]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch1 1f vn]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2010/ch1 S6 km]]&lt;/div&gt;</summary>
		<author><name>Bluehat</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch1_S6_km&amp;diff=34003</id>
		<title>CSC/ECE 517 Fall 2010/ch1 S6 km</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch1_S6_km&amp;diff=34003"/>
		<updated>2010-09-08T21:03:56Z</updated>

		<summary type="html">&lt;p&gt;Bluehat: /* CRC cards Limitations and formal object modeling methodologies(UML) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
The onset of the object oriented paradigm in the software industry brought about a big change in the basic approach to system design and the software development life cycle.The major task in the development of any application using the object oriented paradigm is to identify ‘classes’, and how these classes interact and collaborate with each other in the system scope. &lt;br /&gt;
&lt;br /&gt;
Whenever a system is designed with classes, each class has a specific role to play in the system.It has certain responsibilities and each class collaborates with other classes to provide the complete system functionality. In such a scenario, identifying classes becomes the key to a good system design.Although it seems to be a simple,intuitive process,identifying classes can be quite complex when it comes to large scale systems. &lt;br /&gt;
&lt;br /&gt;
One such technique for identification of classes that make up the system and its collaborations is the ‘CRC Card’ technique. The concept of CRC cards was first put forth by Kent Beck and Ward Cunningham and it became very popular as it is easy to use and it supports development of any kind of object oriented development regardless of its scale,the method used, the technology or the language used for development&lt;br /&gt;
&lt;br /&gt;
==Definition==&lt;br /&gt;
Class Responsibility Collaboration (CRC) cards is an object-oriented design method that uses ordinary 3x5 index cards card made for each class containing responsibilities (knowledge and services) and collaborators (interactions with other classes). The cards provide an informal, intuitive way for group members to work on object design together.[1]&lt;br /&gt;
A typical CRC card layout is shown below.&lt;br /&gt;
[[Image:Crccard2.jpg|frame|center|CRC CARD Template]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example: Consider a Student class where a student can enroll for a seminar. In this case ‘Student’ will be one class and ‘Seminar’ can be another class that collaborates with the Student class.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:CrcStudent.jpg|frame|center|Student CRC Card ]]&lt;br /&gt;
&lt;br /&gt;
To know more about CRC cards please refer to http://www.hsanchez.net/repository/hsanchez-PLCRC-plop04.pdf&lt;br /&gt;
&lt;br /&gt;
==Principle and Process==&lt;br /&gt;
&lt;br /&gt;
===CRC Principle===&lt;br /&gt;
&lt;br /&gt;
A CRC model includes a collection of cards and each card is divided into three sections. &lt;br /&gt;
*Class Name: &lt;br /&gt;
**Appears on the top of the CRC card&lt;br /&gt;
**Class denotes a set of similar objects that are being modeled in the system&lt;br /&gt;
&lt;br /&gt;
*Responsibilities:&lt;br /&gt;
**Appears on the left hand side of the CRC card&lt;br /&gt;
**It is a list of the responsibilities of the class i.e. things a class can do with its knowledge&lt;br /&gt;
&lt;br /&gt;
*Collaborators:&lt;br /&gt;
**Appear on the right hand side of the CRC card&lt;br /&gt;
**They are other classes that the class works with to get information or perform a certain function&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===CRC Process===&lt;br /&gt;
&lt;br /&gt;
CRC modeling process includes the users, analysts and developers bringing together the entire development team to form a common understanding of an OO development project.For e.g consider a software application to implement a game of blackjack. To implement the CRC technique to design this software, following steps are taken:&lt;br /&gt;
&lt;br /&gt;
*Explanation of the CRC Technique&lt;br /&gt;
**The facilitator explains the purpose of the CRC modeling session&lt;br /&gt;
**It can include explanation of CRC Cards and creation of sample CRC Cards&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Brainstorming&lt;br /&gt;
**A brainstorming session at the very beginning brings in new ideas, new perspectives to the problem being solved.&lt;br /&gt;
**Every team member can contribute with innovative ideas&lt;br /&gt;
**A list of candidate classes can be drawn up from this activity&lt;br /&gt;
&lt;br /&gt;
For e.g considering the above example, we can identify candidate classes by listing down the nouns relating to the game of blackjack. Say, game, blackjack, dealer, players, card, deck, hand, bet, king, queen, jack, ace, suit, winner, game.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Selecting a scenario and Core classes&lt;br /&gt;
**The scenario chosen at the beginning of the session should be simple, clear and well documented&lt;br /&gt;
**Related scenarios should be identified and dealt with separately&lt;br /&gt;
**Identification of critical classes from the candidate class list is also very important&lt;br /&gt;
**This helps to eliminate irrelevant classes and review remaining classes&lt;br /&gt;
**This also helps clarify the system scope&lt;br /&gt;
&lt;br /&gt;
For e.g we can apply the elimination process to the candidate class list. We can eliminate blackjack as it is the name of the system. ‘House’ can be eliminated as it is another name for the dealer. Also, instead of making ace, king, queen and jack as separate classes, we can represent them as attributes of individual classes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Create initial CRC cards&lt;br /&gt;
From the information gathered in the step above, CRC cards are written&lt;br /&gt;
&lt;br /&gt;
[[Image:Deck1.jpg |frame|center|Deck CRC Card]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Dealer.jpg |frame|center|Dealer CRC Card]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Player.jpg |frame|center|Player CRC Card]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Creating a CRC Model&lt;br /&gt;
**After the CRC cards  are written, they are placed appropriately, with collaborating classes closer to each other.&lt;br /&gt;
**Accordingly, place each card in position till the entire picture of the system is finalized.&lt;br /&gt;
**This process may have to be done in several iterations to get a refined view of the system to be modeled.&lt;br /&gt;
&lt;br /&gt;
For more information on using CRC Cards please refer to http://alistair.cockburn.us/Using+CRC+cards&lt;br /&gt;
&lt;br /&gt;
==CRC Team==&lt;br /&gt;
&lt;br /&gt;
*Domain Experts:&lt;br /&gt;
**Core team that writes the cards&lt;br /&gt;
**Have good business domain knowledge for which the system is being designed&lt;br /&gt;
**Usually are 3-5 people&lt;br /&gt;
&lt;br /&gt;
*Object Oriented Design Analyst:&lt;br /&gt;
**Analysts and developers those are familiar with object oriented design methodologies&lt;br /&gt;
**Usually are 1-2 people&lt;br /&gt;
&lt;br /&gt;
*Facilitator:&lt;br /&gt;
**Most important member who conducts the CRC modeling session&lt;br /&gt;
**Acts as an intermediary when there is difference of opinion regarding class responsibilities and paths of collaboration&lt;br /&gt;
**Usually a single person&lt;br /&gt;
&lt;br /&gt;
*Scribe:&lt;br /&gt;
**Responsible for documenting any business logic that evolves by way of discussions during the CRC modeling process.&lt;br /&gt;
**This documentation can be added to the requirements and business documents which can be used by design analysts at a later stage&lt;br /&gt;
**Usually are 1-2 people&lt;br /&gt;
&lt;br /&gt;
==Case study==&lt;br /&gt;
&lt;br /&gt;
To understand the working of CRC card modeling better, here is an example of an ATM system designed using CRC cards. Here, the software system under consideration has to control an automated teller machine. The ATM has a magnetic stripe reader for reading an ATM card, a customer console (keyboard and display) for interaction with the customer, a slot for depositing envelopes, a dispenser for cash (in multiples of $20), a printer for printing customer receipts, and a key-operated switch to allow an operator to start or stop the machine. Also, the ATM will communicate with the bank's computer over an appropriate communication link.&lt;br /&gt;
&lt;br /&gt;
To perform a transaction, a customer will be required to insert an ATM card and enter a personal identification number (PIN) - both of which will be sent to the bank for validation. The customer will then be able to perform one or more transactions. The card will be retained in the machine until the customer indicates that there are no further transactions, at which point it will be returned. For more on the case study.&lt;br /&gt;
&lt;br /&gt;
http://www.math-cs.gordon.edu/courses/cps211/ATMExample/CRCCards.html&lt;br /&gt;
&lt;br /&gt;
==Metrics for CRC Analysis==&lt;br /&gt;
&lt;br /&gt;
CRC analysis metrics can help evaluate the level of ease in designing and coding with CRC cards. These metrics also contribute to other project planning factors to give overall sense of project development.These metrics can be calculated easily and quickly without the need of special tools. Three metrics are broadly identified as: maximum depth of inheritance, the number of responsibilities assigned to each class and the number of collaborators for a class. With the example below an attempt has been made to explain these metrics.In the diagram, black line indicates inheritance while blue line indicates collaboration. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Class_hierarchy1.png|frame|center|CRC metrics example]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Maximum depth of inheritance===&lt;br /&gt;
&lt;br /&gt;
This metric gives an idea of the class hierarchy. It is the count of number of subclasses in the hierarchy.[6] From the diagram,it can be seen that Part Time student is a subclass of Distance Education which in turn is a subclass of student.Thus,maximum depth of inheritance in this case is two with  reference to class Student. Each subclass shares the overall functions defined in class Student. For short hierarchies, this is a positive benefit of OO. If number of subclasses become too long, it becomes difficult to trace the flow of functions, resulting in overly complex systems. This makes testing, reviewing and reusing difficult.&lt;br /&gt;
&lt;br /&gt;
===Number of collaborators===&lt;br /&gt;
&lt;br /&gt;
This is the count of all the supporting classes to help a class.[6] In the diagram,there are four collaborators for class Student:Teacher,Library,Computer Labs and Gymnasium.Confusion between collaborators and subclasses may result in creation many collaborators.This will affect the encapsulation of the design.Typical value for this metric is eight.If this value is large,design may be reviewed to see if inheritance is implemented correctly.&lt;br /&gt;
&lt;br /&gt;
===Number of responsibilities===&lt;br /&gt;
This is the count of clearly defined set of duties to each class.[6] For example class Student may have functions like Attending  Lectures,&lt;br /&gt;
Maintaining a certain GPA,Taking the required courses. In this case number of responsibilities is three.Responsibilities should be distributed amongst classes to cover the whole system. This would avoid an imbalance in design. We need to refine the overly complex class into a series of simpler objects. This will make the system easier to understand, implement and reuse. For most commercial transaction oriented systems, values approximately between eight and eighteen are common.&lt;br /&gt;
&lt;br /&gt;
==Advantages==&lt;br /&gt;
* CRC cards create a first-cut analysis for complex systems, and let analysts and users examine the operation of discrete subsystems.&lt;br /&gt;
* CRC cards are invaluable input into more formal methods. Agile development methods often use CRC cards. They are popular as a front end to UML&lt;br /&gt;
* CRC cards are a great way to build teamwork and common understanding.&lt;br /&gt;
* Part of the CRC card attraction is their simplicity. Developers can use them with little formal training and just paper and pencil for tools&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Software for CRC card==&lt;br /&gt;
&lt;br /&gt;
It is difficult to maintain, change, share paper based cards for large projects. Software for CRC cards offer many advantages in such scenarios such as&lt;br /&gt;
&lt;br /&gt;
*Easy Revision: As CRC cards are part of development process, constant changes are made by developers to edit the information .Change to one card might require changes to other cards. It becomes difficult to handle such interdependent changes for various fields such as attribute, responsibility, collaboration on paper based system. Software will reflect one change to every corresponding reference in the design. This saves a lot of time and also avoids the manual errors that may be evident on paper based system.&lt;br /&gt;
&lt;br /&gt;
*Easy sharing: Paper based systems make sharing difficult by necessitating team members to be physically present at one location. Using software, team members can work from different locations.&lt;br /&gt;
&lt;br /&gt;
*Better representation: It is possible to group cards from different perspective such as hierarchy, attributes, parent. This helps better understanding and thinking. Some software also aid graphical display of data.&lt;br /&gt;
&lt;br /&gt;
*Inputs to methodologies: Software for CRC cards can provide the input files for UML class diagram generation software saving lot of time in the development cycle.&lt;br /&gt;
&lt;br /&gt;
*Making additions to existing code: Many projects   make addition to existing code or reuse already developed code in their project. Software can produce CRC cards with existing source code as an input. This would help the team to understand the code in efficient manner and less time.&lt;br /&gt;
&lt;br /&gt;
However,it comes with a cost.Based on required features and cost,team may select from various commercially available software products.Below are few links:&lt;br /&gt;
&lt;br /&gt;
*quickCRC:http://www.excelsoftware.com/quickcrcwin.html [4]&lt;br /&gt;
*CRC card support is part of Visual Paradigm for UML:  http://www.visual-paradigm.com/download/vpuml.jsp [5]&lt;br /&gt;
&lt;br /&gt;
==CRC cards Limitations and formal object modeling methodologies(UML)==&lt;br /&gt;
&lt;br /&gt;
CRC cards are used to form initial class definitions but alone are not sufficient to be directly coded into software for large systems.It is difficult to keep track of cards as the systems grows and work on subsystems simultaneously and independently.CRC cards lack the notational power to document all the components of a system and cannot provide implementation specifications such as transition states of objects during its life cycle,interface design,data structures,performance and resource utilization.[6] &lt;br /&gt;
&lt;br /&gt;
To bridge this gap,more formal object modeling methodology such as UML is used.UML captures the bigger picture.It provides detailed mapping of use cases(operations),object state transitions,inter-process communication functionality,algorithm design.UML is very effective in incremental model of SDLC where  lot of details need to captured for precise addition.Information  about requirements is represented in detail and whole picture of the system and users is visible.&lt;br /&gt;
&lt;br /&gt;
CRC cards are used as effective inputs to UML.CRC card techniques such as brainstorming and role play help enhance functional understanding which helps in preparing better UML use cases.CRC cards given the content for  class diagrams,inheritance diagrams,class specifications and object specifications for UML.CRC cards can keep track of attributes that can aid listing them as a part of class specification in UML.Most CRC card software have the facility to export CRC analysis file that can be directly used as an input for UML.&lt;br /&gt;
Following case study develops UML with the help of CRC cards:&lt;br /&gt;
&lt;br /&gt;
http://www.math.gordon.edu/courses/cs211/ATMExample/  [3]&lt;br /&gt;
&lt;br /&gt;
==Summary==&lt;br /&gt;
CRC cards are very useful to form the base of object oriented methodology.Techniques such as brain storming and role play enhance the understanding of requirements.CRC automation makes card handling and sharing  quick and efficient.For large projects more formal technology such as UML is required but CRC cards can provide a very good starting point.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Reference==&lt;br /&gt;
[1]Rubin,D.M, Introduction to CRC Cards, Methodologies and Practices.Revised January 1998,SOFTSTAR RESEARCH,INC: http://www.softstar-inc.com/Download/Intro%20to%20CRC.pdf&lt;br /&gt;
&lt;br /&gt;
[2]Bjork,R.C, CRC cards for ATM, Object-Oriented Software Development.Retrieved September 6,2010,from Computer Science Department, Gordon College:: http://www.math-cs.gordon.edu/courses/cps211/ATMExample/CRCCards.html&lt;br /&gt;
&lt;br /&gt;
[3]Bjork,R.C, ATMExample, Object-Oriented Software Development.Retrieved September 5,2010,from Computer Science Department, Gordon College: http://www.math.gordon.edu/courses/cs211/ATMExample/&lt;br /&gt;
&lt;br /&gt;
[4]quickCRC,Excel Software.Retrieved on September 5,2010 from Excel Software,Software Development Tools:http://www.excelsoftware.com/quickcrcwin.html&lt;br /&gt;
&lt;br /&gt;
[5]Visual Paradigm for UML 8.0 Enterprise Edition,Retrieved September 5,2010, from Visual Paradigm: http://www.visual-paradigm.com/download/vpuml.jsp   &lt;br /&gt;
         &lt;br /&gt;
[6]Bellin, D and Simone, S.S ‘The CRC Card Book’, Addison Wesley, 1997&lt;/div&gt;</summary>
		<author><name>Bluehat</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch1_S6_km&amp;diff=34000</id>
		<title>CSC/ECE 517 Fall 2010/ch1 S6 km</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch1_S6_km&amp;diff=34000"/>
		<updated>2010-09-08T21:02:29Z</updated>

		<summary type="html">&lt;p&gt;Bluehat: /* Software for CRC card */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
The onset of the object oriented paradigm in the software industry brought about a big change in the basic approach to system design and the software development life cycle.The major task in the development of any application using the object oriented paradigm is to identify ‘classes’, and how these classes interact and collaborate with each other in the system scope. &lt;br /&gt;
&lt;br /&gt;
Whenever a system is designed with classes, each class has a specific role to play in the system.It has certain responsibilities and each class collaborates with other classes to provide the complete system functionality. In such a scenario, identifying classes becomes the key to a good system design.Although it seems to be a simple,intuitive process,identifying classes can be quite complex when it comes to large scale systems. &lt;br /&gt;
&lt;br /&gt;
One such technique for identification of classes that make up the system and its collaborations is the ‘CRC Card’ technique. The concept of CRC cards was first put forth by Kent Beck and Ward Cunningham and it became very popular as it is easy to use and it supports development of any kind of object oriented development regardless of its scale,the method used, the technology or the language used for development&lt;br /&gt;
&lt;br /&gt;
==Definition==&lt;br /&gt;
Class Responsibility Collaboration (CRC) cards is an object-oriented design method that uses ordinary 3x5 index cards card made for each class containing responsibilities (knowledge and services) and collaborators (interactions with other classes). The cards provide an informal, intuitive way for group members to work on object design together.[1]&lt;br /&gt;
A typical CRC card layout is shown below.&lt;br /&gt;
[[Image:Crccard2.jpg|frame|center|CRC CARD Template]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example: Consider a Student class where a student can enroll for a seminar. In this case ‘Student’ will be one class and ‘Seminar’ can be another class that collaborates with the Student class.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:CrcStudent.jpg|frame|center|Student CRC Card ]]&lt;br /&gt;
&lt;br /&gt;
To know more about CRC cards please refer to http://www.hsanchez.net/repository/hsanchez-PLCRC-plop04.pdf&lt;br /&gt;
&lt;br /&gt;
==Principle and Process==&lt;br /&gt;
&lt;br /&gt;
===CRC Principle===&lt;br /&gt;
&lt;br /&gt;
A CRC model includes a collection of cards and each card is divided into three sections. &lt;br /&gt;
*Class Name: &lt;br /&gt;
**Appears on the top of the CRC card&lt;br /&gt;
**Class denotes a set of similar objects that are being modeled in the system&lt;br /&gt;
&lt;br /&gt;
*Responsibilities:&lt;br /&gt;
**Appears on the left hand side of the CRC card&lt;br /&gt;
**It is a list of the responsibilities of the class i.e. things a class can do with its knowledge&lt;br /&gt;
&lt;br /&gt;
*Collaborators:&lt;br /&gt;
**Appear on the right hand side of the CRC card&lt;br /&gt;
**They are other classes that the class works with to get information or perform a certain function&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===CRC Process===&lt;br /&gt;
&lt;br /&gt;
CRC modeling process includes the users, analysts and developers bringing together the entire development team to form a common understanding of an OO development project.For e.g consider a software application to implement a game of blackjack. To implement the CRC technique to design this software, following steps are taken:&lt;br /&gt;
&lt;br /&gt;
*Explanation of the CRC Technique&lt;br /&gt;
**The facilitator explains the purpose of the CRC modeling session&lt;br /&gt;
**It can include explanation of CRC Cards and creation of sample CRC Cards&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Brainstorming&lt;br /&gt;
**A brainstorming session at the very beginning brings in new ideas, new perspectives to the problem being solved.&lt;br /&gt;
**Every team member can contribute with innovative ideas&lt;br /&gt;
**A list of candidate classes can be drawn up from this activity&lt;br /&gt;
&lt;br /&gt;
For e.g considering the above example, we can identify candidate classes by listing down the nouns relating to the game of blackjack. Say, game, blackjack, dealer, players, card, deck, hand, bet, king, queen, jack, ace, suit, winner, game.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Selecting a scenario and Core classes&lt;br /&gt;
**The scenario chosen at the beginning of the session should be simple, clear and well documented&lt;br /&gt;
**Related scenarios should be identified and dealt with separately&lt;br /&gt;
**Identification of critical classes from the candidate class list is also very important&lt;br /&gt;
**This helps to eliminate irrelevant classes and review remaining classes&lt;br /&gt;
**This also helps clarify the system scope&lt;br /&gt;
&lt;br /&gt;
For e.g we can apply the elimination process to the candidate class list. We can eliminate blackjack as it is the name of the system. ‘House’ can be eliminated as it is another name for the dealer. Also, instead of making ace, king, queen and jack as separate classes, we can represent them as attributes of individual classes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Create initial CRC cards&lt;br /&gt;
From the information gathered in the step above, CRC cards are written&lt;br /&gt;
&lt;br /&gt;
[[Image:Deck1.jpg |frame|center|Deck CRC Card]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Dealer.jpg |frame|center|Dealer CRC Card]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Player.jpg |frame|center|Player CRC Card]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Creating a CRC Model&lt;br /&gt;
**After the CRC cards  are written, they are placed appropriately, with collaborating classes closer to each other.&lt;br /&gt;
**Accordingly, place each card in position till the entire picture of the system is finalized.&lt;br /&gt;
**This process may have to be done in several iterations to get a refined view of the system to be modeled.&lt;br /&gt;
&lt;br /&gt;
For more information on using CRC Cards please refer to http://alistair.cockburn.us/Using+CRC+cards&lt;br /&gt;
&lt;br /&gt;
==CRC Team==&lt;br /&gt;
&lt;br /&gt;
*Domain Experts:&lt;br /&gt;
**Core team that writes the cards&lt;br /&gt;
**Have good business domain knowledge for which the system is being designed&lt;br /&gt;
**Usually are 3-5 people&lt;br /&gt;
&lt;br /&gt;
*Object Oriented Design Analyst:&lt;br /&gt;
**Analysts and developers those are familiar with object oriented design methodologies&lt;br /&gt;
**Usually are 1-2 people&lt;br /&gt;
&lt;br /&gt;
*Facilitator:&lt;br /&gt;
**Most important member who conducts the CRC modeling session&lt;br /&gt;
**Acts as an intermediary when there is difference of opinion regarding class responsibilities and paths of collaboration&lt;br /&gt;
**Usually a single person&lt;br /&gt;
&lt;br /&gt;
*Scribe:&lt;br /&gt;
**Responsible for documenting any business logic that evolves by way of discussions during the CRC modeling process.&lt;br /&gt;
**This documentation can be added to the requirements and business documents which can be used by design analysts at a later stage&lt;br /&gt;
**Usually are 1-2 people&lt;br /&gt;
&lt;br /&gt;
==Case study==&lt;br /&gt;
&lt;br /&gt;
To understand the working of CRC card modeling better, here is an example of an ATM system designed using CRC cards. Here, the software system under consideration has to control an automated teller machine. The ATM has a magnetic stripe reader for reading an ATM card, a customer console (keyboard and display) for interaction with the customer, a slot for depositing envelopes, a dispenser for cash (in multiples of $20), a printer for printing customer receipts, and a key-operated switch to allow an operator to start or stop the machine. Also, the ATM will communicate with the bank's computer over an appropriate communication link.&lt;br /&gt;
&lt;br /&gt;
To perform a transaction, a customer will be required to insert an ATM card and enter a personal identification number (PIN) - both of which will be sent to the bank for validation. The customer will then be able to perform one or more transactions. The card will be retained in the machine until the customer indicates that there are no further transactions, at which point it will be returned. For more on the case study.&lt;br /&gt;
&lt;br /&gt;
http://www.math-cs.gordon.edu/courses/cps211/ATMExample/CRCCards.html&lt;br /&gt;
&lt;br /&gt;
==Metrics for CRC Analysis==&lt;br /&gt;
&lt;br /&gt;
CRC analysis metrics can help evaluate the level of ease in designing and coding with CRC cards. These metrics also contribute to other project planning factors to give overall sense of project development.These metrics can be calculated easily and quickly without the need of special tools. Three metrics are broadly identified as: maximum depth of inheritance, the number of responsibilities assigned to each class and the number of collaborators for a class. With the example below an attempt has been made to explain these metrics.In the diagram, black line indicates inheritance while blue line indicates collaboration. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Class_hierarchy1.png|frame|center|CRC metrics example]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Maximum depth of inheritance===&lt;br /&gt;
&lt;br /&gt;
This metric gives an idea of the class hierarchy. It is the count of number of subclasses in the hierarchy.[6] From the diagram,it can be seen that Part Time student is a subclass of Distance Education which in turn is a subclass of student.Thus,maximum depth of inheritance in this case is two with  reference to class Student. Each subclass shares the overall functions defined in class Student. For short hierarchies, this is a positive benefit of OO. If number of subclasses become too long, it becomes difficult to trace the flow of functions, resulting in overly complex systems. This makes testing, reviewing and reusing difficult.&lt;br /&gt;
&lt;br /&gt;
===Number of collaborators===&lt;br /&gt;
&lt;br /&gt;
This is the count of all the supporting classes to help a class.[6] In the diagram,there are four collaborators for class Student:Teacher,Library,Computer Labs and Gymnasium.Confusion between collaborators and subclasses may result in creation many collaborators.This will affect the encapsulation of the design.Typical value for this metric is eight.If this value is large,design may be reviewed to see if inheritance is implemented correctly.&lt;br /&gt;
&lt;br /&gt;
===Number of responsibilities===&lt;br /&gt;
This is the count of clearly defined set of duties to each class.[6] For example class Student may have functions like Attending  Lectures,&lt;br /&gt;
Maintaining a certain GPA,Taking the required courses. In this case number of responsibilities is three.Responsibilities should be distributed amongst classes to cover the whole system. This would avoid an imbalance in design. We need to refine the overly complex class into a series of simpler objects. This will make the system easier to understand, implement and reuse. For most commercial transaction oriented systems, values approximately between eight and eighteen are common.&lt;br /&gt;
&lt;br /&gt;
==Advantages==&lt;br /&gt;
* CRC cards create a first-cut analysis for complex systems, and let analysts and users examine the operation of discrete subsystems.&lt;br /&gt;
* CRC cards are invaluable input into more formal methods. Agile development methods often use CRC cards. They are popular as a front end to UML&lt;br /&gt;
* CRC cards are a great way to build teamwork and common understanding.&lt;br /&gt;
* Part of the CRC card attraction is their simplicity. Developers can use them with little formal training and just paper and pencil for tools&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Software for CRC card==&lt;br /&gt;
&lt;br /&gt;
It is difficult to maintain, change, share paper based cards for large projects. Software for CRC cards offer many advantages in such scenarios such as&lt;br /&gt;
&lt;br /&gt;
*Easy Revision: As CRC cards are part of development process, constant changes are made by developers to edit the information .Change to one card might require changes to other cards. It becomes difficult to handle such interdependent changes for various fields such as attribute, responsibility, collaboration on paper based system. Software will reflect one change to every corresponding reference in the design. This saves a lot of time and also avoids the manual errors that may be evident on paper based system.&lt;br /&gt;
&lt;br /&gt;
*Easy sharing: Paper based systems make sharing difficult by necessitating team members to be physically present at one location. Using software, team members can work from different locations.&lt;br /&gt;
&lt;br /&gt;
*Better representation: It is possible to group cards from different perspective such as hierarchy, attributes, parent. This helps better understanding and thinking. Some software also aid graphical display of data.&lt;br /&gt;
&lt;br /&gt;
*Inputs to methodologies: Software for CRC cards can provide the input files for UML class diagram generation software saving lot of time in the development cycle.&lt;br /&gt;
&lt;br /&gt;
*Making additions to existing code: Many projects   make addition to existing code or reuse already developed code in their project. Software can produce CRC cards with existing source code as an input. This would help the team to understand the code in efficient manner and less time.&lt;br /&gt;
&lt;br /&gt;
However,it comes with a cost.Based on required features and cost,team may select from various commercially available software products.Below are few links:&lt;br /&gt;
&lt;br /&gt;
*quickCRC:http://www.excelsoftware.com/quickcrcwin.html [4]&lt;br /&gt;
*CRC card support is part of Visual Paradigm for UML:  http://www.visual-paradigm.com/download/vpuml.jsp [5]&lt;br /&gt;
&lt;br /&gt;
==CRC cards Limitations and formal object modeling methodologies(UML)==&lt;br /&gt;
&lt;br /&gt;
CRC cards are used to form initial class definitions but alone are not sufficient to be directly coded into software for large systems.It is difficult to keep track of cards as the systems grows and work on subsystems simultaneously and independently.CRC cards lack the notational power to document all the components of a system and cannot provide implementation specifications such as transition states of objects during its life cycle,interface design,data structures,performance and resource utilization. &lt;br /&gt;
&lt;br /&gt;
To bridge this gap,more formal object modeling methodology such as UML is used.UML captures the bigger picture.It provides detailed mapping of use cases(operations),object state transitions,inter-process communication functionality,algorithm design.UML is very effective in incremental model of SDLC where  lot of details need to captured for precise addition.Information  about requirements is represented in detail and whole picture of the system and users is visible.&lt;br /&gt;
&lt;br /&gt;
CRC cards are used as effective inputs to UML.CRC card techniques such as brainstorming and role play help enhance functional understanding which helps in preparing better UML use cases.CRC cards given the content for  class diagrams,inheritance diagrams,class specifications and object specifications for UML.CRC cards can keep track of attributes that can aid listing them as a part of class specification in UML.Most CRC card software have the facility to export CRC analysis file that can be directly used as an input for UML.&lt;br /&gt;
Following case study develops UML with the help of CRC cards:&lt;br /&gt;
&lt;br /&gt;
http://www.math.gordon.edu/courses/cs211/ATMExample/  [3]&lt;br /&gt;
&lt;br /&gt;
==Summary==&lt;br /&gt;
CRC cards are very useful to form the base of object oriented methodology.Techniques such as brain storming and role play enhance the understanding of requirements.CRC automation makes card handling and sharing  quick and efficient.For large projects more formal technology such as UML is required but CRC cards can provide a very good starting point.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Reference==&lt;br /&gt;
[1]Rubin,D.M, Introduction to CRC Cards, Methodologies and Practices.Revised January 1998,SOFTSTAR RESEARCH,INC: http://www.softstar-inc.com/Download/Intro%20to%20CRC.pdf&lt;br /&gt;
&lt;br /&gt;
[2]Bjork,R.C, CRC cards for ATM, Object-Oriented Software Development.Retrieved September 6,2010,from Computer Science Department, Gordon College:: http://www.math-cs.gordon.edu/courses/cps211/ATMExample/CRCCards.html&lt;br /&gt;
&lt;br /&gt;
[3]Bjork,R.C, ATMExample, Object-Oriented Software Development.Retrieved September 5,2010,from Computer Science Department, Gordon College: http://www.math.gordon.edu/courses/cs211/ATMExample/&lt;br /&gt;
&lt;br /&gt;
[4]quickCRC,Excel Software.Retrieved on September 5,2010 from Excel Software,Software Development Tools:http://www.excelsoftware.com/quickcrcwin.html&lt;br /&gt;
&lt;br /&gt;
[5]Visual Paradigm for UML 8.0 Enterprise Edition,Retrieved September 5,2010, from Visual Paradigm: http://www.visual-paradigm.com/download/vpuml.jsp   &lt;br /&gt;
         &lt;br /&gt;
[6]Bellin, D and Simone, S.S ‘The CRC Card Book’, Addison Wesley, 1997&lt;/div&gt;</summary>
		<author><name>Bluehat</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch1_S6_km&amp;diff=33995</id>
		<title>CSC/ECE 517 Fall 2010/ch1 S6 km</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch1_S6_km&amp;diff=33995"/>
		<updated>2010-09-08T21:01:02Z</updated>

		<summary type="html">&lt;p&gt;Bluehat: /* CRC cards Limitations and formal object modeling methodologies(UML) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
The onset of the object oriented paradigm in the software industry brought about a big change in the basic approach to system design and the software development life cycle.The major task in the development of any application using the object oriented paradigm is to identify ‘classes’, and how these classes interact and collaborate with each other in the system scope. &lt;br /&gt;
&lt;br /&gt;
Whenever a system is designed with classes, each class has a specific role to play in the system.It has certain responsibilities and each class collaborates with other classes to provide the complete system functionality. In such a scenario, identifying classes becomes the key to a good system design.Although it seems to be a simple,intuitive process,identifying classes can be quite complex when it comes to large scale systems. &lt;br /&gt;
&lt;br /&gt;
One such technique for identification of classes that make up the system and its collaborations is the ‘CRC Card’ technique. The concept of CRC cards was first put forth by Kent Beck and Ward Cunningham and it became very popular as it is easy to use and it supports development of any kind of object oriented development regardless of its scale,the method used, the technology or the language used for development&lt;br /&gt;
&lt;br /&gt;
==Definition==&lt;br /&gt;
Class Responsibility Collaboration (CRC) cards is an object-oriented design method that uses ordinary 3x5 index cards card made for each class containing responsibilities (knowledge and services) and collaborators (interactions with other classes). The cards provide an informal, intuitive way for group members to work on object design together.[1]&lt;br /&gt;
A typical CRC card layout is shown below.&lt;br /&gt;
[[Image:Crccard2.jpg|frame|center|CRC CARD Template]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example: Consider a Student class where a student can enroll for a seminar. In this case ‘Student’ will be one class and ‘Seminar’ can be another class that collaborates with the Student class.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:CrcStudent.jpg|frame|center|Student CRC Card ]]&lt;br /&gt;
&lt;br /&gt;
To know more about CRC cards please refer to http://www.hsanchez.net/repository/hsanchez-PLCRC-plop04.pdf&lt;br /&gt;
&lt;br /&gt;
==Principle and Process==&lt;br /&gt;
&lt;br /&gt;
===CRC Principle===&lt;br /&gt;
&lt;br /&gt;
A CRC model includes a collection of cards and each card is divided into three sections. &lt;br /&gt;
*Class Name: &lt;br /&gt;
**Appears on the top of the CRC card&lt;br /&gt;
**Class denotes a set of similar objects that are being modeled in the system&lt;br /&gt;
&lt;br /&gt;
*Responsibilities:&lt;br /&gt;
**Appears on the left hand side of the CRC card&lt;br /&gt;
**It is a list of the responsibilities of the class i.e. things a class can do with its knowledge&lt;br /&gt;
&lt;br /&gt;
*Collaborators:&lt;br /&gt;
**Appear on the right hand side of the CRC card&lt;br /&gt;
**They are other classes that the class works with to get information or perform a certain function&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===CRC Process===&lt;br /&gt;
&lt;br /&gt;
CRC modeling process includes the users, analysts and developers bringing together the entire development team to form a common understanding of an OO development project.For e.g consider a software application to implement a game of blackjack. To implement the CRC technique to design this software, following steps are taken:&lt;br /&gt;
&lt;br /&gt;
*Explanation of the CRC Technique&lt;br /&gt;
**The facilitator explains the purpose of the CRC modeling session&lt;br /&gt;
**It can include explanation of CRC Cards and creation of sample CRC Cards&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Brainstorming&lt;br /&gt;
**A brainstorming session at the very beginning brings in new ideas, new perspectives to the problem being solved.&lt;br /&gt;
**Every team member can contribute with innovative ideas&lt;br /&gt;
**A list of candidate classes can be drawn up from this activity&lt;br /&gt;
&lt;br /&gt;
For e.g considering the above example, we can identify candidate classes by listing down the nouns relating to the game of blackjack. Say, game, blackjack, dealer, players, card, deck, hand, bet, king, queen, jack, ace, suit, winner, game.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Selecting a scenario and Core classes&lt;br /&gt;
**The scenario chosen at the beginning of the session should be simple, clear and well documented&lt;br /&gt;
**Related scenarios should be identified and dealt with separately&lt;br /&gt;
**Identification of critical classes from the candidate class list is also very important&lt;br /&gt;
**This helps to eliminate irrelevant classes and review remaining classes&lt;br /&gt;
**This also helps clarify the system scope&lt;br /&gt;
&lt;br /&gt;
For e.g we can apply the elimination process to the candidate class list. We can eliminate blackjack as it is the name of the system. ‘House’ can be eliminated as it is another name for the dealer. Also, instead of making ace, king, queen and jack as separate classes, we can represent them as attributes of individual classes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Create initial CRC cards&lt;br /&gt;
From the information gathered in the step above, CRC cards are written&lt;br /&gt;
&lt;br /&gt;
[[Image:Deck1.jpg |frame|center|Deck CRC Card]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Dealer.jpg |frame|center|Dealer CRC Card]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Player.jpg |frame|center|Player CRC Card]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Creating a CRC Model&lt;br /&gt;
**After the CRC cards  are written, they are placed appropriately, with collaborating classes closer to each other.&lt;br /&gt;
**Accordingly, place each card in position till the entire picture of the system is finalized.&lt;br /&gt;
**This process may have to be done in several iterations to get a refined view of the system to be modeled.&lt;br /&gt;
&lt;br /&gt;
For more information on using CRC Cards please refer to http://alistair.cockburn.us/Using+CRC+cards&lt;br /&gt;
&lt;br /&gt;
==CRC Team==&lt;br /&gt;
&lt;br /&gt;
*Domain Experts:&lt;br /&gt;
**Core team that writes the cards&lt;br /&gt;
**Have good business domain knowledge for which the system is being designed&lt;br /&gt;
**Usually are 3-5 people&lt;br /&gt;
&lt;br /&gt;
*Object Oriented Design Analyst:&lt;br /&gt;
**Analysts and developers those are familiar with object oriented design methodologies&lt;br /&gt;
**Usually are 1-2 people&lt;br /&gt;
&lt;br /&gt;
*Facilitator:&lt;br /&gt;
**Most important member who conducts the CRC modeling session&lt;br /&gt;
**Acts as an intermediary when there is difference of opinion regarding class responsibilities and paths of collaboration&lt;br /&gt;
**Usually a single person&lt;br /&gt;
&lt;br /&gt;
*Scribe:&lt;br /&gt;
**Responsible for documenting any business logic that evolves by way of discussions during the CRC modeling process.&lt;br /&gt;
**This documentation can be added to the requirements and business documents which can be used by design analysts at a later stage&lt;br /&gt;
**Usually are 1-2 people&lt;br /&gt;
&lt;br /&gt;
==Case study==&lt;br /&gt;
&lt;br /&gt;
To understand the working of CRC card modeling better, here is an example of an ATM system designed using CRC cards. Here, the software system under consideration has to control an automated teller machine. The ATM has a magnetic stripe reader for reading an ATM card, a customer console (keyboard and display) for interaction with the customer, a slot for depositing envelopes, a dispenser for cash (in multiples of $20), a printer for printing customer receipts, and a key-operated switch to allow an operator to start or stop the machine. Also, the ATM will communicate with the bank's computer over an appropriate communication link.&lt;br /&gt;
&lt;br /&gt;
To perform a transaction, a customer will be required to insert an ATM card and enter a personal identification number (PIN) - both of which will be sent to the bank for validation. The customer will then be able to perform one or more transactions. The card will be retained in the machine until the customer indicates that there are no further transactions, at which point it will be returned. For more on the case study.&lt;br /&gt;
&lt;br /&gt;
http://www.math-cs.gordon.edu/courses/cps211/ATMExample/CRCCards.html&lt;br /&gt;
&lt;br /&gt;
==Metrics for CRC Analysis==&lt;br /&gt;
&lt;br /&gt;
CRC analysis metrics can help evaluate the level of ease in designing and coding with CRC cards. These metrics also contribute to other project planning factors to give overall sense of project development.These metrics can be calculated easily and quickly without the need of special tools. Three metrics are broadly identified as: maximum depth of inheritance, the number of responsibilities assigned to each class and the number of collaborators for a class. With the example below an attempt has been made to explain these metrics.In the diagram, black line indicates inheritance while blue line indicates collaboration. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Class_hierarchy1.png|frame|center|CRC metrics example]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Maximum depth of inheritance===&lt;br /&gt;
&lt;br /&gt;
This metric gives an idea of the class hierarchy. It is the count of number of subclasses in the hierarchy.[6] From the diagram,it can be seen that Part Time student is a subclass of Distance Education which in turn is a subclass of student.Thus,maximum depth of inheritance in this case is two with  reference to class Student. Each subclass shares the overall functions defined in class Student. For short hierarchies, this is a positive benefit of OO. If number of subclasses become too long, it becomes difficult to trace the flow of functions, resulting in overly complex systems. This makes testing, reviewing and reusing difficult.&lt;br /&gt;
&lt;br /&gt;
===Number of collaborators===&lt;br /&gt;
&lt;br /&gt;
This is the count of all the supporting classes to help a class.[6] In the diagram,there are four collaborators for class Student:Teacher,Library,Computer Labs and Gymnasium.Confusion between collaborators and subclasses may result in creation many collaborators.This will affect the encapsulation of the design.Typical value for this metric is eight.If this value is large,design may be reviewed to see if inheritance is implemented correctly.&lt;br /&gt;
&lt;br /&gt;
===Number of responsibilities===&lt;br /&gt;
This is the count of clearly defined set of duties to each class.[6] For example class Student may have functions like Attending  Lectures,&lt;br /&gt;
Maintaining a certain GPA,Taking the required courses. In this case number of responsibilities is three.Responsibilities should be distributed amongst classes to cover the whole system. This would avoid an imbalance in design. We need to refine the overly complex class into a series of simpler objects. This will make the system easier to understand, implement and reuse. For most commercial transaction oriented systems, values approximately between eight and eighteen are common.&lt;br /&gt;
&lt;br /&gt;
==Advantages==&lt;br /&gt;
* CRC cards create a first-cut analysis for complex systems, and let analysts and users examine the operation of discrete subsystems.&lt;br /&gt;
* CRC cards are invaluable input into more formal methods. Agile development methods often use CRC cards. They are popular as a front end to UML&lt;br /&gt;
* CRC cards are a great way to build teamwork and common understanding.&lt;br /&gt;
* Part of the CRC card attraction is their simplicity. Developers can use them with little formal training and just paper and pencil for tools&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Software for CRC card==&lt;br /&gt;
&lt;br /&gt;
It is difficult to maintain, change, share paper based cards for large projects. Software for CRC cards offer many advantages in such scenarios such as&lt;br /&gt;
&lt;br /&gt;
*Easy Revision: As CRC cards are part of development process, constant changes are made by developers to edit the information .Change to one card might require changes to other cards. It becomes difficult to handle such interdependent changes for various fields such as attribute, responsibility, collaboration on paper based system. Software will reflect one change to every corresponding reference in the design. This saves a lot of time and also avoids the manual errors that may be evident on paper based system.&lt;br /&gt;
&lt;br /&gt;
*Easy sharing: Paper based systems make sharing difficult by necessitating team members to be physically present at one location. Using software, team members can work from different locations.&lt;br /&gt;
&lt;br /&gt;
*Better representation: It is possible to group cards from different perspective such as hierarchy, attributes, parent. This helps better understanding and thinking. Some software also aid graphical display of data.&lt;br /&gt;
&lt;br /&gt;
*Inputs to methodologies: Software for CRC cards can provide the input files for UML class diagram generation software saving lot of time in the development cycle.&lt;br /&gt;
&lt;br /&gt;
*Making additions to existing code: Many projects   make addition to existing code or reuse already developed code in their project. Software can produce CRC cards with existing source code as an input. This would help the team to understand the code in efficient manner and less time.&lt;br /&gt;
&lt;br /&gt;
However,it comes with a cost.Based on required features and cost,team may select from various commercially available software products.Below are few links:&lt;br /&gt;
&lt;br /&gt;
*quickCRC:http://www.excelsoftware.com/quickcrcwin.html&lt;br /&gt;
*CRC card support is part of Visual Paradigm for UML:  http://www.visual-paradigm.com/download/vpuml.jsp&lt;br /&gt;
&lt;br /&gt;
==CRC cards Limitations and formal object modeling methodologies(UML)==&lt;br /&gt;
&lt;br /&gt;
CRC cards are used to form initial class definitions but alone are not sufficient to be directly coded into software for large systems.It is difficult to keep track of cards as the systems grows and work on subsystems simultaneously and independently.CRC cards lack the notational power to document all the components of a system and cannot provide implementation specifications such as transition states of objects during its life cycle,interface design,data structures,performance and resource utilization. &lt;br /&gt;
&lt;br /&gt;
To bridge this gap,more formal object modeling methodology such as UML is used.UML captures the bigger picture.It provides detailed mapping of use cases(operations),object state transitions,inter-process communication functionality,algorithm design.UML is very effective in incremental model of SDLC where  lot of details need to captured for precise addition.Information  about requirements is represented in detail and whole picture of the system and users is visible.&lt;br /&gt;
&lt;br /&gt;
CRC cards are used as effective inputs to UML.CRC card techniques such as brainstorming and role play help enhance functional understanding which helps in preparing better UML use cases.CRC cards given the content for  class diagrams,inheritance diagrams,class specifications and object specifications for UML.CRC cards can keep track of attributes that can aid listing them as a part of class specification in UML.Most CRC card software have the facility to export CRC analysis file that can be directly used as an input for UML.&lt;br /&gt;
Following case study develops UML with the help of CRC cards:&lt;br /&gt;
&lt;br /&gt;
http://www.math.gordon.edu/courses/cs211/ATMExample/  [3]&lt;br /&gt;
&lt;br /&gt;
==Summary==&lt;br /&gt;
CRC cards are very useful to form the base of object oriented methodology.Techniques such as brain storming and role play enhance the understanding of requirements.CRC automation makes card handling and sharing  quick and efficient.For large projects more formal technology such as UML is required but CRC cards can provide a very good starting point.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Reference==&lt;br /&gt;
[1]Rubin,D.M, Introduction to CRC Cards, Methodologies and Practices.Revised January 1998,SOFTSTAR RESEARCH,INC: http://www.softstar-inc.com/Download/Intro%20to%20CRC.pdf&lt;br /&gt;
&lt;br /&gt;
[2]Bjork,R.C, CRC cards for ATM, Object-Oriented Software Development.Retrieved September 6,2010,from Computer Science Department, Gordon College:: http://www.math-cs.gordon.edu/courses/cps211/ATMExample/CRCCards.html&lt;br /&gt;
&lt;br /&gt;
[3]Bjork,R.C, ATMExample, Object-Oriented Software Development.Retrieved September 5,2010,from Computer Science Department, Gordon College: http://www.math.gordon.edu/courses/cs211/ATMExample/&lt;br /&gt;
&lt;br /&gt;
[4]quickCRC,Excel Software.Retrieved on September 5,2010 from Excel Software,Software Development Tools:http://www.excelsoftware.com/quickcrcwin.html&lt;br /&gt;
&lt;br /&gt;
[5]Visual Paradigm for UML 8.0 Enterprise Edition,Retrieved September 5,2010, from Visual Paradigm: http://www.visual-paradigm.com/download/vpuml.jsp   &lt;br /&gt;
         &lt;br /&gt;
[6]Bellin, D and Simone, S.S ‘The CRC Card Book’, Addison Wesley, 1997&lt;/div&gt;</summary>
		<author><name>Bluehat</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch1_S6_km&amp;diff=33991</id>
		<title>CSC/ECE 517 Fall 2010/ch1 S6 km</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch1_S6_km&amp;diff=33991"/>
		<updated>2010-09-08T20:58:52Z</updated>

		<summary type="html">&lt;p&gt;Bluehat: /* Software for CRC card */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
The onset of the object oriented paradigm in the software industry brought about a big change in the basic approach to system design and the software development life cycle.The major task in the development of any application using the object oriented paradigm is to identify ‘classes’, and how these classes interact and collaborate with each other in the system scope. &lt;br /&gt;
&lt;br /&gt;
Whenever a system is designed with classes, each class has a specific role to play in the system.It has certain responsibilities and each class collaborates with other classes to provide the complete system functionality. In such a scenario, identifying classes becomes the key to a good system design.Although it seems to be a simple,intuitive process,identifying classes can be quite complex when it comes to large scale systems. &lt;br /&gt;
&lt;br /&gt;
One such technique for identification of classes that make up the system and its collaborations is the ‘CRC Card’ technique. The concept of CRC cards was first put forth by Kent Beck and Ward Cunningham and it became very popular as it is easy to use and it supports development of any kind of object oriented development regardless of its scale,the method used, the technology or the language used for development&lt;br /&gt;
&lt;br /&gt;
==Definition==&lt;br /&gt;
Class Responsibility Collaboration (CRC) cards is an object-oriented design method that uses ordinary 3x5 index cards card made for each class containing responsibilities (knowledge and services) and collaborators (interactions with other classes). The cards provide an informal, intuitive way for group members to work on object design together.[1]&lt;br /&gt;
A typical CRC card layout is shown below.&lt;br /&gt;
[[Image:Crccard2.jpg|frame|center|CRC CARD Template]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example: Consider a Student class where a student can enroll for a seminar. In this case ‘Student’ will be one class and ‘Seminar’ can be another class that collaborates with the Student class.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:CrcStudent.jpg|frame|center|Student CRC Card ]]&lt;br /&gt;
&lt;br /&gt;
To know more about CRC cards please refer to http://www.hsanchez.net/repository/hsanchez-PLCRC-plop04.pdf&lt;br /&gt;
&lt;br /&gt;
==Principle and Process==&lt;br /&gt;
&lt;br /&gt;
===CRC Principle===&lt;br /&gt;
&lt;br /&gt;
A CRC model includes a collection of cards and each card is divided into three sections. &lt;br /&gt;
*Class Name: &lt;br /&gt;
**Appears on the top of the CRC card&lt;br /&gt;
**Class denotes a set of similar objects that are being modeled in the system&lt;br /&gt;
&lt;br /&gt;
*Responsibilities:&lt;br /&gt;
**Appears on the left hand side of the CRC card&lt;br /&gt;
**It is a list of the responsibilities of the class i.e. things a class can do with its knowledge&lt;br /&gt;
&lt;br /&gt;
*Collaborators:&lt;br /&gt;
**Appear on the right hand side of the CRC card&lt;br /&gt;
**They are other classes that the class works with to get information or perform a certain function&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===CRC Process===&lt;br /&gt;
&lt;br /&gt;
CRC modeling process includes the users, analysts and developers bringing together the entire development team to form a common understanding of an OO development project.For e.g consider a software application to implement a game of blackjack. To implement the CRC technique to design this software, following steps are taken:&lt;br /&gt;
&lt;br /&gt;
*Explanation of the CRC Technique&lt;br /&gt;
**The facilitator explains the purpose of the CRC modeling session&lt;br /&gt;
**It can include explanation of CRC Cards and creation of sample CRC Cards&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Brainstorming&lt;br /&gt;
**A brainstorming session at the very beginning brings in new ideas, new perspectives to the problem being solved.&lt;br /&gt;
**Every team member can contribute with innovative ideas&lt;br /&gt;
**A list of candidate classes can be drawn up from this activity&lt;br /&gt;
&lt;br /&gt;
For e.g considering the above example, we can identify candidate classes by listing down the nouns relating to the game of blackjack. Say, game, blackjack, dealer, players, card, deck, hand, bet, king, queen, jack, ace, suit, winner, game.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Selecting a scenario and Core classes&lt;br /&gt;
**The scenario chosen at the beginning of the session should be simple, clear and well documented&lt;br /&gt;
**Related scenarios should be identified and dealt with separately&lt;br /&gt;
**Identification of critical classes from the candidate class list is also very important&lt;br /&gt;
**This helps to eliminate irrelevant classes and review remaining classes&lt;br /&gt;
**This also helps clarify the system scope&lt;br /&gt;
&lt;br /&gt;
For e.g we can apply the elimination process to the candidate class list. We can eliminate blackjack as it is the name of the system. ‘House’ can be eliminated as it is another name for the dealer. Also, instead of making ace, king, queen and jack as separate classes, we can represent them as attributes of individual classes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Create initial CRC cards&lt;br /&gt;
From the information gathered in the step above, CRC cards are written&lt;br /&gt;
&lt;br /&gt;
[[Image:Deck1.jpg |frame|center|Deck CRC Card]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Dealer.jpg |frame|center|Dealer CRC Card]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Player.jpg |frame|center|Player CRC Card]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Creating a CRC Model&lt;br /&gt;
**After the CRC cards  are written, they are placed appropriately, with collaborating classes closer to each other.&lt;br /&gt;
**Accordingly, place each card in position till the entire picture of the system is finalized.&lt;br /&gt;
**This process may have to be done in several iterations to get a refined view of the system to be modeled.&lt;br /&gt;
&lt;br /&gt;
For more information on using CRC Cards please refer to http://alistair.cockburn.us/Using+CRC+cards&lt;br /&gt;
&lt;br /&gt;
==CRC Team==&lt;br /&gt;
&lt;br /&gt;
*Domain Experts:&lt;br /&gt;
**Core team that writes the cards&lt;br /&gt;
**Have good business domain knowledge for which the system is being designed&lt;br /&gt;
**Usually are 3-5 people&lt;br /&gt;
&lt;br /&gt;
*Object Oriented Design Analyst:&lt;br /&gt;
**Analysts and developers those are familiar with object oriented design methodologies&lt;br /&gt;
**Usually are 1-2 people&lt;br /&gt;
&lt;br /&gt;
*Facilitator:&lt;br /&gt;
**Most important member who conducts the CRC modeling session&lt;br /&gt;
**Acts as an intermediary when there is difference of opinion regarding class responsibilities and paths of collaboration&lt;br /&gt;
**Usually a single person&lt;br /&gt;
&lt;br /&gt;
*Scribe:&lt;br /&gt;
**Responsible for documenting any business logic that evolves by way of discussions during the CRC modeling process.&lt;br /&gt;
**This documentation can be added to the requirements and business documents which can be used by design analysts at a later stage&lt;br /&gt;
**Usually are 1-2 people&lt;br /&gt;
&lt;br /&gt;
==Case study==&lt;br /&gt;
&lt;br /&gt;
To understand the working of CRC card modeling better, here is an example of an ATM system designed using CRC cards. Here, the software system under consideration has to control an automated teller machine. The ATM has a magnetic stripe reader for reading an ATM card, a customer console (keyboard and display) for interaction with the customer, a slot for depositing envelopes, a dispenser for cash (in multiples of $20), a printer for printing customer receipts, and a key-operated switch to allow an operator to start or stop the machine. Also, the ATM will communicate with the bank's computer over an appropriate communication link.&lt;br /&gt;
&lt;br /&gt;
To perform a transaction, a customer will be required to insert an ATM card and enter a personal identification number (PIN) - both of which will be sent to the bank for validation. The customer will then be able to perform one or more transactions. The card will be retained in the machine until the customer indicates that there are no further transactions, at which point it will be returned. For more on the case study.&lt;br /&gt;
&lt;br /&gt;
http://www.math-cs.gordon.edu/courses/cps211/ATMExample/CRCCards.html&lt;br /&gt;
&lt;br /&gt;
==Metrics for CRC Analysis==&lt;br /&gt;
&lt;br /&gt;
CRC analysis metrics can help evaluate the level of ease in designing and coding with CRC cards. These metrics also contribute to other project planning factors to give overall sense of project development.These metrics can be calculated easily and quickly without the need of special tools. Three metrics are broadly identified as: maximum depth of inheritance, the number of responsibilities assigned to each class and the number of collaborators for a class. With the example below an attempt has been made to explain these metrics.In the diagram, black line indicates inheritance while blue line indicates collaboration. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Class_hierarchy1.png|frame|center|CRC metrics example]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Maximum depth of inheritance===&lt;br /&gt;
&lt;br /&gt;
This metric gives an idea of the class hierarchy. It is the count of number of subclasses in the hierarchy.[6] From the diagram,it can be seen that Part Time student is a subclass of Distance Education which in turn is a subclass of student.Thus,maximum depth of inheritance in this case is two with  reference to class Student. Each subclass shares the overall functions defined in class Student. For short hierarchies, this is a positive benefit of OO. If number of subclasses become too long, it becomes difficult to trace the flow of functions, resulting in overly complex systems. This makes testing, reviewing and reusing difficult.&lt;br /&gt;
&lt;br /&gt;
===Number of collaborators===&lt;br /&gt;
&lt;br /&gt;
This is the count of all the supporting classes to help a class.[6] In the diagram,there are four collaborators for class Student:Teacher,Library,Computer Labs and Gymnasium.Confusion between collaborators and subclasses may result in creation many collaborators.This will affect the encapsulation of the design.Typical value for this metric is eight.If this value is large,design may be reviewed to see if inheritance is implemented correctly.&lt;br /&gt;
&lt;br /&gt;
===Number of responsibilities===&lt;br /&gt;
This is the count of clearly defined set of duties to each class.[6] For example class Student may have functions like Attending  Lectures,&lt;br /&gt;
Maintaining a certain GPA,Taking the required courses. In this case number of responsibilities is three.Responsibilities should be distributed amongst classes to cover the whole system. This would avoid an imbalance in design. We need to refine the overly complex class into a series of simpler objects. This will make the system easier to understand, implement and reuse. For most commercial transaction oriented systems, values approximately between eight and eighteen are common.&lt;br /&gt;
&lt;br /&gt;
==Advantages==&lt;br /&gt;
* CRC cards create a first-cut analysis for complex systems, and let analysts and users examine the operation of discrete subsystems.&lt;br /&gt;
* CRC cards are invaluable input into more formal methods. Agile development methods often use CRC cards. They are popular as a front end to UML&lt;br /&gt;
* CRC cards are a great way to build teamwork and common understanding.&lt;br /&gt;
* Part of the CRC card attraction is their simplicity. Developers can use them with little formal training and just paper and pencil for tools&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Software for CRC card==&lt;br /&gt;
&lt;br /&gt;
It is difficult to maintain, change, share paper based cards for large projects. Software for CRC cards offer many advantages in such scenarios such as&lt;br /&gt;
&lt;br /&gt;
*Easy Revision: As CRC cards are part of development process, constant changes are made by developers to edit the information .Change to one card might require changes to other cards. It becomes difficult to handle such interdependent changes for various fields such as attribute, responsibility, collaboration on paper based system. Software will reflect one change to every corresponding reference in the design. This saves a lot of time and also avoids the manual errors that may be evident on paper based system.&lt;br /&gt;
&lt;br /&gt;
*Easy sharing: Paper based systems make sharing difficult by necessitating team members to be physically present at one location. Using software, team members can work from different locations.&lt;br /&gt;
&lt;br /&gt;
*Better representation: It is possible to group cards from different perspective such as hierarchy, attributes, parent. This helps better understanding and thinking. Some software also aid graphical display of data.&lt;br /&gt;
&lt;br /&gt;
*Inputs to methodologies: Software for CRC cards can provide the input files for UML class diagram generation software saving lot of time in the development cycle.&lt;br /&gt;
&lt;br /&gt;
*Making additions to existing code: Many projects   make addition to existing code or reuse already developed code in their project. Software can produce CRC cards with existing source code as an input. This would help the team to understand the code in efficient manner and less time.&lt;br /&gt;
&lt;br /&gt;
However,it comes with a cost.Based on required features and cost,team may select from various commercially available software products.Below are few links:&lt;br /&gt;
&lt;br /&gt;
*quickCRC:http://www.excelsoftware.com/quickcrcwin.html&lt;br /&gt;
*CRC card support is part of Visual Paradigm for UML:  http://www.visual-paradigm.com/download/vpuml.jsp&lt;br /&gt;
&lt;br /&gt;
==CRC cards Limitations and formal object modeling methodologies(UML)==&lt;br /&gt;
&lt;br /&gt;
CRC cards are used to form initial class definitions but alone are not sufficient to be directly coded into software for large systems.It is difficult to keep track of cards as the systems grows and work on subsystems simultaneously and independently.CRC cards lack the notational power to document all the components of a system and cannot provide implementation specifications such as transition states of objects during its life cycle,interface design,data structures,performance and resource utilization. To bridge this gap,more formal object modeling methodology such as UML is used.UML captures the bigger picture.It provides detailed mapping of use cases(operations),object state transitions,inter-process communication functionality,algorithm design.UML is very effective in incremental model of SDLC where  lot of details need to captured for precise addition.Information  about requirements is represented in detail and whole picture of the system and users is visible.CRC cards are used as effective inputs to UML.CRC card techniques such as brainstorming and role play help enhance functional understanding which helps in preparing better UML use cases.CRC cards given the content for  class diagrams,inheritance diagrams,class specifications and object specifications for UML.CRC cards can keep track of attributes that can aid listing them as a part of class specification in UML.Most CRC card software have the facility to export CRC analysis file that can be directly used as an input for UML.Following case study develops UML with the help of CRC cards:&lt;br /&gt;
&lt;br /&gt;
http://www.math.gordon.edu/courses/cs211/ATMExample/  [3]&lt;br /&gt;
&lt;br /&gt;
==Summary==&lt;br /&gt;
CRC cards are very useful to form the base of object oriented methodology.Techniques such as brain storming and role play enhance the understanding of requirements.CRC automation makes card handling and sharing  quick and efficient.For large projects more formal technology such as UML is required but CRC cards can provide a very good starting point.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Reference==&lt;br /&gt;
[1]Rubin,D.M, Introduction to CRC Cards, Methodologies and Practices.Revised January 1998,SOFTSTAR RESEARCH,INC: http://www.softstar-inc.com/Download/Intro%20to%20CRC.pdf&lt;br /&gt;
&lt;br /&gt;
[2]Bjork,R.C, CRC cards for ATM, Object-Oriented Software Development.Retrieved September 6,2010,from Computer Science Department, Gordon College:: http://www.math-cs.gordon.edu/courses/cps211/ATMExample/CRCCards.html&lt;br /&gt;
&lt;br /&gt;
[3]Bjork,R.C, ATMExample, Object-Oriented Software Development.Retrieved September 5,2010,from Computer Science Department, Gordon College: http://www.math.gordon.edu/courses/cs211/ATMExample/&lt;br /&gt;
&lt;br /&gt;
[4]quickCRC,Excel Software.Retrieved on September 5,2010 from Excel Software,Software Development Tools:http://www.excelsoftware.com/quickcrcwin.html&lt;br /&gt;
&lt;br /&gt;
[5]Visual Paradigm for UML 8.0 Enterprise Edition,Retrieved September 5,2010, from Visual Paradigm: http://www.visual-paradigm.com/download/vpuml.jsp   &lt;br /&gt;
         &lt;br /&gt;
[6]Bellin, D and Simone, S.S ‘The CRC Card Book’, Addison Wesley, 1997&lt;/div&gt;</summary>
		<author><name>Bluehat</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch1_S6_km&amp;diff=33989</id>
		<title>CSC/ECE 517 Fall 2010/ch1 S6 km</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch1_S6_km&amp;diff=33989"/>
		<updated>2010-09-08T20:58:30Z</updated>

		<summary type="html">&lt;p&gt;Bluehat: /* Reference */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
The onset of the object oriented paradigm in the software industry brought about a big change in the basic approach to system design and the software development life cycle.The major task in the development of any application using the object oriented paradigm is to identify ‘classes’, and how these classes interact and collaborate with each other in the system scope. &lt;br /&gt;
&lt;br /&gt;
Whenever a system is designed with classes, each class has a specific role to play in the system.It has certain responsibilities and each class collaborates with other classes to provide the complete system functionality. In such a scenario, identifying classes becomes the key to a good system design.Although it seems to be a simple,intuitive process,identifying classes can be quite complex when it comes to large scale systems. &lt;br /&gt;
&lt;br /&gt;
One such technique for identification of classes that make up the system and its collaborations is the ‘CRC Card’ technique. The concept of CRC cards was first put forth by Kent Beck and Ward Cunningham and it became very popular as it is easy to use and it supports development of any kind of object oriented development regardless of its scale,the method used, the technology or the language used for development&lt;br /&gt;
&lt;br /&gt;
==Definition==&lt;br /&gt;
Class Responsibility Collaboration (CRC) cards is an object-oriented design method that uses ordinary 3x5 index cards card made for each class containing responsibilities (knowledge and services) and collaborators (interactions with other classes). The cards provide an informal, intuitive way for group members to work on object design together.[1]&lt;br /&gt;
A typical CRC card layout is shown below.&lt;br /&gt;
[[Image:Crccard2.jpg|frame|center|CRC CARD Template]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example: Consider a Student class where a student can enroll for a seminar. In this case ‘Student’ will be one class and ‘Seminar’ can be another class that collaborates with the Student class.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:CrcStudent.jpg|frame|center|Student CRC Card ]]&lt;br /&gt;
&lt;br /&gt;
To know more about CRC cards please refer to http://www.hsanchez.net/repository/hsanchez-PLCRC-plop04.pdf&lt;br /&gt;
&lt;br /&gt;
==Principle and Process==&lt;br /&gt;
&lt;br /&gt;
===CRC Principle===&lt;br /&gt;
&lt;br /&gt;
A CRC model includes a collection of cards and each card is divided into three sections. &lt;br /&gt;
*Class Name: &lt;br /&gt;
**Appears on the top of the CRC card&lt;br /&gt;
**Class denotes a set of similar objects that are being modeled in the system&lt;br /&gt;
&lt;br /&gt;
*Responsibilities:&lt;br /&gt;
**Appears on the left hand side of the CRC card&lt;br /&gt;
**It is a list of the responsibilities of the class i.e. things a class can do with its knowledge&lt;br /&gt;
&lt;br /&gt;
*Collaborators:&lt;br /&gt;
**Appear on the right hand side of the CRC card&lt;br /&gt;
**They are other classes that the class works with to get information or perform a certain function&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===CRC Process===&lt;br /&gt;
&lt;br /&gt;
CRC modeling process includes the users, analysts and developers bringing together the entire development team to form a common understanding of an OO development project.For e.g consider a software application to implement a game of blackjack. To implement the CRC technique to design this software, following steps are taken:&lt;br /&gt;
&lt;br /&gt;
*Explanation of the CRC Technique&lt;br /&gt;
**The facilitator explains the purpose of the CRC modeling session&lt;br /&gt;
**It can include explanation of CRC Cards and creation of sample CRC Cards&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Brainstorming&lt;br /&gt;
**A brainstorming session at the very beginning brings in new ideas, new perspectives to the problem being solved.&lt;br /&gt;
**Every team member can contribute with innovative ideas&lt;br /&gt;
**A list of candidate classes can be drawn up from this activity&lt;br /&gt;
&lt;br /&gt;
For e.g considering the above example, we can identify candidate classes by listing down the nouns relating to the game of blackjack. Say, game, blackjack, dealer, players, card, deck, hand, bet, king, queen, jack, ace, suit, winner, game.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Selecting a scenario and Core classes&lt;br /&gt;
**The scenario chosen at the beginning of the session should be simple, clear and well documented&lt;br /&gt;
**Related scenarios should be identified and dealt with separately&lt;br /&gt;
**Identification of critical classes from the candidate class list is also very important&lt;br /&gt;
**This helps to eliminate irrelevant classes and review remaining classes&lt;br /&gt;
**This also helps clarify the system scope&lt;br /&gt;
&lt;br /&gt;
For e.g we can apply the elimination process to the candidate class list. We can eliminate blackjack as it is the name of the system. ‘House’ can be eliminated as it is another name for the dealer. Also, instead of making ace, king, queen and jack as separate classes, we can represent them as attributes of individual classes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Create initial CRC cards&lt;br /&gt;
From the information gathered in the step above, CRC cards are written&lt;br /&gt;
&lt;br /&gt;
[[Image:Deck1.jpg |frame|center|Deck CRC Card]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Dealer.jpg |frame|center|Dealer CRC Card]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Player.jpg |frame|center|Player CRC Card]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Creating a CRC Model&lt;br /&gt;
**After the CRC cards  are written, they are placed appropriately, with collaborating classes closer to each other.&lt;br /&gt;
**Accordingly, place each card in position till the entire picture of the system is finalized.&lt;br /&gt;
**This process may have to be done in several iterations to get a refined view of the system to be modeled.&lt;br /&gt;
&lt;br /&gt;
For more information on using CRC Cards please refer to http://alistair.cockburn.us/Using+CRC+cards&lt;br /&gt;
&lt;br /&gt;
==CRC Team==&lt;br /&gt;
&lt;br /&gt;
*Domain Experts:&lt;br /&gt;
**Core team that writes the cards&lt;br /&gt;
**Have good business domain knowledge for which the system is being designed&lt;br /&gt;
**Usually are 3-5 people&lt;br /&gt;
&lt;br /&gt;
*Object Oriented Design Analyst:&lt;br /&gt;
**Analysts and developers those are familiar with object oriented design methodologies&lt;br /&gt;
**Usually are 1-2 people&lt;br /&gt;
&lt;br /&gt;
*Facilitator:&lt;br /&gt;
**Most important member who conducts the CRC modeling session&lt;br /&gt;
**Acts as an intermediary when there is difference of opinion regarding class responsibilities and paths of collaboration&lt;br /&gt;
**Usually a single person&lt;br /&gt;
&lt;br /&gt;
*Scribe:&lt;br /&gt;
**Responsible for documenting any business logic that evolves by way of discussions during the CRC modeling process.&lt;br /&gt;
**This documentation can be added to the requirements and business documents which can be used by design analysts at a later stage&lt;br /&gt;
**Usually are 1-2 people&lt;br /&gt;
&lt;br /&gt;
==Case study==&lt;br /&gt;
&lt;br /&gt;
To understand the working of CRC card modeling better, here is an example of an ATM system designed using CRC cards. Here, the software system under consideration has to control an automated teller machine. The ATM has a magnetic stripe reader for reading an ATM card, a customer console (keyboard and display) for interaction with the customer, a slot for depositing envelopes, a dispenser for cash (in multiples of $20), a printer for printing customer receipts, and a key-operated switch to allow an operator to start or stop the machine. Also, the ATM will communicate with the bank's computer over an appropriate communication link.&lt;br /&gt;
&lt;br /&gt;
To perform a transaction, a customer will be required to insert an ATM card and enter a personal identification number (PIN) - both of which will be sent to the bank for validation. The customer will then be able to perform one or more transactions. The card will be retained in the machine until the customer indicates that there are no further transactions, at which point it will be returned. For more on the case study.&lt;br /&gt;
&lt;br /&gt;
http://www.math-cs.gordon.edu/courses/cps211/ATMExample/CRCCards.html&lt;br /&gt;
&lt;br /&gt;
==Metrics for CRC Analysis==&lt;br /&gt;
&lt;br /&gt;
CRC analysis metrics can help evaluate the level of ease in designing and coding with CRC cards. These metrics also contribute to other project planning factors to give overall sense of project development.These metrics can be calculated easily and quickly without the need of special tools. Three metrics are broadly identified as: maximum depth of inheritance, the number of responsibilities assigned to each class and the number of collaborators for a class. With the example below an attempt has been made to explain these metrics.In the diagram, black line indicates inheritance while blue line indicates collaboration. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Class_hierarchy1.png|frame|center|CRC metrics example]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Maximum depth of inheritance===&lt;br /&gt;
&lt;br /&gt;
This metric gives an idea of the class hierarchy. It is the count of number of subclasses in the hierarchy.[6] From the diagram,it can be seen that Part Time student is a subclass of Distance Education which in turn is a subclass of student.Thus,maximum depth of inheritance in this case is two with  reference to class Student. Each subclass shares the overall functions defined in class Student. For short hierarchies, this is a positive benefit of OO. If number of subclasses become too long, it becomes difficult to trace the flow of functions, resulting in overly complex systems. This makes testing, reviewing and reusing difficult.&lt;br /&gt;
&lt;br /&gt;
===Number of collaborators===&lt;br /&gt;
&lt;br /&gt;
This is the count of all the supporting classes to help a class.[6] In the diagram,there are four collaborators for class Student:Teacher,Library,Computer Labs and Gymnasium.Confusion between collaborators and subclasses may result in creation many collaborators.This will affect the encapsulation of the design.Typical value for this metric is eight.If this value is large,design may be reviewed to see if inheritance is implemented correctly.&lt;br /&gt;
&lt;br /&gt;
===Number of responsibilities===&lt;br /&gt;
This is the count of clearly defined set of duties to each class.[6] For example class Student may have functions like Attending  Lectures,&lt;br /&gt;
Maintaining a certain GPA,Taking the required courses. In this case number of responsibilities is three.Responsibilities should be distributed amongst classes to cover the whole system. This would avoid an imbalance in design. We need to refine the overly complex class into a series of simpler objects. This will make the system easier to understand, implement and reuse. For most commercial transaction oriented systems, values approximately between eight and eighteen are common.&lt;br /&gt;
&lt;br /&gt;
==Advantages==&lt;br /&gt;
* CRC cards create a first-cut analysis for complex systems, and let analysts and users examine the operation of discrete subsystems.&lt;br /&gt;
* CRC cards are invaluable input into more formal methods. Agile development methods often use CRC cards. They are popular as a front end to UML&lt;br /&gt;
* CRC cards are a great way to build teamwork and common understanding.&lt;br /&gt;
* Part of the CRC card attraction is their simplicity. Developers can use them with little formal training and just paper and pencil for tools&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Software for CRC card==&lt;br /&gt;
&lt;br /&gt;
It is difficult to maintain, change, share paper based cards for large projects. Software for CRC cards offer many advantages in such scenarios such as&lt;br /&gt;
&lt;br /&gt;
*Easy Revision: As CRC cards are part of development process, constant changes are made by developers to edit the information .Change to one card might require changes to other cards. It becomes difficult to handle such interdependent changes for various fields such as attribute, responsibility, collaboration on paper based system. Software will reflect one change to every corresponding reference in the design. This saves a lot of time and also avoids the manual errors that may be evident on paper based system.&lt;br /&gt;
&lt;br /&gt;
*Easy sharing: Paper based systems make sharing difficult by necessitating team members to be physically present at one location. Using software, team members can work from different locations.&lt;br /&gt;
&lt;br /&gt;
*Better representation: It is possible to group cards from different perspective such as hierarchy, attributes, parent. This helps better understanding and thinking. Some software also aid graphical display of data.&lt;br /&gt;
&lt;br /&gt;
*Inputs to methodologies: Software for CRC cards can provide the input files for UML class diagram generation software saving lot of time in the development cycle.&lt;br /&gt;
&lt;br /&gt;
*Making additions to existing code: Many projects   make addition to existing code or reuse already developed code in their project. Software can produce CRC cards with existing source code as an input. This would help the team to understand the code in efficient manner and less time.&lt;br /&gt;
&lt;br /&gt;
However,it comes with a cost.Based on required features and cost,team may select from various commercially available software products.Below are few links:&lt;br /&gt;
&lt;br /&gt;
*quickCRC:http://www.excelsoftware.com/quickcrcwin.html&lt;br /&gt;
*CRC card support is part of Visual Paradigm for UML:  http://www.visual-paradigm.com/&lt;br /&gt;
&lt;br /&gt;
==CRC cards Limitations and formal object modeling methodologies(UML)==&lt;br /&gt;
&lt;br /&gt;
CRC cards are used to form initial class definitions but alone are not sufficient to be directly coded into software for large systems.It is difficult to keep track of cards as the systems grows and work on subsystems simultaneously and independently.CRC cards lack the notational power to document all the components of a system and cannot provide implementation specifications such as transition states of objects during its life cycle,interface design,data structures,performance and resource utilization. To bridge this gap,more formal object modeling methodology such as UML is used.UML captures the bigger picture.It provides detailed mapping of use cases(operations),object state transitions,inter-process communication functionality,algorithm design.UML is very effective in incremental model of SDLC where  lot of details need to captured for precise addition.Information  about requirements is represented in detail and whole picture of the system and users is visible.CRC cards are used as effective inputs to UML.CRC card techniques such as brainstorming and role play help enhance functional understanding which helps in preparing better UML use cases.CRC cards given the content for  class diagrams,inheritance diagrams,class specifications and object specifications for UML.CRC cards can keep track of attributes that can aid listing them as a part of class specification in UML.Most CRC card software have the facility to export CRC analysis file that can be directly used as an input for UML.Following case study develops UML with the help of CRC cards:&lt;br /&gt;
&lt;br /&gt;
http://www.math.gordon.edu/courses/cs211/ATMExample/  [3]&lt;br /&gt;
&lt;br /&gt;
==Summary==&lt;br /&gt;
CRC cards are very useful to form the base of object oriented methodology.Techniques such as brain storming and role play enhance the understanding of requirements.CRC automation makes card handling and sharing  quick and efficient.For large projects more formal technology such as UML is required but CRC cards can provide a very good starting point.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Reference==&lt;br /&gt;
[1]Rubin,D.M, Introduction to CRC Cards, Methodologies and Practices.Revised January 1998,SOFTSTAR RESEARCH,INC: http://www.softstar-inc.com/Download/Intro%20to%20CRC.pdf&lt;br /&gt;
&lt;br /&gt;
[2]Bjork,R.C, CRC cards for ATM, Object-Oriented Software Development.Retrieved September 6,2010,from Computer Science Department, Gordon College:: http://www.math-cs.gordon.edu/courses/cps211/ATMExample/CRCCards.html&lt;br /&gt;
&lt;br /&gt;
[3]Bjork,R.C, ATMExample, Object-Oriented Software Development.Retrieved September 5,2010,from Computer Science Department, Gordon College: http://www.math.gordon.edu/courses/cs211/ATMExample/&lt;br /&gt;
&lt;br /&gt;
[4]quickCRC,Excel Software.Retrieved on September 5,2010 from Excel Software,Software Development Tools:http://www.excelsoftware.com/quickcrcwin.html&lt;br /&gt;
&lt;br /&gt;
[5]Visual Paradigm for UML 8.0 Enterprise Edition,Retrieved September 5,2010, from Visual Paradigm: http://www.visual-paradigm.com/download/vpuml.jsp   &lt;br /&gt;
         &lt;br /&gt;
[6]Bellin, D and Simone, S.S ‘The CRC Card Book’, Addison Wesley, 1997&lt;/div&gt;</summary>
		<author><name>Bluehat</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch1_S6_km&amp;diff=33968</id>
		<title>CSC/ECE 517 Fall 2010/ch1 S6 km</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch1_S6_km&amp;diff=33968"/>
		<updated>2010-09-08T20:47:35Z</updated>

		<summary type="html">&lt;p&gt;Bluehat: /* Software for CRC card */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
The onset of the object oriented paradigm in the software industry brought about a big change in the basic approach to system design and the software development life cycle.The major task in the development of any application using the object oriented paradigm is to identify ‘classes’, and how these classes interact and collaborate with each other in the system scope. &lt;br /&gt;
&lt;br /&gt;
Whenever a system is designed with classes, each class has a specific role to play in the system.It has certain responsibilities and each class collaborates with other classes to provide the complete system functionality. In such a scenario, identifying classes becomes the key to a good system design.Although it seems to be a simple,intuitive process,identifying classes can be quite complex when it comes to large scale systems. &lt;br /&gt;
&lt;br /&gt;
One such technique for identification of classes that make up the system and its collaborations is the ‘CRC Card’ technique. The concept of CRC cards was first put forth by Kent Beck and Ward Cunningham and it became very popular as it is easy to use and it supports development of any kind of object oriented development regardless of its scale,the method used, the technology or the language used for development&lt;br /&gt;
&lt;br /&gt;
==Definition==&lt;br /&gt;
Class Responsibility Collaboration (CRC) cards is an object-oriented design method that uses ordinary 3x5 index cards card made for each class containing responsibilities (knowledge and services) and collaborators (interactions with other classes). The cards provide an informal, intuitive way for group members to work on object design together.[1]&lt;br /&gt;
A typical CRC card layout is shown below.&lt;br /&gt;
[[Image:Crccard2.jpg|frame|center|CRC CARD Template]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example: Consider a Student class where a student can enroll for a seminar. In this case ‘Student’ will be one class and ‘Seminar’ can be another class that collaborates with the Student class.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:CrcStudent.jpg|frame|center|Student CRC Card ]]&lt;br /&gt;
&lt;br /&gt;
To know more about CRC cards please refer to http://www.hsanchez.net/repository/hsanchez-PLCRC-plop04.pdf&lt;br /&gt;
&lt;br /&gt;
==Principle and Process==&lt;br /&gt;
&lt;br /&gt;
===CRC Principle===&lt;br /&gt;
&lt;br /&gt;
A CRC model includes a collection of cards and each card is divided into three sections. &lt;br /&gt;
*Class Name: &lt;br /&gt;
**Appears on the top of the CRC card&lt;br /&gt;
**Class denotes a set of similar objects that are being modeled in the system&lt;br /&gt;
&lt;br /&gt;
*Responsibilities:&lt;br /&gt;
**Appears on the left hand side of the CRC card&lt;br /&gt;
**It is a list of the responsibilities of the class i.e. things a class can do with its knowledge&lt;br /&gt;
&lt;br /&gt;
*Collaborators:&lt;br /&gt;
**Appear on the right hand side of the CRC card&lt;br /&gt;
**They are other classes that the class works with to get information or perform a certain function&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===CRC Process===&lt;br /&gt;
&lt;br /&gt;
CRC modeling process includes the users, analysts and developers bringing together the entire development team to form a common understanding of an OO development project.For e.g consider a software application to implement a game of blackjack. To implement the CRC technique to design this software, following steps are taken:&lt;br /&gt;
&lt;br /&gt;
*Explanation of the CRC Technique&lt;br /&gt;
**The facilitator explains the purpose of the CRC modeling session&lt;br /&gt;
**It can include explanation of CRC Cards and creation of sample CRC Cards&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Brainstorming&lt;br /&gt;
**A brainstorming session at the very beginning brings in new ideas, new perspectives to the problem being solved.&lt;br /&gt;
**Every team member can contribute with innovative ideas&lt;br /&gt;
**A list of candidate classes can be drawn up from this activity&lt;br /&gt;
&lt;br /&gt;
For e.g considering the above example, we can identify candidate classes by listing down the nouns relating to the game of blackjack. Say, game, blackjack, dealer, players, card, deck, hand, bet, king, queen, jack, ace, suit, winner, game.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Selecting a scenario and Core classes&lt;br /&gt;
**The scenario chosen at the beginning of the session should be simple, clear and well documented&lt;br /&gt;
**Related scenarios should be identified and dealt with separately&lt;br /&gt;
**Identification of critical classes from the candidate class list is also very important&lt;br /&gt;
**This helps to eliminate irrelevant classes and review remaining classes&lt;br /&gt;
**This also helps clarify the system scope&lt;br /&gt;
&lt;br /&gt;
For e.g we can apply the elimination process to the candidate class list. We can eliminate blackjack as it is the name of the system. ‘House’ can be eliminated as it is another name for the dealer. Also, instead of making ace, king, queen and jack as separate classes, we can represent them as attributes of individual classes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Create initial CRC cards&lt;br /&gt;
From the information gathered in the step above, CRC cards are written&lt;br /&gt;
&lt;br /&gt;
[[Image:Deck1.jpg |frame|center|Deck CRC Card]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Dealer.jpg |frame|center|Dealer CRC Card]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Player.jpg |frame|center|Player CRC Card]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Creating a CRC Model&lt;br /&gt;
**After the CRC cards  are written, they are placed appropriately, with collaborating classes closer to each other.&lt;br /&gt;
**Accordingly, place each card in position till the entire picture of the system is finalized.&lt;br /&gt;
**This process may have to be done in several iterations to get a refined view of the system to be modeled.&lt;br /&gt;
&lt;br /&gt;
For more information on using CRC Cards please refer to http://alistair.cockburn.us/Using+CRC+cards&lt;br /&gt;
&lt;br /&gt;
==CRC Team==&lt;br /&gt;
&lt;br /&gt;
*Domain Experts:&lt;br /&gt;
**Core team that writes the cards&lt;br /&gt;
**Have good business domain knowledge for which the system is being designed&lt;br /&gt;
**Usually are 3-5 people&lt;br /&gt;
&lt;br /&gt;
*Object Oriented Design Analyst:&lt;br /&gt;
**Analysts and developers those are familiar with object oriented design methodologies&lt;br /&gt;
**Usually are 1-2 people&lt;br /&gt;
&lt;br /&gt;
*Facilitator:&lt;br /&gt;
**Most important member who conducts the CRC modeling session&lt;br /&gt;
**Acts as an intermediary when there is difference of opinion regarding class responsibilities and paths of collaboration&lt;br /&gt;
**Usually a single person&lt;br /&gt;
&lt;br /&gt;
*Scribe:&lt;br /&gt;
**Responsible for documenting any business logic that evolves by way of discussions during the CRC modeling process.&lt;br /&gt;
**This documentation can be added to the requirements and business documents which can be used by design analysts at a later stage&lt;br /&gt;
**Usually are 1-2 people&lt;br /&gt;
&lt;br /&gt;
==Case study==&lt;br /&gt;
&lt;br /&gt;
To understand the working of CRC card modeling better, here is an example of an ATM system designed using CRC cards. Here, the software system under consideration has to control an automated teller machine. The ATM has a magnetic stripe reader for reading an ATM card, a customer console (keyboard and display) for interaction with the customer, a slot for depositing envelopes, a dispenser for cash (in multiples of $20), a printer for printing customer receipts, and a key-operated switch to allow an operator to start or stop the machine. Also, the ATM will communicate with the bank's computer over an appropriate communication link.&lt;br /&gt;
&lt;br /&gt;
To perform a transaction, a customer will be required to insert an ATM card and enter a personal identification number (PIN) - both of which will be sent to the bank for validation. The customer will then be able to perform one or more transactions. The card will be retained in the machine until the customer indicates that there are no further transactions, at which point it will be returned. For more on the case study.&lt;br /&gt;
&lt;br /&gt;
http://www.math-cs.gordon.edu/courses/cps211/ATMExample/CRCCards.html&lt;br /&gt;
&lt;br /&gt;
==Metrics for CRC Analysis==&lt;br /&gt;
&lt;br /&gt;
CRC analysis metrics can help evaluate the level of ease in designing and coding with CRC cards. These metrics also contribute to other project planning factors to give overall sense of project development.These metrics can be calculated easily and quickly without the need of special tools. Three metrics are broadly identified as: maximum depth of inheritance, the number of responsibilities assigned to each class and the number of collaborators for a class. With the example below an attempt has been made to explain these metrics.In the diagram, black line indicates inheritance while blue line indicates collaboration. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Class_hierarchy1.png|frame|center|CRC metrics example]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Maximum depth of inheritance===&lt;br /&gt;
&lt;br /&gt;
This metric gives an idea of the class hierarchy. It is the count of number of subclasses in the hierarchy.[6] From the diagram,it can be seen that Part Time student is a subclass of Distance Education which in turn is a subclass of student.Thus,maximum depth of inheritance in this case is two with  reference to class Student. Each subclass shares the overall functions defined in class Student. For short hierarchies, this is a positive benefit of OO. If number of subclasses become too long, it becomes difficult to trace the flow of functions, resulting in overly complex systems. This makes testing, reviewing and reusing difficult.&lt;br /&gt;
&lt;br /&gt;
===Number of collaborators===&lt;br /&gt;
&lt;br /&gt;
This is the count of all the supporting classes to help a class.[6] In the diagram,there are four collaborators for class Student:Teacher,Library,Computer Labs and Gymnasium.Confusion between collaborators and subclasses may result in creation many collaborators.This will affect the encapsulation of the design.Typical value for this metric is eight.If this value is large,design may be reviewed to see if inheritance is implemented correctly.&lt;br /&gt;
&lt;br /&gt;
===Number of responsibilities===&lt;br /&gt;
This is the count of clearly defined set of duties to each class.[6] For example class Student may have functions like Attending  Lectures,&lt;br /&gt;
Maintaining a certain GPA,Taking the required courses. In this case number of responsibilities is three.Responsibilities should be distributed amongst classes to cover the whole system. This would avoid an imbalance in design. We need to refine the overly complex class into a series of simpler objects. This will make the system easier to understand, implement and reuse. For most commercial transaction oriented systems, values approximately between eight and eighteen are common.&lt;br /&gt;
&lt;br /&gt;
==Advantages==&lt;br /&gt;
* CRC cards create a first-cut analysis for complex systems, and let analysts and users examine the operation of discrete subsystems.&lt;br /&gt;
* CRC cards are invaluable input into more formal methods. Agile development methods often use CRC cards. They are popular as a front end to UML&lt;br /&gt;
* CRC cards are a great way to build teamwork and common understanding.&lt;br /&gt;
* Part of the CRC card attraction is their simplicity. Developers can use them with little formal training and just paper and pencil for tools&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Software for CRC card==&lt;br /&gt;
&lt;br /&gt;
It is difficult to maintain, change, share paper based cards for large projects. Software for CRC cards offer many advantages in such scenarios such as&lt;br /&gt;
&lt;br /&gt;
*Easy Revision: As CRC cards are part of development process, constant changes are made by developers to edit the information .Change to one card might require changes to other cards. It becomes difficult to handle such interdependent changes for various fields such as attribute, responsibility, collaboration on paper based system. Software will reflect one change to every corresponding reference in the design. This saves a lot of time and also avoids the manual errors that may be evident on paper based system.&lt;br /&gt;
&lt;br /&gt;
*Easy sharing: Paper based systems make sharing difficult by necessitating team members to be physically present at one location. Using software, team members can work from different locations.&lt;br /&gt;
&lt;br /&gt;
*Better representation: It is possible to group cards from different perspective such as hierarchy, attributes, parent. This helps better understanding and thinking. Some software also aid graphical display of data.&lt;br /&gt;
&lt;br /&gt;
*Inputs to methodologies: Software for CRC cards can provide the input files for UML class diagram generation software saving lot of time in the development cycle.&lt;br /&gt;
&lt;br /&gt;
*Making additions to existing code: Many projects   make addition to existing code or reuse already developed code in their project. Software can produce CRC cards with existing source code as an input. This would help the team to understand the code in efficient manner and less time.&lt;br /&gt;
&lt;br /&gt;
However,it comes with a cost.Based on required features and cost,team may select from various commercially available software products.Below are few links:&lt;br /&gt;
&lt;br /&gt;
*quickCRC:http://www.excelsoftware.com/quickcrcwin.html&lt;br /&gt;
*CRC card support is part of Visual Paradigm for UML:  http://www.visual-paradigm.com/&lt;br /&gt;
&lt;br /&gt;
==CRC cards Limitations and formal object modeling methodologies(UML)==&lt;br /&gt;
&lt;br /&gt;
CRC cards are used to form initial class definitions but alone are not sufficient to be directly coded into software for large systems.It is difficult to keep track of cards as the systems grows and work on subsystems simultaneously and independently.CRC cards lack the notational power to document all the components of a system and cannot provide implementation specifications such as transition states of objects during its life cycle,interface design,data structures,performance and resource utilization. To bridge this gap,more formal object modeling methodology such as UML is used.UML captures the bigger picture.It provides detailed mapping of use cases(operations),object state transitions,inter-process communication functionality,algorithm design.UML is very effective in incremental model of SDLC where  lot of details need to captured for precise addition.Information  about requirements is represented in detail and whole picture of the system and users is visible.CRC cards are used as effective inputs to UML.CRC card techniques such as brainstorming and role play help enhance functional understanding which helps in preparing better UML use cases.CRC cards given the content for  class diagrams,inheritance diagrams,class specifications and object specifications for UML.CRC cards can keep track of attributes that can aid listing them as a part of class specification in UML.Most CRC card software have the facility to export CRC analysis file that can be directly used as an input for UML.Following case study develops UML with the help of CRC cards:&lt;br /&gt;
&lt;br /&gt;
http://www.math.gordon.edu/courses/cs211/ATMExample/  [3]&lt;br /&gt;
&lt;br /&gt;
==Summary==&lt;br /&gt;
CRC cards are very useful to form the base of object oriented methodology.Techniques such as brain storming and role play enhance the understanding of requirements.CRC automation makes card handling and sharing  quick and efficient.For large projects more formal technology such as UML is required but CRC cards can provide a very good starting point.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Reference==&lt;br /&gt;
[1]Rubin,D.M, Introduction to CRC Cards, Methodologies and Practices.Revised January 1998,SOFTSTAR RESEARCH,INC: http://www.softstar-inc.com/Download/Intro%20to%20CRC.pdf&lt;br /&gt;
&lt;br /&gt;
[2]Bjork,R.C, CRC cards for ATM, Object-Oriented Software Development.Retrieved September 6,2010,from Computer Science Department, Gordon College:: http://www.math-cs.gordon.edu/courses/cps211/ATMExample/CRCCards.html&lt;br /&gt;
&lt;br /&gt;
[3]Bjork,R.C, ATMExample, Object-Oriented Software Development.Retrieved September 5,2010,from Computer Science Department, Gordon College: http://www.math.gordon.edu/courses/cs211/ATMExample/&lt;br /&gt;
&lt;br /&gt;
[4]quickCRC,Excel Software.Retrieved on September 5,2010 from Excel Software,Software Development Tools:http://www.excelsoftware.com/quickcrcwin.html&lt;br /&gt;
&lt;br /&gt;
[5]Visual Paradigm:  http://www.visual-paradigm.com/   &lt;br /&gt;
         &lt;br /&gt;
[6]Bellin, D and Simone, S.S ‘The CRC Card Book’, Addison Wesley, 1997&lt;/div&gt;</summary>
		<author><name>Bluehat</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch1_S6_km&amp;diff=33965</id>
		<title>CSC/ECE 517 Fall 2010/ch1 S6 km</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch1_S6_km&amp;diff=33965"/>
		<updated>2010-09-08T20:47:00Z</updated>

		<summary type="html">&lt;p&gt;Bluehat: /* Reference */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
The onset of the object oriented paradigm in the software industry brought about a big change in the basic approach to system design and the software development life cycle.The major task in the development of any application using the object oriented paradigm is to identify ‘classes’, and how these classes interact and collaborate with each other in the system scope. &lt;br /&gt;
&lt;br /&gt;
Whenever a system is designed with classes, each class has a specific role to play in the system.It has certain responsibilities and each class collaborates with other classes to provide the complete system functionality. In such a scenario, identifying classes becomes the key to a good system design.Although it seems to be a simple,intuitive process,identifying classes can be quite complex when it comes to large scale systems. &lt;br /&gt;
&lt;br /&gt;
One such technique for identification of classes that make up the system and its collaborations is the ‘CRC Card’ technique. The concept of CRC cards was first put forth by Kent Beck and Ward Cunningham and it became very popular as it is easy to use and it supports development of any kind of object oriented development regardless of its scale,the method used, the technology or the language used for development&lt;br /&gt;
&lt;br /&gt;
==Definition==&lt;br /&gt;
Class Responsibility Collaboration (CRC) cards is an object-oriented design method that uses ordinary 3x5 index cards card made for each class containing responsibilities (knowledge and services) and collaborators (interactions with other classes). The cards provide an informal, intuitive way for group members to work on object design together.[1]&lt;br /&gt;
A typical CRC card layout is shown below.&lt;br /&gt;
[[Image:Crccard2.jpg|frame|center|CRC CARD Template]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example: Consider a Student class where a student can enroll for a seminar. In this case ‘Student’ will be one class and ‘Seminar’ can be another class that collaborates with the Student class.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:CrcStudent.jpg|frame|center|Student CRC Card ]]&lt;br /&gt;
&lt;br /&gt;
To know more about CRC cards please refer to http://www.hsanchez.net/repository/hsanchez-PLCRC-plop04.pdf&lt;br /&gt;
&lt;br /&gt;
==Principle and Process==&lt;br /&gt;
&lt;br /&gt;
===CRC Principle===&lt;br /&gt;
&lt;br /&gt;
A CRC model includes a collection of cards and each card is divided into three sections. &lt;br /&gt;
*Class Name: &lt;br /&gt;
**Appears on the top of the CRC card&lt;br /&gt;
**Class denotes a set of similar objects that are being modeled in the system&lt;br /&gt;
&lt;br /&gt;
*Responsibilities:&lt;br /&gt;
**Appears on the left hand side of the CRC card&lt;br /&gt;
**It is a list of the responsibilities of the class i.e. things a class can do with its knowledge&lt;br /&gt;
&lt;br /&gt;
*Collaborators:&lt;br /&gt;
**Appear on the right hand side of the CRC card&lt;br /&gt;
**They are other classes that the class works with to get information or perform a certain function&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===CRC Process===&lt;br /&gt;
&lt;br /&gt;
CRC modeling process includes the users, analysts and developers bringing together the entire development team to form a common understanding of an OO development project.For e.g consider a software application to implement a game of blackjack. To implement the CRC technique to design this software, following steps are taken:&lt;br /&gt;
&lt;br /&gt;
*Explanation of the CRC Technique&lt;br /&gt;
**The facilitator explains the purpose of the CRC modeling session&lt;br /&gt;
**It can include explanation of CRC Cards and creation of sample CRC Cards&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Brainstorming&lt;br /&gt;
**A brainstorming session at the very beginning brings in new ideas, new perspectives to the problem being solved.&lt;br /&gt;
**Every team member can contribute with innovative ideas&lt;br /&gt;
**A list of candidate classes can be drawn up from this activity&lt;br /&gt;
&lt;br /&gt;
For e.g considering the above example, we can identify candidate classes by listing down the nouns relating to the game of blackjack. Say, game, blackjack, dealer, players, card, deck, hand, bet, king, queen, jack, ace, suit, winner, game.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Selecting a scenario and Core classes&lt;br /&gt;
**The scenario chosen at the beginning of the session should be simple, clear and well documented&lt;br /&gt;
**Related scenarios should be identified and dealt with separately&lt;br /&gt;
**Identification of critical classes from the candidate class list is also very important&lt;br /&gt;
**This helps to eliminate irrelevant classes and review remaining classes&lt;br /&gt;
**This also helps clarify the system scope&lt;br /&gt;
&lt;br /&gt;
For e.g we can apply the elimination process to the candidate class list. We can eliminate blackjack as it is the name of the system. ‘House’ can be eliminated as it is another name for the dealer. Also, instead of making ace, king, queen and jack as separate classes, we can represent them as attributes of individual classes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Create initial CRC cards&lt;br /&gt;
From the information gathered in the step above, CRC cards are written&lt;br /&gt;
&lt;br /&gt;
[[Image:Deck1.jpg |frame|center|Deck CRC Card]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Dealer.jpg |frame|center|Dealer CRC Card]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Player.jpg |frame|center|Player CRC Card]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Creating a CRC Model&lt;br /&gt;
**After the CRC cards  are written, they are placed appropriately, with collaborating classes closer to each other.&lt;br /&gt;
**Accordingly, place each card in position till the entire picture of the system is finalized.&lt;br /&gt;
**This process may have to be done in several iterations to get a refined view of the system to be modeled.&lt;br /&gt;
&lt;br /&gt;
For more information on using CRC Cards please refer to http://alistair.cockburn.us/Using+CRC+cards&lt;br /&gt;
&lt;br /&gt;
==CRC Team==&lt;br /&gt;
&lt;br /&gt;
*Domain Experts:&lt;br /&gt;
**Core team that writes the cards&lt;br /&gt;
**Have good business domain knowledge for which the system is being designed&lt;br /&gt;
**Usually are 3-5 people&lt;br /&gt;
&lt;br /&gt;
*Object Oriented Design Analyst:&lt;br /&gt;
**Analysts and developers those are familiar with object oriented design methodologies&lt;br /&gt;
**Usually are 1-2 people&lt;br /&gt;
&lt;br /&gt;
*Facilitator:&lt;br /&gt;
**Most important member who conducts the CRC modeling session&lt;br /&gt;
**Acts as an intermediary when there is difference of opinion regarding class responsibilities and paths of collaboration&lt;br /&gt;
**Usually a single person&lt;br /&gt;
&lt;br /&gt;
*Scribe:&lt;br /&gt;
**Responsible for documenting any business logic that evolves by way of discussions during the CRC modeling process.&lt;br /&gt;
**This documentation can be added to the requirements and business documents which can be used by design analysts at a later stage&lt;br /&gt;
**Usually are 1-2 people&lt;br /&gt;
&lt;br /&gt;
==Case study==&lt;br /&gt;
&lt;br /&gt;
To understand the working of CRC card modeling better, here is an example of an ATM system designed using CRC cards. Here, the software system under consideration has to control an automated teller machine. The ATM has a magnetic stripe reader for reading an ATM card, a customer console (keyboard and display) for interaction with the customer, a slot for depositing envelopes, a dispenser for cash (in multiples of $20), a printer for printing customer receipts, and a key-operated switch to allow an operator to start or stop the machine. Also, the ATM will communicate with the bank's computer over an appropriate communication link.&lt;br /&gt;
&lt;br /&gt;
To perform a transaction, a customer will be required to insert an ATM card and enter a personal identification number (PIN) - both of which will be sent to the bank for validation. The customer will then be able to perform one or more transactions. The card will be retained in the machine until the customer indicates that there are no further transactions, at which point it will be returned. For more on the case study.&lt;br /&gt;
&lt;br /&gt;
http://www.math-cs.gordon.edu/courses/cps211/ATMExample/CRCCards.html&lt;br /&gt;
&lt;br /&gt;
==Metrics for CRC Analysis==&lt;br /&gt;
&lt;br /&gt;
CRC analysis metrics can help evaluate the level of ease in designing and coding with CRC cards. These metrics also contribute to other project planning factors to give overall sense of project development.These metrics can be calculated easily and quickly without the need of special tools. Three metrics are broadly identified as: maximum depth of inheritance, the number of responsibilities assigned to each class and the number of collaborators for a class. With the example below an attempt has been made to explain these metrics.In the diagram, black line indicates inheritance while blue line indicates collaboration. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Class_hierarchy1.png|frame|center|CRC metrics example]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Maximum depth of inheritance===&lt;br /&gt;
&lt;br /&gt;
This metric gives an idea of the class hierarchy. It is the count of number of subclasses in the hierarchy.[6] From the diagram,it can be seen that Part Time student is a subclass of Distance Education which in turn is a subclass of student.Thus,maximum depth of inheritance in this case is two with  reference to class Student. Each subclass shares the overall functions defined in class Student. For short hierarchies, this is a positive benefit of OO. If number of subclasses become too long, it becomes difficult to trace the flow of functions, resulting in overly complex systems. This makes testing, reviewing and reusing difficult.&lt;br /&gt;
&lt;br /&gt;
===Number of collaborators===&lt;br /&gt;
&lt;br /&gt;
This is the count of all the supporting classes to help a class.[6] In the diagram,there are four collaborators for class Student:Teacher,Library,Computer Labs and Gymnasium.Confusion between collaborators and subclasses may result in creation many collaborators.This will affect the encapsulation of the design.Typical value for this metric is eight.If this value is large,design may be reviewed to see if inheritance is implemented correctly.&lt;br /&gt;
&lt;br /&gt;
===Number of responsibilities===&lt;br /&gt;
This is the count of clearly defined set of duties to each class.[6] For example class Student may have functions like Attending  Lectures,&lt;br /&gt;
Maintaining a certain GPA,Taking the required courses. In this case number of responsibilities is three.Responsibilities should be distributed amongst classes to cover the whole system. This would avoid an imbalance in design. We need to refine the overly complex class into a series of simpler objects. This will make the system easier to understand, implement and reuse. For most commercial transaction oriented systems, values approximately between eight and eighteen are common.&lt;br /&gt;
&lt;br /&gt;
==Advantages==&lt;br /&gt;
* CRC cards create a first-cut analysis for complex systems, and let analysts and users examine the operation of discrete subsystems.&lt;br /&gt;
* CRC cards are invaluable input into more formal methods. Agile development methods often use CRC cards. They are popular as a front end to UML&lt;br /&gt;
* CRC cards are a great way to build teamwork and common understanding.&lt;br /&gt;
* Part of the CRC card attraction is their simplicity. Developers can use them with little formal training and just paper and pencil for tools&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Software for CRC card==&lt;br /&gt;
&lt;br /&gt;
It is difficult to maintain, change, share paper based cards for large projects. Software for CRC cards offer many advantages in such scenarios such as&lt;br /&gt;
&lt;br /&gt;
*Easy Revision: As CRC cards are part of development process, constant changes are made by developers to edit the information .Change to one card might require changes to other cards. It becomes difficult to handle such interdependent changes for various fields such as attribute, responsibility, collaboration on paper based system. Software will reflect one change to every corresponding reference in the design. This saves a lot of time and also avoids the manual errors that may be evident on paper based system.&lt;br /&gt;
&lt;br /&gt;
*Easy sharing: Paper based systems make sharing difficult by necessitating team members to be physically present at one location. Using software, team members can work from different locations.&lt;br /&gt;
&lt;br /&gt;
*Better representation: It is possible to group cards from different perspective such as hierarchy, attributes, parent. This helps better understanding and thinking. Some software also aid graphical display of data.&lt;br /&gt;
&lt;br /&gt;
*Inputs to methodologies: Software for CRC cards can provide the input files for UML class diagram generation software saving lot of time in the development cycle.&lt;br /&gt;
&lt;br /&gt;
*Making additions to existing code: Many projects   make addition to existing code or reuse already developed code in their project. Software can produce CRC cards with existing source code as an input. This would help the team to understand the code in efficient manner and less time.&lt;br /&gt;
&lt;br /&gt;
However,it comes with a cost.Based on required features and cost,team may select from various commercially available software products.Below are few links:&lt;br /&gt;
&lt;br /&gt;
*quickCRC:http://www.excelsoftware.com/&lt;br /&gt;
*CRC card support is part of Visual Paradigm for UML:  http://www.visual-paradigm.com/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==CRC cards Limitations and formal object modeling methodologies(UML)==&lt;br /&gt;
&lt;br /&gt;
CRC cards are used to form initial class definitions but alone are not sufficient to be directly coded into software for large systems.It is difficult to keep track of cards as the systems grows and work on subsystems simultaneously and independently.CRC cards lack the notational power to document all the components of a system and cannot provide implementation specifications such as transition states of objects during its life cycle,interface design,data structures,performance and resource utilization. To bridge this gap,more formal object modeling methodology such as UML is used.UML captures the bigger picture.It provides detailed mapping of use cases(operations),object state transitions,inter-process communication functionality,algorithm design.UML is very effective in incremental model of SDLC where  lot of details need to captured for precise addition.Information  about requirements is represented in detail and whole picture of the system and users is visible.CRC cards are used as effective inputs to UML.CRC card techniques such as brainstorming and role play help enhance functional understanding which helps in preparing better UML use cases.CRC cards given the content for  class diagrams,inheritance diagrams,class specifications and object specifications for UML.CRC cards can keep track of attributes that can aid listing them as a part of class specification in UML.Most CRC card software have the facility to export CRC analysis file that can be directly used as an input for UML.Following case study develops UML with the help of CRC cards:&lt;br /&gt;
&lt;br /&gt;
http://www.math.gordon.edu/courses/cs211/ATMExample/  [3]&lt;br /&gt;
&lt;br /&gt;
==Summary==&lt;br /&gt;
CRC cards are very useful to form the base of object oriented methodology.Techniques such as brain storming and role play enhance the understanding of requirements.CRC automation makes card handling and sharing  quick and efficient.For large projects more formal technology such as UML is required but CRC cards can provide a very good starting point.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Reference==&lt;br /&gt;
[1]Rubin,D.M, Introduction to CRC Cards, Methodologies and Practices.Revised January 1998,SOFTSTAR RESEARCH,INC: http://www.softstar-inc.com/Download/Intro%20to%20CRC.pdf&lt;br /&gt;
&lt;br /&gt;
[2]Bjork,R.C, CRC cards for ATM, Object-Oriented Software Development.Retrieved September 6,2010,from Computer Science Department, Gordon College:: http://www.math-cs.gordon.edu/courses/cps211/ATMExample/CRCCards.html&lt;br /&gt;
&lt;br /&gt;
[3]Bjork,R.C, ATMExample, Object-Oriented Software Development.Retrieved September 5,2010,from Computer Science Department, Gordon College: http://www.math.gordon.edu/courses/cs211/ATMExample/&lt;br /&gt;
&lt;br /&gt;
[4]quickCRC,Excel Software.Retrieved on September 5,2010 from Excel Software,Software Development Tools:http://www.excelsoftware.com/quickcrcwin.html&lt;br /&gt;
&lt;br /&gt;
[5]Visual Paradigm:  http://www.visual-paradigm.com/   &lt;br /&gt;
         &lt;br /&gt;
[6]Bellin, D and Simone, S.S ‘The CRC Card Book’, Addison Wesley, 1997&lt;/div&gt;</summary>
		<author><name>Bluehat</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch1_S6_km&amp;diff=33937</id>
		<title>CSC/ECE 517 Fall 2010/ch1 S6 km</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2010/ch1_S6_km&amp;diff=33937"/>
		<updated>2010-09-08T20:21:43Z</updated>

		<summary type="html">&lt;p&gt;Bluehat: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
The onset of the object oriented paradigm in the software industry brought about a big change in the basic approach to system design and the software development life cycle.The major task in the development of any application using the object oriented paradigm is to identify ‘classes’, and how these classes interact and collaborate with each other in the system scope. &lt;br /&gt;
&lt;br /&gt;
Whenever a system is designed with classes, each class has a specific role to play in the system.It has certain responsibilities and each class collaborates with other classes to provide the complete system functionality. In such a scenario, identifying classes becomes the key to a good system design.Although it seems to be a simple,intuitive process,identifying classes can be quite complex when it comes to large scale systems. &lt;br /&gt;
&lt;br /&gt;
One such technique for identification of classes that make up the system and its collaborations is the ‘CRC Card’ technique. The concept of CRC cards was first put forth by Kent Beck and Ward Cunningham and it became very popular as it is easy to use and it supports development of any kind of object oriented development regardless of its scale,the method used, the technology or the language used for development&lt;br /&gt;
&lt;br /&gt;
==Definition==&lt;br /&gt;
Class Responsibility Collaboration (CRC) cards is an object-oriented design method that uses ordinary 3x5 index cards card made for each class containing responsibilities (knowledge and services) and collaborators (interactions with other classes). The cards provide an informal, intuitive way for group members to work on object design together.[1]&lt;br /&gt;
A typical CRC card layout is shown below.&lt;br /&gt;
[[Image:Crccard2.jpg|frame|center|CRC CARD Template]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example: Consider a Student class where a student can enroll for a seminar. In this case ‘Student’ will be one class and ‘Seminar’ can be another class that collaborates with the Student class.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:CrcStudent.jpg|frame|center|Student CRC Card ]]&lt;br /&gt;
&lt;br /&gt;
To know more about CRC cards please refer to http://www.hsanchez.net/repository/hsanchez-PLCRC-plop04.pdf&lt;br /&gt;
&lt;br /&gt;
==Principle and Process==&lt;br /&gt;
&lt;br /&gt;
===CRC Principle===&lt;br /&gt;
&lt;br /&gt;
A CRC model includes a collection of cards and each card is divided into three sections. &lt;br /&gt;
*Class Name: &lt;br /&gt;
**Appears on the top of the CRC card&lt;br /&gt;
**Class denotes a set of similar objects that are being modeled in the system&lt;br /&gt;
&lt;br /&gt;
*Responsibilities:&lt;br /&gt;
**Appears on the left hand side of the CRC card&lt;br /&gt;
**It is a list of the responsibilities of the class i.e. things a class can do with its knowledge&lt;br /&gt;
&lt;br /&gt;
*Collaborators:&lt;br /&gt;
**Appear on the right hand side of the CRC card&lt;br /&gt;
**They are other classes that the class works with to get information or perform a certain function&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===CRC Process===&lt;br /&gt;
&lt;br /&gt;
CRC modeling process includes the users, analysts and developers bringing together the entire development team to form a common understanding of an OO development project.For e.g consider a software application to implement a game of blackjack. To implement the CRC technique to design this software, following steps are taken:&lt;br /&gt;
&lt;br /&gt;
*Explanation of the CRC Technique&lt;br /&gt;
**The facilitator explains the purpose of the CRC modeling session&lt;br /&gt;
**It can include explanation of CRC Cards and creation of sample CRC Cards&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Brainstorming&lt;br /&gt;
**A brainstorming session at the very beginning brings in new ideas, new perspectives to the problem being solved.&lt;br /&gt;
**Every team member can contribute with innovative ideas&lt;br /&gt;
**A list of candidate classes can be drawn up from this activity&lt;br /&gt;
&lt;br /&gt;
For e.g considering the above example, we can identify candidate classes by listing down the nouns relating to the game of blackjack. Say, game, blackjack, dealer, players, card, deck, hand, bet, king, queen, jack, ace, suit, winner, game.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Selecting a scenario and Core classes&lt;br /&gt;
**The scenario chosen at the beginning of the session should be simple, clear and well documented&lt;br /&gt;
**Related scenarios should be identified and dealt with separately&lt;br /&gt;
**Identification of critical classes from the candidate class list is also very important&lt;br /&gt;
**This helps to eliminate irrelevant classes and review remaining classes&lt;br /&gt;
**This also helps clarify the system scope&lt;br /&gt;
&lt;br /&gt;
For e.g we can apply the elimination process to the candidate class list. We can eliminate blackjack as it is the name of the system. ‘House’ can be eliminated as it is another name for the dealer. Also, instead of making ace, king, queen and jack as separate classes, we can represent them as attributes of individual classes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Create initial CRC cards&lt;br /&gt;
From the information gathered in the step above, CRC cards are written&lt;br /&gt;
&lt;br /&gt;
[[Image:Deck1.jpg |frame|center|Deck CRC Card]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Dealer.jpg |frame|center|Dealer CRC Card]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Player.jpg |frame|center|Player CRC Card]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Creating a CRC Model&lt;br /&gt;
**After the CRC cards  are written, they are placed appropriately, with collaborating classes closer to each other.&lt;br /&gt;
**Accordingly, place each card in position till the entire picture of the system is finalized.&lt;br /&gt;
**This process may have to be done in several iterations to get a refined view of the system to be modeled.&lt;br /&gt;
&lt;br /&gt;
For more information on using CRC Cards please refer to http://alistair.cockburn.us/Using+CRC+cards&lt;br /&gt;
&lt;br /&gt;
==CRC Team==&lt;br /&gt;
&lt;br /&gt;
*Domain Experts:&lt;br /&gt;
**Core team that writes the cards&lt;br /&gt;
**Have good business domain knowledge for which the system is being designed&lt;br /&gt;
**Usually are 3-5 people&lt;br /&gt;
&lt;br /&gt;
*Object Oriented Design Analyst:&lt;br /&gt;
**Analysts and developers those are familiar with object oriented design methodologies&lt;br /&gt;
**Usually are 1-2 people&lt;br /&gt;
&lt;br /&gt;
*Facilitator:&lt;br /&gt;
**Most important member who conducts the CRC modeling session&lt;br /&gt;
**Acts as an intermediary when there is difference of opinion regarding class responsibilities and paths of collaboration&lt;br /&gt;
**Usually a single person&lt;br /&gt;
&lt;br /&gt;
*Scribe:&lt;br /&gt;
**Responsible for documenting any business logic that evolves by way of discussions during the CRC modeling process.&lt;br /&gt;
**This documentation can be added to the requirements and business documents which can be used by design analysts at a later stage&lt;br /&gt;
**Usually are 1-2 people&lt;br /&gt;
&lt;br /&gt;
==Case study==&lt;br /&gt;
&lt;br /&gt;
To understand the working of CRC card modeling better, here is an example of an ATM system designed using CRC cards. Here, the software system under consideration has to control an automated teller machine. The ATM has a magnetic stripe reader for reading an ATM card, a customer console (keyboard and display) for interaction with the customer, a slot for depositing envelopes, a dispenser for cash (in multiples of $20), a printer for printing customer receipts, and a key-operated switch to allow an operator to start or stop the machine. Also, the ATM will communicate with the bank's computer over an appropriate communication link.&lt;br /&gt;
&lt;br /&gt;
To perform a transaction, a customer will be required to insert an ATM card and enter a personal identification number (PIN) - both of which will be sent to the bank for validation. The customer will then be able to perform one or more transactions. The card will be retained in the machine until the customer indicates that there are no further transactions, at which point it will be returned. For more on the case study.&lt;br /&gt;
&lt;br /&gt;
http://www.math-cs.gordon.edu/courses/cps211/ATMExample/CRCCards.html&lt;br /&gt;
&lt;br /&gt;
==Metrics for CRC Analysis==&lt;br /&gt;
&lt;br /&gt;
CRC analysis metrics can help evaluate the level of ease in designing and coding with CRC cards. These metrics also contribute to other project planning factors to give overall sense of project development.These metrics can be calculated easily and quickly without the need of special tools. Three metrics are broadly identified as: maximum depth of inheritance, the number of responsibilities assigned to each class and the number of collaborators for a class. With the example below an attempt has been made to explain these metrics.In the diagram, black line indicates inheritance while blue line indicates collaboration. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Class_hierarchy1.png|frame|center|CRC metrics example]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Maximum depth of inheritance===&lt;br /&gt;
&lt;br /&gt;
This metric gives an idea of the class hierarchy. It is the count of number of subclasses in the hierarchy.[6] From the diagram,it can be seen that Part Time student is a subclass of Distance Education which in turn is a subclass of student.Thus,maximum depth of inheritance in this case is two with  reference to class Student. Each subclass shares the overall functions defined in class Student. For short hierarchies, this is a positive benefit of OO. If number of subclasses become too long, it becomes difficult to trace the flow of functions, resulting in overly complex systems. This makes testing, reviewing and reusing difficult.&lt;br /&gt;
&lt;br /&gt;
===Number of collaborators===&lt;br /&gt;
&lt;br /&gt;
This is the count of all the supporting classes to help a class.[6] In the diagram,there are four collaborators for class Student:Teacher,Library,Computer Labs and Gymnasium.Confusion between collaborators and subclasses may result in creation many collaborators.This will affect the encapsulation of the design.Typical value for this metric is eight.If this value is large,design may be reviewed to see if inheritance is implemented correctly.&lt;br /&gt;
&lt;br /&gt;
===Number of responsibilities===&lt;br /&gt;
This is the count of clearly defined set of duties to each class.[6] For example class Student may have functions like Attending  Lectures,&lt;br /&gt;
Maintaining a certain GPA,Taking the required courses. In this case number of responsibilities is three.Responsibilities should be distributed amongst classes to cover the whole system. This would avoid an imbalance in design. We need to refine the overly complex class into a series of simpler objects. This will make the system easier to understand, implement and reuse. For most commercial transaction oriented systems, values approximately between eight and eighteen are common.&lt;br /&gt;
&lt;br /&gt;
==Advantages==&lt;br /&gt;
* CRC cards create a first-cut analysis for complex systems, and let analysts and users examine the operation of discrete subsystems.&lt;br /&gt;
* CRC cards are invaluable input into more formal methods. Agile development methods often use CRC cards. They are popular as a front end to UML&lt;br /&gt;
* CRC cards are a great way to build teamwork and common understanding.&lt;br /&gt;
* Part of the CRC card attraction is their simplicity. Developers can use them with little formal training and just paper and pencil for tools&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Software for CRC card==&lt;br /&gt;
&lt;br /&gt;
It is difficult to maintain, change, share paper based cards for large projects. Software for CRC cards offer many advantages in such scenarios such as&lt;br /&gt;
&lt;br /&gt;
*Easy Revision: As CRC cards are part of development process, constant changes are made by developers to edit the information .Change to one card might require changes to other cards. It becomes difficult to handle such interdependent changes for various fields such as attribute, responsibility, collaboration on paper based system. Software will reflect one change to every corresponding reference in the design. This saves a lot of time and also avoids the manual errors that may be evident on paper based system.&lt;br /&gt;
&lt;br /&gt;
*Easy sharing: Paper based systems make sharing difficult by necessitating team members to be physically present at one location. Using software, team members can work from different locations.&lt;br /&gt;
&lt;br /&gt;
*Better representation: It is possible to group cards from different perspective such as hierarchy, attributes, parent. This helps better understanding and thinking. Some software also aid graphical display of data.&lt;br /&gt;
&lt;br /&gt;
*Inputs to methodologies: Software for CRC cards can provide the input files for UML class diagram generation software saving lot of time in the development cycle.&lt;br /&gt;
&lt;br /&gt;
*Making additions to existing code: Many projects   make addition to existing code or reuse already developed code in their project. Software can produce CRC cards with existing source code as an input. This would help the team to understand the code in efficient manner and less time.&lt;br /&gt;
&lt;br /&gt;
However,it comes with a cost.Based on required features and cost,team may select from various commercially available software products.Below are few links:&lt;br /&gt;
&lt;br /&gt;
*quickCRC:http://www.excelsoftware.com/&lt;br /&gt;
*CRC card support is part of Visual Paradigm for UML:  http://www.visual-paradigm.com/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==CRC cards Limitations and formal object modeling methodologies(UML)==&lt;br /&gt;
&lt;br /&gt;
CRC cards are used to form initial class definitions but alone are not sufficient to be directly coded into software for large systems.It is difficult to keep track of cards as the systems grows and work on subsystems simultaneously and independently.CRC cards lack the notational power to document all the components of a system and cannot provide implementation specifications such as transition states of objects during its life cycle,interface design,data structures,performance and resource utilization. To bridge this gap,more formal object modeling methodology such as UML is used.UML captures the bigger picture.It provides detailed mapping of use cases(operations),object state transitions,inter-process communication functionality,algorithm design.UML is very effective in incremental model of SDLC where  lot of details need to captured for precise addition.Information  about requirements is represented in detail and whole picture of the system and users is visible.CRC cards are used as effective inputs to UML.CRC card techniques such as brainstorming and role play help enhance functional understanding which helps in preparing better UML use cases.CRC cards given the content for  class diagrams,inheritance diagrams,class specifications and object specifications for UML.CRC cards can keep track of attributes that can aid listing them as a part of class specification in UML.Most CRC card software have the facility to export CRC analysis file that can be directly used as an input for UML.Following case study develops UML with the help of CRC cards:&lt;br /&gt;
&lt;br /&gt;
http://www.math.gordon.edu/courses/cs211/ATMExample/  [3]&lt;br /&gt;
&lt;br /&gt;
==Summary==&lt;br /&gt;
CRC cards are very useful to form the base of object oriented methodology.Techniques such as brain storming and role play enhance the understanding of requirements.CRC automation makes card handling and sharing  quick and efficient.For large projects more formal technology such as UML is required but CRC cards can provide a very good starting point.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Reference==&lt;br /&gt;
[1]Rubin,D.M, Introduction to CRC Cards, Methodologies and Practices.Revised January 1998,SOFTSTAR RESEARCH,INC: http://www.softstar-inc.com/Download/Intro%20to%20CRC.pdf&lt;br /&gt;
&lt;br /&gt;
[2]Bjork,R.C, CRC cards for ATM, Object-Oriented Software Development.Retrieved September 6,2010,from Computer Science Department, Gordon College:: http://www.math-cs.gordon.edu/courses/cps211/ATMExample/CRCCards.html&lt;br /&gt;
&lt;br /&gt;
[3]Bjork,R.C, ATMExample, Object-Oriented Software Development.Retrieved September 5,2010,from Computer Science Department, Gordon College: http://www.math.gordon.edu/courses/cs211/ATMExample/&lt;br /&gt;
&lt;br /&gt;
[4]quickCRC:http://www.excelsoftware.com/&lt;br /&gt;
&lt;br /&gt;
[5]Visual Paradigm:  http://www.visual-paradigm.com/   &lt;br /&gt;
         &lt;br /&gt;
[6]Bellin, D and Simone, S.S ‘The CRC Card Book’, Addison Wesley, 1997&lt;/div&gt;</summary>
		<author><name>Bluehat</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=User:Bluehat&amp;diff=33835</id>
		<title>User:Bluehat</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=User:Bluehat&amp;diff=33835"/>
		<updated>2010-09-08T17:55:50Z</updated>

		<summary type="html">&lt;p&gt;Bluehat: /* Number of responsibilities */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
The onset of the object oriented paradigm in the software industry brought about a big change in the basic approach to system design and the software development life cycle.The major task in the development of any application using the object oriented paradigm is to identify ‘classes’, and how these classes interact and collaborate with each other in the system scope. &lt;br /&gt;
&lt;br /&gt;
Whenever a system is designed with classes, each class has a specific role to play in the system.It has certain responsibilities and each class collaborates with other classes to provide the complete system functionality. In such a scenario, identifying classes becomes the key to a good system design.Although it seems to be a simple,intuitive process,identifying classes can be quite complex when it comes to large scale systems. &lt;br /&gt;
&lt;br /&gt;
One such technique for identification of classes that make up the system and its collaborations is the ‘CRC Card’ technique. The concept of CRC cards was first put forth by Kent Beck and Ward Cunningham and it became very popular as it is easy to use and it supports development of any kind of object oriented development regardless of its scale,the method used, the technology or the language used for development&lt;br /&gt;
&lt;br /&gt;
==Definition==&lt;br /&gt;
Class Responsibility Collaboration (CRC) cards is an object-oriented design method that uses ordinary 3x5 index cards card made for each class containing responsibilities (knowledge and services) and collaborators (interactions with other classes). The cards provide an informal, intuitive way for group members to work on object design together.[1]&lt;br /&gt;
A typical CRC card layout is shown below.&lt;br /&gt;
[[Image:Crccard2.jpg|frame|center|CRC CARD Template]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example: Consider a Student class where a student can enroll for a seminar. In this case ‘Student’ will be one class and ‘Seminar’ can be another class that collaborates with the Student class.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:CrcStudent.jpg|frame|center|Student CRC Card ]]&lt;br /&gt;
&lt;br /&gt;
To know more about CRC cards please refer to http://www.hsanchez.net/repository/hsanchez-PLCRC-plop04.pdf&lt;br /&gt;
&lt;br /&gt;
==Principle and Process==&lt;br /&gt;
&lt;br /&gt;
===CRC Principle===&lt;br /&gt;
&lt;br /&gt;
A CRC model includes a collection of cards and each card is divided into three sections. &lt;br /&gt;
*Class Name: &lt;br /&gt;
**Appears on the top of the CRC card&lt;br /&gt;
**Class denotes a set of similar objects that are being modeled in the system&lt;br /&gt;
&lt;br /&gt;
*Responsibilities:&lt;br /&gt;
**Appears on the left hand side of the CRC card&lt;br /&gt;
**It is a list of the responsibilities of the class i.e. things a class can do with its knowledge&lt;br /&gt;
&lt;br /&gt;
*Collaborators:&lt;br /&gt;
**Appear on the right hand side of the CRC card&lt;br /&gt;
**They are other classes that the class works with to get information or perform a certain function&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===CRC Process===&lt;br /&gt;
&lt;br /&gt;
CRC modeling process includes the users, analysts and developers bringing together the entire development team to form a common understanding of an OO development project.For e.g consider a software application to implement a game of blackjack. To implement the CRC technique to design this software, following steps are taken:&lt;br /&gt;
&lt;br /&gt;
*Explanation of the CRC Technique&lt;br /&gt;
**The facilitator explains the purpose of the CRC modeling session&lt;br /&gt;
**It can include explanation of CRC Cards and creation of sample CRC Cards&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Brainstorming&lt;br /&gt;
**A brainstorming session at the very beginning brings in new ideas, new perspectives to the problem being solved.&lt;br /&gt;
**Every team member can contribute with innovative ideas&lt;br /&gt;
**A list of candidate classes can be drawn up from this activity&lt;br /&gt;
&lt;br /&gt;
For e.g considering the above example, we can identify candidate classes by listing down the nouns relating to the game of blackjack. Say, game, blackjack, dealer, players, card, deck, hand, bet, king, queen, jack, ace, suit, winner, game.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Selecting a scenario and Core classes&lt;br /&gt;
**The scenario chosen at the beginning of the session should be simple, clear and well documented&lt;br /&gt;
**Related scenarios should be identified and dealt with separately&lt;br /&gt;
**Identification of critical classes from the candidate class list is also very important&lt;br /&gt;
**This helps to eliminate irrelevant classes and review remaining classes&lt;br /&gt;
**This also helps clarify the system scope&lt;br /&gt;
&lt;br /&gt;
For e.g we can apply the elimination process to the candidate class list. We can eliminate blackjack as it is the name of the system. ‘House’ can be eliminated as it is another name for the dealer. Also, instead of making ace, king, queen and jack as separate classes, we can represent them as attributes of individual classes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Create initial CRC cards&lt;br /&gt;
From the information gathered in the step above, CRC cards are written&lt;br /&gt;
&lt;br /&gt;
[[Image:Deck1.jpg |frame|center|Deck CRC Card]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Dealer.jpg |frame|center|Dealer CRC Card]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Player.jpg |frame|center|Player CRC Card]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Creating a CRC Model&lt;br /&gt;
**After the CRC cards  are written, they are placed appropriately, with collaborating classes closer to each other.&lt;br /&gt;
**Accordingly, place each card in position till the entire picture of the system is finalized.&lt;br /&gt;
**This process may have to be done in several iterations to get a refined view of the system to be modeled.&lt;br /&gt;
&lt;br /&gt;
For more information on using CRC Cards please refer to http://alistair.cockburn.us/Using+CRC+cards&lt;br /&gt;
&lt;br /&gt;
==CRC Team==&lt;br /&gt;
&lt;br /&gt;
*Domain Experts:&lt;br /&gt;
**Core team that writes the cards&lt;br /&gt;
**Have good business domain knowledge for which the system is being designed&lt;br /&gt;
**Usually are 3-5 people&lt;br /&gt;
&lt;br /&gt;
*Object Oriented Design Analyst:&lt;br /&gt;
**Analysts and developers those are familiar with object oriented design methodologies&lt;br /&gt;
**Usually are 1-2 people&lt;br /&gt;
&lt;br /&gt;
*Facilitator:&lt;br /&gt;
**Most important member who conducts the CRC modeling session&lt;br /&gt;
**Acts as an intermediary when there is difference of opinion regarding class responsibilities and paths of collaboration&lt;br /&gt;
**Usually a single person&lt;br /&gt;
&lt;br /&gt;
*Scribe:&lt;br /&gt;
**Responsible for documenting any business logic that evolves by way of discussions during the CRC modeling process.&lt;br /&gt;
**This documentation can be added to the requirements and business documents which can be used by design analysts at a later stage&lt;br /&gt;
**Usually are 1-2 people&lt;br /&gt;
&lt;br /&gt;
==Case study==&lt;br /&gt;
&lt;br /&gt;
To understand the working of CRC card modeling better, here is an example of an ATM system designed using CRC cards. Here, the software system under consideration has to control an automated teller machine. The ATM has a magnetic stripe reader for reading an ATM card, a customer console (keyboard and display) for interaction with the customer, a slot for depositing envelopes, a dispenser for cash (in multiples of $20), a printer for printing customer receipts, and a key-operated switch to allow an operator to start or stop the machine. Also, the ATM will communicate with the bank's computer over an appropriate communication link.&lt;br /&gt;
&lt;br /&gt;
To perform a transaction, a customer will be required to insert an ATM card and enter a personal identification number (PIN) - both of which will be sent to the bank for validation. The customer will then be able to perform one or more transactions. The card will be retained in the machine until the customer indicates that there are no further transactions, at which point it will be returned. For more on the case study.&lt;br /&gt;
&lt;br /&gt;
http://www.math-cs.gordon.edu/courses/cps211/ATMExample/CRCCards.html&lt;br /&gt;
&lt;br /&gt;
==Metrics for CRC Analysis==&lt;br /&gt;
&lt;br /&gt;
CRC analysis metrics can help evaluate the level of ease in designing and coding with CRC cards. These metrics also contribute to other project planning factors to give overall sense of project development.These metrics can be calculated easily and quickly without the need of special tools. Three metrics are broadly identified as: maximum depth of inheritance, the number of responsibilities assigned to each class and the number of collaborators for a class. With the example below an attempt has been made to explain these metrics.In the diagram, black line indicates inheritance while blue line indicates collaboration. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Class_hierarchy1.png|frame|center|CRC metrics example]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Maximum depth of inheritance===&lt;br /&gt;
&lt;br /&gt;
This metric gives an idea of the class hierarchy. It is the count of number of subclasses in the hierarchy.[6] From the diagram,it can be seen that Part Time student is a subclass of Distance Education which in turn is a subclass of student.Thus,maximum depth of inheritance in this case is two with  reference to class Student. Each subclass shares the overall functions defined in class Student. For short hierarchies, this is a positive benefit of OO. If number of subclasses become too long, it becomes difficult to trace the flow of functions, resulting in overly complex systems. This makes testing, reviewing and reusing difficult.&lt;br /&gt;
&lt;br /&gt;
===Number of collaborators===&lt;br /&gt;
&lt;br /&gt;
This is the count of all the supporting classes to help a class.[6] In the diagram,there are four collaborators for class Student:Teacher,Library,Computer Labs and Gymnasium.Confusion between collaborators and subclasses may result in creation many collaborators.This will affect the encapsulation of the design.Typical value for this metric is eight.If this value is large,design may be reviewed to see if inheritance is implemented correctly.&lt;br /&gt;
&lt;br /&gt;
===Number of responsibilities===&lt;br /&gt;
This is the count of clearly defined set of duties to each class.[6] For example class Student may have functions like Attending  Lectures,&lt;br /&gt;
Maintaining a certain GPA,Taking the required courses. In this case number of responsibilities is three.Responsibilities should be distributed amongst classes to cover the whole system. This would avoid an imbalance in design. We need to refine the overly complex class into a series of simpler objects. This will make the system easier to understand, implement and reuse. For most commercial transaction oriented systems, values approximately between eight and eighteen are common.&lt;br /&gt;
&lt;br /&gt;
==Advantages==&lt;br /&gt;
* CRC cards create a first-cut analysis for complex systems, and let analysts and users examine the operation of discrete subsystems.&lt;br /&gt;
* CRC cards are invaluable input into more formal methods. Agile development methods often use CRC cards. They are popular as a front end to UML&lt;br /&gt;
* CRC cards are a great way to build teamwork and common understanding.&lt;br /&gt;
* Part of the CRC card attraction is their simplicity. Developers can use them with little formal training and just paper and pencil for tools&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Software for CRC card==&lt;br /&gt;
&lt;br /&gt;
It is difficult to maintain, change, share paper based cards for large projects. Software for CRC cards offer many advantages in such scenarios such as&lt;br /&gt;
&lt;br /&gt;
*Easy Revision: As CRC cards are part of development process, constant changes are made by developers to edit the information .Change to one card might require changes to other cards. It becomes difficult to handle such interdependent changes for various fields such as attribute, responsibility, collaboration on paper based system. Software will reflect one change to every corresponding reference in the design. This saves a lot of time and also avoids the manual errors that may be evident on paper based system.&lt;br /&gt;
&lt;br /&gt;
*Easy sharing: Paper based systems make sharing difficult by necessitating team members to be physically present at one location. Using software, team members can work from different locations.&lt;br /&gt;
&lt;br /&gt;
*Better representation: It is possible to group cards from different perspective such as hierarchy, attributes, parent. This helps better understanding and thinking. Some software also aid graphical display of data.&lt;br /&gt;
&lt;br /&gt;
*Inputs to methodologies: Software for CRC cards can provide the input files for UML class diagram generation software saving lot of time in the development cycle.&lt;br /&gt;
&lt;br /&gt;
*Making additions to existing code: Many projects   make addition to existing code or reuse already developed code in their project. Software can produce CRC cards with existing source code as an input. This would help the team to understand the code in efficient manner and less time.&lt;br /&gt;
&lt;br /&gt;
However,it comes with a cost.Based on required features and cost,team may select from various commercially available software products.Below are few links:&lt;br /&gt;
&lt;br /&gt;
*quickCRC:http://www.excelsoftware.com/&lt;br /&gt;
*CRC card support is part of Visual Paradigm for UML:  http://www.visual-paradigm.com/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==CRC cards Limitations and formal object modeling methodologies(UML)==&lt;br /&gt;
&lt;br /&gt;
CRC cards are used to form initial class definitions but alone are not sufficient to be directly coded into software for large systems.It is difficult to keep track of cards as the systems grows and work on subsystems simultaneously and independently.CRC cards lack the notational power to document all the components of a system and cannot provide implementation specifications such as transition states of objects during its life cycle,interface design,data structures,performance and resource utilization. To bridge this gap,more formal object modeling methodology such as UML is used.UML captures the bigger picture.It provides detailed mapping of use cases(operations),object state transitions,inter-process communication functionality,algorithm design.UML is very effective in incremental model of SDLC where  lot of details need to captured for precise addition.Information  about requirements is represented in detail and whole picture of the system and users is visible.CRC cards are used as effective inputs to UML.CRC card techniques such as brainstorming and role play help enhance functional understanding which helps in preparing better UML use cases.CRC cards given the content for  class diagrams,inheritance diagrams,class specifications and object specifications for UML.CRC cards can keep track of attributes that can aid listing them as a part of class specification in UML.Most CRC card software have the facility to export CRC analysis file that can be directly used as an input for UML.Following case study develops UML with the help of CRC cards:&lt;br /&gt;
&lt;br /&gt;
http://www.math.gordon.edu/courses/cs211/ATMExample/  [3]&lt;br /&gt;
&lt;br /&gt;
==Summary==&lt;br /&gt;
CRC cards are very useful to form the base of object oriented methodology.Techniques such as brain storming and role play enhance the understanding of requirements.CRC automation makes card handling and sharing  quick and efficient.For large projects more formal technology such as UML is required but CRC cards can provide a very good starting point.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Reference==&lt;br /&gt;
[1]Rubin,D.M, Introduction to CRC Cards, Methodologies and Practices.Revised January 1998,SOFTSTAR RESEARCH,INC: http://www.softstar-inc.com/Download/Intro%20to%20CRC.pdf&lt;br /&gt;
&lt;br /&gt;
[2]Bjork,R.C, CRC cards for ATM, Object-Oriented Software Development.Retrieved September 6,2010,from Computer Science Department, Gordon College:: http://www.math-cs.gordon.edu/courses/cps211/ATMExample/CRCCards.html&lt;br /&gt;
&lt;br /&gt;
[3]Bjork,R.C, ATMExample, Object-Oriented Software Development.Retrieved September 5,2010,from Computer Science Department, Gordon College: http://www.math.gordon.edu/courses/cs211/ATMExample/&lt;br /&gt;
&lt;br /&gt;
[4]quickCRC:http://www.excelsoftware.com/&lt;br /&gt;
&lt;br /&gt;
[5]Visual Paradigm:  http://www.visual-paradigm.com/   &lt;br /&gt;
         &lt;br /&gt;
[6]Bellin, D and Simone, S.S ‘The CRC Card Book’, Addison Wesley, 1997&lt;/div&gt;</summary>
		<author><name>Bluehat</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=User:Bluehat&amp;diff=33834</id>
		<title>User:Bluehat</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=User:Bluehat&amp;diff=33834"/>
		<updated>2010-09-08T17:55:38Z</updated>

		<summary type="html">&lt;p&gt;Bluehat: /* Number of collaborators */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
The onset of the object oriented paradigm in the software industry brought about a big change in the basic approach to system design and the software development life cycle.The major task in the development of any application using the object oriented paradigm is to identify ‘classes’, and how these classes interact and collaborate with each other in the system scope. &lt;br /&gt;
&lt;br /&gt;
Whenever a system is designed with classes, each class has a specific role to play in the system.It has certain responsibilities and each class collaborates with other classes to provide the complete system functionality. In such a scenario, identifying classes becomes the key to a good system design.Although it seems to be a simple,intuitive process,identifying classes can be quite complex when it comes to large scale systems. &lt;br /&gt;
&lt;br /&gt;
One such technique for identification of classes that make up the system and its collaborations is the ‘CRC Card’ technique. The concept of CRC cards was first put forth by Kent Beck and Ward Cunningham and it became very popular as it is easy to use and it supports development of any kind of object oriented development regardless of its scale,the method used, the technology or the language used for development&lt;br /&gt;
&lt;br /&gt;
==Definition==&lt;br /&gt;
Class Responsibility Collaboration (CRC) cards is an object-oriented design method that uses ordinary 3x5 index cards card made for each class containing responsibilities (knowledge and services) and collaborators (interactions with other classes). The cards provide an informal, intuitive way for group members to work on object design together.[1]&lt;br /&gt;
A typical CRC card layout is shown below.&lt;br /&gt;
[[Image:Crccard2.jpg|frame|center|CRC CARD Template]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example: Consider a Student class where a student can enroll for a seminar. In this case ‘Student’ will be one class and ‘Seminar’ can be another class that collaborates with the Student class.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:CrcStudent.jpg|frame|center|Student CRC Card ]]&lt;br /&gt;
&lt;br /&gt;
To know more about CRC cards please refer to http://www.hsanchez.net/repository/hsanchez-PLCRC-plop04.pdf&lt;br /&gt;
&lt;br /&gt;
==Principle and Process==&lt;br /&gt;
&lt;br /&gt;
===CRC Principle===&lt;br /&gt;
&lt;br /&gt;
A CRC model includes a collection of cards and each card is divided into three sections. &lt;br /&gt;
*Class Name: &lt;br /&gt;
**Appears on the top of the CRC card&lt;br /&gt;
**Class denotes a set of similar objects that are being modeled in the system&lt;br /&gt;
&lt;br /&gt;
*Responsibilities:&lt;br /&gt;
**Appears on the left hand side of the CRC card&lt;br /&gt;
**It is a list of the responsibilities of the class i.e. things a class can do with its knowledge&lt;br /&gt;
&lt;br /&gt;
*Collaborators:&lt;br /&gt;
**Appear on the right hand side of the CRC card&lt;br /&gt;
**They are other classes that the class works with to get information or perform a certain function&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===CRC Process===&lt;br /&gt;
&lt;br /&gt;
CRC modeling process includes the users, analysts and developers bringing together the entire development team to form a common understanding of an OO development project.For e.g consider a software application to implement a game of blackjack. To implement the CRC technique to design this software, following steps are taken:&lt;br /&gt;
&lt;br /&gt;
*Explanation of the CRC Technique&lt;br /&gt;
**The facilitator explains the purpose of the CRC modeling session&lt;br /&gt;
**It can include explanation of CRC Cards and creation of sample CRC Cards&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Brainstorming&lt;br /&gt;
**A brainstorming session at the very beginning brings in new ideas, new perspectives to the problem being solved.&lt;br /&gt;
**Every team member can contribute with innovative ideas&lt;br /&gt;
**A list of candidate classes can be drawn up from this activity&lt;br /&gt;
&lt;br /&gt;
For e.g considering the above example, we can identify candidate classes by listing down the nouns relating to the game of blackjack. Say, game, blackjack, dealer, players, card, deck, hand, bet, king, queen, jack, ace, suit, winner, game.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Selecting a scenario and Core classes&lt;br /&gt;
**The scenario chosen at the beginning of the session should be simple, clear and well documented&lt;br /&gt;
**Related scenarios should be identified and dealt with separately&lt;br /&gt;
**Identification of critical classes from the candidate class list is also very important&lt;br /&gt;
**This helps to eliminate irrelevant classes and review remaining classes&lt;br /&gt;
**This also helps clarify the system scope&lt;br /&gt;
&lt;br /&gt;
For e.g we can apply the elimination process to the candidate class list. We can eliminate blackjack as it is the name of the system. ‘House’ can be eliminated as it is another name for the dealer. Also, instead of making ace, king, queen and jack as separate classes, we can represent them as attributes of individual classes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Create initial CRC cards&lt;br /&gt;
From the information gathered in the step above, CRC cards are written&lt;br /&gt;
&lt;br /&gt;
[[Image:Deck1.jpg |frame|center|Deck CRC Card]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Dealer.jpg |frame|center|Dealer CRC Card]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Player.jpg |frame|center|Player CRC Card]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Creating a CRC Model&lt;br /&gt;
**After the CRC cards  are written, they are placed appropriately, with collaborating classes closer to each other.&lt;br /&gt;
**Accordingly, place each card in position till the entire picture of the system is finalized.&lt;br /&gt;
**This process may have to be done in several iterations to get a refined view of the system to be modeled.&lt;br /&gt;
&lt;br /&gt;
For more information on using CRC Cards please refer to http://alistair.cockburn.us/Using+CRC+cards&lt;br /&gt;
&lt;br /&gt;
==CRC Team==&lt;br /&gt;
&lt;br /&gt;
*Domain Experts:&lt;br /&gt;
**Core team that writes the cards&lt;br /&gt;
**Have good business domain knowledge for which the system is being designed&lt;br /&gt;
**Usually are 3-5 people&lt;br /&gt;
&lt;br /&gt;
*Object Oriented Design Analyst:&lt;br /&gt;
**Analysts and developers those are familiar with object oriented design methodologies&lt;br /&gt;
**Usually are 1-2 people&lt;br /&gt;
&lt;br /&gt;
*Facilitator:&lt;br /&gt;
**Most important member who conducts the CRC modeling session&lt;br /&gt;
**Acts as an intermediary when there is difference of opinion regarding class responsibilities and paths of collaboration&lt;br /&gt;
**Usually a single person&lt;br /&gt;
&lt;br /&gt;
*Scribe:&lt;br /&gt;
**Responsible for documenting any business logic that evolves by way of discussions during the CRC modeling process.&lt;br /&gt;
**This documentation can be added to the requirements and business documents which can be used by design analysts at a later stage&lt;br /&gt;
**Usually are 1-2 people&lt;br /&gt;
&lt;br /&gt;
==Case study==&lt;br /&gt;
&lt;br /&gt;
To understand the working of CRC card modeling better, here is an example of an ATM system designed using CRC cards. Here, the software system under consideration has to control an automated teller machine. The ATM has a magnetic stripe reader for reading an ATM card, a customer console (keyboard and display) for interaction with the customer, a slot for depositing envelopes, a dispenser for cash (in multiples of $20), a printer for printing customer receipts, and a key-operated switch to allow an operator to start or stop the machine. Also, the ATM will communicate with the bank's computer over an appropriate communication link.&lt;br /&gt;
&lt;br /&gt;
To perform a transaction, a customer will be required to insert an ATM card and enter a personal identification number (PIN) - both of which will be sent to the bank for validation. The customer will then be able to perform one or more transactions. The card will be retained in the machine until the customer indicates that there are no further transactions, at which point it will be returned. For more on the case study.&lt;br /&gt;
&lt;br /&gt;
http://www.math-cs.gordon.edu/courses/cps211/ATMExample/CRCCards.html&lt;br /&gt;
&lt;br /&gt;
==Metrics for CRC Analysis==&lt;br /&gt;
&lt;br /&gt;
CRC analysis metrics can help evaluate the level of ease in designing and coding with CRC cards. These metrics also contribute to other project planning factors to give overall sense of project development.These metrics can be calculated easily and quickly without the need of special tools. Three metrics are broadly identified as: maximum depth of inheritance, the number of responsibilities assigned to each class and the number of collaborators for a class. With the example below an attempt has been made to explain these metrics.In the diagram, black line indicates inheritance while blue line indicates collaboration. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Class_hierarchy1.png|frame|center|CRC metrics example]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Maximum depth of inheritance===&lt;br /&gt;
&lt;br /&gt;
This metric gives an idea of the class hierarchy. It is the count of number of subclasses in the hierarchy.[6] From the diagram,it can be seen that Part Time student is a subclass of Distance Education which in turn is a subclass of student.Thus,maximum depth of inheritance in this case is two with  reference to class Student. Each subclass shares the overall functions defined in class Student. For short hierarchies, this is a positive benefit of OO. If number of subclasses become too long, it becomes difficult to trace the flow of functions, resulting in overly complex systems. This makes testing, reviewing and reusing difficult.&lt;br /&gt;
&lt;br /&gt;
===Number of collaborators===&lt;br /&gt;
&lt;br /&gt;
This is the count of all the supporting classes to help a class.[6] In the diagram,there are four collaborators for class Student:Teacher,Library,Computer Labs and Gymnasium.Confusion between collaborators and subclasses may result in creation many collaborators.This will affect the encapsulation of the design.Typical value for this metric is eight.If this value is large,design may be reviewed to see if inheritance is implemented correctly.&lt;br /&gt;
&lt;br /&gt;
===Number of responsibilities===&lt;br /&gt;
This is the count of clearly defined set of duties to each class.[6]For example class Student may have functions like Attending  Lectures,&lt;br /&gt;
Maintaining a certain GPA,Taking the required courses. In this case number of responsibilities is three.Responsibilities should be distributed amongst classes to cover the whole system. This would avoid an imbalance in design. We need to refine the overly complex class into a series of simpler objects. This will make the system easier to understand, implement and reuse. For most commercial transaction oriented systems, values approximately between eight and eighteen are common.&lt;br /&gt;
&lt;br /&gt;
==Advantages==&lt;br /&gt;
* CRC cards create a first-cut analysis for complex systems, and let analysts and users examine the operation of discrete subsystems.&lt;br /&gt;
* CRC cards are invaluable input into more formal methods. Agile development methods often use CRC cards. They are popular as a front end to UML&lt;br /&gt;
* CRC cards are a great way to build teamwork and common understanding.&lt;br /&gt;
* Part of the CRC card attraction is their simplicity. Developers can use them with little formal training and just paper and pencil for tools&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Software for CRC card==&lt;br /&gt;
&lt;br /&gt;
It is difficult to maintain, change, share paper based cards for large projects. Software for CRC cards offer many advantages in such scenarios such as&lt;br /&gt;
&lt;br /&gt;
*Easy Revision: As CRC cards are part of development process, constant changes are made by developers to edit the information .Change to one card might require changes to other cards. It becomes difficult to handle such interdependent changes for various fields such as attribute, responsibility, collaboration on paper based system. Software will reflect one change to every corresponding reference in the design. This saves a lot of time and also avoids the manual errors that may be evident on paper based system.&lt;br /&gt;
&lt;br /&gt;
*Easy sharing: Paper based systems make sharing difficult by necessitating team members to be physically present at one location. Using software, team members can work from different locations.&lt;br /&gt;
&lt;br /&gt;
*Better representation: It is possible to group cards from different perspective such as hierarchy, attributes, parent. This helps better understanding and thinking. Some software also aid graphical display of data.&lt;br /&gt;
&lt;br /&gt;
*Inputs to methodologies: Software for CRC cards can provide the input files for UML class diagram generation software saving lot of time in the development cycle.&lt;br /&gt;
&lt;br /&gt;
*Making additions to existing code: Many projects   make addition to existing code or reuse already developed code in their project. Software can produce CRC cards with existing source code as an input. This would help the team to understand the code in efficient manner and less time.&lt;br /&gt;
&lt;br /&gt;
However,it comes with a cost.Based on required features and cost,team may select from various commercially available software products.Below are few links:&lt;br /&gt;
&lt;br /&gt;
*quickCRC:http://www.excelsoftware.com/&lt;br /&gt;
*CRC card support is part of Visual Paradigm for UML:  http://www.visual-paradigm.com/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==CRC cards Limitations and formal object modeling methodologies(UML)==&lt;br /&gt;
&lt;br /&gt;
CRC cards are used to form initial class definitions but alone are not sufficient to be directly coded into software for large systems.It is difficult to keep track of cards as the systems grows and work on subsystems simultaneously and independently.CRC cards lack the notational power to document all the components of a system and cannot provide implementation specifications such as transition states of objects during its life cycle,interface design,data structures,performance and resource utilization. To bridge this gap,more formal object modeling methodology such as UML is used.UML captures the bigger picture.It provides detailed mapping of use cases(operations),object state transitions,inter-process communication functionality,algorithm design.UML is very effective in incremental model of SDLC where  lot of details need to captured for precise addition.Information  about requirements is represented in detail and whole picture of the system and users is visible.CRC cards are used as effective inputs to UML.CRC card techniques such as brainstorming and role play help enhance functional understanding which helps in preparing better UML use cases.CRC cards given the content for  class diagrams,inheritance diagrams,class specifications and object specifications for UML.CRC cards can keep track of attributes that can aid listing them as a part of class specification in UML.Most CRC card software have the facility to export CRC analysis file that can be directly used as an input for UML.Following case study develops UML with the help of CRC cards:&lt;br /&gt;
&lt;br /&gt;
http://www.math.gordon.edu/courses/cs211/ATMExample/  [3]&lt;br /&gt;
&lt;br /&gt;
==Summary==&lt;br /&gt;
CRC cards are very useful to form the base of object oriented methodology.Techniques such as brain storming and role play enhance the understanding of requirements.CRC automation makes card handling and sharing  quick and efficient.For large projects more formal technology such as UML is required but CRC cards can provide a very good starting point.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Reference==&lt;br /&gt;
[1]Rubin,D.M, Introduction to CRC Cards, Methodologies and Practices.Revised January 1998,SOFTSTAR RESEARCH,INC: http://www.softstar-inc.com/Download/Intro%20to%20CRC.pdf&lt;br /&gt;
&lt;br /&gt;
[2]Bjork,R.C, CRC cards for ATM, Object-Oriented Software Development.Retrieved September 6,2010,from Computer Science Department, Gordon College:: http://www.math-cs.gordon.edu/courses/cps211/ATMExample/CRCCards.html&lt;br /&gt;
&lt;br /&gt;
[3]Bjork,R.C, ATMExample, Object-Oriented Software Development.Retrieved September 5,2010,from Computer Science Department, Gordon College: http://www.math.gordon.edu/courses/cs211/ATMExample/&lt;br /&gt;
&lt;br /&gt;
[4]quickCRC:http://www.excelsoftware.com/&lt;br /&gt;
&lt;br /&gt;
[5]Visual Paradigm:  http://www.visual-paradigm.com/   &lt;br /&gt;
         &lt;br /&gt;
[6]Bellin, D and Simone, S.S ‘The CRC Card Book’, Addison Wesley, 1997&lt;/div&gt;</summary>
		<author><name>Bluehat</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=User:Bluehat&amp;diff=33833</id>
		<title>User:Bluehat</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=User:Bluehat&amp;diff=33833"/>
		<updated>2010-09-08T17:55:23Z</updated>

		<summary type="html">&lt;p&gt;Bluehat: /* Maximum depth of inheritance */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
The onset of the object oriented paradigm in the software industry brought about a big change in the basic approach to system design and the software development life cycle.The major task in the development of any application using the object oriented paradigm is to identify ‘classes’, and how these classes interact and collaborate with each other in the system scope. &lt;br /&gt;
&lt;br /&gt;
Whenever a system is designed with classes, each class has a specific role to play in the system.It has certain responsibilities and each class collaborates with other classes to provide the complete system functionality. In such a scenario, identifying classes becomes the key to a good system design.Although it seems to be a simple,intuitive process,identifying classes can be quite complex when it comes to large scale systems. &lt;br /&gt;
&lt;br /&gt;
One such technique for identification of classes that make up the system and its collaborations is the ‘CRC Card’ technique. The concept of CRC cards was first put forth by Kent Beck and Ward Cunningham and it became very popular as it is easy to use and it supports development of any kind of object oriented development regardless of its scale,the method used, the technology or the language used for development&lt;br /&gt;
&lt;br /&gt;
==Definition==&lt;br /&gt;
Class Responsibility Collaboration (CRC) cards is an object-oriented design method that uses ordinary 3x5 index cards card made for each class containing responsibilities (knowledge and services) and collaborators (interactions with other classes). The cards provide an informal, intuitive way for group members to work on object design together.[1]&lt;br /&gt;
A typical CRC card layout is shown below.&lt;br /&gt;
[[Image:Crccard2.jpg|frame|center|CRC CARD Template]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example: Consider a Student class where a student can enroll for a seminar. In this case ‘Student’ will be one class and ‘Seminar’ can be another class that collaborates with the Student class.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:CrcStudent.jpg|frame|center|Student CRC Card ]]&lt;br /&gt;
&lt;br /&gt;
To know more about CRC cards please refer to http://www.hsanchez.net/repository/hsanchez-PLCRC-plop04.pdf&lt;br /&gt;
&lt;br /&gt;
==Principle and Process==&lt;br /&gt;
&lt;br /&gt;
===CRC Principle===&lt;br /&gt;
&lt;br /&gt;
A CRC model includes a collection of cards and each card is divided into three sections. &lt;br /&gt;
*Class Name: &lt;br /&gt;
**Appears on the top of the CRC card&lt;br /&gt;
**Class denotes a set of similar objects that are being modeled in the system&lt;br /&gt;
&lt;br /&gt;
*Responsibilities:&lt;br /&gt;
**Appears on the left hand side of the CRC card&lt;br /&gt;
**It is a list of the responsibilities of the class i.e. things a class can do with its knowledge&lt;br /&gt;
&lt;br /&gt;
*Collaborators:&lt;br /&gt;
**Appear on the right hand side of the CRC card&lt;br /&gt;
**They are other classes that the class works with to get information or perform a certain function&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===CRC Process===&lt;br /&gt;
&lt;br /&gt;
CRC modeling process includes the users, analysts and developers bringing together the entire development team to form a common understanding of an OO development project.For e.g consider a software application to implement a game of blackjack. To implement the CRC technique to design this software, following steps are taken:&lt;br /&gt;
&lt;br /&gt;
*Explanation of the CRC Technique&lt;br /&gt;
**The facilitator explains the purpose of the CRC modeling session&lt;br /&gt;
**It can include explanation of CRC Cards and creation of sample CRC Cards&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Brainstorming&lt;br /&gt;
**A brainstorming session at the very beginning brings in new ideas, new perspectives to the problem being solved.&lt;br /&gt;
**Every team member can contribute with innovative ideas&lt;br /&gt;
**A list of candidate classes can be drawn up from this activity&lt;br /&gt;
&lt;br /&gt;
For e.g considering the above example, we can identify candidate classes by listing down the nouns relating to the game of blackjack. Say, game, blackjack, dealer, players, card, deck, hand, bet, king, queen, jack, ace, suit, winner, game.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Selecting a scenario and Core classes&lt;br /&gt;
**The scenario chosen at the beginning of the session should be simple, clear and well documented&lt;br /&gt;
**Related scenarios should be identified and dealt with separately&lt;br /&gt;
**Identification of critical classes from the candidate class list is also very important&lt;br /&gt;
**This helps to eliminate irrelevant classes and review remaining classes&lt;br /&gt;
**This also helps clarify the system scope&lt;br /&gt;
&lt;br /&gt;
For e.g we can apply the elimination process to the candidate class list. We can eliminate blackjack as it is the name of the system. ‘House’ can be eliminated as it is another name for the dealer. Also, instead of making ace, king, queen and jack as separate classes, we can represent them as attributes of individual classes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Create initial CRC cards&lt;br /&gt;
From the information gathered in the step above, CRC cards are written&lt;br /&gt;
&lt;br /&gt;
[[Image:Deck1.jpg |frame|center|Deck CRC Card]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Dealer.jpg |frame|center|Dealer CRC Card]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Player.jpg |frame|center|Player CRC Card]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Creating a CRC Model&lt;br /&gt;
**After the CRC cards  are written, they are placed appropriately, with collaborating classes closer to each other.&lt;br /&gt;
**Accordingly, place each card in position till the entire picture of the system is finalized.&lt;br /&gt;
**This process may have to be done in several iterations to get a refined view of the system to be modeled.&lt;br /&gt;
&lt;br /&gt;
For more information on using CRC Cards please refer to http://alistair.cockburn.us/Using+CRC+cards&lt;br /&gt;
&lt;br /&gt;
==CRC Team==&lt;br /&gt;
&lt;br /&gt;
*Domain Experts:&lt;br /&gt;
**Core team that writes the cards&lt;br /&gt;
**Have good business domain knowledge for which the system is being designed&lt;br /&gt;
**Usually are 3-5 people&lt;br /&gt;
&lt;br /&gt;
*Object Oriented Design Analyst:&lt;br /&gt;
**Analysts and developers those are familiar with object oriented design methodologies&lt;br /&gt;
**Usually are 1-2 people&lt;br /&gt;
&lt;br /&gt;
*Facilitator:&lt;br /&gt;
**Most important member who conducts the CRC modeling session&lt;br /&gt;
**Acts as an intermediary when there is difference of opinion regarding class responsibilities and paths of collaboration&lt;br /&gt;
**Usually a single person&lt;br /&gt;
&lt;br /&gt;
*Scribe:&lt;br /&gt;
**Responsible for documenting any business logic that evolves by way of discussions during the CRC modeling process.&lt;br /&gt;
**This documentation can be added to the requirements and business documents which can be used by design analysts at a later stage&lt;br /&gt;
**Usually are 1-2 people&lt;br /&gt;
&lt;br /&gt;
==Case study==&lt;br /&gt;
&lt;br /&gt;
To understand the working of CRC card modeling better, here is an example of an ATM system designed using CRC cards. Here, the software system under consideration has to control an automated teller machine. The ATM has a magnetic stripe reader for reading an ATM card, a customer console (keyboard and display) for interaction with the customer, a slot for depositing envelopes, a dispenser for cash (in multiples of $20), a printer for printing customer receipts, and a key-operated switch to allow an operator to start or stop the machine. Also, the ATM will communicate with the bank's computer over an appropriate communication link.&lt;br /&gt;
&lt;br /&gt;
To perform a transaction, a customer will be required to insert an ATM card and enter a personal identification number (PIN) - both of which will be sent to the bank for validation. The customer will then be able to perform one or more transactions. The card will be retained in the machine until the customer indicates that there are no further transactions, at which point it will be returned. For more on the case study.&lt;br /&gt;
&lt;br /&gt;
http://www.math-cs.gordon.edu/courses/cps211/ATMExample/CRCCards.html&lt;br /&gt;
&lt;br /&gt;
==Metrics for CRC Analysis==&lt;br /&gt;
&lt;br /&gt;
CRC analysis metrics can help evaluate the level of ease in designing and coding with CRC cards. These metrics also contribute to other project planning factors to give overall sense of project development.These metrics can be calculated easily and quickly without the need of special tools. Three metrics are broadly identified as: maximum depth of inheritance, the number of responsibilities assigned to each class and the number of collaborators for a class. With the example below an attempt has been made to explain these metrics.In the diagram, black line indicates inheritance while blue line indicates collaboration. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Class_hierarchy1.png|frame|center|CRC metrics example]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Maximum depth of inheritance===&lt;br /&gt;
&lt;br /&gt;
This metric gives an idea of the class hierarchy. It is the count of number of subclasses in the hierarchy.[6] From the diagram,it can be seen that Part Time student is a subclass of Distance Education which in turn is a subclass of student.Thus,maximum depth of inheritance in this case is two with  reference to class Student. Each subclass shares the overall functions defined in class Student. For short hierarchies, this is a positive benefit of OO. If number of subclasses become too long, it becomes difficult to trace the flow of functions, resulting in overly complex systems. This makes testing, reviewing and reusing difficult.&lt;br /&gt;
&lt;br /&gt;
===Number of collaborators===&lt;br /&gt;
&lt;br /&gt;
This is the count of all the supporting classes to help a class.[6]In the diagram,there are four collaborators for class Student:Teacher,Library,Computer Labs and Gymnasium.Confusion between collaborators and subclasses may result in creation many collaborators.This will affect the encapsulation of the design.Typical value for this metric is eight.If this value is large,design may be reviewed to see if inheritance is implemented correctly.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Number of responsibilities===&lt;br /&gt;
This is the count of clearly defined set of duties to each class.[6]For example class Student may have functions like Attending  Lectures,&lt;br /&gt;
Maintaining a certain GPA,Taking the required courses. In this case number of responsibilities is three.Responsibilities should be distributed amongst classes to cover the whole system. This would avoid an imbalance in design. We need to refine the overly complex class into a series of simpler objects. This will make the system easier to understand, implement and reuse. For most commercial transaction oriented systems, values approximately between eight and eighteen are common.&lt;br /&gt;
&lt;br /&gt;
==Advantages==&lt;br /&gt;
* CRC cards create a first-cut analysis for complex systems, and let analysts and users examine the operation of discrete subsystems.&lt;br /&gt;
* CRC cards are invaluable input into more formal methods. Agile development methods often use CRC cards. They are popular as a front end to UML&lt;br /&gt;
* CRC cards are a great way to build teamwork and common understanding.&lt;br /&gt;
* Part of the CRC card attraction is their simplicity. Developers can use them with little formal training and just paper and pencil for tools&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Software for CRC card==&lt;br /&gt;
&lt;br /&gt;
It is difficult to maintain, change, share paper based cards for large projects. Software for CRC cards offer many advantages in such scenarios such as&lt;br /&gt;
&lt;br /&gt;
*Easy Revision: As CRC cards are part of development process, constant changes are made by developers to edit the information .Change to one card might require changes to other cards. It becomes difficult to handle such interdependent changes for various fields such as attribute, responsibility, collaboration on paper based system. Software will reflect one change to every corresponding reference in the design. This saves a lot of time and also avoids the manual errors that may be evident on paper based system.&lt;br /&gt;
&lt;br /&gt;
*Easy sharing: Paper based systems make sharing difficult by necessitating team members to be physically present at one location. Using software, team members can work from different locations.&lt;br /&gt;
&lt;br /&gt;
*Better representation: It is possible to group cards from different perspective such as hierarchy, attributes, parent. This helps better understanding and thinking. Some software also aid graphical display of data.&lt;br /&gt;
&lt;br /&gt;
*Inputs to methodologies: Software for CRC cards can provide the input files for UML class diagram generation software saving lot of time in the development cycle.&lt;br /&gt;
&lt;br /&gt;
*Making additions to existing code: Many projects   make addition to existing code or reuse already developed code in their project. Software can produce CRC cards with existing source code as an input. This would help the team to understand the code in efficient manner and less time.&lt;br /&gt;
&lt;br /&gt;
However,it comes with a cost.Based on required features and cost,team may select from various commercially available software products.Below are few links:&lt;br /&gt;
&lt;br /&gt;
*quickCRC:http://www.excelsoftware.com/&lt;br /&gt;
*CRC card support is part of Visual Paradigm for UML:  http://www.visual-paradigm.com/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==CRC cards Limitations and formal object modeling methodologies(UML)==&lt;br /&gt;
&lt;br /&gt;
CRC cards are used to form initial class definitions but alone are not sufficient to be directly coded into software for large systems.It is difficult to keep track of cards as the systems grows and work on subsystems simultaneously and independently.CRC cards lack the notational power to document all the components of a system and cannot provide implementation specifications such as transition states of objects during its life cycle,interface design,data structures,performance and resource utilization. To bridge this gap,more formal object modeling methodology such as UML is used.UML captures the bigger picture.It provides detailed mapping of use cases(operations),object state transitions,inter-process communication functionality,algorithm design.UML is very effective in incremental model of SDLC where  lot of details need to captured for precise addition.Information  about requirements is represented in detail and whole picture of the system and users is visible.CRC cards are used as effective inputs to UML.CRC card techniques such as brainstorming and role play help enhance functional understanding which helps in preparing better UML use cases.CRC cards given the content for  class diagrams,inheritance diagrams,class specifications and object specifications for UML.CRC cards can keep track of attributes that can aid listing them as a part of class specification in UML.Most CRC card software have the facility to export CRC analysis file that can be directly used as an input for UML.Following case study develops UML with the help of CRC cards:&lt;br /&gt;
&lt;br /&gt;
http://www.math.gordon.edu/courses/cs211/ATMExample/  [3]&lt;br /&gt;
&lt;br /&gt;
==Summary==&lt;br /&gt;
CRC cards are very useful to form the base of object oriented methodology.Techniques such as brain storming and role play enhance the understanding of requirements.CRC automation makes card handling and sharing  quick and efficient.For large projects more formal technology such as UML is required but CRC cards can provide a very good starting point.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Reference==&lt;br /&gt;
[1]Rubin,D.M, Introduction to CRC Cards, Methodologies and Practices.Revised January 1998,SOFTSTAR RESEARCH,INC: http://www.softstar-inc.com/Download/Intro%20to%20CRC.pdf&lt;br /&gt;
&lt;br /&gt;
[2]Bjork,R.C, CRC cards for ATM, Object-Oriented Software Development.Retrieved September 6,2010,from Computer Science Department, Gordon College:: http://www.math-cs.gordon.edu/courses/cps211/ATMExample/CRCCards.html&lt;br /&gt;
&lt;br /&gt;
[3]Bjork,R.C, ATMExample, Object-Oriented Software Development.Retrieved September 5,2010,from Computer Science Department, Gordon College: http://www.math.gordon.edu/courses/cs211/ATMExample/&lt;br /&gt;
&lt;br /&gt;
[4]quickCRC:http://www.excelsoftware.com/&lt;br /&gt;
&lt;br /&gt;
[5]Visual Paradigm:  http://www.visual-paradigm.com/   &lt;br /&gt;
         &lt;br /&gt;
[6]Bellin, D and Simone, S.S ‘The CRC Card Book’, Addison Wesley, 1997&lt;/div&gt;</summary>
		<author><name>Bluehat</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=User:Bluehat&amp;diff=33832</id>
		<title>User:Bluehat</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=User:Bluehat&amp;diff=33832"/>
		<updated>2010-09-08T17:54:59Z</updated>

		<summary type="html">&lt;p&gt;Bluehat: /* Metrics for CRC Analysis */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
The onset of the object oriented paradigm in the software industry brought about a big change in the basic approach to system design and the software development life cycle.The major task in the development of any application using the object oriented paradigm is to identify ‘classes’, and how these classes interact and collaborate with each other in the system scope. &lt;br /&gt;
&lt;br /&gt;
Whenever a system is designed with classes, each class has a specific role to play in the system.It has certain responsibilities and each class collaborates with other classes to provide the complete system functionality. In such a scenario, identifying classes becomes the key to a good system design.Although it seems to be a simple,intuitive process,identifying classes can be quite complex when it comes to large scale systems. &lt;br /&gt;
&lt;br /&gt;
One such technique for identification of classes that make up the system and its collaborations is the ‘CRC Card’ technique. The concept of CRC cards was first put forth by Kent Beck and Ward Cunningham and it became very popular as it is easy to use and it supports development of any kind of object oriented development regardless of its scale,the method used, the technology or the language used for development&lt;br /&gt;
&lt;br /&gt;
==Definition==&lt;br /&gt;
Class Responsibility Collaboration (CRC) cards is an object-oriented design method that uses ordinary 3x5 index cards card made for each class containing responsibilities (knowledge and services) and collaborators (interactions with other classes). The cards provide an informal, intuitive way for group members to work on object design together.[1]&lt;br /&gt;
A typical CRC card layout is shown below.&lt;br /&gt;
[[Image:Crccard2.jpg|frame|center|CRC CARD Template]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example: Consider a Student class where a student can enroll for a seminar. In this case ‘Student’ will be one class and ‘Seminar’ can be another class that collaborates with the Student class.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:CrcStudent.jpg|frame|center|Student CRC Card ]]&lt;br /&gt;
&lt;br /&gt;
To know more about CRC cards please refer to http://www.hsanchez.net/repository/hsanchez-PLCRC-plop04.pdf&lt;br /&gt;
&lt;br /&gt;
==Principle and Process==&lt;br /&gt;
&lt;br /&gt;
===CRC Principle===&lt;br /&gt;
&lt;br /&gt;
A CRC model includes a collection of cards and each card is divided into three sections. &lt;br /&gt;
*Class Name: &lt;br /&gt;
**Appears on the top of the CRC card&lt;br /&gt;
**Class denotes a set of similar objects that are being modeled in the system&lt;br /&gt;
&lt;br /&gt;
*Responsibilities:&lt;br /&gt;
**Appears on the left hand side of the CRC card&lt;br /&gt;
**It is a list of the responsibilities of the class i.e. things a class can do with its knowledge&lt;br /&gt;
&lt;br /&gt;
*Collaborators:&lt;br /&gt;
**Appear on the right hand side of the CRC card&lt;br /&gt;
**They are other classes that the class works with to get information or perform a certain function&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===CRC Process===&lt;br /&gt;
&lt;br /&gt;
CRC modeling process includes the users, analysts and developers bringing together the entire development team to form a common understanding of an OO development project.For e.g consider a software application to implement a game of blackjack. To implement the CRC technique to design this software, following steps are taken:&lt;br /&gt;
&lt;br /&gt;
*Explanation of the CRC Technique&lt;br /&gt;
**The facilitator explains the purpose of the CRC modeling session&lt;br /&gt;
**It can include explanation of CRC Cards and creation of sample CRC Cards&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Brainstorming&lt;br /&gt;
**A brainstorming session at the very beginning brings in new ideas, new perspectives to the problem being solved.&lt;br /&gt;
**Every team member can contribute with innovative ideas&lt;br /&gt;
**A list of candidate classes can be drawn up from this activity&lt;br /&gt;
&lt;br /&gt;
For e.g considering the above example, we can identify candidate classes by listing down the nouns relating to the game of blackjack. Say, game, blackjack, dealer, players, card, deck, hand, bet, king, queen, jack, ace, suit, winner, game.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Selecting a scenario and Core classes&lt;br /&gt;
**The scenario chosen at the beginning of the session should be simple, clear and well documented&lt;br /&gt;
**Related scenarios should be identified and dealt with separately&lt;br /&gt;
**Identification of critical classes from the candidate class list is also very important&lt;br /&gt;
**This helps to eliminate irrelevant classes and review remaining classes&lt;br /&gt;
**This also helps clarify the system scope&lt;br /&gt;
&lt;br /&gt;
For e.g we can apply the elimination process to the candidate class list. We can eliminate blackjack as it is the name of the system. ‘House’ can be eliminated as it is another name for the dealer. Also, instead of making ace, king, queen and jack as separate classes, we can represent them as attributes of individual classes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Create initial CRC cards&lt;br /&gt;
From the information gathered in the step above, CRC cards are written&lt;br /&gt;
&lt;br /&gt;
[[Image:Deck1.jpg |frame|center|Deck CRC Card]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Dealer.jpg |frame|center|Dealer CRC Card]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Player.jpg |frame|center|Player CRC Card]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Creating a CRC Model&lt;br /&gt;
**After the CRC cards  are written, they are placed appropriately, with collaborating classes closer to each other.&lt;br /&gt;
**Accordingly, place each card in position till the entire picture of the system is finalized.&lt;br /&gt;
**This process may have to be done in several iterations to get a refined view of the system to be modeled.&lt;br /&gt;
&lt;br /&gt;
For more information on using CRC Cards please refer to http://alistair.cockburn.us/Using+CRC+cards&lt;br /&gt;
&lt;br /&gt;
==CRC Team==&lt;br /&gt;
&lt;br /&gt;
*Domain Experts:&lt;br /&gt;
**Core team that writes the cards&lt;br /&gt;
**Have good business domain knowledge for which the system is being designed&lt;br /&gt;
**Usually are 3-5 people&lt;br /&gt;
&lt;br /&gt;
*Object Oriented Design Analyst:&lt;br /&gt;
**Analysts and developers those are familiar with object oriented design methodologies&lt;br /&gt;
**Usually are 1-2 people&lt;br /&gt;
&lt;br /&gt;
*Facilitator:&lt;br /&gt;
**Most important member who conducts the CRC modeling session&lt;br /&gt;
**Acts as an intermediary when there is difference of opinion regarding class responsibilities and paths of collaboration&lt;br /&gt;
**Usually a single person&lt;br /&gt;
&lt;br /&gt;
*Scribe:&lt;br /&gt;
**Responsible for documenting any business logic that evolves by way of discussions during the CRC modeling process.&lt;br /&gt;
**This documentation can be added to the requirements and business documents which can be used by design analysts at a later stage&lt;br /&gt;
**Usually are 1-2 people&lt;br /&gt;
&lt;br /&gt;
==Case study==&lt;br /&gt;
&lt;br /&gt;
To understand the working of CRC card modeling better, here is an example of an ATM system designed using CRC cards. Here, the software system under consideration has to control an automated teller machine. The ATM has a magnetic stripe reader for reading an ATM card, a customer console (keyboard and display) for interaction with the customer, a slot for depositing envelopes, a dispenser for cash (in multiples of $20), a printer for printing customer receipts, and a key-operated switch to allow an operator to start or stop the machine. Also, the ATM will communicate with the bank's computer over an appropriate communication link.&lt;br /&gt;
&lt;br /&gt;
To perform a transaction, a customer will be required to insert an ATM card and enter a personal identification number (PIN) - both of which will be sent to the bank for validation. The customer will then be able to perform one or more transactions. The card will be retained in the machine until the customer indicates that there are no further transactions, at which point it will be returned. For more on the case study.&lt;br /&gt;
&lt;br /&gt;
http://www.math-cs.gordon.edu/courses/cps211/ATMExample/CRCCards.html&lt;br /&gt;
&lt;br /&gt;
==Metrics for CRC Analysis==&lt;br /&gt;
&lt;br /&gt;
CRC analysis metrics can help evaluate the level of ease in designing and coding with CRC cards. These metrics also contribute to other project planning factors to give overall sense of project development.These metrics can be calculated easily and quickly without the need of special tools. Three metrics are broadly identified as: maximum depth of inheritance, the number of responsibilities assigned to each class and the number of collaborators for a class. With the example below an attempt has been made to explain these metrics.In the diagram, black line indicates inheritance while blue line indicates collaboration. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Class_hierarchy1.png|frame|center|CRC metrics example]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Maximum depth of inheritance===&lt;br /&gt;
&lt;br /&gt;
This metric gives an idea of the class hierarchy. It is the count of number of subclasses in the hierarchy.[6]From the diagram,it can be seen that Part Time student is a subclass of Distance Education which in turn is a subclass of student.Thus,maximum depth of inheritance in this case is two with  reference to class Student. Each subclass shares the overall functions defined in class Student. For short hierarchies, this is a positive benefit of OO. If number of subclasses become too long, it becomes difficult to trace the flow of functions, resulting in overly complex systems. This makes testing, reviewing and reusing difficult.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Number of collaborators===&lt;br /&gt;
&lt;br /&gt;
This is the count of all the supporting classes to help a class.[6]In the diagram,there are four collaborators for class Student:Teacher,Library,Computer Labs and Gymnasium.Confusion between collaborators and subclasses may result in creation many collaborators.This will affect the encapsulation of the design.Typical value for this metric is eight.If this value is large,design may be reviewed to see if inheritance is implemented correctly.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Number of responsibilities===&lt;br /&gt;
This is the count of clearly defined set of duties to each class.[6]For example class Student may have functions like Attending  Lectures,&lt;br /&gt;
Maintaining a certain GPA,Taking the required courses. In this case number of responsibilities is three.Responsibilities should be distributed amongst classes to cover the whole system. This would avoid an imbalance in design. We need to refine the overly complex class into a series of simpler objects. This will make the system easier to understand, implement and reuse. For most commercial transaction oriented systems, values approximately between eight and eighteen are common.&lt;br /&gt;
&lt;br /&gt;
==Advantages==&lt;br /&gt;
* CRC cards create a first-cut analysis for complex systems, and let analysts and users examine the operation of discrete subsystems.&lt;br /&gt;
* CRC cards are invaluable input into more formal methods. Agile development methods often use CRC cards. They are popular as a front end to UML&lt;br /&gt;
* CRC cards are a great way to build teamwork and common understanding.&lt;br /&gt;
* Part of the CRC card attraction is their simplicity. Developers can use them with little formal training and just paper and pencil for tools&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Software for CRC card==&lt;br /&gt;
&lt;br /&gt;
It is difficult to maintain, change, share paper based cards for large projects. Software for CRC cards offer many advantages in such scenarios such as&lt;br /&gt;
&lt;br /&gt;
*Easy Revision: As CRC cards are part of development process, constant changes are made by developers to edit the information .Change to one card might require changes to other cards. It becomes difficult to handle such interdependent changes for various fields such as attribute, responsibility, collaboration on paper based system. Software will reflect one change to every corresponding reference in the design. This saves a lot of time and also avoids the manual errors that may be evident on paper based system.&lt;br /&gt;
&lt;br /&gt;
*Easy sharing: Paper based systems make sharing difficult by necessitating team members to be physically present at one location. Using software, team members can work from different locations.&lt;br /&gt;
&lt;br /&gt;
*Better representation: It is possible to group cards from different perspective such as hierarchy, attributes, parent. This helps better understanding and thinking. Some software also aid graphical display of data.&lt;br /&gt;
&lt;br /&gt;
*Inputs to methodologies: Software for CRC cards can provide the input files for UML class diagram generation software saving lot of time in the development cycle.&lt;br /&gt;
&lt;br /&gt;
*Making additions to existing code: Many projects   make addition to existing code or reuse already developed code in their project. Software can produce CRC cards with existing source code as an input. This would help the team to understand the code in efficient manner and less time.&lt;br /&gt;
&lt;br /&gt;
However,it comes with a cost.Based on required features and cost,team may select from various commercially available software products.Below are few links:&lt;br /&gt;
&lt;br /&gt;
*quickCRC:http://www.excelsoftware.com/&lt;br /&gt;
*CRC card support is part of Visual Paradigm for UML:  http://www.visual-paradigm.com/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==CRC cards Limitations and formal object modeling methodologies(UML)==&lt;br /&gt;
&lt;br /&gt;
CRC cards are used to form initial class definitions but alone are not sufficient to be directly coded into software for large systems.It is difficult to keep track of cards as the systems grows and work on subsystems simultaneously and independently.CRC cards lack the notational power to document all the components of a system and cannot provide implementation specifications such as transition states of objects during its life cycle,interface design,data structures,performance and resource utilization. To bridge this gap,more formal object modeling methodology such as UML is used.UML captures the bigger picture.It provides detailed mapping of use cases(operations),object state transitions,inter-process communication functionality,algorithm design.UML is very effective in incremental model of SDLC where  lot of details need to captured for precise addition.Information  about requirements is represented in detail and whole picture of the system and users is visible.CRC cards are used as effective inputs to UML.CRC card techniques such as brainstorming and role play help enhance functional understanding which helps in preparing better UML use cases.CRC cards given the content for  class diagrams,inheritance diagrams,class specifications and object specifications for UML.CRC cards can keep track of attributes that can aid listing them as a part of class specification in UML.Most CRC card software have the facility to export CRC analysis file that can be directly used as an input for UML.Following case study develops UML with the help of CRC cards:&lt;br /&gt;
&lt;br /&gt;
http://www.math.gordon.edu/courses/cs211/ATMExample/  [3]&lt;br /&gt;
&lt;br /&gt;
==Summary==&lt;br /&gt;
CRC cards are very useful to form the base of object oriented methodology.Techniques such as brain storming and role play enhance the understanding of requirements.CRC automation makes card handling and sharing  quick and efficient.For large projects more formal technology such as UML is required but CRC cards can provide a very good starting point.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Reference==&lt;br /&gt;
[1]Rubin,D.M, Introduction to CRC Cards, Methodologies and Practices.Revised January 1998,SOFTSTAR RESEARCH,INC: http://www.softstar-inc.com/Download/Intro%20to%20CRC.pdf&lt;br /&gt;
&lt;br /&gt;
[2]Bjork,R.C, CRC cards for ATM, Object-Oriented Software Development.Retrieved September 6,2010,from Computer Science Department, Gordon College:: http://www.math-cs.gordon.edu/courses/cps211/ATMExample/CRCCards.html&lt;br /&gt;
&lt;br /&gt;
[3]Bjork,R.C, ATMExample, Object-Oriented Software Development.Retrieved September 5,2010,from Computer Science Department, Gordon College: http://www.math.gordon.edu/courses/cs211/ATMExample/&lt;br /&gt;
&lt;br /&gt;
[4]quickCRC:http://www.excelsoftware.com/&lt;br /&gt;
&lt;br /&gt;
[5]Visual Paradigm:  http://www.visual-paradigm.com/   &lt;br /&gt;
         &lt;br /&gt;
[6]Bellin, D and Simone, S.S ‘The CRC Card Book’, Addison Wesley, 1997&lt;/div&gt;</summary>
		<author><name>Bluehat</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=User:Bluehat&amp;diff=33831</id>
		<title>User:Bluehat</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=User:Bluehat&amp;diff=33831"/>
		<updated>2010-09-08T17:51:49Z</updated>

		<summary type="html">&lt;p&gt;Bluehat: /* Definition */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
The onset of the object oriented paradigm in the software industry brought about a big change in the basic approach to system design and the software development life cycle.The major task in the development of any application using the object oriented paradigm is to identify ‘classes’, and how these classes interact and collaborate with each other in the system scope. &lt;br /&gt;
&lt;br /&gt;
Whenever a system is designed with classes, each class has a specific role to play in the system.It has certain responsibilities and each class collaborates with other classes to provide the complete system functionality. In such a scenario, identifying classes becomes the key to a good system design.Although it seems to be a simple,intuitive process,identifying classes can be quite complex when it comes to large scale systems. &lt;br /&gt;
&lt;br /&gt;
One such technique for identification of classes that make up the system and its collaborations is the ‘CRC Card’ technique. The concept of CRC cards was first put forth by Kent Beck and Ward Cunningham and it became very popular as it is easy to use and it supports development of any kind of object oriented development regardless of its scale,the method used, the technology or the language used for development&lt;br /&gt;
&lt;br /&gt;
==Definition==&lt;br /&gt;
Class Responsibility Collaboration (CRC) cards is an object-oriented design method that uses ordinary 3x5 index cards card made for each class containing responsibilities (knowledge and services) and collaborators (interactions with other classes). The cards provide an informal, intuitive way for group members to work on object design together.[1]&lt;br /&gt;
A typical CRC card layout is shown below.&lt;br /&gt;
[[Image:Crccard2.jpg|frame|center|CRC CARD Template]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example: Consider a Student class where a student can enroll for a seminar. In this case ‘Student’ will be one class and ‘Seminar’ can be another class that collaborates with the Student class.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:CrcStudent.jpg|frame|center|Student CRC Card ]]&lt;br /&gt;
&lt;br /&gt;
To know more about CRC cards please refer to http://www.hsanchez.net/repository/hsanchez-PLCRC-plop04.pdf&lt;br /&gt;
&lt;br /&gt;
==Principle and Process==&lt;br /&gt;
&lt;br /&gt;
===CRC Principle===&lt;br /&gt;
&lt;br /&gt;
A CRC model includes a collection of cards and each card is divided into three sections. &lt;br /&gt;
*Class Name: &lt;br /&gt;
**Appears on the top of the CRC card&lt;br /&gt;
**Class denotes a set of similar objects that are being modeled in the system&lt;br /&gt;
&lt;br /&gt;
*Responsibilities:&lt;br /&gt;
**Appears on the left hand side of the CRC card&lt;br /&gt;
**It is a list of the responsibilities of the class i.e. things a class can do with its knowledge&lt;br /&gt;
&lt;br /&gt;
*Collaborators:&lt;br /&gt;
**Appear on the right hand side of the CRC card&lt;br /&gt;
**They are other classes that the class works with to get information or perform a certain function&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===CRC Process===&lt;br /&gt;
&lt;br /&gt;
CRC modeling process includes the users, analysts and developers bringing together the entire development team to form a common understanding of an OO development project.For e.g consider a software application to implement a game of blackjack. To implement the CRC technique to design this software, following steps are taken:&lt;br /&gt;
&lt;br /&gt;
*Explanation of the CRC Technique&lt;br /&gt;
**The facilitator explains the purpose of the CRC modeling session&lt;br /&gt;
**It can include explanation of CRC Cards and creation of sample CRC Cards&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Brainstorming&lt;br /&gt;
**A brainstorming session at the very beginning brings in new ideas, new perspectives to the problem being solved.&lt;br /&gt;
**Every team member can contribute with innovative ideas&lt;br /&gt;
**A list of candidate classes can be drawn up from this activity&lt;br /&gt;
&lt;br /&gt;
For e.g considering the above example, we can identify candidate classes by listing down the nouns relating to the game of blackjack. Say, game, blackjack, dealer, players, card, deck, hand, bet, king, queen, jack, ace, suit, winner, game.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Selecting a scenario and Core classes&lt;br /&gt;
**The scenario chosen at the beginning of the session should be simple, clear and well documented&lt;br /&gt;
**Related scenarios should be identified and dealt with separately&lt;br /&gt;
**Identification of critical classes from the candidate class list is also very important&lt;br /&gt;
**This helps to eliminate irrelevant classes and review remaining classes&lt;br /&gt;
**This also helps clarify the system scope&lt;br /&gt;
&lt;br /&gt;
For e.g we can apply the elimination process to the candidate class list. We can eliminate blackjack as it is the name of the system. ‘House’ can be eliminated as it is another name for the dealer. Also, instead of making ace, king, queen and jack as separate classes, we can represent them as attributes of individual classes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Create initial CRC cards&lt;br /&gt;
From the information gathered in the step above, CRC cards are written&lt;br /&gt;
&lt;br /&gt;
[[Image:Deck1.jpg |frame|center|Deck CRC Card]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Dealer.jpg |frame|center|Dealer CRC Card]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Player.jpg |frame|center|Player CRC Card]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Creating a CRC Model&lt;br /&gt;
**After the CRC cards  are written, they are placed appropriately, with collaborating classes closer to each other.&lt;br /&gt;
**Accordingly, place each card in position till the entire picture of the system is finalized.&lt;br /&gt;
**This process may have to be done in several iterations to get a refined view of the system to be modeled.&lt;br /&gt;
&lt;br /&gt;
For more information on using CRC Cards please refer to http://alistair.cockburn.us/Using+CRC+cards&lt;br /&gt;
&lt;br /&gt;
==CRC Team==&lt;br /&gt;
&lt;br /&gt;
*Domain Experts:&lt;br /&gt;
**Core team that writes the cards&lt;br /&gt;
**Have good business domain knowledge for which the system is being designed&lt;br /&gt;
**Usually are 3-5 people&lt;br /&gt;
&lt;br /&gt;
*Object Oriented Design Analyst:&lt;br /&gt;
**Analysts and developers those are familiar with object oriented design methodologies&lt;br /&gt;
**Usually are 1-2 people&lt;br /&gt;
&lt;br /&gt;
*Facilitator:&lt;br /&gt;
**Most important member who conducts the CRC modeling session&lt;br /&gt;
**Acts as an intermediary when there is difference of opinion regarding class responsibilities and paths of collaboration&lt;br /&gt;
**Usually a single person&lt;br /&gt;
&lt;br /&gt;
*Scribe:&lt;br /&gt;
**Responsible for documenting any business logic that evolves by way of discussions during the CRC modeling process.&lt;br /&gt;
**This documentation can be added to the requirements and business documents which can be used by design analysts at a later stage&lt;br /&gt;
**Usually are 1-2 people&lt;br /&gt;
&lt;br /&gt;
==Case study==&lt;br /&gt;
&lt;br /&gt;
To understand the working of CRC card modeling better, here is an example of an ATM system designed using CRC cards. Here, the software system under consideration has to control an automated teller machine. The ATM has a magnetic stripe reader for reading an ATM card, a customer console (keyboard and display) for interaction with the customer, a slot for depositing envelopes, a dispenser for cash (in multiples of $20), a printer for printing customer receipts, and a key-operated switch to allow an operator to start or stop the machine. Also, the ATM will communicate with the bank's computer over an appropriate communication link.&lt;br /&gt;
&lt;br /&gt;
To perform a transaction, a customer will be required to insert an ATM card and enter a personal identification number (PIN) - both of which will be sent to the bank for validation. The customer will then be able to perform one or more transactions. The card will be retained in the machine until the customer indicates that there are no further transactions, at which point it will be returned. For more on the case study.&lt;br /&gt;
&lt;br /&gt;
http://www.math-cs.gordon.edu/courses/cps211/ATMExample/CRCCards.html&lt;br /&gt;
&lt;br /&gt;
==Metrics for CRC Analysis==&lt;br /&gt;
&lt;br /&gt;
CRC analysis metrics can help evaluate the level of ease in designing and coding with CRC cards. These metrics also contribute to other project planning factors to give overall sense of project development.These metrics can be calculated easily and quickly without the need of special tools. Three metrics are broadly identified as: maximum depth of inheritance, the number of responsibilities assigned to each class and the number of collaborators for a class. With the example below an attempt has been made to explain these metrics.In the diagram, black line indicates inheritance while blue line indicates collaboration. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Class_hierarchy1.png|frame|center|CRC metrics example]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Maximum depth of inheritance===&lt;br /&gt;
&lt;br /&gt;
This metric gives an idea of the class hierarchy. It is the count of number of subclasses in the hierarchy.From the diagram,it can be seen that Part Time student is a subclass of Distance Education which in turn is a subclass of student.Thus,maximum depth of inheritance in this case is two with  reference to class Student. Each subclass shares the overall functions defined in class Student. For short hierarchies, this is a positive benefit of OO. If number of subclasses become too long, it becomes difficult to trace the flow of functions, resulting in overly complex systems. This makes testing, reviewing and reusing difficult.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Number of collaborators===&lt;br /&gt;
&lt;br /&gt;
This is the count of all the supporting classes to help a class.In the diagram,there are four collaborators for class Student:Teacher,Library,Computer Labs and Gymnasium.Confusion between collaborators and subclasses may result in creation many collaborators.This will affect the encapsulation of the design.Typical value for this metric is eight.If this value is large,design may be reviewed to see if inheritance is implemented correctly.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Number of responsibilities===&lt;br /&gt;
This is the count of clearly defined set of duties to each class.For example class Student may have functions like Attending  Lectures,&lt;br /&gt;
Maintaining a certain GPA,Taking the required courses. In this case number of responsibilities is three.Responsibilities should be distributed amongst classes to cover the whole system. This would avoid an imbalance in design. We need to refine the overly complex class into a series of simpler objects. This will make the system easier to understand, implement and reuse. For most commercial transaction oriented systems, values approximately between eight and eighteen are common.&lt;br /&gt;
&lt;br /&gt;
==Advantages==&lt;br /&gt;
* CRC cards create a first-cut analysis for complex systems, and let analysts and users examine the operation of discrete subsystems.&lt;br /&gt;
* CRC cards are invaluable input into more formal methods. Agile development methods often use CRC cards. They are popular as a front end to UML&lt;br /&gt;
* CRC cards are a great way to build teamwork and common understanding.&lt;br /&gt;
* Part of the CRC card attraction is their simplicity. Developers can use them with little formal training and just paper and pencil for tools&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Software for CRC card==&lt;br /&gt;
&lt;br /&gt;
It is difficult to maintain, change, share paper based cards for large projects. Software for CRC cards offer many advantages in such scenarios such as&lt;br /&gt;
&lt;br /&gt;
*Easy Revision: As CRC cards are part of development process, constant changes are made by developers to edit the information .Change to one card might require changes to other cards. It becomes difficult to handle such interdependent changes for various fields such as attribute, responsibility, collaboration on paper based system. Software will reflect one change to every corresponding reference in the design. This saves a lot of time and also avoids the manual errors that may be evident on paper based system.&lt;br /&gt;
&lt;br /&gt;
*Easy sharing: Paper based systems make sharing difficult by necessitating team members to be physically present at one location. Using software, team members can work from different locations.&lt;br /&gt;
&lt;br /&gt;
*Better representation: It is possible to group cards from different perspective such as hierarchy, attributes, parent. This helps better understanding and thinking. Some software also aid graphical display of data.&lt;br /&gt;
&lt;br /&gt;
*Inputs to methodologies: Software for CRC cards can provide the input files for UML class diagram generation software saving lot of time in the development cycle.&lt;br /&gt;
&lt;br /&gt;
*Making additions to existing code: Many projects   make addition to existing code or reuse already developed code in their project. Software can produce CRC cards with existing source code as an input. This would help the team to understand the code in efficient manner and less time.&lt;br /&gt;
&lt;br /&gt;
However,it comes with a cost.Based on required features and cost,team may select from various commercially available software products.Below are few links:&lt;br /&gt;
&lt;br /&gt;
*quickCRC:http://www.excelsoftware.com/&lt;br /&gt;
*CRC card support is part of Visual Paradigm for UML:  http://www.visual-paradigm.com/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==CRC cards Limitations and formal object modeling methodologies(UML)==&lt;br /&gt;
&lt;br /&gt;
CRC cards are used to form initial class definitions but alone are not sufficient to be directly coded into software for large systems.It is difficult to keep track of cards as the systems grows and work on subsystems simultaneously and independently.CRC cards lack the notational power to document all the components of a system and cannot provide implementation specifications such as transition states of objects during its life cycle,interface design,data structures,performance and resource utilization. To bridge this gap,more formal object modeling methodology such as UML is used.UML captures the bigger picture.It provides detailed mapping of use cases(operations),object state transitions,inter-process communication functionality,algorithm design.UML is very effective in incremental model of SDLC where  lot of details need to captured for precise addition.Information  about requirements is represented in detail and whole picture of the system and users is visible.CRC cards are used as effective inputs to UML.CRC card techniques such as brainstorming and role play help enhance functional understanding which helps in preparing better UML use cases.CRC cards given the content for  class diagrams,inheritance diagrams,class specifications and object specifications for UML.CRC cards can keep track of attributes that can aid listing them as a part of class specification in UML.Most CRC card software have the facility to export CRC analysis file that can be directly used as an input for UML.Following case study develops UML with the help of CRC cards:&lt;br /&gt;
&lt;br /&gt;
http://www.math.gordon.edu/courses/cs211/ATMExample/  [3]&lt;br /&gt;
&lt;br /&gt;
==Summary==&lt;br /&gt;
CRC cards are very useful to form the base of object oriented methodology.Techniques such as brain storming and role play enhance the understanding of requirements.CRC automation makes card handling and sharing  quick and efficient.For large projects more formal technology such as UML is required but CRC cards can provide a very good starting point.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Reference==&lt;br /&gt;
[1]Rubin,D.M, Introduction to CRC Cards, Methodologies and Practices.Revised January 1998,SOFTSTAR RESEARCH,INC: http://www.softstar-inc.com/Download/Intro%20to%20CRC.pdf&lt;br /&gt;
&lt;br /&gt;
[2]Bjork,R.C, CRC cards for ATM, Object-Oriented Software Development.Retrieved September 6,2010,from Computer Science Department, Gordon College:: http://www.math-cs.gordon.edu/courses/cps211/ATMExample/CRCCards.html&lt;br /&gt;
&lt;br /&gt;
[3]Bjork,R.C, ATMExample, Object-Oriented Software Development.Retrieved September 5,2010,from Computer Science Department, Gordon College: http://www.math.gordon.edu/courses/cs211/ATMExample/&lt;br /&gt;
&lt;br /&gt;
[4]quickCRC:http://www.excelsoftware.com/&lt;br /&gt;
&lt;br /&gt;
[5]Visual Paradigm:  http://www.visual-paradigm.com/   &lt;br /&gt;
         &lt;br /&gt;
[6]Bellin, D and Simone, S.S ‘The CRC Card Book’, Addison Wesley, 1997&lt;/div&gt;</summary>
		<author><name>Bluehat</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=User:Bluehat&amp;diff=33830</id>
		<title>User:Bluehat</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=User:Bluehat&amp;diff=33830"/>
		<updated>2010-09-08T17:50:44Z</updated>

		<summary type="html">&lt;p&gt;Bluehat: /* Reference */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
The onset of the object oriented paradigm in the software industry brought about a big change in the basic approach to system design and the software development life cycle.The major task in the development of any application using the object oriented paradigm is to identify ‘classes’, and how these classes interact and collaborate with each other in the system scope. &lt;br /&gt;
&lt;br /&gt;
Whenever a system is designed with classes, each class has a specific role to play in the system.It has certain responsibilities and each class collaborates with other classes to provide the complete system functionality. In such a scenario, identifying classes becomes the key to a good system design.Although it seems to be a simple,intuitive process,identifying classes can be quite complex when it comes to large scale systems. &lt;br /&gt;
&lt;br /&gt;
One such technique for identification of classes that make up the system and its collaborations is the ‘CRC Card’ technique. The concept of CRC cards was first put forth by Kent Beck and Ward Cunningham and it became very popular as it is easy to use and it supports development of any kind of object oriented development regardless of its scale,the method used, the technology or the language used for development&lt;br /&gt;
&lt;br /&gt;
==Definition==&lt;br /&gt;
Class Responsibility Collaboration (CRC) cards is an object-oriented design method that uses ordinary 3x5 index cards card made for each class containing responsibilities (knowledge and services) and collaborators (interactions with other classes). The cards provide an informal, intuitive way for group members to work on object design together.&lt;br /&gt;
A typical CRC card layout is shown below.&lt;br /&gt;
[[Image:Crccard2.jpg|frame|center|CRC CARD Template]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example: Consider a Student class where a student can enroll for a seminar. In this case ‘Student’ will be one class and ‘Seminar’ can be another class that collaborates with the Student class.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:CrcStudent.jpg|frame|center|Student CRC Card ]]&lt;br /&gt;
&lt;br /&gt;
To know more about CRC cards please refer to http://www.hsanchez.net/repository/hsanchez-PLCRC-plop04.pdf&lt;br /&gt;
&lt;br /&gt;
==Principle and Process==&lt;br /&gt;
&lt;br /&gt;
===CRC Principle===&lt;br /&gt;
&lt;br /&gt;
A CRC model includes a collection of cards and each card is divided into three sections. &lt;br /&gt;
*Class Name: &lt;br /&gt;
**Appears on the top of the CRC card&lt;br /&gt;
**Class denotes a set of similar objects that are being modeled in the system&lt;br /&gt;
&lt;br /&gt;
*Responsibilities:&lt;br /&gt;
**Appears on the left hand side of the CRC card&lt;br /&gt;
**It is a list of the responsibilities of the class i.e. things a class can do with its knowledge&lt;br /&gt;
&lt;br /&gt;
*Collaborators:&lt;br /&gt;
**Appear on the right hand side of the CRC card&lt;br /&gt;
**They are other classes that the class works with to get information or perform a certain function&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===CRC Process===&lt;br /&gt;
&lt;br /&gt;
CRC modeling process includes the users, analysts and developers bringing together the entire development team to form a common understanding of an OO development project.For e.g consider a software application to implement a game of blackjack. To implement the CRC technique to design this software, following steps are taken:&lt;br /&gt;
&lt;br /&gt;
*Explanation of the CRC Technique&lt;br /&gt;
**The facilitator explains the purpose of the CRC modeling session&lt;br /&gt;
**It can include explanation of CRC Cards and creation of sample CRC Cards&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Brainstorming&lt;br /&gt;
**A brainstorming session at the very beginning brings in new ideas, new perspectives to the problem being solved.&lt;br /&gt;
**Every team member can contribute with innovative ideas&lt;br /&gt;
**A list of candidate classes can be drawn up from this activity&lt;br /&gt;
&lt;br /&gt;
For e.g considering the above example, we can identify candidate classes by listing down the nouns relating to the game of blackjack. Say, game, blackjack, dealer, players, card, deck, hand, bet, king, queen, jack, ace, suit, winner, game.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Selecting a scenario and Core classes&lt;br /&gt;
**The scenario chosen at the beginning of the session should be simple, clear and well documented&lt;br /&gt;
**Related scenarios should be identified and dealt with separately&lt;br /&gt;
**Identification of critical classes from the candidate class list is also very important&lt;br /&gt;
**This helps to eliminate irrelevant classes and review remaining classes&lt;br /&gt;
**This also helps clarify the system scope&lt;br /&gt;
&lt;br /&gt;
For e.g we can apply the elimination process to the candidate class list. We can eliminate blackjack as it is the name of the system. ‘House’ can be eliminated as it is another name for the dealer. Also, instead of making ace, king, queen and jack as separate classes, we can represent them as attributes of individual classes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Create initial CRC cards&lt;br /&gt;
From the information gathered in the step above, CRC cards are written&lt;br /&gt;
&lt;br /&gt;
[[Image:Deck1.jpg |frame|center|Deck CRC Card]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Dealer.jpg |frame|center|Dealer CRC Card]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Player.jpg |frame|center|Player CRC Card]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Creating a CRC Model&lt;br /&gt;
**After the CRC cards  are written, they are placed appropriately, with collaborating classes closer to each other.&lt;br /&gt;
**Accordingly, place each card in position till the entire picture of the system is finalized.&lt;br /&gt;
**This process may have to be done in several iterations to get a refined view of the system to be modeled.&lt;br /&gt;
&lt;br /&gt;
For more information on using CRC Cards please refer to http://alistair.cockburn.us/Using+CRC+cards&lt;br /&gt;
&lt;br /&gt;
==CRC Team==&lt;br /&gt;
&lt;br /&gt;
*Domain Experts:&lt;br /&gt;
**Core team that writes the cards&lt;br /&gt;
**Have good business domain knowledge for which the system is being designed&lt;br /&gt;
**Usually are 3-5 people&lt;br /&gt;
&lt;br /&gt;
*Object Oriented Design Analyst:&lt;br /&gt;
**Analysts and developers those are familiar with object oriented design methodologies&lt;br /&gt;
**Usually are 1-2 people&lt;br /&gt;
&lt;br /&gt;
*Facilitator:&lt;br /&gt;
**Most important member who conducts the CRC modeling session&lt;br /&gt;
**Acts as an intermediary when there is difference of opinion regarding class responsibilities and paths of collaboration&lt;br /&gt;
**Usually a single person&lt;br /&gt;
&lt;br /&gt;
*Scribe:&lt;br /&gt;
**Responsible for documenting any business logic that evolves by way of discussions during the CRC modeling process.&lt;br /&gt;
**This documentation can be added to the requirements and business documents which can be used by design analysts at a later stage&lt;br /&gt;
**Usually are 1-2 people&lt;br /&gt;
&lt;br /&gt;
==Case study==&lt;br /&gt;
&lt;br /&gt;
To understand the working of CRC card modeling better, here is an example of an ATM system designed using CRC cards. Here, the software system under consideration has to control an automated teller machine. The ATM has a magnetic stripe reader for reading an ATM card, a customer console (keyboard and display) for interaction with the customer, a slot for depositing envelopes, a dispenser for cash (in multiples of $20), a printer for printing customer receipts, and a key-operated switch to allow an operator to start or stop the machine. Also, the ATM will communicate with the bank's computer over an appropriate communication link.&lt;br /&gt;
&lt;br /&gt;
To perform a transaction, a customer will be required to insert an ATM card and enter a personal identification number (PIN) - both of which will be sent to the bank for validation. The customer will then be able to perform one or more transactions. The card will be retained in the machine until the customer indicates that there are no further transactions, at which point it will be returned. For more on the case study.&lt;br /&gt;
&lt;br /&gt;
http://www.math-cs.gordon.edu/courses/cps211/ATMExample/CRCCards.html&lt;br /&gt;
&lt;br /&gt;
==Metrics for CRC Analysis==&lt;br /&gt;
&lt;br /&gt;
CRC analysis metrics can help evaluate the level of ease in designing and coding with CRC cards. These metrics also contribute to other project planning factors to give overall sense of project development.These metrics can be calculated easily and quickly without the need of special tools. Three metrics are broadly identified as: maximum depth of inheritance, the number of responsibilities assigned to each class and the number of collaborators for a class. With the example below an attempt has been made to explain these metrics.In the diagram, black line indicates inheritance while blue line indicates collaboration. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Class_hierarchy1.png|frame|center|CRC metrics example]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Maximum depth of inheritance===&lt;br /&gt;
&lt;br /&gt;
This metric gives an idea of the class hierarchy. It is the count of number of subclasses in the hierarchy.From the diagram,it can be seen that Part Time student is a subclass of Distance Education which in turn is a subclass of student.Thus,maximum depth of inheritance in this case is two with  reference to class Student. Each subclass shares the overall functions defined in class Student. For short hierarchies, this is a positive benefit of OO. If number of subclasses become too long, it becomes difficult to trace the flow of functions, resulting in overly complex systems. This makes testing, reviewing and reusing difficult.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Number of collaborators===&lt;br /&gt;
&lt;br /&gt;
This is the count of all the supporting classes to help a class.In the diagram,there are four collaborators for class Student:Teacher,Library,Computer Labs and Gymnasium.Confusion between collaborators and subclasses may result in creation many collaborators.This will affect the encapsulation of the design.Typical value for this metric is eight.If this value is large,design may be reviewed to see if inheritance is implemented correctly.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Number of responsibilities===&lt;br /&gt;
This is the count of clearly defined set of duties to each class.For example class Student may have functions like Attending  Lectures,&lt;br /&gt;
Maintaining a certain GPA,Taking the required courses. In this case number of responsibilities is three.Responsibilities should be distributed amongst classes to cover the whole system. This would avoid an imbalance in design. We need to refine the overly complex class into a series of simpler objects. This will make the system easier to understand, implement and reuse. For most commercial transaction oriented systems, values approximately between eight and eighteen are common.&lt;br /&gt;
&lt;br /&gt;
==Advantages==&lt;br /&gt;
* CRC cards create a first-cut analysis for complex systems, and let analysts and users examine the operation of discrete subsystems.&lt;br /&gt;
* CRC cards are invaluable input into more formal methods. Agile development methods often use CRC cards. They are popular as a front end to UML&lt;br /&gt;
* CRC cards are a great way to build teamwork and common understanding.&lt;br /&gt;
* Part of the CRC card attraction is their simplicity. Developers can use them with little formal training and just paper and pencil for tools&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Software for CRC card==&lt;br /&gt;
&lt;br /&gt;
It is difficult to maintain, change, share paper based cards for large projects. Software for CRC cards offer many advantages in such scenarios such as&lt;br /&gt;
&lt;br /&gt;
*Easy Revision: As CRC cards are part of development process, constant changes are made by developers to edit the information .Change to one card might require changes to other cards. It becomes difficult to handle such interdependent changes for various fields such as attribute, responsibility, collaboration on paper based system. Software will reflect one change to every corresponding reference in the design. This saves a lot of time and also avoids the manual errors that may be evident on paper based system.&lt;br /&gt;
&lt;br /&gt;
*Easy sharing: Paper based systems make sharing difficult by necessitating team members to be physically present at one location. Using software, team members can work from different locations.&lt;br /&gt;
&lt;br /&gt;
*Better representation: It is possible to group cards from different perspective such as hierarchy, attributes, parent. This helps better understanding and thinking. Some software also aid graphical display of data.&lt;br /&gt;
&lt;br /&gt;
*Inputs to methodologies: Software for CRC cards can provide the input files for UML class diagram generation software saving lot of time in the development cycle.&lt;br /&gt;
&lt;br /&gt;
*Making additions to existing code: Many projects   make addition to existing code or reuse already developed code in their project. Software can produce CRC cards with existing source code as an input. This would help the team to understand the code in efficient manner and less time.&lt;br /&gt;
&lt;br /&gt;
However,it comes with a cost.Based on required features and cost,team may select from various commercially available software products.Below are few links:&lt;br /&gt;
&lt;br /&gt;
*quickCRC:http://www.excelsoftware.com/&lt;br /&gt;
*CRC card support is part of Visual Paradigm for UML:  http://www.visual-paradigm.com/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==CRC cards Limitations and formal object modeling methodologies(UML)==&lt;br /&gt;
&lt;br /&gt;
CRC cards are used to form initial class definitions but alone are not sufficient to be directly coded into software for large systems.It is difficult to keep track of cards as the systems grows and work on subsystems simultaneously and independently.CRC cards lack the notational power to document all the components of a system and cannot provide implementation specifications such as transition states of objects during its life cycle,interface design,data structures,performance and resource utilization. To bridge this gap,more formal object modeling methodology such as UML is used.UML captures the bigger picture.It provides detailed mapping of use cases(operations),object state transitions,inter-process communication functionality,algorithm design.UML is very effective in incremental model of SDLC where  lot of details need to captured for precise addition.Information  about requirements is represented in detail and whole picture of the system and users is visible.CRC cards are used as effective inputs to UML.CRC card techniques such as brainstorming and role play help enhance functional understanding which helps in preparing better UML use cases.CRC cards given the content for  class diagrams,inheritance diagrams,class specifications and object specifications for UML.CRC cards can keep track of attributes that can aid listing them as a part of class specification in UML.Most CRC card software have the facility to export CRC analysis file that can be directly used as an input for UML.Following case study develops UML with the help of CRC cards:&lt;br /&gt;
&lt;br /&gt;
http://www.math.gordon.edu/courses/cs211/ATMExample/  [3]&lt;br /&gt;
&lt;br /&gt;
==Summary==&lt;br /&gt;
CRC cards are very useful to form the base of object oriented methodology.Techniques such as brain storming and role play enhance the understanding of requirements.CRC automation makes card handling and sharing  quick and efficient.For large projects more formal technology such as UML is required but CRC cards can provide a very good starting point.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Reference==&lt;br /&gt;
[1]Rubin,D.M, Introduction to CRC Cards, Methodologies and Practices.Revised January 1998,SOFTSTAR RESEARCH,INC: http://www.softstar-inc.com/Download/Intro%20to%20CRC.pdf&lt;br /&gt;
&lt;br /&gt;
[2]Bjork,R.C, CRC cards for ATM, Object-Oriented Software Development.Retrieved September 6,2010,from Computer Science Department, Gordon College:: http://www.math-cs.gordon.edu/courses/cps211/ATMExample/CRCCards.html&lt;br /&gt;
&lt;br /&gt;
[3]Bjork,R.C, ATMExample, Object-Oriented Software Development.Retrieved September 5,2010,from Computer Science Department, Gordon College: http://www.math.gordon.edu/courses/cs211/ATMExample/&lt;br /&gt;
&lt;br /&gt;
[4]quickCRC:http://www.excelsoftware.com/&lt;br /&gt;
&lt;br /&gt;
[5]Visual Paradigm:  http://www.visual-paradigm.com/   &lt;br /&gt;
         &lt;br /&gt;
[6]Bellin, D and Simone, S.S ‘The CRC Card Book’, Addison Wesley, 1997&lt;/div&gt;</summary>
		<author><name>Bluehat</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=User:Bluehat&amp;diff=33829</id>
		<title>User:Bluehat</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=User:Bluehat&amp;diff=33829"/>
		<updated>2010-09-08T17:49:57Z</updated>

		<summary type="html">&lt;p&gt;Bluehat: /* Reference */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
The onset of the object oriented paradigm in the software industry brought about a big change in the basic approach to system design and the software development life cycle.The major task in the development of any application using the object oriented paradigm is to identify ‘classes’, and how these classes interact and collaborate with each other in the system scope. &lt;br /&gt;
&lt;br /&gt;
Whenever a system is designed with classes, each class has a specific role to play in the system.It has certain responsibilities and each class collaborates with other classes to provide the complete system functionality. In such a scenario, identifying classes becomes the key to a good system design.Although it seems to be a simple,intuitive process,identifying classes can be quite complex when it comes to large scale systems. &lt;br /&gt;
&lt;br /&gt;
One such technique for identification of classes that make up the system and its collaborations is the ‘CRC Card’ technique. The concept of CRC cards was first put forth by Kent Beck and Ward Cunningham and it became very popular as it is easy to use and it supports development of any kind of object oriented development regardless of its scale,the method used, the technology or the language used for development&lt;br /&gt;
&lt;br /&gt;
==Definition==&lt;br /&gt;
Class Responsibility Collaboration (CRC) cards is an object-oriented design method that uses ordinary 3x5 index cards card made for each class containing responsibilities (knowledge and services) and collaborators (interactions with other classes). The cards provide an informal, intuitive way for group members to work on object design together.&lt;br /&gt;
A typical CRC card layout is shown below.&lt;br /&gt;
[[Image:Crccard2.jpg|frame|center|CRC CARD Template]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example: Consider a Student class where a student can enroll for a seminar. In this case ‘Student’ will be one class and ‘Seminar’ can be another class that collaborates with the Student class.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:CrcStudent.jpg|frame|center|Student CRC Card ]]&lt;br /&gt;
&lt;br /&gt;
To know more about CRC cards please refer to http://www.hsanchez.net/repository/hsanchez-PLCRC-plop04.pdf&lt;br /&gt;
&lt;br /&gt;
==Principle and Process==&lt;br /&gt;
&lt;br /&gt;
===CRC Principle===&lt;br /&gt;
&lt;br /&gt;
A CRC model includes a collection of cards and each card is divided into three sections. &lt;br /&gt;
*Class Name: &lt;br /&gt;
**Appears on the top of the CRC card&lt;br /&gt;
**Class denotes a set of similar objects that are being modeled in the system&lt;br /&gt;
&lt;br /&gt;
*Responsibilities:&lt;br /&gt;
**Appears on the left hand side of the CRC card&lt;br /&gt;
**It is a list of the responsibilities of the class i.e. things a class can do with its knowledge&lt;br /&gt;
&lt;br /&gt;
*Collaborators:&lt;br /&gt;
**Appear on the right hand side of the CRC card&lt;br /&gt;
**They are other classes that the class works with to get information or perform a certain function&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===CRC Process===&lt;br /&gt;
&lt;br /&gt;
CRC modeling process includes the users, analysts and developers bringing together the entire development team to form a common understanding of an OO development project.For e.g consider a software application to implement a game of blackjack. To implement the CRC technique to design this software, following steps are taken:&lt;br /&gt;
&lt;br /&gt;
*Explanation of the CRC Technique&lt;br /&gt;
**The facilitator explains the purpose of the CRC modeling session&lt;br /&gt;
**It can include explanation of CRC Cards and creation of sample CRC Cards&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Brainstorming&lt;br /&gt;
**A brainstorming session at the very beginning brings in new ideas, new perspectives to the problem being solved.&lt;br /&gt;
**Every team member can contribute with innovative ideas&lt;br /&gt;
**A list of candidate classes can be drawn up from this activity&lt;br /&gt;
&lt;br /&gt;
For e.g considering the above example, we can identify candidate classes by listing down the nouns relating to the game of blackjack. Say, game, blackjack, dealer, players, card, deck, hand, bet, king, queen, jack, ace, suit, winner, game.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Selecting a scenario and Core classes&lt;br /&gt;
**The scenario chosen at the beginning of the session should be simple, clear and well documented&lt;br /&gt;
**Related scenarios should be identified and dealt with separately&lt;br /&gt;
**Identification of critical classes from the candidate class list is also very important&lt;br /&gt;
**This helps to eliminate irrelevant classes and review remaining classes&lt;br /&gt;
**This also helps clarify the system scope&lt;br /&gt;
&lt;br /&gt;
For e.g we can apply the elimination process to the candidate class list. We can eliminate blackjack as it is the name of the system. ‘House’ can be eliminated as it is another name for the dealer. Also, instead of making ace, king, queen and jack as separate classes, we can represent them as attributes of individual classes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Create initial CRC cards&lt;br /&gt;
From the information gathered in the step above, CRC cards are written&lt;br /&gt;
&lt;br /&gt;
[[Image:Deck1.jpg |frame|center|Deck CRC Card]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Dealer.jpg |frame|center|Dealer CRC Card]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Player.jpg |frame|center|Player CRC Card]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Creating a CRC Model&lt;br /&gt;
**After the CRC cards  are written, they are placed appropriately, with collaborating classes closer to each other.&lt;br /&gt;
**Accordingly, place each card in position till the entire picture of the system is finalized.&lt;br /&gt;
**This process may have to be done in several iterations to get a refined view of the system to be modeled.&lt;br /&gt;
&lt;br /&gt;
For more information on using CRC Cards please refer to http://alistair.cockburn.us/Using+CRC+cards&lt;br /&gt;
&lt;br /&gt;
==CRC Team==&lt;br /&gt;
&lt;br /&gt;
*Domain Experts:&lt;br /&gt;
**Core team that writes the cards&lt;br /&gt;
**Have good business domain knowledge for which the system is being designed&lt;br /&gt;
**Usually are 3-5 people&lt;br /&gt;
&lt;br /&gt;
*Object Oriented Design Analyst:&lt;br /&gt;
**Analysts and developers those are familiar with object oriented design methodologies&lt;br /&gt;
**Usually are 1-2 people&lt;br /&gt;
&lt;br /&gt;
*Facilitator:&lt;br /&gt;
**Most important member who conducts the CRC modeling session&lt;br /&gt;
**Acts as an intermediary when there is difference of opinion regarding class responsibilities and paths of collaboration&lt;br /&gt;
**Usually a single person&lt;br /&gt;
&lt;br /&gt;
*Scribe:&lt;br /&gt;
**Responsible for documenting any business logic that evolves by way of discussions during the CRC modeling process.&lt;br /&gt;
**This documentation can be added to the requirements and business documents which can be used by design analysts at a later stage&lt;br /&gt;
**Usually are 1-2 people&lt;br /&gt;
&lt;br /&gt;
==Case study==&lt;br /&gt;
&lt;br /&gt;
To understand the working of CRC card modeling better, here is an example of an ATM system designed using CRC cards. Here, the software system under consideration has to control an automated teller machine. The ATM has a magnetic stripe reader for reading an ATM card, a customer console (keyboard and display) for interaction with the customer, a slot for depositing envelopes, a dispenser for cash (in multiples of $20), a printer for printing customer receipts, and a key-operated switch to allow an operator to start or stop the machine. Also, the ATM will communicate with the bank's computer over an appropriate communication link.&lt;br /&gt;
&lt;br /&gt;
To perform a transaction, a customer will be required to insert an ATM card and enter a personal identification number (PIN) - both of which will be sent to the bank for validation. The customer will then be able to perform one or more transactions. The card will be retained in the machine until the customer indicates that there are no further transactions, at which point it will be returned. For more on the case study.&lt;br /&gt;
&lt;br /&gt;
http://www.math-cs.gordon.edu/courses/cps211/ATMExample/CRCCards.html&lt;br /&gt;
&lt;br /&gt;
==Metrics for CRC Analysis==&lt;br /&gt;
&lt;br /&gt;
CRC analysis metrics can help evaluate the level of ease in designing and coding with CRC cards. These metrics also contribute to other project planning factors to give overall sense of project development.These metrics can be calculated easily and quickly without the need of special tools. Three metrics are broadly identified as: maximum depth of inheritance, the number of responsibilities assigned to each class and the number of collaborators for a class. With the example below an attempt has been made to explain these metrics.In the diagram, black line indicates inheritance while blue line indicates collaboration. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Class_hierarchy1.png|frame|center|CRC metrics example]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Maximum depth of inheritance===&lt;br /&gt;
&lt;br /&gt;
This metric gives an idea of the class hierarchy. It is the count of number of subclasses in the hierarchy.From the diagram,it can be seen that Part Time student is a subclass of Distance Education which in turn is a subclass of student.Thus,maximum depth of inheritance in this case is two with  reference to class Student. Each subclass shares the overall functions defined in class Student. For short hierarchies, this is a positive benefit of OO. If number of subclasses become too long, it becomes difficult to trace the flow of functions, resulting in overly complex systems. This makes testing, reviewing and reusing difficult.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Number of collaborators===&lt;br /&gt;
&lt;br /&gt;
This is the count of all the supporting classes to help a class.In the diagram,there are four collaborators for class Student:Teacher,Library,Computer Labs and Gymnasium.Confusion between collaborators and subclasses may result in creation many collaborators.This will affect the encapsulation of the design.Typical value for this metric is eight.If this value is large,design may be reviewed to see if inheritance is implemented correctly.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Number of responsibilities===&lt;br /&gt;
This is the count of clearly defined set of duties to each class.For example class Student may have functions like Attending  Lectures,&lt;br /&gt;
Maintaining a certain GPA,Taking the required courses. In this case number of responsibilities is three.Responsibilities should be distributed amongst classes to cover the whole system. This would avoid an imbalance in design. We need to refine the overly complex class into a series of simpler objects. This will make the system easier to understand, implement and reuse. For most commercial transaction oriented systems, values approximately between eight and eighteen are common.&lt;br /&gt;
&lt;br /&gt;
==Advantages==&lt;br /&gt;
* CRC cards create a first-cut analysis for complex systems, and let analysts and users examine the operation of discrete subsystems.&lt;br /&gt;
* CRC cards are invaluable input into more formal methods. Agile development methods often use CRC cards. They are popular as a front end to UML&lt;br /&gt;
* CRC cards are a great way to build teamwork and common understanding.&lt;br /&gt;
* Part of the CRC card attraction is their simplicity. Developers can use them with little formal training and just paper and pencil for tools&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Software for CRC card==&lt;br /&gt;
&lt;br /&gt;
It is difficult to maintain, change, share paper based cards for large projects. Software for CRC cards offer many advantages in such scenarios such as&lt;br /&gt;
&lt;br /&gt;
*Easy Revision: As CRC cards are part of development process, constant changes are made by developers to edit the information .Change to one card might require changes to other cards. It becomes difficult to handle such interdependent changes for various fields such as attribute, responsibility, collaboration on paper based system. Software will reflect one change to every corresponding reference in the design. This saves a lot of time and also avoids the manual errors that may be evident on paper based system.&lt;br /&gt;
&lt;br /&gt;
*Easy sharing: Paper based systems make sharing difficult by necessitating team members to be physically present at one location. Using software, team members can work from different locations.&lt;br /&gt;
&lt;br /&gt;
*Better representation: It is possible to group cards from different perspective such as hierarchy, attributes, parent. This helps better understanding and thinking. Some software also aid graphical display of data.&lt;br /&gt;
&lt;br /&gt;
*Inputs to methodologies: Software for CRC cards can provide the input files for UML class diagram generation software saving lot of time in the development cycle.&lt;br /&gt;
&lt;br /&gt;
*Making additions to existing code: Many projects   make addition to existing code or reuse already developed code in their project. Software can produce CRC cards with existing source code as an input. This would help the team to understand the code in efficient manner and less time.&lt;br /&gt;
&lt;br /&gt;
However,it comes with a cost.Based on required features and cost,team may select from various commercially available software products.Below are few links:&lt;br /&gt;
&lt;br /&gt;
*quickCRC:http://www.excelsoftware.com/&lt;br /&gt;
*CRC card support is part of Visual Paradigm for UML:  http://www.visual-paradigm.com/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==CRC cards Limitations and formal object modeling methodologies(UML)==&lt;br /&gt;
&lt;br /&gt;
CRC cards are used to form initial class definitions but alone are not sufficient to be directly coded into software for large systems.It is difficult to keep track of cards as the systems grows and work on subsystems simultaneously and independently.CRC cards lack the notational power to document all the components of a system and cannot provide implementation specifications such as transition states of objects during its life cycle,interface design,data structures,performance and resource utilization. To bridge this gap,more formal object modeling methodology such as UML is used.UML captures the bigger picture.It provides detailed mapping of use cases(operations),object state transitions,inter-process communication functionality,algorithm design.UML is very effective in incremental model of SDLC where  lot of details need to captured for precise addition.Information  about requirements is represented in detail and whole picture of the system and users is visible.CRC cards are used as effective inputs to UML.CRC card techniques such as brainstorming and role play help enhance functional understanding which helps in preparing better UML use cases.CRC cards given the content for  class diagrams,inheritance diagrams,class specifications and object specifications for UML.CRC cards can keep track of attributes that can aid listing them as a part of class specification in UML.Most CRC card software have the facility to export CRC analysis file that can be directly used as an input for UML.Following case study develops UML with the help of CRC cards:&lt;br /&gt;
&lt;br /&gt;
http://www.math.gordon.edu/courses/cs211/ATMExample/  [3]&lt;br /&gt;
&lt;br /&gt;
==Summary==&lt;br /&gt;
CRC cards are very useful to form the base of object oriented methodology.Techniques such as brain storming and role play enhance the understanding of requirements.CRC automation makes card handling and sharing  quick and efficient.For large projects more formal technology such as UML is required but CRC cards can provide a very good starting point.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Reference==&lt;br /&gt;
[1]Rubin,D.M, Introduction to CRC Cards ,Methodologies and Practices. Revised January 1998, SOFTSTAR RESEARCH, INC: http://www.softstar-inc.com/Download/Intro%20to%20CRC.pdf&lt;br /&gt;
&lt;br /&gt;
[2]Bjork,R.C, CRC cards for ATM, Object-Oriented Software Development.Retrieved September 6,2010,from Computer Science Department, Gordon College:: http://www.math-cs.gordon.edu/courses/cps211/ATMExample/CRCCards.html&lt;br /&gt;
&lt;br /&gt;
[3]Bjork,R.C, ATMExample, Object-Oriented Software Development.Retrieved September 5,2010,from Computer Science Department, Gordon College: http://www.math.gordon.edu/courses/cs211/ATMExample/&lt;br /&gt;
&lt;br /&gt;
[4]quickCRC:http://www.excelsoftware.com/&lt;br /&gt;
&lt;br /&gt;
[5]Visual Paradigm:  http://www.visual-paradigm.com/   &lt;br /&gt;
         &lt;br /&gt;
[6]Bellin, D and Simone, S.S ‘The CRC Card Book’, Addison Wesley, 1997&lt;/div&gt;</summary>
		<author><name>Bluehat</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=User:Bluehat&amp;diff=33826</id>
		<title>User:Bluehat</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=User:Bluehat&amp;diff=33826"/>
		<updated>2010-09-08T17:38:17Z</updated>

		<summary type="html">&lt;p&gt;Bluehat: /* CRC cards Limitations and formal object modeling methodologies(UML) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
The onset of the object oriented paradigm in the software industry brought about a big change in the basic approach to system design and the software development life cycle.The major task in the development of any application using the object oriented paradigm is to identify ‘classes’, and how these classes interact and collaborate with each other in the system scope. &lt;br /&gt;
&lt;br /&gt;
Whenever a system is designed with classes, each class has a specific role to play in the system.It has certain responsibilities and each class collaborates with other classes to provide the complete system functionality. In such a scenario, identifying classes becomes the key to a good system design.Although it seems to be a simple,intuitive process,identifying classes can be quite complex when it comes to large scale systems. &lt;br /&gt;
&lt;br /&gt;
One such technique for identification of classes that make up the system and its collaborations is the ‘CRC Card’ technique. The concept of CRC cards was first put forth by Kent Beck and Ward Cunningham and it became very popular as it is easy to use and it supports development of any kind of object oriented development regardless of its scale,the method used, the technology or the language used for development&lt;br /&gt;
&lt;br /&gt;
==Definition==&lt;br /&gt;
Class Responsibility Collaboration (CRC) cards is an object-oriented design method that uses ordinary 3x5 index cards card made for each class containing responsibilities (knowledge and services) and collaborators (interactions with other classes). The cards provide an informal, intuitive way for group members to work on object design together.&lt;br /&gt;
A typical CRC card layout is shown below.&lt;br /&gt;
[[Image:Crccard2.jpg|frame|center|CRC CARD Template]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example: Consider a Student class where a student can enroll for a seminar. In this case ‘Student’ will be one class and ‘Seminar’ can be another class that collaborates with the Student class.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:CrcStudent.jpg|frame|center|Student CRC Card ]]&lt;br /&gt;
&lt;br /&gt;
To know more about CRC cards please refer to http://www.hsanchez.net/repository/hsanchez-PLCRC-plop04.pdf&lt;br /&gt;
&lt;br /&gt;
==Principle and Process==&lt;br /&gt;
&lt;br /&gt;
===CRC Principle===&lt;br /&gt;
&lt;br /&gt;
A CRC model includes a collection of cards and each card is divided into three sections. &lt;br /&gt;
*Class Name: &lt;br /&gt;
**Appears on the top of the CRC card&lt;br /&gt;
**Class denotes a set of similar objects that are being modeled in the system&lt;br /&gt;
&lt;br /&gt;
*Responsibilities:&lt;br /&gt;
**Appears on the left hand side of the CRC card&lt;br /&gt;
**It is a list of the responsibilities of the class i.e. things a class can do with its knowledge&lt;br /&gt;
&lt;br /&gt;
*Collaborators:&lt;br /&gt;
**Appear on the right hand side of the CRC card&lt;br /&gt;
**They are other classes that the class works with to get information or perform a certain function&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===CRC Process===&lt;br /&gt;
&lt;br /&gt;
CRC modeling process includes the users, analysts and developers bringing together the entire development team to form a common understanding of an OO development project.For e.g consider a software application to implement a game of blackjack. To implement the CRC technique to design this software, following steps are taken:&lt;br /&gt;
&lt;br /&gt;
*Explanation of the CRC Technique&lt;br /&gt;
**The facilitator explains the purpose of the CRC modeling session&lt;br /&gt;
**It can include explanation of CRC Cards and creation of sample CRC Cards&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Brainstorming&lt;br /&gt;
**A brainstorming session at the very beginning brings in new ideas, new perspectives to the problem being solved.&lt;br /&gt;
**Every team member can contribute with innovative ideas&lt;br /&gt;
**A list of candidate classes can be drawn up from this activity&lt;br /&gt;
&lt;br /&gt;
For e.g considering the above example, we can identify candidate classes by listing down the nouns relating to the game of blackjack. Say, game, blackjack, dealer, players, card, deck, hand, bet, king, queen, jack, ace, suit, winner, game.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Selecting a scenario and Core classes&lt;br /&gt;
**The scenario chosen at the beginning of the session should be simple, clear and well documented&lt;br /&gt;
**Related scenarios should be identified and dealt with separately&lt;br /&gt;
**Identification of critical classes from the candidate class list is also very important&lt;br /&gt;
**This helps to eliminate irrelevant classes and review remaining classes&lt;br /&gt;
**This also helps clarify the system scope&lt;br /&gt;
&lt;br /&gt;
For e.g we can apply the elimination process to the candidate class list. We can eliminate blackjack as it is the name of the system. ‘House’ can be eliminated as it is another name for the dealer. Also, instead of making ace, king, queen and jack as separate classes, we can represent them as attributes of individual classes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Create initial CRC cards&lt;br /&gt;
From the information gathered in the step above, CRC cards are written&lt;br /&gt;
&lt;br /&gt;
[[Image:Deck1.jpg |frame|center|Deck CRC Card]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Dealer.jpg |frame|center|Dealer CRC Card]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Player.jpg |frame|center|Player CRC Card]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Creating a CRC Model&lt;br /&gt;
**After the CRC cards  are written, they are placed appropriately, with collaborating classes closer to each other.&lt;br /&gt;
**Accordingly, place each card in position till the entire picture of the system is finalized.&lt;br /&gt;
**This process may have to be done in several iterations to get a refined view of the system to be modeled.&lt;br /&gt;
&lt;br /&gt;
For more information on using CRC Cards please refer to http://alistair.cockburn.us/Using+CRC+cards&lt;br /&gt;
&lt;br /&gt;
==CRC Team==&lt;br /&gt;
&lt;br /&gt;
*Domain Experts:&lt;br /&gt;
**Core team that writes the cards&lt;br /&gt;
**Have good business domain knowledge for which the system is being designed&lt;br /&gt;
**Usually are 3-5 people&lt;br /&gt;
&lt;br /&gt;
*Object Oriented Design Analyst:&lt;br /&gt;
**Analysts and developers those are familiar with object oriented design methodologies&lt;br /&gt;
**Usually are 1-2 people&lt;br /&gt;
&lt;br /&gt;
*Facilitator:&lt;br /&gt;
**Most important member who conducts the CRC modeling session&lt;br /&gt;
**Acts as an intermediary when there is difference of opinion regarding class responsibilities and paths of collaboration&lt;br /&gt;
**Usually a single person&lt;br /&gt;
&lt;br /&gt;
*Scribe:&lt;br /&gt;
**Responsible for documenting any business logic that evolves by way of discussions during the CRC modeling process.&lt;br /&gt;
**This documentation can be added to the requirements and business documents which can be used by design analysts at a later stage&lt;br /&gt;
**Usually are 1-2 people&lt;br /&gt;
&lt;br /&gt;
==Case study==&lt;br /&gt;
&lt;br /&gt;
To understand the working of CRC card modeling better, here is an example of an ATM system designed using CRC cards. Here, the software system under consideration has to control an automated teller machine. The ATM has a magnetic stripe reader for reading an ATM card, a customer console (keyboard and display) for interaction with the customer, a slot for depositing envelopes, a dispenser for cash (in multiples of $20), a printer for printing customer receipts, and a key-operated switch to allow an operator to start or stop the machine. Also, the ATM will communicate with the bank's computer over an appropriate communication link.&lt;br /&gt;
&lt;br /&gt;
To perform a transaction, a customer will be required to insert an ATM card and enter a personal identification number (PIN) - both of which will be sent to the bank for validation. The customer will then be able to perform one or more transactions. The card will be retained in the machine until the customer indicates that there are no further transactions, at which point it will be returned. For more on the case study.&lt;br /&gt;
&lt;br /&gt;
http://www.math-cs.gordon.edu/courses/cps211/ATMExample/CRCCards.html&lt;br /&gt;
&lt;br /&gt;
==Metrics for CRC Analysis==&lt;br /&gt;
&lt;br /&gt;
CRC analysis metrics can help evaluate the level of ease in designing and coding with CRC cards. These metrics also contribute to other project planning factors to give overall sense of project development.These metrics can be calculated easily and quickly without the need of special tools. Three metrics are broadly identified as: maximum depth of inheritance, the number of responsibilities assigned to each class and the number of collaborators for a class. With the example below an attempt has been made to explain these metrics.In the diagram, black line indicates inheritance while blue line indicates collaboration. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Class_hierarchy1.png|frame|center|CRC metrics example]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Maximum depth of inheritance===&lt;br /&gt;
&lt;br /&gt;
This metric gives an idea of the class hierarchy. It is the count of number of subclasses in the hierarchy.From the diagram,it can be seen that Part Time student is a subclass of Distance Education which in turn is a subclass of student.Thus,maximum depth of inheritance in this case is two with  reference to class Student. Each subclass shares the overall functions defined in class Student. For short hierarchies, this is a positive benefit of OO. If number of subclasses become too long, it becomes difficult to trace the flow of functions, resulting in overly complex systems. This makes testing, reviewing and reusing difficult.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Number of collaborators===&lt;br /&gt;
&lt;br /&gt;
This is the count of all the supporting classes to help a class.In the diagram,there are four collaborators for class Student:Teacher,Library,Computer Labs and Gymnasium.Confusion between collaborators and subclasses may result in creation many collaborators.This will affect the encapsulation of the design.Typical value for this metric is eight.If this value is large,design may be reviewed to see if inheritance is implemented correctly.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Number of responsibilities===&lt;br /&gt;
This is the count of clearly defined set of duties to each class.For example class Student may have functions like Attending  Lectures,&lt;br /&gt;
Maintaining a certain GPA,Taking the required courses. In this case number of responsibilities is three.Responsibilities should be distributed amongst classes to cover the whole system. This would avoid an imbalance in design. We need to refine the overly complex class into a series of simpler objects. This will make the system easier to understand, implement and reuse. For most commercial transaction oriented systems, values approximately between eight and eighteen are common.&lt;br /&gt;
&lt;br /&gt;
==Advantages==&lt;br /&gt;
* CRC cards create a first-cut analysis for complex systems, and let analysts and users examine the operation of discrete subsystems.&lt;br /&gt;
* CRC cards are invaluable input into more formal methods. Agile development methods often use CRC cards. They are popular as a front end to UML&lt;br /&gt;
* CRC cards are a great way to build teamwork and common understanding.&lt;br /&gt;
* Part of the CRC card attraction is their simplicity. Developers can use them with little formal training and just paper and pencil for tools&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Software for CRC card==&lt;br /&gt;
&lt;br /&gt;
It is difficult to maintain, change, share paper based cards for large projects. Software for CRC cards offer many advantages in such scenarios such as&lt;br /&gt;
&lt;br /&gt;
*Easy Revision: As CRC cards are part of development process, constant changes are made by developers to edit the information .Change to one card might require changes to other cards. It becomes difficult to handle such interdependent changes for various fields such as attribute, responsibility, collaboration on paper based system. Software will reflect one change to every corresponding reference in the design. This saves a lot of time and also avoids the manual errors that may be evident on paper based system.&lt;br /&gt;
&lt;br /&gt;
*Easy sharing: Paper based systems make sharing difficult by necessitating team members to be physically present at one location. Using software, team members can work from different locations.&lt;br /&gt;
&lt;br /&gt;
*Better representation: It is possible to group cards from different perspective such as hierarchy, attributes, parent. This helps better understanding and thinking. Some software also aid graphical display of data.&lt;br /&gt;
&lt;br /&gt;
*Inputs to methodologies: Software for CRC cards can provide the input files for UML class diagram generation software saving lot of time in the development cycle.&lt;br /&gt;
&lt;br /&gt;
*Making additions to existing code: Many projects   make addition to existing code or reuse already developed code in their project. Software can produce CRC cards with existing source code as an input. This would help the team to understand the code in efficient manner and less time.&lt;br /&gt;
&lt;br /&gt;
However,it comes with a cost.Based on required features and cost,team may select from various commercially available software products.Below are few links:&lt;br /&gt;
&lt;br /&gt;
*quickCRC:http://www.excelsoftware.com/&lt;br /&gt;
*CRC card support is part of Visual Paradigm for UML:  http://www.visual-paradigm.com/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==CRC cards Limitations and formal object modeling methodologies(UML)==&lt;br /&gt;
&lt;br /&gt;
CRC cards are used to form initial class definitions but alone are not sufficient to be directly coded into software for large systems.It is difficult to keep track of cards as the systems grows and work on subsystems simultaneously and independently.CRC cards lack the notational power to document all the components of a system and cannot provide implementation specifications such as transition states of objects during its life cycle,interface design,data structures,performance and resource utilization. To bridge this gap,more formal object modeling methodology such as UML is used.UML captures the bigger picture.It provides detailed mapping of use cases(operations),object state transitions,inter-process communication functionality,algorithm design.UML is very effective in incremental model of SDLC where  lot of details need to captured for precise addition.Information  about requirements is represented in detail and whole picture of the system and users is visible.CRC cards are used as effective inputs to UML.CRC card techniques such as brainstorming and role play help enhance functional understanding which helps in preparing better UML use cases.CRC cards given the content for  class diagrams,inheritance diagrams,class specifications and object specifications for UML.CRC cards can keep track of attributes that can aid listing them as a part of class specification in UML.Most CRC card software have the facility to export CRC analysis file that can be directly used as an input for UML.Following case study develops UML with the help of CRC cards:&lt;br /&gt;
&lt;br /&gt;
http://www.math.gordon.edu/courses/cs211/ATMExample/  [3]&lt;br /&gt;
&lt;br /&gt;
==Summary==&lt;br /&gt;
CRC cards are very useful to form the base of object oriented methodology.Techniques such as brain storming and role play enhance the understanding of requirements.CRC automation makes card handling and sharing  quick and efficient.For large projects more formal technology such as UML is required but CRC cards can provide a very good starting point.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Reference==&lt;br /&gt;
[1]Introduction to CRC Cards: http://www.softstar-inc.com/Download/Intro%20to%20CRC.pdf&lt;br /&gt;
&lt;br /&gt;
[2]Bjork,R.C, CRC cards for ATM, Object-Oriented Software Development.Retrieved September 6,2010,from Computer Science Department, Gordon College:: http://www.math-cs.gordon.edu/courses/cps211/ATMExample/CRCCards.html&lt;br /&gt;
&lt;br /&gt;
[3]Bjork,R.C, ATMExample, Object-Oriented Software Development.Retrieved September 5,2010,from Computer Science Department, Gordon College: http://www.math.gordon.edu/courses/cs211/ATMExample/&lt;br /&gt;
&lt;br /&gt;
[4]quickCRC:http://www.excelsoftware.com/&lt;br /&gt;
&lt;br /&gt;
[5]Visual Paradigm:  http://www.visual-paradigm.com/   &lt;br /&gt;
         &lt;br /&gt;
[6]Bellin, D and Simone, S.S ‘The CRC Card Book’, Addison Wesley, 1997&lt;/div&gt;</summary>
		<author><name>Bluehat</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=User:Bluehat&amp;diff=33824</id>
		<title>User:Bluehat</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=User:Bluehat&amp;diff=33824"/>
		<updated>2010-09-08T17:35:50Z</updated>

		<summary type="html">&lt;p&gt;Bluehat: /* Reference */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
The onset of the object oriented paradigm in the software industry brought about a big change in the basic approach to system design and the software development life cycle.The major task in the development of any application using the object oriented paradigm is to identify ‘classes’, and how these classes interact and collaborate with each other in the system scope. &lt;br /&gt;
&lt;br /&gt;
Whenever a system is designed with classes, each class has a specific role to play in the system.It has certain responsibilities and each class collaborates with other classes to provide the complete system functionality. In such a scenario, identifying classes becomes the key to a good system design.Although it seems to be a simple,intuitive process,identifying classes can be quite complex when it comes to large scale systems. &lt;br /&gt;
&lt;br /&gt;
One such technique for identification of classes that make up the system and its collaborations is the ‘CRC Card’ technique. The concept of CRC cards was first put forth by Kent Beck and Ward Cunningham and it became very popular as it is easy to use and it supports development of any kind of object oriented development regardless of its scale,the method used, the technology or the language used for development&lt;br /&gt;
&lt;br /&gt;
==Definition==&lt;br /&gt;
Class Responsibility Collaboration (CRC) cards is an object-oriented design method that uses ordinary 3x5 index cards card made for each class containing responsibilities (knowledge and services) and collaborators (interactions with other classes). The cards provide an informal, intuitive way for group members to work on object design together.&lt;br /&gt;
A typical CRC card layout is shown below.&lt;br /&gt;
[[Image:Crccard2.jpg|frame|center|CRC CARD Template]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example: Consider a Student class where a student can enroll for a seminar. In this case ‘Student’ will be one class and ‘Seminar’ can be another class that collaborates with the Student class.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:CrcStudent.jpg|frame|center|Student CRC Card ]]&lt;br /&gt;
&lt;br /&gt;
To know more about CRC cards please refer to http://www.hsanchez.net/repository/hsanchez-PLCRC-plop04.pdf&lt;br /&gt;
&lt;br /&gt;
==Principle and Process==&lt;br /&gt;
&lt;br /&gt;
===CRC Principle===&lt;br /&gt;
&lt;br /&gt;
A CRC model includes a collection of cards and each card is divided into three sections. &lt;br /&gt;
*Class Name: &lt;br /&gt;
**Appears on the top of the CRC card&lt;br /&gt;
**Class denotes a set of similar objects that are being modeled in the system&lt;br /&gt;
&lt;br /&gt;
*Responsibilities:&lt;br /&gt;
**Appears on the left hand side of the CRC card&lt;br /&gt;
**It is a list of the responsibilities of the class i.e. things a class can do with its knowledge&lt;br /&gt;
&lt;br /&gt;
*Collaborators:&lt;br /&gt;
**Appear on the right hand side of the CRC card&lt;br /&gt;
**They are other classes that the class works with to get information or perform a certain function&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===CRC Process===&lt;br /&gt;
&lt;br /&gt;
CRC modeling process includes the users, analysts and developers bringing together the entire development team to form a common understanding of an OO development project.For e.g consider a software application to implement a game of blackjack. To implement the CRC technique to design this software, following steps are taken:&lt;br /&gt;
&lt;br /&gt;
*Explanation of the CRC Technique&lt;br /&gt;
**The facilitator explains the purpose of the CRC modeling session&lt;br /&gt;
**It can include explanation of CRC Cards and creation of sample CRC Cards&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Brainstorming&lt;br /&gt;
**A brainstorming session at the very beginning brings in new ideas, new perspectives to the problem being solved.&lt;br /&gt;
**Every team member can contribute with innovative ideas&lt;br /&gt;
**A list of candidate classes can be drawn up from this activity&lt;br /&gt;
&lt;br /&gt;
For e.g considering the above example, we can identify candidate classes by listing down the nouns relating to the game of blackjack. Say, game, blackjack, dealer, players, card, deck, hand, bet, king, queen, jack, ace, suit, winner, game.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Selecting a scenario and Core classes&lt;br /&gt;
**The scenario chosen at the beginning of the session should be simple, clear and well documented&lt;br /&gt;
**Related scenarios should be identified and dealt with separately&lt;br /&gt;
**Identification of critical classes from the candidate class list is also very important&lt;br /&gt;
**This helps to eliminate irrelevant classes and review remaining classes&lt;br /&gt;
**This also helps clarify the system scope&lt;br /&gt;
&lt;br /&gt;
For e.g we can apply the elimination process to the candidate class list. We can eliminate blackjack as it is the name of the system. ‘House’ can be eliminated as it is another name for the dealer. Also, instead of making ace, king, queen and jack as separate classes, we can represent them as attributes of individual classes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Create initial CRC cards&lt;br /&gt;
From the information gathered in the step above, CRC cards are written&lt;br /&gt;
&lt;br /&gt;
[[Image:Deck1.jpg |frame|center|Deck CRC Card]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Dealer.jpg |frame|center|Dealer CRC Card]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Player.jpg |frame|center|Player CRC Card]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Creating a CRC Model&lt;br /&gt;
**After the CRC cards  are written, they are placed appropriately, with collaborating classes closer to each other.&lt;br /&gt;
**Accordingly, place each card in position till the entire picture of the system is finalized.&lt;br /&gt;
**This process may have to be done in several iterations to get a refined view of the system to be modeled.&lt;br /&gt;
&lt;br /&gt;
For more information on using CRC Cards please refer to http://alistair.cockburn.us/Using+CRC+cards&lt;br /&gt;
&lt;br /&gt;
==CRC Team==&lt;br /&gt;
&lt;br /&gt;
*Domain Experts:&lt;br /&gt;
**Core team that writes the cards&lt;br /&gt;
**Have good business domain knowledge for which the system is being designed&lt;br /&gt;
**Usually are 3-5 people&lt;br /&gt;
&lt;br /&gt;
*Object Oriented Design Analyst:&lt;br /&gt;
**Analysts and developers those are familiar with object oriented design methodologies&lt;br /&gt;
**Usually are 1-2 people&lt;br /&gt;
&lt;br /&gt;
*Facilitator:&lt;br /&gt;
**Most important member who conducts the CRC modeling session&lt;br /&gt;
**Acts as an intermediary when there is difference of opinion regarding class responsibilities and paths of collaboration&lt;br /&gt;
**Usually a single person&lt;br /&gt;
&lt;br /&gt;
*Scribe:&lt;br /&gt;
**Responsible for documenting any business logic that evolves by way of discussions during the CRC modeling process.&lt;br /&gt;
**This documentation can be added to the requirements and business documents which can be used by design analysts at a later stage&lt;br /&gt;
**Usually are 1-2 people&lt;br /&gt;
&lt;br /&gt;
==Case study==&lt;br /&gt;
&lt;br /&gt;
To understand the working of CRC card modeling better, here is an example of an ATM system designed using CRC cards. Here, the software system under consideration has to control an automated teller machine. The ATM has a magnetic stripe reader for reading an ATM card, a customer console (keyboard and display) for interaction with the customer, a slot for depositing envelopes, a dispenser for cash (in multiples of $20), a printer for printing customer receipts, and a key-operated switch to allow an operator to start or stop the machine. Also, the ATM will communicate with the bank's computer over an appropriate communication link.&lt;br /&gt;
&lt;br /&gt;
To perform a transaction, a customer will be required to insert an ATM card and enter a personal identification number (PIN) - both of which will be sent to the bank for validation. The customer will then be able to perform one or more transactions. The card will be retained in the machine until the customer indicates that there are no further transactions, at which point it will be returned. For more on the case study.&lt;br /&gt;
&lt;br /&gt;
http://www.math-cs.gordon.edu/courses/cps211/ATMExample/CRCCards.html&lt;br /&gt;
&lt;br /&gt;
==Metrics for CRC Analysis==&lt;br /&gt;
&lt;br /&gt;
CRC analysis metrics can help evaluate the level of ease in designing and coding with CRC cards. These metrics also contribute to other project planning factors to give overall sense of project development.These metrics can be calculated easily and quickly without the need of special tools. Three metrics are broadly identified as: maximum depth of inheritance, the number of responsibilities assigned to each class and the number of collaborators for a class. With the example below an attempt has been made to explain these metrics.In the diagram, black line indicates inheritance while blue line indicates collaboration. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Class_hierarchy1.png|frame|center|CRC metrics example]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Maximum depth of inheritance===&lt;br /&gt;
&lt;br /&gt;
This metric gives an idea of the class hierarchy. It is the count of number of subclasses in the hierarchy.From the diagram,it can be seen that Part Time student is a subclass of Distance Education which in turn is a subclass of student.Thus,maximum depth of inheritance in this case is two with  reference to class Student. Each subclass shares the overall functions defined in class Student. For short hierarchies, this is a positive benefit of OO. If number of subclasses become too long, it becomes difficult to trace the flow of functions, resulting in overly complex systems. This makes testing, reviewing and reusing difficult.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Number of collaborators===&lt;br /&gt;
&lt;br /&gt;
This is the count of all the supporting classes to help a class.In the diagram,there are four collaborators for class Student:Teacher,Library,Computer Labs and Gymnasium.Confusion between collaborators and subclasses may result in creation many collaborators.This will affect the encapsulation of the design.Typical value for this metric is eight.If this value is large,design may be reviewed to see if inheritance is implemented correctly.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Number of responsibilities===&lt;br /&gt;
This is the count of clearly defined set of duties to each class.For example class Student may have functions like Attending  Lectures,&lt;br /&gt;
Maintaining a certain GPA,Taking the required courses. In this case number of responsibilities is three.Responsibilities should be distributed amongst classes to cover the whole system. This would avoid an imbalance in design. We need to refine the overly complex class into a series of simpler objects. This will make the system easier to understand, implement and reuse. For most commercial transaction oriented systems, values approximately between eight and eighteen are common.&lt;br /&gt;
&lt;br /&gt;
==Advantages==&lt;br /&gt;
* CRC cards create a first-cut analysis for complex systems, and let analysts and users examine the operation of discrete subsystems.&lt;br /&gt;
* CRC cards are invaluable input into more formal methods. Agile development methods often use CRC cards. They are popular as a front end to UML&lt;br /&gt;
* CRC cards are a great way to build teamwork and common understanding.&lt;br /&gt;
* Part of the CRC card attraction is their simplicity. Developers can use them with little formal training and just paper and pencil for tools&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Software for CRC card==&lt;br /&gt;
&lt;br /&gt;
It is difficult to maintain, change, share paper based cards for large projects. Software for CRC cards offer many advantages in such scenarios such as&lt;br /&gt;
&lt;br /&gt;
*Easy Revision: As CRC cards are part of development process, constant changes are made by developers to edit the information .Change to one card might require changes to other cards. It becomes difficult to handle such interdependent changes for various fields such as attribute, responsibility, collaboration on paper based system. Software will reflect one change to every corresponding reference in the design. This saves a lot of time and also avoids the manual errors that may be evident on paper based system.&lt;br /&gt;
&lt;br /&gt;
*Easy sharing: Paper based systems make sharing difficult by necessitating team members to be physically present at one location. Using software, team members can work from different locations.&lt;br /&gt;
&lt;br /&gt;
*Better representation: It is possible to group cards from different perspective such as hierarchy, attributes, parent. This helps better understanding and thinking. Some software also aid graphical display of data.&lt;br /&gt;
&lt;br /&gt;
*Inputs to methodologies: Software for CRC cards can provide the input files for UML class diagram generation software saving lot of time in the development cycle.&lt;br /&gt;
&lt;br /&gt;
*Making additions to existing code: Many projects   make addition to existing code or reuse already developed code in their project. Software can produce CRC cards with existing source code as an input. This would help the team to understand the code in efficient manner and less time.&lt;br /&gt;
&lt;br /&gt;
However,it comes with a cost.Based on required features and cost,team may select from various commercially available software products.Below are few links:&lt;br /&gt;
&lt;br /&gt;
*quickCRC:http://www.excelsoftware.com/&lt;br /&gt;
*CRC card support is part of Visual Paradigm for UML:  http://www.visual-paradigm.com/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==CRC cards Limitations and formal object modeling methodologies(UML)==&lt;br /&gt;
&lt;br /&gt;
CRC cards are used to form initial class definitions but alone are not sufficient to be directly coded into software for large systems.It is difficult to keep track of cards as the systems grows and work on subsystems simultaneously and independently.CRC cards lack the notational power to document all the components of a system and cannot provide implementation specifications such as transition states of objects during its life cycle,interface design,data structures,performance and resource utilization. To bridge this gap,more formal object modeling methodology such as UML is used.UML captures the bigger picture.It provides detailed mapping of use cases(operations),object state transitions,inter-process communication functionality,algorithm design.UML is very effective in incremental model of SDLC where  lot of details need to captured for precise addition.Information  about requirements is represented in detail and whole picture of the system and users is visible.CRC cards are used as effective inputs to UML.CRC card techniques such as brainstorming and role play help enhance functional understanding which helps in preparing better UML use cases.CRC cards given the content for  class diagrams,inheritance diagrams,class specifications and object specifications for UML.CRC cards can keep track of attributes that can aid listing them as a part of class specification in UML.Most CRC card software have the facility to export CRC analysis file that can be directly used as an input for UML.Following case study develops UML with the help of CRC cards:&lt;br /&gt;
&lt;br /&gt;
http://www.math.gordon.edu/courses/cs211/ATMExample/&lt;br /&gt;
&lt;br /&gt;
==Summary==&lt;br /&gt;
CRC cards are very useful to form the base of object oriented methodology.Techniques such as brain storming and role play enhance the understanding of requirements.CRC automation makes card handling and sharing  quick and efficient.For large projects more formal technology such as UML is required but CRC cards can provide a very good starting point.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Reference==&lt;br /&gt;
[1]Introduction to CRC Cards: http://www.softstar-inc.com/Download/Intro%20to%20CRC.pdf&lt;br /&gt;
&lt;br /&gt;
[2]Bjork,R.C, CRC cards for ATM, Object-Oriented Software Development.Retrieved September 6,2010,from Computer Science Department, Gordon College:: http://www.math-cs.gordon.edu/courses/cps211/ATMExample/CRCCards.html&lt;br /&gt;
&lt;br /&gt;
[3]Bjork,R.C, ATMExample, Object-Oriented Software Development.Retrieved September 5,2010,from Computer Science Department, Gordon College: http://www.math.gordon.edu/courses/cs211/ATMExample/&lt;br /&gt;
&lt;br /&gt;
[4]quickCRC:http://www.excelsoftware.com/&lt;br /&gt;
&lt;br /&gt;
[5]Visual Paradigm:  http://www.visual-paradigm.com/   &lt;br /&gt;
         &lt;br /&gt;
[6]Bellin, D and Simone, S.S ‘The CRC Card Book’, Addison Wesley, 1997&lt;/div&gt;</summary>
		<author><name>Bluehat</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=User:Bluehat&amp;diff=33823</id>
		<title>User:Bluehat</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=User:Bluehat&amp;diff=33823"/>
		<updated>2010-09-08T17:31:25Z</updated>

		<summary type="html">&lt;p&gt;Bluehat: /* Reference */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
The onset of the object oriented paradigm in the software industry brought about a big change in the basic approach to system design and the software development life cycle.The major task in the development of any application using the object oriented paradigm is to identify ‘classes’, and how these classes interact and collaborate with each other in the system scope. &lt;br /&gt;
&lt;br /&gt;
Whenever a system is designed with classes, each class has a specific role to play in the system.It has certain responsibilities and each class collaborates with other classes to provide the complete system functionality. In such a scenario, identifying classes becomes the key to a good system design.Although it seems to be a simple,intuitive process,identifying classes can be quite complex when it comes to large scale systems. &lt;br /&gt;
&lt;br /&gt;
One such technique for identification of classes that make up the system and its collaborations is the ‘CRC Card’ technique. The concept of CRC cards was first put forth by Kent Beck and Ward Cunningham and it became very popular as it is easy to use and it supports development of any kind of object oriented development regardless of its scale,the method used, the technology or the language used for development&lt;br /&gt;
&lt;br /&gt;
==Definition==&lt;br /&gt;
Class Responsibility Collaboration (CRC) cards is an object-oriented design method that uses ordinary 3x5 index cards card made for each class containing responsibilities (knowledge and services) and collaborators (interactions with other classes). The cards provide an informal, intuitive way for group members to work on object design together.&lt;br /&gt;
A typical CRC card layout is shown below.&lt;br /&gt;
[[Image:Crccard2.jpg|frame|center|CRC CARD Template]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example: Consider a Student class where a student can enroll for a seminar. In this case ‘Student’ will be one class and ‘Seminar’ can be another class that collaborates with the Student class.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:CrcStudent.jpg|frame|center|Student CRC Card ]]&lt;br /&gt;
&lt;br /&gt;
To know more about CRC cards please refer to http://www.hsanchez.net/repository/hsanchez-PLCRC-plop04.pdf&lt;br /&gt;
&lt;br /&gt;
==Principle and Process==&lt;br /&gt;
&lt;br /&gt;
===CRC Principle===&lt;br /&gt;
&lt;br /&gt;
A CRC model includes a collection of cards and each card is divided into three sections. &lt;br /&gt;
*Class Name: &lt;br /&gt;
**Appears on the top of the CRC card&lt;br /&gt;
**Class denotes a set of similar objects that are being modeled in the system&lt;br /&gt;
&lt;br /&gt;
*Responsibilities:&lt;br /&gt;
**Appears on the left hand side of the CRC card&lt;br /&gt;
**It is a list of the responsibilities of the class i.e. things a class can do with its knowledge&lt;br /&gt;
&lt;br /&gt;
*Collaborators:&lt;br /&gt;
**Appear on the right hand side of the CRC card&lt;br /&gt;
**They are other classes that the class works with to get information or perform a certain function&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===CRC Process===&lt;br /&gt;
&lt;br /&gt;
CRC modeling process includes the users, analysts and developers bringing together the entire development team to form a common understanding of an OO development project.For e.g consider a software application to implement a game of blackjack. To implement the CRC technique to design this software, following steps are taken:&lt;br /&gt;
&lt;br /&gt;
*Explanation of the CRC Technique&lt;br /&gt;
**The facilitator explains the purpose of the CRC modeling session&lt;br /&gt;
**It can include explanation of CRC Cards and creation of sample CRC Cards&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Brainstorming&lt;br /&gt;
**A brainstorming session at the very beginning brings in new ideas, new perspectives to the problem being solved.&lt;br /&gt;
**Every team member can contribute with innovative ideas&lt;br /&gt;
**A list of candidate classes can be drawn up from this activity&lt;br /&gt;
&lt;br /&gt;
For e.g considering the above example, we can identify candidate classes by listing down the nouns relating to the game of blackjack. Say, game, blackjack, dealer, players, card, deck, hand, bet, king, queen, jack, ace, suit, winner, game.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Selecting a scenario and Core classes&lt;br /&gt;
**The scenario chosen at the beginning of the session should be simple, clear and well documented&lt;br /&gt;
**Related scenarios should be identified and dealt with separately&lt;br /&gt;
**Identification of critical classes from the candidate class list is also very important&lt;br /&gt;
**This helps to eliminate irrelevant classes and review remaining classes&lt;br /&gt;
**This also helps clarify the system scope&lt;br /&gt;
&lt;br /&gt;
For e.g we can apply the elimination process to the candidate class list. We can eliminate blackjack as it is the name of the system. ‘House’ can be eliminated as it is another name for the dealer. Also, instead of making ace, king, queen and jack as separate classes, we can represent them as attributes of individual classes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Create initial CRC cards&lt;br /&gt;
From the information gathered in the step above, CRC cards are written&lt;br /&gt;
&lt;br /&gt;
[[Image:Deck1.jpg |frame|center|Deck CRC Card]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Dealer.jpg |frame|center|Dealer CRC Card]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Player.jpg |frame|center|Player CRC Card]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Creating a CRC Model&lt;br /&gt;
**After the CRC cards  are written, they are placed appropriately, with collaborating classes closer to each other.&lt;br /&gt;
**Accordingly, place each card in position till the entire picture of the system is finalized.&lt;br /&gt;
**This process may have to be done in several iterations to get a refined view of the system to be modeled.&lt;br /&gt;
&lt;br /&gt;
For more information on using CRC Cards please refer to http://alistair.cockburn.us/Using+CRC+cards&lt;br /&gt;
&lt;br /&gt;
==CRC Team==&lt;br /&gt;
&lt;br /&gt;
*Domain Experts:&lt;br /&gt;
**Core team that writes the cards&lt;br /&gt;
**Have good business domain knowledge for which the system is being designed&lt;br /&gt;
**Usually are 3-5 people&lt;br /&gt;
&lt;br /&gt;
*Object Oriented Design Analyst:&lt;br /&gt;
**Analysts and developers those are familiar with object oriented design methodologies&lt;br /&gt;
**Usually are 1-2 people&lt;br /&gt;
&lt;br /&gt;
*Facilitator:&lt;br /&gt;
**Most important member who conducts the CRC modeling session&lt;br /&gt;
**Acts as an intermediary when there is difference of opinion regarding class responsibilities and paths of collaboration&lt;br /&gt;
**Usually a single person&lt;br /&gt;
&lt;br /&gt;
*Scribe:&lt;br /&gt;
**Responsible for documenting any business logic that evolves by way of discussions during the CRC modeling process.&lt;br /&gt;
**This documentation can be added to the requirements and business documents which can be used by design analysts at a later stage&lt;br /&gt;
**Usually are 1-2 people&lt;br /&gt;
&lt;br /&gt;
==Case study==&lt;br /&gt;
&lt;br /&gt;
To understand the working of CRC card modeling better, here is an example of an ATM system designed using CRC cards. Here, the software system under consideration has to control an automated teller machine. The ATM has a magnetic stripe reader for reading an ATM card, a customer console (keyboard and display) for interaction with the customer, a slot for depositing envelopes, a dispenser for cash (in multiples of $20), a printer for printing customer receipts, and a key-operated switch to allow an operator to start or stop the machine. Also, the ATM will communicate with the bank's computer over an appropriate communication link.&lt;br /&gt;
&lt;br /&gt;
To perform a transaction, a customer will be required to insert an ATM card and enter a personal identification number (PIN) - both of which will be sent to the bank for validation. The customer will then be able to perform one or more transactions. The card will be retained in the machine until the customer indicates that there are no further transactions, at which point it will be returned. For more on the case study.&lt;br /&gt;
&lt;br /&gt;
http://www.math-cs.gordon.edu/courses/cps211/ATMExample/CRCCards.html&lt;br /&gt;
&lt;br /&gt;
==Metrics for CRC Analysis==&lt;br /&gt;
&lt;br /&gt;
CRC analysis metrics can help evaluate the level of ease in designing and coding with CRC cards. These metrics also contribute to other project planning factors to give overall sense of project development.These metrics can be calculated easily and quickly without the need of special tools. Three metrics are broadly identified as: maximum depth of inheritance, the number of responsibilities assigned to each class and the number of collaborators for a class. With the example below an attempt has been made to explain these metrics.In the diagram, black line indicates inheritance while blue line indicates collaboration. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Class_hierarchy1.png|frame|center|CRC metrics example]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Maximum depth of inheritance===&lt;br /&gt;
&lt;br /&gt;
This metric gives an idea of the class hierarchy. It is the count of number of subclasses in the hierarchy.From the diagram,it can be seen that Part Time student is a subclass of Distance Education which in turn is a subclass of student.Thus,maximum depth of inheritance in this case is two with  reference to class Student. Each subclass shares the overall functions defined in class Student. For short hierarchies, this is a positive benefit of OO. If number of subclasses become too long, it becomes difficult to trace the flow of functions, resulting in overly complex systems. This makes testing, reviewing and reusing difficult.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Number of collaborators===&lt;br /&gt;
&lt;br /&gt;
This is the count of all the supporting classes to help a class.In the diagram,there are four collaborators for class Student:Teacher,Library,Computer Labs and Gymnasium.Confusion between collaborators and subclasses may result in creation many collaborators.This will affect the encapsulation of the design.Typical value for this metric is eight.If this value is large,design may be reviewed to see if inheritance is implemented correctly.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Number of responsibilities===&lt;br /&gt;
This is the count of clearly defined set of duties to each class.For example class Student may have functions like Attending  Lectures,&lt;br /&gt;
Maintaining a certain GPA,Taking the required courses. In this case number of responsibilities is three.Responsibilities should be distributed amongst classes to cover the whole system. This would avoid an imbalance in design. We need to refine the overly complex class into a series of simpler objects. This will make the system easier to understand, implement and reuse. For most commercial transaction oriented systems, values approximately between eight and eighteen are common.&lt;br /&gt;
&lt;br /&gt;
==Advantages==&lt;br /&gt;
* CRC cards create a first-cut analysis for complex systems, and let analysts and users examine the operation of discrete subsystems.&lt;br /&gt;
* CRC cards are invaluable input into more formal methods. Agile development methods often use CRC cards. They are popular as a front end to UML&lt;br /&gt;
* CRC cards are a great way to build teamwork and common understanding.&lt;br /&gt;
* Part of the CRC card attraction is their simplicity. Developers can use them with little formal training and just paper and pencil for tools&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Software for CRC card==&lt;br /&gt;
&lt;br /&gt;
It is difficult to maintain, change, share paper based cards for large projects. Software for CRC cards offer many advantages in such scenarios such as&lt;br /&gt;
&lt;br /&gt;
*Easy Revision: As CRC cards are part of development process, constant changes are made by developers to edit the information .Change to one card might require changes to other cards. It becomes difficult to handle such interdependent changes for various fields such as attribute, responsibility, collaboration on paper based system. Software will reflect one change to every corresponding reference in the design. This saves a lot of time and also avoids the manual errors that may be evident on paper based system.&lt;br /&gt;
&lt;br /&gt;
*Easy sharing: Paper based systems make sharing difficult by necessitating team members to be physically present at one location. Using software, team members can work from different locations.&lt;br /&gt;
&lt;br /&gt;
*Better representation: It is possible to group cards from different perspective such as hierarchy, attributes, parent. This helps better understanding and thinking. Some software also aid graphical display of data.&lt;br /&gt;
&lt;br /&gt;
*Inputs to methodologies: Software for CRC cards can provide the input files for UML class diagram generation software saving lot of time in the development cycle.&lt;br /&gt;
&lt;br /&gt;
*Making additions to existing code: Many projects   make addition to existing code or reuse already developed code in their project. Software can produce CRC cards with existing source code as an input. This would help the team to understand the code in efficient manner and less time.&lt;br /&gt;
&lt;br /&gt;
However,it comes with a cost.Based on required features and cost,team may select from various commercially available software products.Below are few links:&lt;br /&gt;
&lt;br /&gt;
*quickCRC:http://www.excelsoftware.com/&lt;br /&gt;
*CRC card support is part of Visual Paradigm for UML:  http://www.visual-paradigm.com/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==CRC cards Limitations and formal object modeling methodologies(UML)==&lt;br /&gt;
&lt;br /&gt;
CRC cards are used to form initial class definitions but alone are not sufficient to be directly coded into software for large systems.It is difficult to keep track of cards as the systems grows and work on subsystems simultaneously and independently.CRC cards lack the notational power to document all the components of a system and cannot provide implementation specifications such as transition states of objects during its life cycle,interface design,data structures,performance and resource utilization. To bridge this gap,more formal object modeling methodology such as UML is used.UML captures the bigger picture.It provides detailed mapping of use cases(operations),object state transitions,inter-process communication functionality,algorithm design.UML is very effective in incremental model of SDLC where  lot of details need to captured for precise addition.Information  about requirements is represented in detail and whole picture of the system and users is visible.CRC cards are used as effective inputs to UML.CRC card techniques such as brainstorming and role play help enhance functional understanding which helps in preparing better UML use cases.CRC cards given the content for  class diagrams,inheritance diagrams,class specifications and object specifications for UML.CRC cards can keep track of attributes that can aid listing them as a part of class specification in UML.Most CRC card software have the facility to export CRC analysis file that can be directly used as an input for UML.Following case study develops UML with the help of CRC cards:&lt;br /&gt;
&lt;br /&gt;
http://www.math.gordon.edu/courses/cs211/ATMExample/&lt;br /&gt;
&lt;br /&gt;
==Summary==&lt;br /&gt;
CRC cards are very useful to form the base of object oriented methodology.Techniques such as brain storming and role play enhance the understanding of requirements.CRC automation makes card handling and sharing  quick and efficient.For large projects more formal technology such as UML is required but CRC cards can provide a very good starting point.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Reference==&lt;br /&gt;
[1]Introduction to CRC Cards: http://www.softstar-inc.com/Download/Intro%20to%20CRC.pdf&lt;br /&gt;
&lt;br /&gt;
[2]CRC Cards for ATM : http://www.math-cs.gordon.edu/courses/cps211/ATMExample/CRCCards.html&lt;br /&gt;
&lt;br /&gt;
[3]Bjork,R.C, ATMExample, Object-Oriented Software Development.Retrieved September 5,2010,from Computer Science Department, Gordon College: http://www.math.gordon.edu/courses/cs211/ATMExample/&lt;br /&gt;
&lt;br /&gt;
[4]quickCRC:http://www.excelsoftware.com/&lt;br /&gt;
&lt;br /&gt;
[5]Visual Paradigm:  http://www.visual-paradigm.com/   &lt;br /&gt;
         &lt;br /&gt;
[6]Bellin, D and Simone, S.S ‘The CRC Card Book’, Addison Wesley, 1997&lt;/div&gt;</summary>
		<author><name>Bluehat</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=User:Bluehat&amp;diff=33822</id>
		<title>User:Bluehat</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=User:Bluehat&amp;diff=33822"/>
		<updated>2010-09-08T17:17:09Z</updated>

		<summary type="html">&lt;p&gt;Bluehat: /* Reference */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
The onset of the object oriented paradigm in the software industry brought about a big change in the basic approach to system design and the software development life cycle.The major task in the development of any application using the object oriented paradigm is to identify ‘classes’, and how these classes interact and collaborate with each other in the system scope. &lt;br /&gt;
&lt;br /&gt;
Whenever a system is designed with classes, each class has a specific role to play in the system.It has certain responsibilities and each class collaborates with other classes to provide the complete system functionality. In such a scenario, identifying classes becomes the key to a good system design.Although it seems to be a simple,intuitive process,identifying classes can be quite complex when it comes to large scale systems. &lt;br /&gt;
&lt;br /&gt;
One such technique for identification of classes that make up the system and its collaborations is the ‘CRC Card’ technique. The concept of CRC cards was first put forth by Kent Beck and Ward Cunningham and it became very popular as it is easy to use and it supports development of any kind of object oriented development regardless of its scale,the method used, the technology or the language used for development&lt;br /&gt;
&lt;br /&gt;
==Definition==&lt;br /&gt;
Class Responsibility Collaboration (CRC) cards is an object-oriented design method that uses ordinary 3x5 index cards card made for each class containing responsibilities (knowledge and services) and collaborators (interactions with other classes). The cards provide an informal, intuitive way for group members to work on object design together.&lt;br /&gt;
A typical CRC card layout is shown below.&lt;br /&gt;
[[Image:Crccard2.jpg|frame|center|CRC CARD Template]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example: Consider a Student class where a student can enroll for a seminar. In this case ‘Student’ will be one class and ‘Seminar’ can be another class that collaborates with the Student class.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:CrcStudent.jpg|frame|center|Student CRC Card ]]&lt;br /&gt;
&lt;br /&gt;
To know more about CRC cards please refer to http://www.hsanchez.net/repository/hsanchez-PLCRC-plop04.pdf&lt;br /&gt;
&lt;br /&gt;
==Principle and Process==&lt;br /&gt;
&lt;br /&gt;
===CRC Principle===&lt;br /&gt;
&lt;br /&gt;
A CRC model includes a collection of cards and each card is divided into three sections. &lt;br /&gt;
*Class Name: &lt;br /&gt;
**Appears on the top of the CRC card&lt;br /&gt;
**Class denotes a set of similar objects that are being modeled in the system&lt;br /&gt;
&lt;br /&gt;
*Responsibilities:&lt;br /&gt;
**Appears on the left hand side of the CRC card&lt;br /&gt;
**It is a list of the responsibilities of the class i.e. things a class can do with its knowledge&lt;br /&gt;
&lt;br /&gt;
*Collaborators:&lt;br /&gt;
**Appear on the right hand side of the CRC card&lt;br /&gt;
**They are other classes that the class works with to get information or perform a certain function&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===CRC Process===&lt;br /&gt;
&lt;br /&gt;
CRC modeling process includes the users, analysts and developers bringing together the entire development team to form a common understanding of an OO development project.For e.g consider a software application to implement a game of blackjack. To implement the CRC technique to design this software, following steps are taken:&lt;br /&gt;
&lt;br /&gt;
*Explanation of the CRC Technique&lt;br /&gt;
**The facilitator explains the purpose of the CRC modeling session&lt;br /&gt;
**It can include explanation of CRC Cards and creation of sample CRC Cards&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Brainstorming&lt;br /&gt;
**A brainstorming session at the very beginning brings in new ideas, new perspectives to the problem being solved.&lt;br /&gt;
**Every team member can contribute with innovative ideas&lt;br /&gt;
**A list of candidate classes can be drawn up from this activity&lt;br /&gt;
&lt;br /&gt;
For e.g considering the above example, we can identify candidate classes by listing down the nouns relating to the game of blackjack. Say, game, blackjack, dealer, players, card, deck, hand, bet, king, queen, jack, ace, suit, winner, game.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Selecting a scenario and Core classes&lt;br /&gt;
**The scenario chosen at the beginning of the session should be simple, clear and well documented&lt;br /&gt;
**Related scenarios should be identified and dealt with separately&lt;br /&gt;
**Identification of critical classes from the candidate class list is also very important&lt;br /&gt;
**This helps to eliminate irrelevant classes and review remaining classes&lt;br /&gt;
**This also helps clarify the system scope&lt;br /&gt;
&lt;br /&gt;
For e.g we can apply the elimination process to the candidate class list. We can eliminate blackjack as it is the name of the system. ‘House’ can be eliminated as it is another name for the dealer. Also, instead of making ace, king, queen and jack as separate classes, we can represent them as attributes of individual classes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Create initial CRC cards&lt;br /&gt;
From the information gathered in the step above, CRC cards are written&lt;br /&gt;
&lt;br /&gt;
[[Image:Deck1.jpg |frame|center|Deck CRC Card]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Dealer.jpg |frame|center|Dealer CRC Card]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Player.jpg |frame|center|Player CRC Card]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Creating a CRC Model&lt;br /&gt;
**After the CRC cards  are written, they are placed appropriately, with collaborating classes closer to each other.&lt;br /&gt;
**Accordingly, place each card in position till the entire picture of the system is finalized.&lt;br /&gt;
**This process may have to be done in several iterations to get a refined view of the system to be modeled.&lt;br /&gt;
&lt;br /&gt;
For more information on using CRC Cards please refer to http://alistair.cockburn.us/Using+CRC+cards&lt;br /&gt;
&lt;br /&gt;
==CRC Team==&lt;br /&gt;
&lt;br /&gt;
*Domain Experts:&lt;br /&gt;
**Core team that writes the cards&lt;br /&gt;
**Have good business domain knowledge for which the system is being designed&lt;br /&gt;
**Usually are 3-5 people&lt;br /&gt;
&lt;br /&gt;
*Object Oriented Design Analyst:&lt;br /&gt;
**Analysts and developers those are familiar with object oriented design methodologies&lt;br /&gt;
**Usually are 1-2 people&lt;br /&gt;
&lt;br /&gt;
*Facilitator:&lt;br /&gt;
**Most important member who conducts the CRC modeling session&lt;br /&gt;
**Acts as an intermediary when there is difference of opinion regarding class responsibilities and paths of collaboration&lt;br /&gt;
**Usually a single person&lt;br /&gt;
&lt;br /&gt;
*Scribe:&lt;br /&gt;
**Responsible for documenting any business logic that evolves by way of discussions during the CRC modeling process.&lt;br /&gt;
**This documentation can be added to the requirements and business documents which can be used by design analysts at a later stage&lt;br /&gt;
**Usually are 1-2 people&lt;br /&gt;
&lt;br /&gt;
==Case study==&lt;br /&gt;
&lt;br /&gt;
To understand the working of CRC card modeling better, here is an example of an ATM system designed using CRC cards. Here, the software system under consideration has to control an automated teller machine. The ATM has a magnetic stripe reader for reading an ATM card, a customer console (keyboard and display) for interaction with the customer, a slot for depositing envelopes, a dispenser for cash (in multiples of $20), a printer for printing customer receipts, and a key-operated switch to allow an operator to start or stop the machine. Also, the ATM will communicate with the bank's computer over an appropriate communication link.&lt;br /&gt;
&lt;br /&gt;
To perform a transaction, a customer will be required to insert an ATM card and enter a personal identification number (PIN) - both of which will be sent to the bank for validation. The customer will then be able to perform one or more transactions. The card will be retained in the machine until the customer indicates that there are no further transactions, at which point it will be returned. For more on the case study.&lt;br /&gt;
&lt;br /&gt;
http://www.math-cs.gordon.edu/courses/cps211/ATMExample/CRCCards.html&lt;br /&gt;
&lt;br /&gt;
==Metrics for CRC Analysis==&lt;br /&gt;
&lt;br /&gt;
CRC analysis metrics can help evaluate the level of ease in designing and coding with CRC cards. These metrics also contribute to other project planning factors to give overall sense of project development.These metrics can be calculated easily and quickly without the need of special tools. Three metrics are broadly identified as: maximum depth of inheritance, the number of responsibilities assigned to each class and the number of collaborators for a class. With the example below an attempt has been made to explain these metrics.In the diagram, black line indicates inheritance while blue line indicates collaboration. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Class_hierarchy1.png|frame|center|CRC metrics example]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Maximum depth of inheritance===&lt;br /&gt;
&lt;br /&gt;
This metric gives an idea of the class hierarchy. It is the count of number of subclasses in the hierarchy.From the diagram,it can be seen that Part Time student is a subclass of Distance Education which in turn is a subclass of student.Thus,maximum depth of inheritance in this case is two with  reference to class Student. Each subclass shares the overall functions defined in class Student. For short hierarchies, this is a positive benefit of OO. If number of subclasses become too long, it becomes difficult to trace the flow of functions, resulting in overly complex systems. This makes testing, reviewing and reusing difficult.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Number of collaborators===&lt;br /&gt;
&lt;br /&gt;
This is the count of all the supporting classes to help a class.In the diagram,there are four collaborators for class Student:Teacher,Library,Computer Labs and Gymnasium.Confusion between collaborators and subclasses may result in creation many collaborators.This will affect the encapsulation of the design.Typical value for this metric is eight.If this value is large,design may be reviewed to see if inheritance is implemented correctly.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Number of responsibilities===&lt;br /&gt;
This is the count of clearly defined set of duties to each class.For example class Student may have functions like Attending  Lectures,&lt;br /&gt;
Maintaining a certain GPA,Taking the required courses. In this case number of responsibilities is three.Responsibilities should be distributed amongst classes to cover the whole system. This would avoid an imbalance in design. We need to refine the overly complex class into a series of simpler objects. This will make the system easier to understand, implement and reuse. For most commercial transaction oriented systems, values approximately between eight and eighteen are common.&lt;br /&gt;
&lt;br /&gt;
==Advantages==&lt;br /&gt;
* CRC cards create a first-cut analysis for complex systems, and let analysts and users examine the operation of discrete subsystems.&lt;br /&gt;
* CRC cards are invaluable input into more formal methods. Agile development methods often use CRC cards. They are popular as a front end to UML&lt;br /&gt;
* CRC cards are a great way to build teamwork and common understanding.&lt;br /&gt;
* Part of the CRC card attraction is their simplicity. Developers can use them with little formal training and just paper and pencil for tools&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Software for CRC card==&lt;br /&gt;
&lt;br /&gt;
It is difficult to maintain, change, share paper based cards for large projects. Software for CRC cards offer many advantages in such scenarios such as&lt;br /&gt;
&lt;br /&gt;
*Easy Revision: As CRC cards are part of development process, constant changes are made by developers to edit the information .Change to one card might require changes to other cards. It becomes difficult to handle such interdependent changes for various fields such as attribute, responsibility, collaboration on paper based system. Software will reflect one change to every corresponding reference in the design. This saves a lot of time and also avoids the manual errors that may be evident on paper based system.&lt;br /&gt;
&lt;br /&gt;
*Easy sharing: Paper based systems make sharing difficult by necessitating team members to be physically present at one location. Using software, team members can work from different locations.&lt;br /&gt;
&lt;br /&gt;
*Better representation: It is possible to group cards from different perspective such as hierarchy, attributes, parent. This helps better understanding and thinking. Some software also aid graphical display of data.&lt;br /&gt;
&lt;br /&gt;
*Inputs to methodologies: Software for CRC cards can provide the input files for UML class diagram generation software saving lot of time in the development cycle.&lt;br /&gt;
&lt;br /&gt;
*Making additions to existing code: Many projects   make addition to existing code or reuse already developed code in their project. Software can produce CRC cards with existing source code as an input. This would help the team to understand the code in efficient manner and less time.&lt;br /&gt;
&lt;br /&gt;
However,it comes with a cost.Based on required features and cost,team may select from various commercially available software products.Below are few links:&lt;br /&gt;
&lt;br /&gt;
*quickCRC:http://www.excelsoftware.com/&lt;br /&gt;
*CRC card support is part of Visual Paradigm for UML:  http://www.visual-paradigm.com/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==CRC cards Limitations and formal object modeling methodologies(UML)==&lt;br /&gt;
&lt;br /&gt;
CRC cards are used to form initial class definitions but alone are not sufficient to be directly coded into software for large systems.It is difficult to keep track of cards as the systems grows and work on subsystems simultaneously and independently.CRC cards lack the notational power to document all the components of a system and cannot provide implementation specifications such as transition states of objects during its life cycle,interface design,data structures,performance and resource utilization. To bridge this gap,more formal object modeling methodology such as UML is used.UML captures the bigger picture.It provides detailed mapping of use cases(operations),object state transitions,inter-process communication functionality,algorithm design.UML is very effective in incremental model of SDLC where  lot of details need to captured for precise addition.Information  about requirements is represented in detail and whole picture of the system and users is visible.CRC cards are used as effective inputs to UML.CRC card techniques such as brainstorming and role play help enhance functional understanding which helps in preparing better UML use cases.CRC cards given the content for  class diagrams,inheritance diagrams,class specifications and object specifications for UML.CRC cards can keep track of attributes that can aid listing them as a part of class specification in UML.Most CRC card software have the facility to export CRC analysis file that can be directly used as an input for UML.Following case study develops UML with the help of CRC cards:&lt;br /&gt;
&lt;br /&gt;
http://www.math.gordon.edu/courses/cs211/ATMExample/&lt;br /&gt;
&lt;br /&gt;
==Summary==&lt;br /&gt;
CRC cards are very useful to form the base of object oriented methodology.Techniques such as brain storming and role play enhance the understanding of requirements.CRC automation makes card handling and sharing  quick and efficient.For large projects more formal technology such as UML is required but CRC cards can provide a very good starting point.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Reference==&lt;br /&gt;
[1]Introduction to CRC Cards: http://www.softstar-inc.com/Download/Intro%20to%20CRC.pdf&lt;br /&gt;
&lt;br /&gt;
[2]CRC Cards for ATM : http://www.math-cs.gordon.edu/courses/cps211/ATMExample/CRCCards.html&lt;br /&gt;
&lt;br /&gt;
[3]UML methodology for ATM :http://www.math.gordon.edu/courses/cs211/ATMExample/&lt;br /&gt;
&lt;br /&gt;
[4]quickCRC:http://www.excelsoftware.com/&lt;br /&gt;
&lt;br /&gt;
[5]Visual Paradigm:  http://www.visual-paradigm.com/   &lt;br /&gt;
         &lt;br /&gt;
[6]Bellin, D and Simone, S.S ‘The CRC Card Book’, Addison Wesley, 1997&lt;/div&gt;</summary>
		<author><name>Bluehat</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=User:Bluehat&amp;diff=33821</id>
		<title>User:Bluehat</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=User:Bluehat&amp;diff=33821"/>
		<updated>2010-09-08T17:16:15Z</updated>

		<summary type="html">&lt;p&gt;Bluehat: /* Reference */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
The onset of the object oriented paradigm in the software industry brought about a big change in the basic approach to system design and the software development life cycle.The major task in the development of any application using the object oriented paradigm is to identify ‘classes’, and how these classes interact and collaborate with each other in the system scope. &lt;br /&gt;
&lt;br /&gt;
Whenever a system is designed with classes, each class has a specific role to play in the system.It has certain responsibilities and each class collaborates with other classes to provide the complete system functionality. In such a scenario, identifying classes becomes the key to a good system design.Although it seems to be a simple,intuitive process,identifying classes can be quite complex when it comes to large scale systems. &lt;br /&gt;
&lt;br /&gt;
One such technique for identification of classes that make up the system and its collaborations is the ‘CRC Card’ technique. The concept of CRC cards was first put forth by Kent Beck and Ward Cunningham and it became very popular as it is easy to use and it supports development of any kind of object oriented development regardless of its scale,the method used, the technology or the language used for development&lt;br /&gt;
&lt;br /&gt;
==Definition==&lt;br /&gt;
Class Responsibility Collaboration (CRC) cards is an object-oriented design method that uses ordinary 3x5 index cards card made for each class containing responsibilities (knowledge and services) and collaborators (interactions with other classes). The cards provide an informal, intuitive way for group members to work on object design together.&lt;br /&gt;
A typical CRC card layout is shown below.&lt;br /&gt;
[[Image:Crccard2.jpg|frame|center|CRC CARD Template]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example: Consider a Student class where a student can enroll for a seminar. In this case ‘Student’ will be one class and ‘Seminar’ can be another class that collaborates with the Student class.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:CrcStudent.jpg|frame|center|Student CRC Card ]]&lt;br /&gt;
&lt;br /&gt;
To know more about CRC cards please refer to http://www.hsanchez.net/repository/hsanchez-PLCRC-plop04.pdf&lt;br /&gt;
&lt;br /&gt;
==Principle and Process==&lt;br /&gt;
&lt;br /&gt;
===CRC Principle===&lt;br /&gt;
&lt;br /&gt;
A CRC model includes a collection of cards and each card is divided into three sections. &lt;br /&gt;
*Class Name: &lt;br /&gt;
**Appears on the top of the CRC card&lt;br /&gt;
**Class denotes a set of similar objects that are being modeled in the system&lt;br /&gt;
&lt;br /&gt;
*Responsibilities:&lt;br /&gt;
**Appears on the left hand side of the CRC card&lt;br /&gt;
**It is a list of the responsibilities of the class i.e. things a class can do with its knowledge&lt;br /&gt;
&lt;br /&gt;
*Collaborators:&lt;br /&gt;
**Appear on the right hand side of the CRC card&lt;br /&gt;
**They are other classes that the class works with to get information or perform a certain function&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===CRC Process===&lt;br /&gt;
&lt;br /&gt;
CRC modeling process includes the users, analysts and developers bringing together the entire development team to form a common understanding of an OO development project.For e.g consider a software application to implement a game of blackjack. To implement the CRC technique to design this software, following steps are taken:&lt;br /&gt;
&lt;br /&gt;
*Explanation of the CRC Technique&lt;br /&gt;
**The facilitator explains the purpose of the CRC modeling session&lt;br /&gt;
**It can include explanation of CRC Cards and creation of sample CRC Cards&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Brainstorming&lt;br /&gt;
**A brainstorming session at the very beginning brings in new ideas, new perspectives to the problem being solved.&lt;br /&gt;
**Every team member can contribute with innovative ideas&lt;br /&gt;
**A list of candidate classes can be drawn up from this activity&lt;br /&gt;
&lt;br /&gt;
For e.g considering the above example, we can identify candidate classes by listing down the nouns relating to the game of blackjack. Say, game, blackjack, dealer, players, card, deck, hand, bet, king, queen, jack, ace, suit, winner, game.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Selecting a scenario and Core classes&lt;br /&gt;
**The scenario chosen at the beginning of the session should be simple, clear and well documented&lt;br /&gt;
**Related scenarios should be identified and dealt with separately&lt;br /&gt;
**Identification of critical classes from the candidate class list is also very important&lt;br /&gt;
**This helps to eliminate irrelevant classes and review remaining classes&lt;br /&gt;
**This also helps clarify the system scope&lt;br /&gt;
&lt;br /&gt;
For e.g we can apply the elimination process to the candidate class list. We can eliminate blackjack as it is the name of the system. ‘House’ can be eliminated as it is another name for the dealer. Also, instead of making ace, king, queen and jack as separate classes, we can represent them as attributes of individual classes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Create initial CRC cards&lt;br /&gt;
From the information gathered in the step above, CRC cards are written&lt;br /&gt;
&lt;br /&gt;
[[Image:Deck1.jpg |frame|center|Deck CRC Card]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Dealer.jpg |frame|center|Dealer CRC Card]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Player.jpg |frame|center|Player CRC Card]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Creating a CRC Model&lt;br /&gt;
**After the CRC cards  are written, they are placed appropriately, with collaborating classes closer to each other.&lt;br /&gt;
**Accordingly, place each card in position till the entire picture of the system is finalized.&lt;br /&gt;
**This process may have to be done in several iterations to get a refined view of the system to be modeled.&lt;br /&gt;
&lt;br /&gt;
For more information on using CRC Cards please refer to http://alistair.cockburn.us/Using+CRC+cards&lt;br /&gt;
&lt;br /&gt;
==CRC Team==&lt;br /&gt;
&lt;br /&gt;
*Domain Experts:&lt;br /&gt;
**Core team that writes the cards&lt;br /&gt;
**Have good business domain knowledge for which the system is being designed&lt;br /&gt;
**Usually are 3-5 people&lt;br /&gt;
&lt;br /&gt;
*Object Oriented Design Analyst:&lt;br /&gt;
**Analysts and developers those are familiar with object oriented design methodologies&lt;br /&gt;
**Usually are 1-2 people&lt;br /&gt;
&lt;br /&gt;
*Facilitator:&lt;br /&gt;
**Most important member who conducts the CRC modeling session&lt;br /&gt;
**Acts as an intermediary when there is difference of opinion regarding class responsibilities and paths of collaboration&lt;br /&gt;
**Usually a single person&lt;br /&gt;
&lt;br /&gt;
*Scribe:&lt;br /&gt;
**Responsible for documenting any business logic that evolves by way of discussions during the CRC modeling process.&lt;br /&gt;
**This documentation can be added to the requirements and business documents which can be used by design analysts at a later stage&lt;br /&gt;
**Usually are 1-2 people&lt;br /&gt;
&lt;br /&gt;
==Case study==&lt;br /&gt;
&lt;br /&gt;
To understand the working of CRC card modeling better, here is an example of an ATM system designed using CRC cards. Here, the software system under consideration has to control an automated teller machine. The ATM has a magnetic stripe reader for reading an ATM card, a customer console (keyboard and display) for interaction with the customer, a slot for depositing envelopes, a dispenser for cash (in multiples of $20), a printer for printing customer receipts, and a key-operated switch to allow an operator to start or stop the machine. Also, the ATM will communicate with the bank's computer over an appropriate communication link.&lt;br /&gt;
&lt;br /&gt;
To perform a transaction, a customer will be required to insert an ATM card and enter a personal identification number (PIN) - both of which will be sent to the bank for validation. The customer will then be able to perform one or more transactions. The card will be retained in the machine until the customer indicates that there are no further transactions, at which point it will be returned. For more on the case study.&lt;br /&gt;
&lt;br /&gt;
http://www.math-cs.gordon.edu/courses/cps211/ATMExample/CRCCards.html&lt;br /&gt;
&lt;br /&gt;
==Metrics for CRC Analysis==&lt;br /&gt;
&lt;br /&gt;
CRC analysis metrics can help evaluate the level of ease in designing and coding with CRC cards. These metrics also contribute to other project planning factors to give overall sense of project development.These metrics can be calculated easily and quickly without the need of special tools. Three metrics are broadly identified as: maximum depth of inheritance, the number of responsibilities assigned to each class and the number of collaborators for a class. With the example below an attempt has been made to explain these metrics.In the diagram, black line indicates inheritance while blue line indicates collaboration. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Class_hierarchy1.png|frame|center|CRC metrics example]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Maximum depth of inheritance===&lt;br /&gt;
&lt;br /&gt;
This metric gives an idea of the class hierarchy. It is the count of number of subclasses in the hierarchy.From the diagram,it can be seen that Part Time student is a subclass of Distance Education which in turn is a subclass of student.Thus,maximum depth of inheritance in this case is two with  reference to class Student. Each subclass shares the overall functions defined in class Student. For short hierarchies, this is a positive benefit of OO. If number of subclasses become too long, it becomes difficult to trace the flow of functions, resulting in overly complex systems. This makes testing, reviewing and reusing difficult.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Number of collaborators===&lt;br /&gt;
&lt;br /&gt;
This is the count of all the supporting classes to help a class.In the diagram,there are four collaborators for class Student:Teacher,Library,Computer Labs and Gymnasium.Confusion between collaborators and subclasses may result in creation many collaborators.This will affect the encapsulation of the design.Typical value for this metric is eight.If this value is large,design may be reviewed to see if inheritance is implemented correctly.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Number of responsibilities===&lt;br /&gt;
This is the count of clearly defined set of duties to each class.For example class Student may have functions like Attending  Lectures,&lt;br /&gt;
Maintaining a certain GPA,Taking the required courses. In this case number of responsibilities is three.Responsibilities should be distributed amongst classes to cover the whole system. This would avoid an imbalance in design. We need to refine the overly complex class into a series of simpler objects. This will make the system easier to understand, implement and reuse. For most commercial transaction oriented systems, values approximately between eight and eighteen are common.&lt;br /&gt;
&lt;br /&gt;
==Advantages==&lt;br /&gt;
* CRC cards create a first-cut analysis for complex systems, and let analysts and users examine the operation of discrete subsystems.&lt;br /&gt;
* CRC cards are invaluable input into more formal methods. Agile development methods often use CRC cards. They are popular as a front end to UML&lt;br /&gt;
* CRC cards are a great way to build teamwork and common understanding.&lt;br /&gt;
* Part of the CRC card attraction is their simplicity. Developers can use them with little formal training and just paper and pencil for tools&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Software for CRC card==&lt;br /&gt;
&lt;br /&gt;
It is difficult to maintain, change, share paper based cards for large projects. Software for CRC cards offer many advantages in such scenarios such as&lt;br /&gt;
&lt;br /&gt;
*Easy Revision: As CRC cards are part of development process, constant changes are made by developers to edit the information .Change to one card might require changes to other cards. It becomes difficult to handle such interdependent changes for various fields such as attribute, responsibility, collaboration on paper based system. Software will reflect one change to every corresponding reference in the design. This saves a lot of time and also avoids the manual errors that may be evident on paper based system.&lt;br /&gt;
&lt;br /&gt;
*Easy sharing: Paper based systems make sharing difficult by necessitating team members to be physically present at one location. Using software, team members can work from different locations.&lt;br /&gt;
&lt;br /&gt;
*Better representation: It is possible to group cards from different perspective such as hierarchy, attributes, parent. This helps better understanding and thinking. Some software also aid graphical display of data.&lt;br /&gt;
&lt;br /&gt;
*Inputs to methodologies: Software for CRC cards can provide the input files for UML class diagram generation software saving lot of time in the development cycle.&lt;br /&gt;
&lt;br /&gt;
*Making additions to existing code: Many projects   make addition to existing code or reuse already developed code in their project. Software can produce CRC cards with existing source code as an input. This would help the team to understand the code in efficient manner and less time.&lt;br /&gt;
&lt;br /&gt;
However,it comes with a cost.Based on required features and cost,team may select from various commercially available software products.Below are few links:&lt;br /&gt;
&lt;br /&gt;
*quickCRC:http://www.excelsoftware.com/&lt;br /&gt;
*CRC card support is part of Visual Paradigm for UML:  http://www.visual-paradigm.com/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==CRC cards Limitations and formal object modeling methodologies(UML)==&lt;br /&gt;
&lt;br /&gt;
CRC cards are used to form initial class definitions but alone are not sufficient to be directly coded into software for large systems.It is difficult to keep track of cards as the systems grows and work on subsystems simultaneously and independently.CRC cards lack the notational power to document all the components of a system and cannot provide implementation specifications such as transition states of objects during its life cycle,interface design,data structures,performance and resource utilization. To bridge this gap,more formal object modeling methodology such as UML is used.UML captures the bigger picture.It provides detailed mapping of use cases(operations),object state transitions,inter-process communication functionality,algorithm design.UML is very effective in incremental model of SDLC where  lot of details need to captured for precise addition.Information  about requirements is represented in detail and whole picture of the system and users is visible.CRC cards are used as effective inputs to UML.CRC card techniques such as brainstorming and role play help enhance functional understanding which helps in preparing better UML use cases.CRC cards given the content for  class diagrams,inheritance diagrams,class specifications and object specifications for UML.CRC cards can keep track of attributes that can aid listing them as a part of class specification in UML.Most CRC card software have the facility to export CRC analysis file that can be directly used as an input for UML.Following case study develops UML with the help of CRC cards:&lt;br /&gt;
&lt;br /&gt;
http://www.math.gordon.edu/courses/cs211/ATMExample/&lt;br /&gt;
&lt;br /&gt;
==Summary==&lt;br /&gt;
CRC cards are very useful to form the base of object oriented methodology.Techniques such as brain storming and role play enhance the understanding of requirements.CRC automation makes card handling and sharing  quick and efficient.For large projects more formal technology such as UML is required but CRC cards can provide a very good starting point.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Reference==&lt;br /&gt;
[1]Introduction to CRC Cards: http://www.softstar-inc.com/Download/Intro%20to%20CRC.pdf&lt;br /&gt;
&lt;br /&gt;
[2]CRC Cards for ATM : http://www.math-cs.gordon.edu/courses/cps211/ATMExample/CRCCards.html&lt;br /&gt;
&lt;br /&gt;
[3]UML methodology for ATM :http://www.math.gordon.edu&lt;br /&gt;
&lt;br /&gt;
[4]quickCRC:http://www.excelsoftware.com/&lt;br /&gt;
&lt;br /&gt;
[5]Visual Paradigm:  http://www.visual-paradigm.com/   &lt;br /&gt;
         &lt;br /&gt;
[6]Bellin, D and Simone, S.S ‘The CRC Card Book’, Addison Wesley, 1997&lt;/div&gt;</summary>
		<author><name>Bluehat</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=User:Bluehat&amp;diff=33820</id>
		<title>User:Bluehat</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=User:Bluehat&amp;diff=33820"/>
		<updated>2010-09-08T17:15:14Z</updated>

		<summary type="html">&lt;p&gt;Bluehat: /* Reference */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
The onset of the object oriented paradigm in the software industry brought about a big change in the basic approach to system design and the software development life cycle.The major task in the development of any application using the object oriented paradigm is to identify ‘classes’, and how these classes interact and collaborate with each other in the system scope. &lt;br /&gt;
&lt;br /&gt;
Whenever a system is designed with classes, each class has a specific role to play in the system.It has certain responsibilities and each class collaborates with other classes to provide the complete system functionality. In such a scenario, identifying classes becomes the key to a good system design.Although it seems to be a simple,intuitive process,identifying classes can be quite complex when it comes to large scale systems. &lt;br /&gt;
&lt;br /&gt;
One such technique for identification of classes that make up the system and its collaborations is the ‘CRC Card’ technique. The concept of CRC cards was first put forth by Kent Beck and Ward Cunningham and it became very popular as it is easy to use and it supports development of any kind of object oriented development regardless of its scale,the method used, the technology or the language used for development&lt;br /&gt;
&lt;br /&gt;
==Definition==&lt;br /&gt;
Class Responsibility Collaboration (CRC) cards is an object-oriented design method that uses ordinary 3x5 index cards card made for each class containing responsibilities (knowledge and services) and collaborators (interactions with other classes). The cards provide an informal, intuitive way for group members to work on object design together.&lt;br /&gt;
A typical CRC card layout is shown below.&lt;br /&gt;
[[Image:Crccard2.jpg|frame|center|CRC CARD Template]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example: Consider a Student class where a student can enroll for a seminar. In this case ‘Student’ will be one class and ‘Seminar’ can be another class that collaborates with the Student class.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:CrcStudent.jpg|frame|center|Student CRC Card ]]&lt;br /&gt;
&lt;br /&gt;
To know more about CRC cards please refer to http://www.hsanchez.net/repository/hsanchez-PLCRC-plop04.pdf&lt;br /&gt;
&lt;br /&gt;
==Principle and Process==&lt;br /&gt;
&lt;br /&gt;
===CRC Principle===&lt;br /&gt;
&lt;br /&gt;
A CRC model includes a collection of cards and each card is divided into three sections. &lt;br /&gt;
*Class Name: &lt;br /&gt;
**Appears on the top of the CRC card&lt;br /&gt;
**Class denotes a set of similar objects that are being modeled in the system&lt;br /&gt;
&lt;br /&gt;
*Responsibilities:&lt;br /&gt;
**Appears on the left hand side of the CRC card&lt;br /&gt;
**It is a list of the responsibilities of the class i.e. things a class can do with its knowledge&lt;br /&gt;
&lt;br /&gt;
*Collaborators:&lt;br /&gt;
**Appear on the right hand side of the CRC card&lt;br /&gt;
**They are other classes that the class works with to get information or perform a certain function&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===CRC Process===&lt;br /&gt;
&lt;br /&gt;
CRC modeling process includes the users, analysts and developers bringing together the entire development team to form a common understanding of an OO development project.For e.g consider a software application to implement a game of blackjack. To implement the CRC technique to design this software, following steps are taken:&lt;br /&gt;
&lt;br /&gt;
*Explanation of the CRC Technique&lt;br /&gt;
**The facilitator explains the purpose of the CRC modeling session&lt;br /&gt;
**It can include explanation of CRC Cards and creation of sample CRC Cards&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Brainstorming&lt;br /&gt;
**A brainstorming session at the very beginning brings in new ideas, new perspectives to the problem being solved.&lt;br /&gt;
**Every team member can contribute with innovative ideas&lt;br /&gt;
**A list of candidate classes can be drawn up from this activity&lt;br /&gt;
&lt;br /&gt;
For e.g considering the above example, we can identify candidate classes by listing down the nouns relating to the game of blackjack. Say, game, blackjack, dealer, players, card, deck, hand, bet, king, queen, jack, ace, suit, winner, game.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Selecting a scenario and Core classes&lt;br /&gt;
**The scenario chosen at the beginning of the session should be simple, clear and well documented&lt;br /&gt;
**Related scenarios should be identified and dealt with separately&lt;br /&gt;
**Identification of critical classes from the candidate class list is also very important&lt;br /&gt;
**This helps to eliminate irrelevant classes and review remaining classes&lt;br /&gt;
**This also helps clarify the system scope&lt;br /&gt;
&lt;br /&gt;
For e.g we can apply the elimination process to the candidate class list. We can eliminate blackjack as it is the name of the system. ‘House’ can be eliminated as it is another name for the dealer. Also, instead of making ace, king, queen and jack as separate classes, we can represent them as attributes of individual classes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Create initial CRC cards&lt;br /&gt;
From the information gathered in the step above, CRC cards are written&lt;br /&gt;
&lt;br /&gt;
[[Image:Deck1.jpg |frame|center|Deck CRC Card]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Dealer.jpg |frame|center|Dealer CRC Card]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Player.jpg |frame|center|Player CRC Card]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Creating a CRC Model&lt;br /&gt;
**After the CRC cards  are written, they are placed appropriately, with collaborating classes closer to each other.&lt;br /&gt;
**Accordingly, place each card in position till the entire picture of the system is finalized.&lt;br /&gt;
**This process may have to be done in several iterations to get a refined view of the system to be modeled.&lt;br /&gt;
&lt;br /&gt;
For more information on using CRC Cards please refer to http://alistair.cockburn.us/Using+CRC+cards&lt;br /&gt;
&lt;br /&gt;
==CRC Team==&lt;br /&gt;
&lt;br /&gt;
*Domain Experts:&lt;br /&gt;
**Core team that writes the cards&lt;br /&gt;
**Have good business domain knowledge for which the system is being designed&lt;br /&gt;
**Usually are 3-5 people&lt;br /&gt;
&lt;br /&gt;
*Object Oriented Design Analyst:&lt;br /&gt;
**Analysts and developers those are familiar with object oriented design methodologies&lt;br /&gt;
**Usually are 1-2 people&lt;br /&gt;
&lt;br /&gt;
*Facilitator:&lt;br /&gt;
**Most important member who conducts the CRC modeling session&lt;br /&gt;
**Acts as an intermediary when there is difference of opinion regarding class responsibilities and paths of collaboration&lt;br /&gt;
**Usually a single person&lt;br /&gt;
&lt;br /&gt;
*Scribe:&lt;br /&gt;
**Responsible for documenting any business logic that evolves by way of discussions during the CRC modeling process.&lt;br /&gt;
**This documentation can be added to the requirements and business documents which can be used by design analysts at a later stage&lt;br /&gt;
**Usually are 1-2 people&lt;br /&gt;
&lt;br /&gt;
==Case study==&lt;br /&gt;
&lt;br /&gt;
To understand the working of CRC card modeling better, here is an example of an ATM system designed using CRC cards. Here, the software system under consideration has to control an automated teller machine. The ATM has a magnetic stripe reader for reading an ATM card, a customer console (keyboard and display) for interaction with the customer, a slot for depositing envelopes, a dispenser for cash (in multiples of $20), a printer for printing customer receipts, and a key-operated switch to allow an operator to start or stop the machine. Also, the ATM will communicate with the bank's computer over an appropriate communication link.&lt;br /&gt;
&lt;br /&gt;
To perform a transaction, a customer will be required to insert an ATM card and enter a personal identification number (PIN) - both of which will be sent to the bank for validation. The customer will then be able to perform one or more transactions. The card will be retained in the machine until the customer indicates that there are no further transactions, at which point it will be returned. For more on the case study.&lt;br /&gt;
&lt;br /&gt;
http://www.math-cs.gordon.edu/courses/cps211/ATMExample/CRCCards.html&lt;br /&gt;
&lt;br /&gt;
==Metrics for CRC Analysis==&lt;br /&gt;
&lt;br /&gt;
CRC analysis metrics can help evaluate the level of ease in designing and coding with CRC cards. These metrics also contribute to other project planning factors to give overall sense of project development.These metrics can be calculated easily and quickly without the need of special tools. Three metrics are broadly identified as: maximum depth of inheritance, the number of responsibilities assigned to each class and the number of collaborators for a class. With the example below an attempt has been made to explain these metrics.In the diagram, black line indicates inheritance while blue line indicates collaboration. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Class_hierarchy1.png|frame|center|CRC metrics example]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Maximum depth of inheritance===&lt;br /&gt;
&lt;br /&gt;
This metric gives an idea of the class hierarchy. It is the count of number of subclasses in the hierarchy.From the diagram,it can be seen that Part Time student is a subclass of Distance Education which in turn is a subclass of student.Thus,maximum depth of inheritance in this case is two with  reference to class Student. Each subclass shares the overall functions defined in class Student. For short hierarchies, this is a positive benefit of OO. If number of subclasses become too long, it becomes difficult to trace the flow of functions, resulting in overly complex systems. This makes testing, reviewing and reusing difficult.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Number of collaborators===&lt;br /&gt;
&lt;br /&gt;
This is the count of all the supporting classes to help a class.In the diagram,there are four collaborators for class Student:Teacher,Library,Computer Labs and Gymnasium.Confusion between collaborators and subclasses may result in creation many collaborators.This will affect the encapsulation of the design.Typical value for this metric is eight.If this value is large,design may be reviewed to see if inheritance is implemented correctly.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Number of responsibilities===&lt;br /&gt;
This is the count of clearly defined set of duties to each class.For example class Student may have functions like Attending  Lectures,&lt;br /&gt;
Maintaining a certain GPA,Taking the required courses. In this case number of responsibilities is three.Responsibilities should be distributed amongst classes to cover the whole system. This would avoid an imbalance in design. We need to refine the overly complex class into a series of simpler objects. This will make the system easier to understand, implement and reuse. For most commercial transaction oriented systems, values approximately between eight and eighteen are common.&lt;br /&gt;
&lt;br /&gt;
==Advantages==&lt;br /&gt;
* CRC cards create a first-cut analysis for complex systems, and let analysts and users examine the operation of discrete subsystems.&lt;br /&gt;
* CRC cards are invaluable input into more formal methods. Agile development methods often use CRC cards. They are popular as a front end to UML&lt;br /&gt;
* CRC cards are a great way to build teamwork and common understanding.&lt;br /&gt;
* Part of the CRC card attraction is their simplicity. Developers can use them with little formal training and just paper and pencil for tools&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Software for CRC card==&lt;br /&gt;
&lt;br /&gt;
It is difficult to maintain, change, share paper based cards for large projects. Software for CRC cards offer many advantages in such scenarios such as&lt;br /&gt;
&lt;br /&gt;
*Easy Revision: As CRC cards are part of development process, constant changes are made by developers to edit the information .Change to one card might require changes to other cards. It becomes difficult to handle such interdependent changes for various fields such as attribute, responsibility, collaboration on paper based system. Software will reflect one change to every corresponding reference in the design. This saves a lot of time and also avoids the manual errors that may be evident on paper based system.&lt;br /&gt;
&lt;br /&gt;
*Easy sharing: Paper based systems make sharing difficult by necessitating team members to be physically present at one location. Using software, team members can work from different locations.&lt;br /&gt;
&lt;br /&gt;
*Better representation: It is possible to group cards from different perspective such as hierarchy, attributes, parent. This helps better understanding and thinking. Some software also aid graphical display of data.&lt;br /&gt;
&lt;br /&gt;
*Inputs to methodologies: Software for CRC cards can provide the input files for UML class diagram generation software saving lot of time in the development cycle.&lt;br /&gt;
&lt;br /&gt;
*Making additions to existing code: Many projects   make addition to existing code or reuse already developed code in their project. Software can produce CRC cards with existing source code as an input. This would help the team to understand the code in efficient manner and less time.&lt;br /&gt;
&lt;br /&gt;
However,it comes with a cost.Based on required features and cost,team may select from various commercially available software products.Below are few links:&lt;br /&gt;
&lt;br /&gt;
*quickCRC:http://www.excelsoftware.com/&lt;br /&gt;
*CRC card support is part of Visual Paradigm for UML:  http://www.visual-paradigm.com/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==CRC cards Limitations and formal object modeling methodologies(UML)==&lt;br /&gt;
&lt;br /&gt;
CRC cards are used to form initial class definitions but alone are not sufficient to be directly coded into software for large systems.It is difficult to keep track of cards as the systems grows and work on subsystems simultaneously and independently.CRC cards lack the notational power to document all the components of a system and cannot provide implementation specifications such as transition states of objects during its life cycle,interface design,data structures,performance and resource utilization. To bridge this gap,more formal object modeling methodology such as UML is used.UML captures the bigger picture.It provides detailed mapping of use cases(operations),object state transitions,inter-process communication functionality,algorithm design.UML is very effective in incremental model of SDLC where  lot of details need to captured for precise addition.Information  about requirements is represented in detail and whole picture of the system and users is visible.CRC cards are used as effective inputs to UML.CRC card techniques such as brainstorming and role play help enhance functional understanding which helps in preparing better UML use cases.CRC cards given the content for  class diagrams,inheritance diagrams,class specifications and object specifications for UML.CRC cards can keep track of attributes that can aid listing them as a part of class specification in UML.Most CRC card software have the facility to export CRC analysis file that can be directly used as an input for UML.Following case study develops UML with the help of CRC cards:&lt;br /&gt;
&lt;br /&gt;
http://www.math.gordon.edu/courses/cs211/ATMExample/&lt;br /&gt;
&lt;br /&gt;
==Summary==&lt;br /&gt;
CRC cards are very useful to form the base of object oriented methodology.Techniques such as brain storming and role play enhance the understanding of requirements.CRC automation makes card handling and sharing  quick and efficient.For large projects more formal technology such as UML is required but CRC cards can provide a very good starting point.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Reference==&lt;br /&gt;
[1]Introduction to CRC Cards: http://www.softstar-inc.com/Download/Intro%20to%20CRC.pdf&lt;br /&gt;
[2]CRC Cards for ATM : http://www.math-cs.gordon.edu/courses/cps211/ATMExample/CRCCards.html&lt;br /&gt;
[3]UML methodology for ATM :http://www.math.gordon.edu&lt;br /&gt;
[4]quickCRC:http://www.excelsoftware.com/&lt;br /&gt;
[5]Visual Paradigm:  http://www.visual-paradigm.com/            &lt;br /&gt;
[6]Bellin, D and Simone, S.S ‘The CRC Card Book’, Addison Wesley, 1997&lt;/div&gt;</summary>
		<author><name>Bluehat</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=User:Bluehat&amp;diff=33819</id>
		<title>User:Bluehat</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=User:Bluehat&amp;diff=33819"/>
		<updated>2010-09-08T17:14:41Z</updated>

		<summary type="html">&lt;p&gt;Bluehat: /* Reference */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
The onset of the object oriented paradigm in the software industry brought about a big change in the basic approach to system design and the software development life cycle.The major task in the development of any application using the object oriented paradigm is to identify ‘classes’, and how these classes interact and collaborate with each other in the system scope. &lt;br /&gt;
&lt;br /&gt;
Whenever a system is designed with classes, each class has a specific role to play in the system.It has certain responsibilities and each class collaborates with other classes to provide the complete system functionality. In such a scenario, identifying classes becomes the key to a good system design.Although it seems to be a simple,intuitive process,identifying classes can be quite complex when it comes to large scale systems. &lt;br /&gt;
&lt;br /&gt;
One such technique for identification of classes that make up the system and its collaborations is the ‘CRC Card’ technique. The concept of CRC cards was first put forth by Kent Beck and Ward Cunningham and it became very popular as it is easy to use and it supports development of any kind of object oriented development regardless of its scale,the method used, the technology or the language used for development&lt;br /&gt;
&lt;br /&gt;
==Definition==&lt;br /&gt;
Class Responsibility Collaboration (CRC) cards is an object-oriented design method that uses ordinary 3x5 index cards card made for each class containing responsibilities (knowledge and services) and collaborators (interactions with other classes). The cards provide an informal, intuitive way for group members to work on object design together.&lt;br /&gt;
A typical CRC card layout is shown below.&lt;br /&gt;
[[Image:Crccard2.jpg|frame|center|CRC CARD Template]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example: Consider a Student class where a student can enroll for a seminar. In this case ‘Student’ will be one class and ‘Seminar’ can be another class that collaborates with the Student class.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:CrcStudent.jpg|frame|center|Student CRC Card ]]&lt;br /&gt;
&lt;br /&gt;
To know more about CRC cards please refer to http://www.hsanchez.net/repository/hsanchez-PLCRC-plop04.pdf&lt;br /&gt;
&lt;br /&gt;
==Principle and Process==&lt;br /&gt;
&lt;br /&gt;
===CRC Principle===&lt;br /&gt;
&lt;br /&gt;
A CRC model includes a collection of cards and each card is divided into three sections. &lt;br /&gt;
*Class Name: &lt;br /&gt;
**Appears on the top of the CRC card&lt;br /&gt;
**Class denotes a set of similar objects that are being modeled in the system&lt;br /&gt;
&lt;br /&gt;
*Responsibilities:&lt;br /&gt;
**Appears on the left hand side of the CRC card&lt;br /&gt;
**It is a list of the responsibilities of the class i.e. things a class can do with its knowledge&lt;br /&gt;
&lt;br /&gt;
*Collaborators:&lt;br /&gt;
**Appear on the right hand side of the CRC card&lt;br /&gt;
**They are other classes that the class works with to get information or perform a certain function&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===CRC Process===&lt;br /&gt;
&lt;br /&gt;
CRC modeling process includes the users, analysts and developers bringing together the entire development team to form a common understanding of an OO development project.For e.g consider a software application to implement a game of blackjack. To implement the CRC technique to design this software, following steps are taken:&lt;br /&gt;
&lt;br /&gt;
*Explanation of the CRC Technique&lt;br /&gt;
**The facilitator explains the purpose of the CRC modeling session&lt;br /&gt;
**It can include explanation of CRC Cards and creation of sample CRC Cards&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Brainstorming&lt;br /&gt;
**A brainstorming session at the very beginning brings in new ideas, new perspectives to the problem being solved.&lt;br /&gt;
**Every team member can contribute with innovative ideas&lt;br /&gt;
**A list of candidate classes can be drawn up from this activity&lt;br /&gt;
&lt;br /&gt;
For e.g considering the above example, we can identify candidate classes by listing down the nouns relating to the game of blackjack. Say, game, blackjack, dealer, players, card, deck, hand, bet, king, queen, jack, ace, suit, winner, game.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Selecting a scenario and Core classes&lt;br /&gt;
**The scenario chosen at the beginning of the session should be simple, clear and well documented&lt;br /&gt;
**Related scenarios should be identified and dealt with separately&lt;br /&gt;
**Identification of critical classes from the candidate class list is also very important&lt;br /&gt;
**This helps to eliminate irrelevant classes and review remaining classes&lt;br /&gt;
**This also helps clarify the system scope&lt;br /&gt;
&lt;br /&gt;
For e.g we can apply the elimination process to the candidate class list. We can eliminate blackjack as it is the name of the system. ‘House’ can be eliminated as it is another name for the dealer. Also, instead of making ace, king, queen and jack as separate classes, we can represent them as attributes of individual classes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Create initial CRC cards&lt;br /&gt;
From the information gathered in the step above, CRC cards are written&lt;br /&gt;
&lt;br /&gt;
[[Image:Deck1.jpg |frame|center|Deck CRC Card]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Dealer.jpg |frame|center|Dealer CRC Card]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Player.jpg |frame|center|Player CRC Card]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Creating a CRC Model&lt;br /&gt;
**After the CRC cards  are written, they are placed appropriately, with collaborating classes closer to each other.&lt;br /&gt;
**Accordingly, place each card in position till the entire picture of the system is finalized.&lt;br /&gt;
**This process may have to be done in several iterations to get a refined view of the system to be modeled.&lt;br /&gt;
&lt;br /&gt;
For more information on using CRC Cards please refer to http://alistair.cockburn.us/Using+CRC+cards&lt;br /&gt;
&lt;br /&gt;
==CRC Team==&lt;br /&gt;
&lt;br /&gt;
*Domain Experts:&lt;br /&gt;
**Core team that writes the cards&lt;br /&gt;
**Have good business domain knowledge for which the system is being designed&lt;br /&gt;
**Usually are 3-5 people&lt;br /&gt;
&lt;br /&gt;
*Object Oriented Design Analyst:&lt;br /&gt;
**Analysts and developers those are familiar with object oriented design methodologies&lt;br /&gt;
**Usually are 1-2 people&lt;br /&gt;
&lt;br /&gt;
*Facilitator:&lt;br /&gt;
**Most important member who conducts the CRC modeling session&lt;br /&gt;
**Acts as an intermediary when there is difference of opinion regarding class responsibilities and paths of collaboration&lt;br /&gt;
**Usually a single person&lt;br /&gt;
&lt;br /&gt;
*Scribe:&lt;br /&gt;
**Responsible for documenting any business logic that evolves by way of discussions during the CRC modeling process.&lt;br /&gt;
**This documentation can be added to the requirements and business documents which can be used by design analysts at a later stage&lt;br /&gt;
**Usually are 1-2 people&lt;br /&gt;
&lt;br /&gt;
==Case study==&lt;br /&gt;
&lt;br /&gt;
To understand the working of CRC card modeling better, here is an example of an ATM system designed using CRC cards. Here, the software system under consideration has to control an automated teller machine. The ATM has a magnetic stripe reader for reading an ATM card, a customer console (keyboard and display) for interaction with the customer, a slot for depositing envelopes, a dispenser for cash (in multiples of $20), a printer for printing customer receipts, and a key-operated switch to allow an operator to start or stop the machine. Also, the ATM will communicate with the bank's computer over an appropriate communication link.&lt;br /&gt;
&lt;br /&gt;
To perform a transaction, a customer will be required to insert an ATM card and enter a personal identification number (PIN) - both of which will be sent to the bank for validation. The customer will then be able to perform one or more transactions. The card will be retained in the machine until the customer indicates that there are no further transactions, at which point it will be returned. For more on the case study.&lt;br /&gt;
&lt;br /&gt;
http://www.math-cs.gordon.edu/courses/cps211/ATMExample/CRCCards.html&lt;br /&gt;
&lt;br /&gt;
==Metrics for CRC Analysis==&lt;br /&gt;
&lt;br /&gt;
CRC analysis metrics can help evaluate the level of ease in designing and coding with CRC cards. These metrics also contribute to other project planning factors to give overall sense of project development.These metrics can be calculated easily and quickly without the need of special tools. Three metrics are broadly identified as: maximum depth of inheritance, the number of responsibilities assigned to each class and the number of collaborators for a class. With the example below an attempt has been made to explain these metrics.In the diagram, black line indicates inheritance while blue line indicates collaboration. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Class_hierarchy1.png|frame|center|CRC metrics example]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Maximum depth of inheritance===&lt;br /&gt;
&lt;br /&gt;
This metric gives an idea of the class hierarchy. It is the count of number of subclasses in the hierarchy.From the diagram,it can be seen that Part Time student is a subclass of Distance Education which in turn is a subclass of student.Thus,maximum depth of inheritance in this case is two with  reference to class Student. Each subclass shares the overall functions defined in class Student. For short hierarchies, this is a positive benefit of OO. If number of subclasses become too long, it becomes difficult to trace the flow of functions, resulting in overly complex systems. This makes testing, reviewing and reusing difficult.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Number of collaborators===&lt;br /&gt;
&lt;br /&gt;
This is the count of all the supporting classes to help a class.In the diagram,there are four collaborators for class Student:Teacher,Library,Computer Labs and Gymnasium.Confusion between collaborators and subclasses may result in creation many collaborators.This will affect the encapsulation of the design.Typical value for this metric is eight.If this value is large,design may be reviewed to see if inheritance is implemented correctly.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Number of responsibilities===&lt;br /&gt;
This is the count of clearly defined set of duties to each class.For example class Student may have functions like Attending  Lectures,&lt;br /&gt;
Maintaining a certain GPA,Taking the required courses. In this case number of responsibilities is three.Responsibilities should be distributed amongst classes to cover the whole system. This would avoid an imbalance in design. We need to refine the overly complex class into a series of simpler objects. This will make the system easier to understand, implement and reuse. For most commercial transaction oriented systems, values approximately between eight and eighteen are common.&lt;br /&gt;
&lt;br /&gt;
==Advantages==&lt;br /&gt;
* CRC cards create a first-cut analysis for complex systems, and let analysts and users examine the operation of discrete subsystems.&lt;br /&gt;
* CRC cards are invaluable input into more formal methods. Agile development methods often use CRC cards. They are popular as a front end to UML&lt;br /&gt;
* CRC cards are a great way to build teamwork and common understanding.&lt;br /&gt;
* Part of the CRC card attraction is their simplicity. Developers can use them with little formal training and just paper and pencil for tools&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Software for CRC card==&lt;br /&gt;
&lt;br /&gt;
It is difficult to maintain, change, share paper based cards for large projects. Software for CRC cards offer many advantages in such scenarios such as&lt;br /&gt;
&lt;br /&gt;
*Easy Revision: As CRC cards are part of development process, constant changes are made by developers to edit the information .Change to one card might require changes to other cards. It becomes difficult to handle such interdependent changes for various fields such as attribute, responsibility, collaboration on paper based system. Software will reflect one change to every corresponding reference in the design. This saves a lot of time and also avoids the manual errors that may be evident on paper based system.&lt;br /&gt;
&lt;br /&gt;
*Easy sharing: Paper based systems make sharing difficult by necessitating team members to be physically present at one location. Using software, team members can work from different locations.&lt;br /&gt;
&lt;br /&gt;
*Better representation: It is possible to group cards from different perspective such as hierarchy, attributes, parent. This helps better understanding and thinking. Some software also aid graphical display of data.&lt;br /&gt;
&lt;br /&gt;
*Inputs to methodologies: Software for CRC cards can provide the input files for UML class diagram generation software saving lot of time in the development cycle.&lt;br /&gt;
&lt;br /&gt;
*Making additions to existing code: Many projects   make addition to existing code or reuse already developed code in their project. Software can produce CRC cards with existing source code as an input. This would help the team to understand the code in efficient manner and less time.&lt;br /&gt;
&lt;br /&gt;
However,it comes with a cost.Based on required features and cost,team may select from various commercially available software products.Below are few links:&lt;br /&gt;
&lt;br /&gt;
*quickCRC:http://www.excelsoftware.com/&lt;br /&gt;
*CRC card support is part of Visual Paradigm for UML:  http://www.visual-paradigm.com/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==CRC cards Limitations and formal object modeling methodologies(UML)==&lt;br /&gt;
&lt;br /&gt;
CRC cards are used to form initial class definitions but alone are not sufficient to be directly coded into software for large systems.It is difficult to keep track of cards as the systems grows and work on subsystems simultaneously and independently.CRC cards lack the notational power to document all the components of a system and cannot provide implementation specifications such as transition states of objects during its life cycle,interface design,data structures,performance and resource utilization. To bridge this gap,more formal object modeling methodology such as UML is used.UML captures the bigger picture.It provides detailed mapping of use cases(operations),object state transitions,inter-process communication functionality,algorithm design.UML is very effective in incremental model of SDLC where  lot of details need to captured for precise addition.Information  about requirements is represented in detail and whole picture of the system and users is visible.CRC cards are used as effective inputs to UML.CRC card techniques such as brainstorming and role play help enhance functional understanding which helps in preparing better UML use cases.CRC cards given the content for  class diagrams,inheritance diagrams,class specifications and object specifications for UML.CRC cards can keep track of attributes that can aid listing them as a part of class specification in UML.Most CRC card software have the facility to export CRC analysis file that can be directly used as an input for UML.Following case study develops UML with the help of CRC cards:&lt;br /&gt;
&lt;br /&gt;
http://www.math.gordon.edu/courses/cs211/ATMExample/&lt;br /&gt;
&lt;br /&gt;
==Summary==&lt;br /&gt;
CRC cards are very useful to form the base of object oriented methodology.Techniques such as brain storming and role play enhance the understanding of requirements.CRC automation makes card handling and sharing  quick and efficient.For large projects more formal technology such as UML is required but CRC cards can provide a very good starting point.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Reference==&lt;br /&gt;
[1]Introduction to CRC Cards: http://www.softstar-inc.com/Download/Intro%20to%20CRC.pdf&lt;br /&gt;
[2]CRC Cards for ATM : http://www.math-cs.gordon.edu/courses/cps211/ATMExample/CRCCards.html&lt;br /&gt;
[3]UML methodology for ATM :http://www.math.gordon.edu&lt;br /&gt;
&lt;br /&gt;
[4]CRC software:&lt;br /&gt;
quickCRC:http://www.excelsoftware.com/&lt;br /&gt;
Visual Paradigm:  http://www.visual-paradigm.com/            &lt;br /&gt;
[5]Bellin, D and Simone, S.S ‘The CRC Card Book’, Addison Wesley, 1997&lt;/div&gt;</summary>
		<author><name>Bluehat</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=User:Bluehat&amp;diff=33818</id>
		<title>User:Bluehat</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=User:Bluehat&amp;diff=33818"/>
		<updated>2010-09-08T17:14:21Z</updated>

		<summary type="html">&lt;p&gt;Bluehat: /* Reference */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
The onset of the object oriented paradigm in the software industry brought about a big change in the basic approach to system design and the software development life cycle.The major task in the development of any application using the object oriented paradigm is to identify ‘classes’, and how these classes interact and collaborate with each other in the system scope. &lt;br /&gt;
&lt;br /&gt;
Whenever a system is designed with classes, each class has a specific role to play in the system.It has certain responsibilities and each class collaborates with other classes to provide the complete system functionality. In such a scenario, identifying classes becomes the key to a good system design.Although it seems to be a simple,intuitive process,identifying classes can be quite complex when it comes to large scale systems. &lt;br /&gt;
&lt;br /&gt;
One such technique for identification of classes that make up the system and its collaborations is the ‘CRC Card’ technique. The concept of CRC cards was first put forth by Kent Beck and Ward Cunningham and it became very popular as it is easy to use and it supports development of any kind of object oriented development regardless of its scale,the method used, the technology or the language used for development&lt;br /&gt;
&lt;br /&gt;
==Definition==&lt;br /&gt;
Class Responsibility Collaboration (CRC) cards is an object-oriented design method that uses ordinary 3x5 index cards card made for each class containing responsibilities (knowledge and services) and collaborators (interactions with other classes). The cards provide an informal, intuitive way for group members to work on object design together.&lt;br /&gt;
A typical CRC card layout is shown below.&lt;br /&gt;
[[Image:Crccard2.jpg|frame|center|CRC CARD Template]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example: Consider a Student class where a student can enroll for a seminar. In this case ‘Student’ will be one class and ‘Seminar’ can be another class that collaborates with the Student class.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:CrcStudent.jpg|frame|center|Student CRC Card ]]&lt;br /&gt;
&lt;br /&gt;
To know more about CRC cards please refer to http://www.hsanchez.net/repository/hsanchez-PLCRC-plop04.pdf&lt;br /&gt;
&lt;br /&gt;
==Principle and Process==&lt;br /&gt;
&lt;br /&gt;
===CRC Principle===&lt;br /&gt;
&lt;br /&gt;
A CRC model includes a collection of cards and each card is divided into three sections. &lt;br /&gt;
*Class Name: &lt;br /&gt;
**Appears on the top of the CRC card&lt;br /&gt;
**Class denotes a set of similar objects that are being modeled in the system&lt;br /&gt;
&lt;br /&gt;
*Responsibilities:&lt;br /&gt;
**Appears on the left hand side of the CRC card&lt;br /&gt;
**It is a list of the responsibilities of the class i.e. things a class can do with its knowledge&lt;br /&gt;
&lt;br /&gt;
*Collaborators:&lt;br /&gt;
**Appear on the right hand side of the CRC card&lt;br /&gt;
**They are other classes that the class works with to get information or perform a certain function&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===CRC Process===&lt;br /&gt;
&lt;br /&gt;
CRC modeling process includes the users, analysts and developers bringing together the entire development team to form a common understanding of an OO development project.For e.g consider a software application to implement a game of blackjack. To implement the CRC technique to design this software, following steps are taken:&lt;br /&gt;
&lt;br /&gt;
*Explanation of the CRC Technique&lt;br /&gt;
**The facilitator explains the purpose of the CRC modeling session&lt;br /&gt;
**It can include explanation of CRC Cards and creation of sample CRC Cards&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Brainstorming&lt;br /&gt;
**A brainstorming session at the very beginning brings in new ideas, new perspectives to the problem being solved.&lt;br /&gt;
**Every team member can contribute with innovative ideas&lt;br /&gt;
**A list of candidate classes can be drawn up from this activity&lt;br /&gt;
&lt;br /&gt;
For e.g considering the above example, we can identify candidate classes by listing down the nouns relating to the game of blackjack. Say, game, blackjack, dealer, players, card, deck, hand, bet, king, queen, jack, ace, suit, winner, game.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Selecting a scenario and Core classes&lt;br /&gt;
**The scenario chosen at the beginning of the session should be simple, clear and well documented&lt;br /&gt;
**Related scenarios should be identified and dealt with separately&lt;br /&gt;
**Identification of critical classes from the candidate class list is also very important&lt;br /&gt;
**This helps to eliminate irrelevant classes and review remaining classes&lt;br /&gt;
**This also helps clarify the system scope&lt;br /&gt;
&lt;br /&gt;
For e.g we can apply the elimination process to the candidate class list. We can eliminate blackjack as it is the name of the system. ‘House’ can be eliminated as it is another name for the dealer. Also, instead of making ace, king, queen and jack as separate classes, we can represent them as attributes of individual classes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Create initial CRC cards&lt;br /&gt;
From the information gathered in the step above, CRC cards are written&lt;br /&gt;
&lt;br /&gt;
[[Image:Deck1.jpg |frame|center|Deck CRC Card]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Dealer.jpg |frame|center|Dealer CRC Card]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Player.jpg |frame|center|Player CRC Card]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Creating a CRC Model&lt;br /&gt;
**After the CRC cards  are written, they are placed appropriately, with collaborating classes closer to each other.&lt;br /&gt;
**Accordingly, place each card in position till the entire picture of the system is finalized.&lt;br /&gt;
**This process may have to be done in several iterations to get a refined view of the system to be modeled.&lt;br /&gt;
&lt;br /&gt;
For more information on using CRC Cards please refer to http://alistair.cockburn.us/Using+CRC+cards&lt;br /&gt;
&lt;br /&gt;
==CRC Team==&lt;br /&gt;
&lt;br /&gt;
*Domain Experts:&lt;br /&gt;
**Core team that writes the cards&lt;br /&gt;
**Have good business domain knowledge for which the system is being designed&lt;br /&gt;
**Usually are 3-5 people&lt;br /&gt;
&lt;br /&gt;
*Object Oriented Design Analyst:&lt;br /&gt;
**Analysts and developers those are familiar with object oriented design methodologies&lt;br /&gt;
**Usually are 1-2 people&lt;br /&gt;
&lt;br /&gt;
*Facilitator:&lt;br /&gt;
**Most important member who conducts the CRC modeling session&lt;br /&gt;
**Acts as an intermediary when there is difference of opinion regarding class responsibilities and paths of collaboration&lt;br /&gt;
**Usually a single person&lt;br /&gt;
&lt;br /&gt;
*Scribe:&lt;br /&gt;
**Responsible for documenting any business logic that evolves by way of discussions during the CRC modeling process.&lt;br /&gt;
**This documentation can be added to the requirements and business documents which can be used by design analysts at a later stage&lt;br /&gt;
**Usually are 1-2 people&lt;br /&gt;
&lt;br /&gt;
==Case study==&lt;br /&gt;
&lt;br /&gt;
To understand the working of CRC card modeling better, here is an example of an ATM system designed using CRC cards. Here, the software system under consideration has to control an automated teller machine. The ATM has a magnetic stripe reader for reading an ATM card, a customer console (keyboard and display) for interaction with the customer, a slot for depositing envelopes, a dispenser for cash (in multiples of $20), a printer for printing customer receipts, and a key-operated switch to allow an operator to start or stop the machine. Also, the ATM will communicate with the bank's computer over an appropriate communication link.&lt;br /&gt;
&lt;br /&gt;
To perform a transaction, a customer will be required to insert an ATM card and enter a personal identification number (PIN) - both of which will be sent to the bank for validation. The customer will then be able to perform one or more transactions. The card will be retained in the machine until the customer indicates that there are no further transactions, at which point it will be returned. For more on the case study.&lt;br /&gt;
&lt;br /&gt;
http://www.math-cs.gordon.edu/courses/cps211/ATMExample/CRCCards.html&lt;br /&gt;
&lt;br /&gt;
==Metrics for CRC Analysis==&lt;br /&gt;
&lt;br /&gt;
CRC analysis metrics can help evaluate the level of ease in designing and coding with CRC cards. These metrics also contribute to other project planning factors to give overall sense of project development.These metrics can be calculated easily and quickly without the need of special tools. Three metrics are broadly identified as: maximum depth of inheritance, the number of responsibilities assigned to each class and the number of collaborators for a class. With the example below an attempt has been made to explain these metrics.In the diagram, black line indicates inheritance while blue line indicates collaboration. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Class_hierarchy1.png|frame|center|CRC metrics example]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Maximum depth of inheritance===&lt;br /&gt;
&lt;br /&gt;
This metric gives an idea of the class hierarchy. It is the count of number of subclasses in the hierarchy.From the diagram,it can be seen that Part Time student is a subclass of Distance Education which in turn is a subclass of student.Thus,maximum depth of inheritance in this case is two with  reference to class Student. Each subclass shares the overall functions defined in class Student. For short hierarchies, this is a positive benefit of OO. If number of subclasses become too long, it becomes difficult to trace the flow of functions, resulting in overly complex systems. This makes testing, reviewing and reusing difficult.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Number of collaborators===&lt;br /&gt;
&lt;br /&gt;
This is the count of all the supporting classes to help a class.In the diagram,there are four collaborators for class Student:Teacher,Library,Computer Labs and Gymnasium.Confusion between collaborators and subclasses may result in creation many collaborators.This will affect the encapsulation of the design.Typical value for this metric is eight.If this value is large,design may be reviewed to see if inheritance is implemented correctly.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Number of responsibilities===&lt;br /&gt;
This is the count of clearly defined set of duties to each class.For example class Student may have functions like Attending  Lectures,&lt;br /&gt;
Maintaining a certain GPA,Taking the required courses. In this case number of responsibilities is three.Responsibilities should be distributed amongst classes to cover the whole system. This would avoid an imbalance in design. We need to refine the overly complex class into a series of simpler objects. This will make the system easier to understand, implement and reuse. For most commercial transaction oriented systems, values approximately between eight and eighteen are common.&lt;br /&gt;
&lt;br /&gt;
==Advantages==&lt;br /&gt;
* CRC cards create a first-cut analysis for complex systems, and let analysts and users examine the operation of discrete subsystems.&lt;br /&gt;
* CRC cards are invaluable input into more formal methods. Agile development methods often use CRC cards. They are popular as a front end to UML&lt;br /&gt;
* CRC cards are a great way to build teamwork and common understanding.&lt;br /&gt;
* Part of the CRC card attraction is their simplicity. Developers can use them with little formal training and just paper and pencil for tools&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Software for CRC card==&lt;br /&gt;
&lt;br /&gt;
It is difficult to maintain, change, share paper based cards for large projects. Software for CRC cards offer many advantages in such scenarios such as&lt;br /&gt;
&lt;br /&gt;
*Easy Revision: As CRC cards are part of development process, constant changes are made by developers to edit the information .Change to one card might require changes to other cards. It becomes difficult to handle such interdependent changes for various fields such as attribute, responsibility, collaboration on paper based system. Software will reflect one change to every corresponding reference in the design. This saves a lot of time and also avoids the manual errors that may be evident on paper based system.&lt;br /&gt;
&lt;br /&gt;
*Easy sharing: Paper based systems make sharing difficult by necessitating team members to be physically present at one location. Using software, team members can work from different locations.&lt;br /&gt;
&lt;br /&gt;
*Better representation: It is possible to group cards from different perspective such as hierarchy, attributes, parent. This helps better understanding and thinking. Some software also aid graphical display of data.&lt;br /&gt;
&lt;br /&gt;
*Inputs to methodologies: Software for CRC cards can provide the input files for UML class diagram generation software saving lot of time in the development cycle.&lt;br /&gt;
&lt;br /&gt;
*Making additions to existing code: Many projects   make addition to existing code or reuse already developed code in their project. Software can produce CRC cards with existing source code as an input. This would help the team to understand the code in efficient manner and less time.&lt;br /&gt;
&lt;br /&gt;
However,it comes with a cost.Based on required features and cost,team may select from various commercially available software products.Below are few links:&lt;br /&gt;
&lt;br /&gt;
*quickCRC:http://www.excelsoftware.com/&lt;br /&gt;
*CRC card support is part of Visual Paradigm for UML:  http://www.visual-paradigm.com/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==CRC cards Limitations and formal object modeling methodologies(UML)==&lt;br /&gt;
&lt;br /&gt;
CRC cards are used to form initial class definitions but alone are not sufficient to be directly coded into software for large systems.It is difficult to keep track of cards as the systems grows and work on subsystems simultaneously and independently.CRC cards lack the notational power to document all the components of a system and cannot provide implementation specifications such as transition states of objects during its life cycle,interface design,data structures,performance and resource utilization. To bridge this gap,more formal object modeling methodology such as UML is used.UML captures the bigger picture.It provides detailed mapping of use cases(operations),object state transitions,inter-process communication functionality,algorithm design.UML is very effective in incremental model of SDLC where  lot of details need to captured for precise addition.Information  about requirements is represented in detail and whole picture of the system and users is visible.CRC cards are used as effective inputs to UML.CRC card techniques such as brainstorming and role play help enhance functional understanding which helps in preparing better UML use cases.CRC cards given the content for  class diagrams,inheritance diagrams,class specifications and object specifications for UML.CRC cards can keep track of attributes that can aid listing them as a part of class specification in UML.Most CRC card software have the facility to export CRC analysis file that can be directly used as an input for UML.Following case study develops UML with the help of CRC cards:&lt;br /&gt;
&lt;br /&gt;
http://www.math.gordon.edu/courses/cs211/ATMExample/&lt;br /&gt;
&lt;br /&gt;
==Summary==&lt;br /&gt;
CRC cards are very useful to form the base of object oriented methodology.Techniques such as brain storming and role play enhance the understanding of requirements.CRC automation makes card handling and sharing  quick and efficient.For large projects more formal technology such as UML is required but CRC cards can provide a very good starting point.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Reference==&lt;br /&gt;
[1]Introduction to CRC Cards: http://www.softstar-inc.com/Download/Intro%20to%20CRC.pdf&lt;br /&gt;
[2]CRC Cards for ATM : http://www.math-cs.gordon.edu/courses/cps211/ATMExample/CRCCards.html&lt;br /&gt;
[3]UML methodology for ATM :http://www.math.gordon.edu&lt;br /&gt;
[4]CRC software:&lt;br /&gt;
quickCRC:http://www.excelsoftware.com/&lt;br /&gt;
Visual Paradigm:  http://www.visual-paradigm.com/            &lt;br /&gt;
[5]Bellin, D and Simone, S.S ‘The CRC Card Book’, Addison Wesley, 1997&lt;/div&gt;</summary>
		<author><name>Bluehat</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=User:Bluehat&amp;diff=33817</id>
		<title>User:Bluehat</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=User:Bluehat&amp;diff=33817"/>
		<updated>2010-09-08T17:13:59Z</updated>

		<summary type="html">&lt;p&gt;Bluehat: /* Reference */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
The onset of the object oriented paradigm in the software industry brought about a big change in the basic approach to system design and the software development life cycle.The major task in the development of any application using the object oriented paradigm is to identify ‘classes’, and how these classes interact and collaborate with each other in the system scope. &lt;br /&gt;
&lt;br /&gt;
Whenever a system is designed with classes, each class has a specific role to play in the system.It has certain responsibilities and each class collaborates with other classes to provide the complete system functionality. In such a scenario, identifying classes becomes the key to a good system design.Although it seems to be a simple,intuitive process,identifying classes can be quite complex when it comes to large scale systems. &lt;br /&gt;
&lt;br /&gt;
One such technique for identification of classes that make up the system and its collaborations is the ‘CRC Card’ technique. The concept of CRC cards was first put forth by Kent Beck and Ward Cunningham and it became very popular as it is easy to use and it supports development of any kind of object oriented development regardless of its scale,the method used, the technology or the language used for development&lt;br /&gt;
&lt;br /&gt;
==Definition==&lt;br /&gt;
Class Responsibility Collaboration (CRC) cards is an object-oriented design method that uses ordinary 3x5 index cards card made for each class containing responsibilities (knowledge and services) and collaborators (interactions with other classes). The cards provide an informal, intuitive way for group members to work on object design together.&lt;br /&gt;
A typical CRC card layout is shown below.&lt;br /&gt;
[[Image:Crccard2.jpg|frame|center|CRC CARD Template]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example: Consider a Student class where a student can enroll for a seminar. In this case ‘Student’ will be one class and ‘Seminar’ can be another class that collaborates with the Student class.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:CrcStudent.jpg|frame|center|Student CRC Card ]]&lt;br /&gt;
&lt;br /&gt;
To know more about CRC cards please refer to http://www.hsanchez.net/repository/hsanchez-PLCRC-plop04.pdf&lt;br /&gt;
&lt;br /&gt;
==Principle and Process==&lt;br /&gt;
&lt;br /&gt;
===CRC Principle===&lt;br /&gt;
&lt;br /&gt;
A CRC model includes a collection of cards and each card is divided into three sections. &lt;br /&gt;
*Class Name: &lt;br /&gt;
**Appears on the top of the CRC card&lt;br /&gt;
**Class denotes a set of similar objects that are being modeled in the system&lt;br /&gt;
&lt;br /&gt;
*Responsibilities:&lt;br /&gt;
**Appears on the left hand side of the CRC card&lt;br /&gt;
**It is a list of the responsibilities of the class i.e. things a class can do with its knowledge&lt;br /&gt;
&lt;br /&gt;
*Collaborators:&lt;br /&gt;
**Appear on the right hand side of the CRC card&lt;br /&gt;
**They are other classes that the class works with to get information or perform a certain function&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===CRC Process===&lt;br /&gt;
&lt;br /&gt;
CRC modeling process includes the users, analysts and developers bringing together the entire development team to form a common understanding of an OO development project.For e.g consider a software application to implement a game of blackjack. To implement the CRC technique to design this software, following steps are taken:&lt;br /&gt;
&lt;br /&gt;
*Explanation of the CRC Technique&lt;br /&gt;
**The facilitator explains the purpose of the CRC modeling session&lt;br /&gt;
**It can include explanation of CRC Cards and creation of sample CRC Cards&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Brainstorming&lt;br /&gt;
**A brainstorming session at the very beginning brings in new ideas, new perspectives to the problem being solved.&lt;br /&gt;
**Every team member can contribute with innovative ideas&lt;br /&gt;
**A list of candidate classes can be drawn up from this activity&lt;br /&gt;
&lt;br /&gt;
For e.g considering the above example, we can identify candidate classes by listing down the nouns relating to the game of blackjack. Say, game, blackjack, dealer, players, card, deck, hand, bet, king, queen, jack, ace, suit, winner, game.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Selecting a scenario and Core classes&lt;br /&gt;
**The scenario chosen at the beginning of the session should be simple, clear and well documented&lt;br /&gt;
**Related scenarios should be identified and dealt with separately&lt;br /&gt;
**Identification of critical classes from the candidate class list is also very important&lt;br /&gt;
**This helps to eliminate irrelevant classes and review remaining classes&lt;br /&gt;
**This also helps clarify the system scope&lt;br /&gt;
&lt;br /&gt;
For e.g we can apply the elimination process to the candidate class list. We can eliminate blackjack as it is the name of the system. ‘House’ can be eliminated as it is another name for the dealer. Also, instead of making ace, king, queen and jack as separate classes, we can represent them as attributes of individual classes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Create initial CRC cards&lt;br /&gt;
From the information gathered in the step above, CRC cards are written&lt;br /&gt;
&lt;br /&gt;
[[Image:Deck1.jpg |frame|center|Deck CRC Card]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Dealer.jpg |frame|center|Dealer CRC Card]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Player.jpg |frame|center|Player CRC Card]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Creating a CRC Model&lt;br /&gt;
**After the CRC cards  are written, they are placed appropriately, with collaborating classes closer to each other.&lt;br /&gt;
**Accordingly, place each card in position till the entire picture of the system is finalized.&lt;br /&gt;
**This process may have to be done in several iterations to get a refined view of the system to be modeled.&lt;br /&gt;
&lt;br /&gt;
For more information on using CRC Cards please refer to http://alistair.cockburn.us/Using+CRC+cards&lt;br /&gt;
&lt;br /&gt;
==CRC Team==&lt;br /&gt;
&lt;br /&gt;
*Domain Experts:&lt;br /&gt;
**Core team that writes the cards&lt;br /&gt;
**Have good business domain knowledge for which the system is being designed&lt;br /&gt;
**Usually are 3-5 people&lt;br /&gt;
&lt;br /&gt;
*Object Oriented Design Analyst:&lt;br /&gt;
**Analysts and developers those are familiar with object oriented design methodologies&lt;br /&gt;
**Usually are 1-2 people&lt;br /&gt;
&lt;br /&gt;
*Facilitator:&lt;br /&gt;
**Most important member who conducts the CRC modeling session&lt;br /&gt;
**Acts as an intermediary when there is difference of opinion regarding class responsibilities and paths of collaboration&lt;br /&gt;
**Usually a single person&lt;br /&gt;
&lt;br /&gt;
*Scribe:&lt;br /&gt;
**Responsible for documenting any business logic that evolves by way of discussions during the CRC modeling process.&lt;br /&gt;
**This documentation can be added to the requirements and business documents which can be used by design analysts at a later stage&lt;br /&gt;
**Usually are 1-2 people&lt;br /&gt;
&lt;br /&gt;
==Case study==&lt;br /&gt;
&lt;br /&gt;
To understand the working of CRC card modeling better, here is an example of an ATM system designed using CRC cards. Here, the software system under consideration has to control an automated teller machine. The ATM has a magnetic stripe reader for reading an ATM card, a customer console (keyboard and display) for interaction with the customer, a slot for depositing envelopes, a dispenser for cash (in multiples of $20), a printer for printing customer receipts, and a key-operated switch to allow an operator to start or stop the machine. Also, the ATM will communicate with the bank's computer over an appropriate communication link.&lt;br /&gt;
&lt;br /&gt;
To perform a transaction, a customer will be required to insert an ATM card and enter a personal identification number (PIN) - both of which will be sent to the bank for validation. The customer will then be able to perform one or more transactions. The card will be retained in the machine until the customer indicates that there are no further transactions, at which point it will be returned. For more on the case study.&lt;br /&gt;
&lt;br /&gt;
http://www.math-cs.gordon.edu/courses/cps211/ATMExample/CRCCards.html&lt;br /&gt;
&lt;br /&gt;
==Metrics for CRC Analysis==&lt;br /&gt;
&lt;br /&gt;
CRC analysis metrics can help evaluate the level of ease in designing and coding with CRC cards. These metrics also contribute to other project planning factors to give overall sense of project development.These metrics can be calculated easily and quickly without the need of special tools. Three metrics are broadly identified as: maximum depth of inheritance, the number of responsibilities assigned to each class and the number of collaborators for a class. With the example below an attempt has been made to explain these metrics.In the diagram, black line indicates inheritance while blue line indicates collaboration. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Class_hierarchy1.png|frame|center|CRC metrics example]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Maximum depth of inheritance===&lt;br /&gt;
&lt;br /&gt;
This metric gives an idea of the class hierarchy. It is the count of number of subclasses in the hierarchy.From the diagram,it can be seen that Part Time student is a subclass of Distance Education which in turn is a subclass of student.Thus,maximum depth of inheritance in this case is two with  reference to class Student. Each subclass shares the overall functions defined in class Student. For short hierarchies, this is a positive benefit of OO. If number of subclasses become too long, it becomes difficult to trace the flow of functions, resulting in overly complex systems. This makes testing, reviewing and reusing difficult.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Number of collaborators===&lt;br /&gt;
&lt;br /&gt;
This is the count of all the supporting classes to help a class.In the diagram,there are four collaborators for class Student:Teacher,Library,Computer Labs and Gymnasium.Confusion between collaborators and subclasses may result in creation many collaborators.This will affect the encapsulation of the design.Typical value for this metric is eight.If this value is large,design may be reviewed to see if inheritance is implemented correctly.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Number of responsibilities===&lt;br /&gt;
This is the count of clearly defined set of duties to each class.For example class Student may have functions like Attending  Lectures,&lt;br /&gt;
Maintaining a certain GPA,Taking the required courses. In this case number of responsibilities is three.Responsibilities should be distributed amongst classes to cover the whole system. This would avoid an imbalance in design. We need to refine the overly complex class into a series of simpler objects. This will make the system easier to understand, implement and reuse. For most commercial transaction oriented systems, values approximately between eight and eighteen are common.&lt;br /&gt;
&lt;br /&gt;
==Advantages==&lt;br /&gt;
* CRC cards create a first-cut analysis for complex systems, and let analysts and users examine the operation of discrete subsystems.&lt;br /&gt;
* CRC cards are invaluable input into more formal methods. Agile development methods often use CRC cards. They are popular as a front end to UML&lt;br /&gt;
* CRC cards are a great way to build teamwork and common understanding.&lt;br /&gt;
* Part of the CRC card attraction is their simplicity. Developers can use them with little formal training and just paper and pencil for tools&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Software for CRC card==&lt;br /&gt;
&lt;br /&gt;
It is difficult to maintain, change, share paper based cards for large projects. Software for CRC cards offer many advantages in such scenarios such as&lt;br /&gt;
&lt;br /&gt;
*Easy Revision: As CRC cards are part of development process, constant changes are made by developers to edit the information .Change to one card might require changes to other cards. It becomes difficult to handle such interdependent changes for various fields such as attribute, responsibility, collaboration on paper based system. Software will reflect one change to every corresponding reference in the design. This saves a lot of time and also avoids the manual errors that may be evident on paper based system.&lt;br /&gt;
&lt;br /&gt;
*Easy sharing: Paper based systems make sharing difficult by necessitating team members to be physically present at one location. Using software, team members can work from different locations.&lt;br /&gt;
&lt;br /&gt;
*Better representation: It is possible to group cards from different perspective such as hierarchy, attributes, parent. This helps better understanding and thinking. Some software also aid graphical display of data.&lt;br /&gt;
&lt;br /&gt;
*Inputs to methodologies: Software for CRC cards can provide the input files for UML class diagram generation software saving lot of time in the development cycle.&lt;br /&gt;
&lt;br /&gt;
*Making additions to existing code: Many projects   make addition to existing code or reuse already developed code in their project. Software can produce CRC cards with existing source code as an input. This would help the team to understand the code in efficient manner and less time.&lt;br /&gt;
&lt;br /&gt;
However,it comes with a cost.Based on required features and cost,team may select from various commercially available software products.Below are few links:&lt;br /&gt;
&lt;br /&gt;
*quickCRC:http://www.excelsoftware.com/&lt;br /&gt;
*CRC card support is part of Visual Paradigm for UML:  http://www.visual-paradigm.com/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==CRC cards Limitations and formal object modeling methodologies(UML)==&lt;br /&gt;
&lt;br /&gt;
CRC cards are used to form initial class definitions but alone are not sufficient to be directly coded into software for large systems.It is difficult to keep track of cards as the systems grows and work on subsystems simultaneously and independently.CRC cards lack the notational power to document all the components of a system and cannot provide implementation specifications such as transition states of objects during its life cycle,interface design,data structures,performance and resource utilization. To bridge this gap,more formal object modeling methodology such as UML is used.UML captures the bigger picture.It provides detailed mapping of use cases(operations),object state transitions,inter-process communication functionality,algorithm design.UML is very effective in incremental model of SDLC where  lot of details need to captured for precise addition.Information  about requirements is represented in detail and whole picture of the system and users is visible.CRC cards are used as effective inputs to UML.CRC card techniques such as brainstorming and role play help enhance functional understanding which helps in preparing better UML use cases.CRC cards given the content for  class diagrams,inheritance diagrams,class specifications and object specifications for UML.CRC cards can keep track of attributes that can aid listing them as a part of class specification in UML.Most CRC card software have the facility to export CRC analysis file that can be directly used as an input for UML.Following case study develops UML with the help of CRC cards:&lt;br /&gt;
&lt;br /&gt;
http://www.math.gordon.edu/courses/cs211/ATMExample/&lt;br /&gt;
&lt;br /&gt;
==Summary==&lt;br /&gt;
CRC cards are very useful to form the base of object oriented methodology.Techniques such as brain storming and role play enhance the understanding of requirements.CRC automation makes card handling and sharing  quick and efficient.For large projects more formal technology such as UML is required but CRC cards can provide a very good starting point.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Reference==&lt;br /&gt;
[1]Introduction to CRC Cards: http://www.softstar-inc.com/Download/Intro%20to%20CRC.pdf&lt;br /&gt;
[2]CRC Cards for ATM : http://www.math-cs.gordon.edu/courses/cps211/ATMExample/CRCCards.html&lt;br /&gt;
[3]UML methodology for ATM :http://www.math.gordon.edu&lt;br /&gt;
[4]CRC software:&lt;br /&gt;
*quickCRC:http://www.excelsoftware.com/&lt;br /&gt;
*Visual Paradigm:  http://www.visual-paradigm.com/            &lt;br /&gt;
[5]Bellin, D and Simone, S.S ‘The CRC Card Book’, Addison Wesley, 1997&lt;/div&gt;</summary>
		<author><name>Bluehat</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=User:Bluehat&amp;diff=33816</id>
		<title>User:Bluehat</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=User:Bluehat&amp;diff=33816"/>
		<updated>2010-09-08T17:13:25Z</updated>

		<summary type="html">&lt;p&gt;Bluehat: /* Reference */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
The onset of the object oriented paradigm in the software industry brought about a big change in the basic approach to system design and the software development life cycle.The major task in the development of any application using the object oriented paradigm is to identify ‘classes’, and how these classes interact and collaborate with each other in the system scope. &lt;br /&gt;
&lt;br /&gt;
Whenever a system is designed with classes, each class has a specific role to play in the system.It has certain responsibilities and each class collaborates with other classes to provide the complete system functionality. In such a scenario, identifying classes becomes the key to a good system design.Although it seems to be a simple,intuitive process,identifying classes can be quite complex when it comes to large scale systems. &lt;br /&gt;
&lt;br /&gt;
One such technique for identification of classes that make up the system and its collaborations is the ‘CRC Card’ technique. The concept of CRC cards was first put forth by Kent Beck and Ward Cunningham and it became very popular as it is easy to use and it supports development of any kind of object oriented development regardless of its scale,the method used, the technology or the language used for development&lt;br /&gt;
&lt;br /&gt;
==Definition==&lt;br /&gt;
Class Responsibility Collaboration (CRC) cards is an object-oriented design method that uses ordinary 3x5 index cards card made for each class containing responsibilities (knowledge and services) and collaborators (interactions with other classes). The cards provide an informal, intuitive way for group members to work on object design together.&lt;br /&gt;
A typical CRC card layout is shown below.&lt;br /&gt;
[[Image:Crccard2.jpg|frame|center|CRC CARD Template]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example: Consider a Student class where a student can enroll for a seminar. In this case ‘Student’ will be one class and ‘Seminar’ can be another class that collaborates with the Student class.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:CrcStudent.jpg|frame|center|Student CRC Card ]]&lt;br /&gt;
&lt;br /&gt;
To know more about CRC cards please refer to http://www.hsanchez.net/repository/hsanchez-PLCRC-plop04.pdf&lt;br /&gt;
&lt;br /&gt;
==Principle and Process==&lt;br /&gt;
&lt;br /&gt;
===CRC Principle===&lt;br /&gt;
&lt;br /&gt;
A CRC model includes a collection of cards and each card is divided into three sections. &lt;br /&gt;
*Class Name: &lt;br /&gt;
**Appears on the top of the CRC card&lt;br /&gt;
**Class denotes a set of similar objects that are being modeled in the system&lt;br /&gt;
&lt;br /&gt;
*Responsibilities:&lt;br /&gt;
**Appears on the left hand side of the CRC card&lt;br /&gt;
**It is a list of the responsibilities of the class i.e. things a class can do with its knowledge&lt;br /&gt;
&lt;br /&gt;
*Collaborators:&lt;br /&gt;
**Appear on the right hand side of the CRC card&lt;br /&gt;
**They are other classes that the class works with to get information or perform a certain function&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===CRC Process===&lt;br /&gt;
&lt;br /&gt;
CRC modeling process includes the users, analysts and developers bringing together the entire development team to form a common understanding of an OO development project.For e.g consider a software application to implement a game of blackjack. To implement the CRC technique to design this software, following steps are taken:&lt;br /&gt;
&lt;br /&gt;
*Explanation of the CRC Technique&lt;br /&gt;
**The facilitator explains the purpose of the CRC modeling session&lt;br /&gt;
**It can include explanation of CRC Cards and creation of sample CRC Cards&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Brainstorming&lt;br /&gt;
**A brainstorming session at the very beginning brings in new ideas, new perspectives to the problem being solved.&lt;br /&gt;
**Every team member can contribute with innovative ideas&lt;br /&gt;
**A list of candidate classes can be drawn up from this activity&lt;br /&gt;
&lt;br /&gt;
For e.g considering the above example, we can identify candidate classes by listing down the nouns relating to the game of blackjack. Say, game, blackjack, dealer, players, card, deck, hand, bet, king, queen, jack, ace, suit, winner, game.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Selecting a scenario and Core classes&lt;br /&gt;
**The scenario chosen at the beginning of the session should be simple, clear and well documented&lt;br /&gt;
**Related scenarios should be identified and dealt with separately&lt;br /&gt;
**Identification of critical classes from the candidate class list is also very important&lt;br /&gt;
**This helps to eliminate irrelevant classes and review remaining classes&lt;br /&gt;
**This also helps clarify the system scope&lt;br /&gt;
&lt;br /&gt;
For e.g we can apply the elimination process to the candidate class list. We can eliminate blackjack as it is the name of the system. ‘House’ can be eliminated as it is another name for the dealer. Also, instead of making ace, king, queen and jack as separate classes, we can represent them as attributes of individual classes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Create initial CRC cards&lt;br /&gt;
From the information gathered in the step above, CRC cards are written&lt;br /&gt;
&lt;br /&gt;
[[Image:Deck1.jpg |frame|center|Deck CRC Card]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Dealer.jpg |frame|center|Dealer CRC Card]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Player.jpg |frame|center|Player CRC Card]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Creating a CRC Model&lt;br /&gt;
**After the CRC cards  are written, they are placed appropriately, with collaborating classes closer to each other.&lt;br /&gt;
**Accordingly, place each card in position till the entire picture of the system is finalized.&lt;br /&gt;
**This process may have to be done in several iterations to get a refined view of the system to be modeled.&lt;br /&gt;
&lt;br /&gt;
For more information on using CRC Cards please refer to http://alistair.cockburn.us/Using+CRC+cards&lt;br /&gt;
&lt;br /&gt;
==CRC Team==&lt;br /&gt;
&lt;br /&gt;
*Domain Experts:&lt;br /&gt;
**Core team that writes the cards&lt;br /&gt;
**Have good business domain knowledge for which the system is being designed&lt;br /&gt;
**Usually are 3-5 people&lt;br /&gt;
&lt;br /&gt;
*Object Oriented Design Analyst:&lt;br /&gt;
**Analysts and developers those are familiar with object oriented design methodologies&lt;br /&gt;
**Usually are 1-2 people&lt;br /&gt;
&lt;br /&gt;
*Facilitator:&lt;br /&gt;
**Most important member who conducts the CRC modeling session&lt;br /&gt;
**Acts as an intermediary when there is difference of opinion regarding class responsibilities and paths of collaboration&lt;br /&gt;
**Usually a single person&lt;br /&gt;
&lt;br /&gt;
*Scribe:&lt;br /&gt;
**Responsible for documenting any business logic that evolves by way of discussions during the CRC modeling process.&lt;br /&gt;
**This documentation can be added to the requirements and business documents which can be used by design analysts at a later stage&lt;br /&gt;
**Usually are 1-2 people&lt;br /&gt;
&lt;br /&gt;
==Case study==&lt;br /&gt;
&lt;br /&gt;
To understand the working of CRC card modeling better, here is an example of an ATM system designed using CRC cards. Here, the software system under consideration has to control an automated teller machine. The ATM has a magnetic stripe reader for reading an ATM card, a customer console (keyboard and display) for interaction with the customer, a slot for depositing envelopes, a dispenser for cash (in multiples of $20), a printer for printing customer receipts, and a key-operated switch to allow an operator to start or stop the machine. Also, the ATM will communicate with the bank's computer over an appropriate communication link.&lt;br /&gt;
&lt;br /&gt;
To perform a transaction, a customer will be required to insert an ATM card and enter a personal identification number (PIN) - both of which will be sent to the bank for validation. The customer will then be able to perform one or more transactions. The card will be retained in the machine until the customer indicates that there are no further transactions, at which point it will be returned. For more on the case study.&lt;br /&gt;
&lt;br /&gt;
http://www.math-cs.gordon.edu/courses/cps211/ATMExample/CRCCards.html&lt;br /&gt;
&lt;br /&gt;
==Metrics for CRC Analysis==&lt;br /&gt;
&lt;br /&gt;
CRC analysis metrics can help evaluate the level of ease in designing and coding with CRC cards. These metrics also contribute to other project planning factors to give overall sense of project development.These metrics can be calculated easily and quickly without the need of special tools. Three metrics are broadly identified as: maximum depth of inheritance, the number of responsibilities assigned to each class and the number of collaborators for a class. With the example below an attempt has been made to explain these metrics.In the diagram, black line indicates inheritance while blue line indicates collaboration. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Class_hierarchy1.png|frame|center|CRC metrics example]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Maximum depth of inheritance===&lt;br /&gt;
&lt;br /&gt;
This metric gives an idea of the class hierarchy. It is the count of number of subclasses in the hierarchy.From the diagram,it can be seen that Part Time student is a subclass of Distance Education which in turn is a subclass of student.Thus,maximum depth of inheritance in this case is two with  reference to class Student. Each subclass shares the overall functions defined in class Student. For short hierarchies, this is a positive benefit of OO. If number of subclasses become too long, it becomes difficult to trace the flow of functions, resulting in overly complex systems. This makes testing, reviewing and reusing difficult.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Number of collaborators===&lt;br /&gt;
&lt;br /&gt;
This is the count of all the supporting classes to help a class.In the diagram,there are four collaborators for class Student:Teacher,Library,Computer Labs and Gymnasium.Confusion between collaborators and subclasses may result in creation many collaborators.This will affect the encapsulation of the design.Typical value for this metric is eight.If this value is large,design may be reviewed to see if inheritance is implemented correctly.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Number of responsibilities===&lt;br /&gt;
This is the count of clearly defined set of duties to each class.For example class Student may have functions like Attending  Lectures,&lt;br /&gt;
Maintaining a certain GPA,Taking the required courses. In this case number of responsibilities is three.Responsibilities should be distributed amongst classes to cover the whole system. This would avoid an imbalance in design. We need to refine the overly complex class into a series of simpler objects. This will make the system easier to understand, implement and reuse. For most commercial transaction oriented systems, values approximately between eight and eighteen are common.&lt;br /&gt;
&lt;br /&gt;
==Advantages==&lt;br /&gt;
* CRC cards create a first-cut analysis for complex systems, and let analysts and users examine the operation of discrete subsystems.&lt;br /&gt;
* CRC cards are invaluable input into more formal methods. Agile development methods often use CRC cards. They are popular as a front end to UML&lt;br /&gt;
* CRC cards are a great way to build teamwork and common understanding.&lt;br /&gt;
* Part of the CRC card attraction is their simplicity. Developers can use them with little formal training and just paper and pencil for tools&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Software for CRC card==&lt;br /&gt;
&lt;br /&gt;
It is difficult to maintain, change, share paper based cards for large projects. Software for CRC cards offer many advantages in such scenarios such as&lt;br /&gt;
&lt;br /&gt;
*Easy Revision: As CRC cards are part of development process, constant changes are made by developers to edit the information .Change to one card might require changes to other cards. It becomes difficult to handle such interdependent changes for various fields such as attribute, responsibility, collaboration on paper based system. Software will reflect one change to every corresponding reference in the design. This saves a lot of time and also avoids the manual errors that may be evident on paper based system.&lt;br /&gt;
&lt;br /&gt;
*Easy sharing: Paper based systems make sharing difficult by necessitating team members to be physically present at one location. Using software, team members can work from different locations.&lt;br /&gt;
&lt;br /&gt;
*Better representation: It is possible to group cards from different perspective such as hierarchy, attributes, parent. This helps better understanding and thinking. Some software also aid graphical display of data.&lt;br /&gt;
&lt;br /&gt;
*Inputs to methodologies: Software for CRC cards can provide the input files for UML class diagram generation software saving lot of time in the development cycle.&lt;br /&gt;
&lt;br /&gt;
*Making additions to existing code: Many projects   make addition to existing code or reuse already developed code in their project. Software can produce CRC cards with existing source code as an input. This would help the team to understand the code in efficient manner and less time.&lt;br /&gt;
&lt;br /&gt;
However,it comes with a cost.Based on required features and cost,team may select from various commercially available software products.Below are few links:&lt;br /&gt;
&lt;br /&gt;
*quickCRC:http://www.excelsoftware.com/&lt;br /&gt;
*CRC card support is part of Visual Paradigm for UML:  http://www.visual-paradigm.com/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==CRC cards Limitations and formal object modeling methodologies(UML)==&lt;br /&gt;
&lt;br /&gt;
CRC cards are used to form initial class definitions but alone are not sufficient to be directly coded into software for large systems.It is difficult to keep track of cards as the systems grows and work on subsystems simultaneously and independently.CRC cards lack the notational power to document all the components of a system and cannot provide implementation specifications such as transition states of objects during its life cycle,interface design,data structures,performance and resource utilization. To bridge this gap,more formal object modeling methodology such as UML is used.UML captures the bigger picture.It provides detailed mapping of use cases(operations),object state transitions,inter-process communication functionality,algorithm design.UML is very effective in incremental model of SDLC where  lot of details need to captured for precise addition.Information  about requirements is represented in detail and whole picture of the system and users is visible.CRC cards are used as effective inputs to UML.CRC card techniques such as brainstorming and role play help enhance functional understanding which helps in preparing better UML use cases.CRC cards given the content for  class diagrams,inheritance diagrams,class specifications and object specifications for UML.CRC cards can keep track of attributes that can aid listing them as a part of class specification in UML.Most CRC card software have the facility to export CRC analysis file that can be directly used as an input for UML.Following case study develops UML with the help of CRC cards:&lt;br /&gt;
&lt;br /&gt;
http://www.math.gordon.edu/courses/cs211/ATMExample/&lt;br /&gt;
&lt;br /&gt;
==Summary==&lt;br /&gt;
CRC cards are very useful to form the base of object oriented methodology.Techniques such as brain storming and role play enhance the understanding of requirements.CRC automation makes card handling and sharing  quick and efficient.For large projects more formal technology such as UML is required but CRC cards can provide a very good starting point.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Reference==&lt;br /&gt;
[1]Introduction to CRC Cards: http://www.softstar-inc.com/Download/Intro%20to%20CRC.pdf&lt;br /&gt;
[2]CRC Cards for ATM : http://www.math-cs.gordon.edu/courses/cps211/ATMExample/CRCCards.html&lt;br /&gt;
[3]UML methodology for ATM :http://www.math.gordon.edu/courses/cs211/ATMExample&lt;br /&gt;
[4]CRC software:&lt;br /&gt;
*quickCRC:http://www.excelsoftware.com/&lt;br /&gt;
*Visual Paradigm:  http://www.visual-paradigm.com/            &lt;br /&gt;
[5]Bellin, D and Simone, S.S ‘The CRC Card Book’, Addison Wesley, 1997&lt;/div&gt;</summary>
		<author><name>Bluehat</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=User:Bluehat&amp;diff=33815</id>
		<title>User:Bluehat</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=User:Bluehat&amp;diff=33815"/>
		<updated>2010-09-08T17:13:04Z</updated>

		<summary type="html">&lt;p&gt;Bluehat: /* Reference */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
The onset of the object oriented paradigm in the software industry brought about a big change in the basic approach to system design and the software development life cycle.The major task in the development of any application using the object oriented paradigm is to identify ‘classes’, and how these classes interact and collaborate with each other in the system scope. &lt;br /&gt;
&lt;br /&gt;
Whenever a system is designed with classes, each class has a specific role to play in the system.It has certain responsibilities and each class collaborates with other classes to provide the complete system functionality. In such a scenario, identifying classes becomes the key to a good system design.Although it seems to be a simple,intuitive process,identifying classes can be quite complex when it comes to large scale systems. &lt;br /&gt;
&lt;br /&gt;
One such technique for identification of classes that make up the system and its collaborations is the ‘CRC Card’ technique. The concept of CRC cards was first put forth by Kent Beck and Ward Cunningham and it became very popular as it is easy to use and it supports development of any kind of object oriented development regardless of its scale,the method used, the technology or the language used for development&lt;br /&gt;
&lt;br /&gt;
==Definition==&lt;br /&gt;
Class Responsibility Collaboration (CRC) cards is an object-oriented design method that uses ordinary 3x5 index cards card made for each class containing responsibilities (knowledge and services) and collaborators (interactions with other classes). The cards provide an informal, intuitive way for group members to work on object design together.&lt;br /&gt;
A typical CRC card layout is shown below.&lt;br /&gt;
[[Image:Crccard2.jpg|frame|center|CRC CARD Template]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example: Consider a Student class where a student can enroll for a seminar. In this case ‘Student’ will be one class and ‘Seminar’ can be another class that collaborates with the Student class.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:CrcStudent.jpg|frame|center|Student CRC Card ]]&lt;br /&gt;
&lt;br /&gt;
To know more about CRC cards please refer to http://www.hsanchez.net/repository/hsanchez-PLCRC-plop04.pdf&lt;br /&gt;
&lt;br /&gt;
==Principle and Process==&lt;br /&gt;
&lt;br /&gt;
===CRC Principle===&lt;br /&gt;
&lt;br /&gt;
A CRC model includes a collection of cards and each card is divided into three sections. &lt;br /&gt;
*Class Name: &lt;br /&gt;
**Appears on the top of the CRC card&lt;br /&gt;
**Class denotes a set of similar objects that are being modeled in the system&lt;br /&gt;
&lt;br /&gt;
*Responsibilities:&lt;br /&gt;
**Appears on the left hand side of the CRC card&lt;br /&gt;
**It is a list of the responsibilities of the class i.e. things a class can do with its knowledge&lt;br /&gt;
&lt;br /&gt;
*Collaborators:&lt;br /&gt;
**Appear on the right hand side of the CRC card&lt;br /&gt;
**They are other classes that the class works with to get information or perform a certain function&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===CRC Process===&lt;br /&gt;
&lt;br /&gt;
CRC modeling process includes the users, analysts and developers bringing together the entire development team to form a common understanding of an OO development project.For e.g consider a software application to implement a game of blackjack. To implement the CRC technique to design this software, following steps are taken:&lt;br /&gt;
&lt;br /&gt;
*Explanation of the CRC Technique&lt;br /&gt;
**The facilitator explains the purpose of the CRC modeling session&lt;br /&gt;
**It can include explanation of CRC Cards and creation of sample CRC Cards&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Brainstorming&lt;br /&gt;
**A brainstorming session at the very beginning brings in new ideas, new perspectives to the problem being solved.&lt;br /&gt;
**Every team member can contribute with innovative ideas&lt;br /&gt;
**A list of candidate classes can be drawn up from this activity&lt;br /&gt;
&lt;br /&gt;
For e.g considering the above example, we can identify candidate classes by listing down the nouns relating to the game of blackjack. Say, game, blackjack, dealer, players, card, deck, hand, bet, king, queen, jack, ace, suit, winner, game.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Selecting a scenario and Core classes&lt;br /&gt;
**The scenario chosen at the beginning of the session should be simple, clear and well documented&lt;br /&gt;
**Related scenarios should be identified and dealt with separately&lt;br /&gt;
**Identification of critical classes from the candidate class list is also very important&lt;br /&gt;
**This helps to eliminate irrelevant classes and review remaining classes&lt;br /&gt;
**This also helps clarify the system scope&lt;br /&gt;
&lt;br /&gt;
For e.g we can apply the elimination process to the candidate class list. We can eliminate blackjack as it is the name of the system. ‘House’ can be eliminated as it is another name for the dealer. Also, instead of making ace, king, queen and jack as separate classes, we can represent them as attributes of individual classes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Create initial CRC cards&lt;br /&gt;
From the information gathered in the step above, CRC cards are written&lt;br /&gt;
&lt;br /&gt;
[[Image:Deck1.jpg |frame|center|Deck CRC Card]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Dealer.jpg |frame|center|Dealer CRC Card]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Player.jpg |frame|center|Player CRC Card]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Creating a CRC Model&lt;br /&gt;
**After the CRC cards  are written, they are placed appropriately, with collaborating classes closer to each other.&lt;br /&gt;
**Accordingly, place each card in position till the entire picture of the system is finalized.&lt;br /&gt;
**This process may have to be done in several iterations to get a refined view of the system to be modeled.&lt;br /&gt;
&lt;br /&gt;
For more information on using CRC Cards please refer to http://alistair.cockburn.us/Using+CRC+cards&lt;br /&gt;
&lt;br /&gt;
==CRC Team==&lt;br /&gt;
&lt;br /&gt;
*Domain Experts:&lt;br /&gt;
**Core team that writes the cards&lt;br /&gt;
**Have good business domain knowledge for which the system is being designed&lt;br /&gt;
**Usually are 3-5 people&lt;br /&gt;
&lt;br /&gt;
*Object Oriented Design Analyst:&lt;br /&gt;
**Analysts and developers those are familiar with object oriented design methodologies&lt;br /&gt;
**Usually are 1-2 people&lt;br /&gt;
&lt;br /&gt;
*Facilitator:&lt;br /&gt;
**Most important member who conducts the CRC modeling session&lt;br /&gt;
**Acts as an intermediary when there is difference of opinion regarding class responsibilities and paths of collaboration&lt;br /&gt;
**Usually a single person&lt;br /&gt;
&lt;br /&gt;
*Scribe:&lt;br /&gt;
**Responsible for documenting any business logic that evolves by way of discussions during the CRC modeling process.&lt;br /&gt;
**This documentation can be added to the requirements and business documents which can be used by design analysts at a later stage&lt;br /&gt;
**Usually are 1-2 people&lt;br /&gt;
&lt;br /&gt;
==Case study==&lt;br /&gt;
&lt;br /&gt;
To understand the working of CRC card modeling better, here is an example of an ATM system designed using CRC cards. Here, the software system under consideration has to control an automated teller machine. The ATM has a magnetic stripe reader for reading an ATM card, a customer console (keyboard and display) for interaction with the customer, a slot for depositing envelopes, a dispenser for cash (in multiples of $20), a printer for printing customer receipts, and a key-operated switch to allow an operator to start or stop the machine. Also, the ATM will communicate with the bank's computer over an appropriate communication link.&lt;br /&gt;
&lt;br /&gt;
To perform a transaction, a customer will be required to insert an ATM card and enter a personal identification number (PIN) - both of which will be sent to the bank for validation. The customer will then be able to perform one or more transactions. The card will be retained in the machine until the customer indicates that there are no further transactions, at which point it will be returned. For more on the case study.&lt;br /&gt;
&lt;br /&gt;
http://www.math-cs.gordon.edu/courses/cps211/ATMExample/CRCCards.html&lt;br /&gt;
&lt;br /&gt;
==Metrics for CRC Analysis==&lt;br /&gt;
&lt;br /&gt;
CRC analysis metrics can help evaluate the level of ease in designing and coding with CRC cards. These metrics also contribute to other project planning factors to give overall sense of project development.These metrics can be calculated easily and quickly without the need of special tools. Three metrics are broadly identified as: maximum depth of inheritance, the number of responsibilities assigned to each class and the number of collaborators for a class. With the example below an attempt has been made to explain these metrics.In the diagram, black line indicates inheritance while blue line indicates collaboration. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Class_hierarchy1.png|frame|center|CRC metrics example]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Maximum depth of inheritance===&lt;br /&gt;
&lt;br /&gt;
This metric gives an idea of the class hierarchy. It is the count of number of subclasses in the hierarchy.From the diagram,it can be seen that Part Time student is a subclass of Distance Education which in turn is a subclass of student.Thus,maximum depth of inheritance in this case is two with  reference to class Student. Each subclass shares the overall functions defined in class Student. For short hierarchies, this is a positive benefit of OO. If number of subclasses become too long, it becomes difficult to trace the flow of functions, resulting in overly complex systems. This makes testing, reviewing and reusing difficult.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Number of collaborators===&lt;br /&gt;
&lt;br /&gt;
This is the count of all the supporting classes to help a class.In the diagram,there are four collaborators for class Student:Teacher,Library,Computer Labs and Gymnasium.Confusion between collaborators and subclasses may result in creation many collaborators.This will affect the encapsulation of the design.Typical value for this metric is eight.If this value is large,design may be reviewed to see if inheritance is implemented correctly.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Number of responsibilities===&lt;br /&gt;
This is the count of clearly defined set of duties to each class.For example class Student may have functions like Attending  Lectures,&lt;br /&gt;
Maintaining a certain GPA,Taking the required courses. In this case number of responsibilities is three.Responsibilities should be distributed amongst classes to cover the whole system. This would avoid an imbalance in design. We need to refine the overly complex class into a series of simpler objects. This will make the system easier to understand, implement and reuse. For most commercial transaction oriented systems, values approximately between eight and eighteen are common.&lt;br /&gt;
&lt;br /&gt;
==Advantages==&lt;br /&gt;
* CRC cards create a first-cut analysis for complex systems, and let analysts and users examine the operation of discrete subsystems.&lt;br /&gt;
* CRC cards are invaluable input into more formal methods. Agile development methods often use CRC cards. They are popular as a front end to UML&lt;br /&gt;
* CRC cards are a great way to build teamwork and common understanding.&lt;br /&gt;
* Part of the CRC card attraction is their simplicity. Developers can use them with little formal training and just paper and pencil for tools&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Software for CRC card==&lt;br /&gt;
&lt;br /&gt;
It is difficult to maintain, change, share paper based cards for large projects. Software for CRC cards offer many advantages in such scenarios such as&lt;br /&gt;
&lt;br /&gt;
*Easy Revision: As CRC cards are part of development process, constant changes are made by developers to edit the information .Change to one card might require changes to other cards. It becomes difficult to handle such interdependent changes for various fields such as attribute, responsibility, collaboration on paper based system. Software will reflect one change to every corresponding reference in the design. This saves a lot of time and also avoids the manual errors that may be evident on paper based system.&lt;br /&gt;
&lt;br /&gt;
*Easy sharing: Paper based systems make sharing difficult by necessitating team members to be physically present at one location. Using software, team members can work from different locations.&lt;br /&gt;
&lt;br /&gt;
*Better representation: It is possible to group cards from different perspective such as hierarchy, attributes, parent. This helps better understanding and thinking. Some software also aid graphical display of data.&lt;br /&gt;
&lt;br /&gt;
*Inputs to methodologies: Software for CRC cards can provide the input files for UML class diagram generation software saving lot of time in the development cycle.&lt;br /&gt;
&lt;br /&gt;
*Making additions to existing code: Many projects   make addition to existing code or reuse already developed code in their project. Software can produce CRC cards with existing source code as an input. This would help the team to understand the code in efficient manner and less time.&lt;br /&gt;
&lt;br /&gt;
However,it comes with a cost.Based on required features and cost,team may select from various commercially available software products.Below are few links:&lt;br /&gt;
&lt;br /&gt;
*quickCRC:http://www.excelsoftware.com/&lt;br /&gt;
*CRC card support is part of Visual Paradigm for UML:  http://www.visual-paradigm.com/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==CRC cards Limitations and formal object modeling methodologies(UML)==&lt;br /&gt;
&lt;br /&gt;
CRC cards are used to form initial class definitions but alone are not sufficient to be directly coded into software for large systems.It is difficult to keep track of cards as the systems grows and work on subsystems simultaneously and independently.CRC cards lack the notational power to document all the components of a system and cannot provide implementation specifications such as transition states of objects during its life cycle,interface design,data structures,performance and resource utilization. To bridge this gap,more formal object modeling methodology such as UML is used.UML captures the bigger picture.It provides detailed mapping of use cases(operations),object state transitions,inter-process communication functionality,algorithm design.UML is very effective in incremental model of SDLC where  lot of details need to captured for precise addition.Information  about requirements is represented in detail and whole picture of the system and users is visible.CRC cards are used as effective inputs to UML.CRC card techniques such as brainstorming and role play help enhance functional understanding which helps in preparing better UML use cases.CRC cards given the content for  class diagrams,inheritance diagrams,class specifications and object specifications for UML.CRC cards can keep track of attributes that can aid listing them as a part of class specification in UML.Most CRC card software have the facility to export CRC analysis file that can be directly used as an input for UML.Following case study develops UML with the help of CRC cards:&lt;br /&gt;
&lt;br /&gt;
http://www.math.gordon.edu/courses/cs211/ATMExample/&lt;br /&gt;
&lt;br /&gt;
==Summary==&lt;br /&gt;
CRC cards are very useful to form the base of object oriented methodology.Techniques such as brain storming and role play enhance the understanding of requirements.CRC automation makes card handling and sharing  quick and efficient.For large projects more formal technology such as UML is required but CRC cards can provide a very good starting point.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Reference==&lt;br /&gt;
[1]Introduction to CRC Cards: http://www.softstar-inc.com/Download/Intro%20to%20CRC.pdf&lt;br /&gt;
[2]CRC Cards for ATM : http://www.math-cs.gordon.edu/courses/cps211/ATMExample/CRCCards.html&lt;br /&gt;
[3]UML methodology for ATM :http://www.math.gordon.edu/courses/cs211/ATMExample/&lt;br /&gt;
[4]CRC software:&lt;br /&gt;
*quickCRC:http://www.excelsoftware.com/&lt;br /&gt;
*Visual Paradigm:  http://www.visual-paradigm.com/            &lt;br /&gt;
[5]Bellin, D and Simone, S.S ‘The CRC Card Book’, Addison Wesley, 1997&lt;/div&gt;</summary>
		<author><name>Bluehat</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=User:Bluehat&amp;diff=33814</id>
		<title>User:Bluehat</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=User:Bluehat&amp;diff=33814"/>
		<updated>2010-09-08T17:12:45Z</updated>

		<summary type="html">&lt;p&gt;Bluehat: /* Reference */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
The onset of the object oriented paradigm in the software industry brought about a big change in the basic approach to system design and the software development life cycle.The major task in the development of any application using the object oriented paradigm is to identify ‘classes’, and how these classes interact and collaborate with each other in the system scope. &lt;br /&gt;
&lt;br /&gt;
Whenever a system is designed with classes, each class has a specific role to play in the system.It has certain responsibilities and each class collaborates with other classes to provide the complete system functionality. In such a scenario, identifying classes becomes the key to a good system design.Although it seems to be a simple,intuitive process,identifying classes can be quite complex when it comes to large scale systems. &lt;br /&gt;
&lt;br /&gt;
One such technique for identification of classes that make up the system and its collaborations is the ‘CRC Card’ technique. The concept of CRC cards was first put forth by Kent Beck and Ward Cunningham and it became very popular as it is easy to use and it supports development of any kind of object oriented development regardless of its scale,the method used, the technology or the language used for development&lt;br /&gt;
&lt;br /&gt;
==Definition==&lt;br /&gt;
Class Responsibility Collaboration (CRC) cards is an object-oriented design method that uses ordinary 3x5 index cards card made for each class containing responsibilities (knowledge and services) and collaborators (interactions with other classes). The cards provide an informal, intuitive way for group members to work on object design together.&lt;br /&gt;
A typical CRC card layout is shown below.&lt;br /&gt;
[[Image:Crccard2.jpg|frame|center|CRC CARD Template]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example: Consider a Student class where a student can enroll for a seminar. In this case ‘Student’ will be one class and ‘Seminar’ can be another class that collaborates with the Student class.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:CrcStudent.jpg|frame|center|Student CRC Card ]]&lt;br /&gt;
&lt;br /&gt;
To know more about CRC cards please refer to http://www.hsanchez.net/repository/hsanchez-PLCRC-plop04.pdf&lt;br /&gt;
&lt;br /&gt;
==Principle and Process==&lt;br /&gt;
&lt;br /&gt;
===CRC Principle===&lt;br /&gt;
&lt;br /&gt;
A CRC model includes a collection of cards and each card is divided into three sections. &lt;br /&gt;
*Class Name: &lt;br /&gt;
**Appears on the top of the CRC card&lt;br /&gt;
**Class denotes a set of similar objects that are being modeled in the system&lt;br /&gt;
&lt;br /&gt;
*Responsibilities:&lt;br /&gt;
**Appears on the left hand side of the CRC card&lt;br /&gt;
**It is a list of the responsibilities of the class i.e. things a class can do with its knowledge&lt;br /&gt;
&lt;br /&gt;
*Collaborators:&lt;br /&gt;
**Appear on the right hand side of the CRC card&lt;br /&gt;
**They are other classes that the class works with to get information or perform a certain function&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===CRC Process===&lt;br /&gt;
&lt;br /&gt;
CRC modeling process includes the users, analysts and developers bringing together the entire development team to form a common understanding of an OO development project.For e.g consider a software application to implement a game of blackjack. To implement the CRC technique to design this software, following steps are taken:&lt;br /&gt;
&lt;br /&gt;
*Explanation of the CRC Technique&lt;br /&gt;
**The facilitator explains the purpose of the CRC modeling session&lt;br /&gt;
**It can include explanation of CRC Cards and creation of sample CRC Cards&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Brainstorming&lt;br /&gt;
**A brainstorming session at the very beginning brings in new ideas, new perspectives to the problem being solved.&lt;br /&gt;
**Every team member can contribute with innovative ideas&lt;br /&gt;
**A list of candidate classes can be drawn up from this activity&lt;br /&gt;
&lt;br /&gt;
For e.g considering the above example, we can identify candidate classes by listing down the nouns relating to the game of blackjack. Say, game, blackjack, dealer, players, card, deck, hand, bet, king, queen, jack, ace, suit, winner, game.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Selecting a scenario and Core classes&lt;br /&gt;
**The scenario chosen at the beginning of the session should be simple, clear and well documented&lt;br /&gt;
**Related scenarios should be identified and dealt with separately&lt;br /&gt;
**Identification of critical classes from the candidate class list is also very important&lt;br /&gt;
**This helps to eliminate irrelevant classes and review remaining classes&lt;br /&gt;
**This also helps clarify the system scope&lt;br /&gt;
&lt;br /&gt;
For e.g we can apply the elimination process to the candidate class list. We can eliminate blackjack as it is the name of the system. ‘House’ can be eliminated as it is another name for the dealer. Also, instead of making ace, king, queen and jack as separate classes, we can represent them as attributes of individual classes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Create initial CRC cards&lt;br /&gt;
From the information gathered in the step above, CRC cards are written&lt;br /&gt;
&lt;br /&gt;
[[Image:Deck1.jpg |frame|center|Deck CRC Card]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Dealer.jpg |frame|center|Dealer CRC Card]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Player.jpg |frame|center|Player CRC Card]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Creating a CRC Model&lt;br /&gt;
**After the CRC cards  are written, they are placed appropriately, with collaborating classes closer to each other.&lt;br /&gt;
**Accordingly, place each card in position till the entire picture of the system is finalized.&lt;br /&gt;
**This process may have to be done in several iterations to get a refined view of the system to be modeled.&lt;br /&gt;
&lt;br /&gt;
For more information on using CRC Cards please refer to http://alistair.cockburn.us/Using+CRC+cards&lt;br /&gt;
&lt;br /&gt;
==CRC Team==&lt;br /&gt;
&lt;br /&gt;
*Domain Experts:&lt;br /&gt;
**Core team that writes the cards&lt;br /&gt;
**Have good business domain knowledge for which the system is being designed&lt;br /&gt;
**Usually are 3-5 people&lt;br /&gt;
&lt;br /&gt;
*Object Oriented Design Analyst:&lt;br /&gt;
**Analysts and developers those are familiar with object oriented design methodologies&lt;br /&gt;
**Usually are 1-2 people&lt;br /&gt;
&lt;br /&gt;
*Facilitator:&lt;br /&gt;
**Most important member who conducts the CRC modeling session&lt;br /&gt;
**Acts as an intermediary when there is difference of opinion regarding class responsibilities and paths of collaboration&lt;br /&gt;
**Usually a single person&lt;br /&gt;
&lt;br /&gt;
*Scribe:&lt;br /&gt;
**Responsible for documenting any business logic that evolves by way of discussions during the CRC modeling process.&lt;br /&gt;
**This documentation can be added to the requirements and business documents which can be used by design analysts at a later stage&lt;br /&gt;
**Usually are 1-2 people&lt;br /&gt;
&lt;br /&gt;
==Case study==&lt;br /&gt;
&lt;br /&gt;
To understand the working of CRC card modeling better, here is an example of an ATM system designed using CRC cards. Here, the software system under consideration has to control an automated teller machine. The ATM has a magnetic stripe reader for reading an ATM card, a customer console (keyboard and display) for interaction with the customer, a slot for depositing envelopes, a dispenser for cash (in multiples of $20), a printer for printing customer receipts, and a key-operated switch to allow an operator to start or stop the machine. Also, the ATM will communicate with the bank's computer over an appropriate communication link.&lt;br /&gt;
&lt;br /&gt;
To perform a transaction, a customer will be required to insert an ATM card and enter a personal identification number (PIN) - both of which will be sent to the bank for validation. The customer will then be able to perform one or more transactions. The card will be retained in the machine until the customer indicates that there are no further transactions, at which point it will be returned. For more on the case study.&lt;br /&gt;
&lt;br /&gt;
http://www.math-cs.gordon.edu/courses/cps211/ATMExample/CRCCards.html&lt;br /&gt;
&lt;br /&gt;
==Metrics for CRC Analysis==&lt;br /&gt;
&lt;br /&gt;
CRC analysis metrics can help evaluate the level of ease in designing and coding with CRC cards. These metrics also contribute to other project planning factors to give overall sense of project development.These metrics can be calculated easily and quickly without the need of special tools. Three metrics are broadly identified as: maximum depth of inheritance, the number of responsibilities assigned to each class and the number of collaborators for a class. With the example below an attempt has been made to explain these metrics.In the diagram, black line indicates inheritance while blue line indicates collaboration. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Class_hierarchy1.png|frame|center|CRC metrics example]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Maximum depth of inheritance===&lt;br /&gt;
&lt;br /&gt;
This metric gives an idea of the class hierarchy. It is the count of number of subclasses in the hierarchy.From the diagram,it can be seen that Part Time student is a subclass of Distance Education which in turn is a subclass of student.Thus,maximum depth of inheritance in this case is two with  reference to class Student. Each subclass shares the overall functions defined in class Student. For short hierarchies, this is a positive benefit of OO. If number of subclasses become too long, it becomes difficult to trace the flow of functions, resulting in overly complex systems. This makes testing, reviewing and reusing difficult.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Number of collaborators===&lt;br /&gt;
&lt;br /&gt;
This is the count of all the supporting classes to help a class.In the diagram,there are four collaborators for class Student:Teacher,Library,Computer Labs and Gymnasium.Confusion between collaborators and subclasses may result in creation many collaborators.This will affect the encapsulation of the design.Typical value for this metric is eight.If this value is large,design may be reviewed to see if inheritance is implemented correctly.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Number of responsibilities===&lt;br /&gt;
This is the count of clearly defined set of duties to each class.For example class Student may have functions like Attending  Lectures,&lt;br /&gt;
Maintaining a certain GPA,Taking the required courses. In this case number of responsibilities is three.Responsibilities should be distributed amongst classes to cover the whole system. This would avoid an imbalance in design. We need to refine the overly complex class into a series of simpler objects. This will make the system easier to understand, implement and reuse. For most commercial transaction oriented systems, values approximately between eight and eighteen are common.&lt;br /&gt;
&lt;br /&gt;
==Advantages==&lt;br /&gt;
* CRC cards create a first-cut analysis for complex systems, and let analysts and users examine the operation of discrete subsystems.&lt;br /&gt;
* CRC cards are invaluable input into more formal methods. Agile development methods often use CRC cards. They are popular as a front end to UML&lt;br /&gt;
* CRC cards are a great way to build teamwork and common understanding.&lt;br /&gt;
* Part of the CRC card attraction is their simplicity. Developers can use them with little formal training and just paper and pencil for tools&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Software for CRC card==&lt;br /&gt;
&lt;br /&gt;
It is difficult to maintain, change, share paper based cards for large projects. Software for CRC cards offer many advantages in such scenarios such as&lt;br /&gt;
&lt;br /&gt;
*Easy Revision: As CRC cards are part of development process, constant changes are made by developers to edit the information .Change to one card might require changes to other cards. It becomes difficult to handle such interdependent changes for various fields such as attribute, responsibility, collaboration on paper based system. Software will reflect one change to every corresponding reference in the design. This saves a lot of time and also avoids the manual errors that may be evident on paper based system.&lt;br /&gt;
&lt;br /&gt;
*Easy sharing: Paper based systems make sharing difficult by necessitating team members to be physically present at one location. Using software, team members can work from different locations.&lt;br /&gt;
&lt;br /&gt;
*Better representation: It is possible to group cards from different perspective such as hierarchy, attributes, parent. This helps better understanding and thinking. Some software also aid graphical display of data.&lt;br /&gt;
&lt;br /&gt;
*Inputs to methodologies: Software for CRC cards can provide the input files for UML class diagram generation software saving lot of time in the development cycle.&lt;br /&gt;
&lt;br /&gt;
*Making additions to existing code: Many projects   make addition to existing code or reuse already developed code in their project. Software can produce CRC cards with existing source code as an input. This would help the team to understand the code in efficient manner and less time.&lt;br /&gt;
&lt;br /&gt;
However,it comes with a cost.Based on required features and cost,team may select from various commercially available software products.Below are few links:&lt;br /&gt;
&lt;br /&gt;
*quickCRC:http://www.excelsoftware.com/&lt;br /&gt;
*CRC card support is part of Visual Paradigm for UML:  http://www.visual-paradigm.com/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==CRC cards Limitations and formal object modeling methodologies(UML)==&lt;br /&gt;
&lt;br /&gt;
CRC cards are used to form initial class definitions but alone are not sufficient to be directly coded into software for large systems.It is difficult to keep track of cards as the systems grows and work on subsystems simultaneously and independently.CRC cards lack the notational power to document all the components of a system and cannot provide implementation specifications such as transition states of objects during its life cycle,interface design,data structures,performance and resource utilization. To bridge this gap,more formal object modeling methodology such as UML is used.UML captures the bigger picture.It provides detailed mapping of use cases(operations),object state transitions,inter-process communication functionality,algorithm design.UML is very effective in incremental model of SDLC where  lot of details need to captured for precise addition.Information  about requirements is represented in detail and whole picture of the system and users is visible.CRC cards are used as effective inputs to UML.CRC card techniques such as brainstorming and role play help enhance functional understanding which helps in preparing better UML use cases.CRC cards given the content for  class diagrams,inheritance diagrams,class specifications and object specifications for UML.CRC cards can keep track of attributes that can aid listing them as a part of class specification in UML.Most CRC card software have the facility to export CRC analysis file that can be directly used as an input for UML.Following case study develops UML with the help of CRC cards:&lt;br /&gt;
&lt;br /&gt;
http://www.math.gordon.edu/courses/cs211/ATMExample/&lt;br /&gt;
&lt;br /&gt;
==Summary==&lt;br /&gt;
CRC cards are very useful to form the base of object oriented methodology.Techniques such as brain storming and role play enhance the understanding of requirements.CRC automation makes card handling and sharing  quick and efficient.For large projects more formal technology such as UML is required but CRC cards can provide a very good starting point.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Reference==&lt;br /&gt;
[1]Introduction to CRC Cards: http://www.softstar-inc.com/Download/Intro%20to%20CRC.pdf&lt;br /&gt;
[2]CRC Cards for ATM : http://www.math-cs.gordon.edu/courses/cps211/ATMExample/CRCCards.html&lt;br /&gt;
[3]UML methodology for ATM :http://www.math.gordon.edu/courses/cs211/ATMExample/&lt;br /&gt;
[4]CRC software:&lt;br /&gt;
**quickCRC:http://www.excelsoftware.com/&lt;br /&gt;
**Visual Paradigm:  http://www.visual-paradigm.com/            &lt;br /&gt;
[5]Bellin, D and Simone, S.S ‘The CRC Card Book’, Addison Wesley, 1997&lt;/div&gt;</summary>
		<author><name>Bluehat</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=User:Bluehat&amp;diff=33745</id>
		<title>User:Bluehat</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=User:Bluehat&amp;diff=33745"/>
		<updated>2010-09-08T14:58:24Z</updated>

		<summary type="html">&lt;p&gt;Bluehat: /* CRC Process */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
The onset of the object oriented paradigm in the software industry brought about a big change in the basic approach to system design and the software development life cycle.The major task in the development of any application using the object oriented paradigm is to identify ‘classes’, and how these classes interact and collaborate with each other in the system scope. &lt;br /&gt;
&lt;br /&gt;
Whenever a system is designed with classes, each class has a specific role to play in the system.It has certain responsibilities and each class collaborates with other classes to provide the complete system functionality. In such a scenario, identifying classes becomes the key to a good system design.Although it seems to be a simple,intuitive process,identifying classes can be quite complex when it comes to large scale systems. &lt;br /&gt;
&lt;br /&gt;
One such technique for identification of classes that make up the system and its collaborations is the ‘CRC Card’ technique. The concept of CRC cards was first put forth by Kent Beck and Ward Cunningham and it became very popular as it is easy to use and it supports development of any kind of object oriented development regardless of its scale,the method used, the technology or the language used for development&lt;br /&gt;
&lt;br /&gt;
==Definition==&lt;br /&gt;
Class Responsibility Collaboration (CRC) cards is an object-oriented design method that uses ordinary 3x5 index cards card made for each class containing responsibilities (knowledge and services) and collaborators (interactions with other classes). The cards provide an informal, intuitive way for group members to work on object design together.&lt;br /&gt;
A typical CRC card layout is shown below.&lt;br /&gt;
[[Image:Crccard2.jpg|frame|center|CRC CARD Template]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example: Consider a Student class where a student can enroll for a seminar. In this case ‘Student’ will be one class and ‘Seminar’ can be another class that collaborates with the Student class.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:CrcStudent.jpg|frame|center|Student CRC Card ]]&lt;br /&gt;
&lt;br /&gt;
To know more about CRC cards please refer to http://www.hsanchez.net/repository/hsanchez-PLCRC-plop04.pdf&lt;br /&gt;
&lt;br /&gt;
==Principle and Process==&lt;br /&gt;
&lt;br /&gt;
===CRC Principle===&lt;br /&gt;
&lt;br /&gt;
A CRC model includes a collection of cards and each card is divided into three sections. &lt;br /&gt;
*Class Name: &lt;br /&gt;
**Appears on the top of the CRC card&lt;br /&gt;
**Class denotes a set of similar objects that are being modeled in the system&lt;br /&gt;
&lt;br /&gt;
*Responsibilities:&lt;br /&gt;
**Appears on the left hand side of the CRC card&lt;br /&gt;
**It is a list of the responsibilities of the class i.e. things a class can do with its knowledge&lt;br /&gt;
&lt;br /&gt;
*Collaborators:&lt;br /&gt;
**Appear on the right hand side of the CRC card&lt;br /&gt;
**They are other classes that the class works with to get information or perform a certain function&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===CRC Process===&lt;br /&gt;
&lt;br /&gt;
CRC modeling process includes the users, analysts and developers bringing together the entire development team to form a common understanding of an OO development project.For e.g consider a software application to implement a game of blackjack. To implement the CRC technique to design this software, following steps are taken:&lt;br /&gt;
&lt;br /&gt;
*Explanation of the CRC Technique&lt;br /&gt;
**The facilitator explains the purpose of the CRC modeling session&lt;br /&gt;
**It can include explanation of CRC Cards and creation of sample CRC Cards&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Brainstorming&lt;br /&gt;
**A brainstorming session at the very beginning brings in new ideas, new perspectives to the problem being solved.&lt;br /&gt;
**Every team member can contribute with innovative ideas&lt;br /&gt;
**A list of candidate classes can be drawn up from this activity&lt;br /&gt;
&lt;br /&gt;
For e.g considering the above example, we can identify candidate classes by listing down the nouns relating to the game of blackjack. Say, game, blackjack, dealer, players, card, deck, hand, bet, king, queen, jack, ace, suit, winner, game.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Selecting a scenario and Core classes&lt;br /&gt;
**The scenario chosen at the beginning of the session should be simple, clear and well documented&lt;br /&gt;
**Related scenarios should be identified and dealt with separately&lt;br /&gt;
**Identification of critical classes from the candidate class list is also very important&lt;br /&gt;
**This helps to eliminate irrelevant classes and review remaining classes&lt;br /&gt;
**This also helps clarify the system scope&lt;br /&gt;
&lt;br /&gt;
For e.g we can apply the elimination process to the candidate class list. We can eliminate blackjack as it is the name of the system. ‘House’ can be eliminated as it is another name for the dealer. Also, instead of making ace, king, queen and jack as separate classes, we can represent them as attributes of individual classes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Create initial CRC cards&lt;br /&gt;
From the information gathered in the step above, CRC cards are written&lt;br /&gt;
&lt;br /&gt;
[[Image:Deck1.jpg |frame|center|Deck CRC Card]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Dealer.jpg |frame|center|Dealer CRC Card]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Player.jpg |frame|center|Player CRC Card]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Creating a CRC Model&lt;br /&gt;
**After the CRC cards  are written, they are placed appropriately, with collaborating classes closer to each other.&lt;br /&gt;
**Accordingly, place each card in position till the entire picture of the system is finalized.&lt;br /&gt;
**This process may have to be done in several iterations to get a refined view of the system to be modeled.&lt;br /&gt;
&lt;br /&gt;
For more information on using CRC Cards please refer to http://alistair.cockburn.us/Using+CRC+cards&lt;br /&gt;
&lt;br /&gt;
==CRC Team==&lt;br /&gt;
&lt;br /&gt;
*Domain Experts:&lt;br /&gt;
**Core team that writes the cards&lt;br /&gt;
**Have good business domain knowledge for which the system is being designed&lt;br /&gt;
**Usually are 3-5 people&lt;br /&gt;
&lt;br /&gt;
*Object Oriented Design Analyst:&lt;br /&gt;
**Analysts and developers those are familiar with object oriented design methodologies&lt;br /&gt;
**Usually are 1-2 people&lt;br /&gt;
&lt;br /&gt;
*Facilitator:&lt;br /&gt;
**Most important member who conducts the CRC modeling session&lt;br /&gt;
**Acts as an intermediary when there is difference of opinion regarding class responsibilities and paths of collaboration&lt;br /&gt;
**Usually a single person&lt;br /&gt;
&lt;br /&gt;
*Scribe:&lt;br /&gt;
**Responsible for documenting any business logic that evolves by way of discussions during the CRC modeling process.&lt;br /&gt;
**This documentation can be added to the requirements and business documents which can be used by design analysts at a later stage&lt;br /&gt;
**Usually are 1-2 people&lt;br /&gt;
&lt;br /&gt;
==Case study==&lt;br /&gt;
&lt;br /&gt;
To understand the working of CRC card modeling better, here is an example of an ATM system designed using CRC cards. Here, the software system under consideration has to control an automated teller machine. The ATM has a magnetic stripe reader for reading an ATM card, a customer console (keyboard and display) for interaction with the customer, a slot for depositing envelopes, a dispenser for cash (in multiples of $20), a printer for printing customer receipts, and a key-operated switch to allow an operator to start or stop the machine. Also, the ATM will communicate with the bank's computer over an appropriate communication link.&lt;br /&gt;
&lt;br /&gt;
To perform a transaction, a customer will be required to insert an ATM card and enter a personal identification number (PIN) - both of which will be sent to the bank for validation. The customer will then be able to perform one or more transactions. The card will be retained in the machine until the customer indicates that there are no further transactions, at which point it will be returned. For more on the case study.&lt;br /&gt;
&lt;br /&gt;
http://www.math-cs.gordon.edu/courses/cps211/ATMExample/CRCCards.html&lt;br /&gt;
&lt;br /&gt;
==Metrics for CRC Analysis==&lt;br /&gt;
&lt;br /&gt;
CRC analysis metrics can help evaluate the level of ease in designing and coding with CRC cards. These metrics also contribute to other project planning factors to give overall sense of project development.These metrics can be calculated easily and quickly without the need of special tools. Three metrics are broadly identified as: maximum depth of inheritance, the number of responsibilities assigned to each class and the number of collaborators for a class. With the example below an attempt has been made to explain these metrics.In the diagram, black line indicates inheritance while blue line indicates collaboration. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Class_hierarchy1.png|frame|center|CRC metrics example]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Maximum depth of inheritance===&lt;br /&gt;
&lt;br /&gt;
This metric gives an idea of the class hierarchy. It is the count of number of subclasses in the hierarchy.From the diagram,it can be seen that Part Time student is a subclass of Distance Education which in turn is a subclass of student.Thus,maximum depth of inheritance in this case is two with  reference to class Student. Each subclass shares the overall functions defined in class Student. For short hierarchies, this is a positive benefit of OO. If number of subclasses become too long, it becomes difficult to trace the flow of functions, resulting in overly complex systems. This makes testing, reviewing and reusing difficult.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Number of collaborators===&lt;br /&gt;
&lt;br /&gt;
This is the count of all the supporting classes to help a class.In the diagram,there are four collaborators for class Student:Teacher,Library,Computer Labs and Gymnasium.Confusion between collaborators and subclasses may result in creation many collaborators.This will affect the encapsulation of the design.Typical value for this metric is eight.If this value is large,design may be reviewed to see if inheritance is implemented correctly.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Number of responsibilities===&lt;br /&gt;
This is the count of clearly defined set of duties to each class.For example class Student may have functions like Attending  Lectures,&lt;br /&gt;
Maintaining a certain GPA,Taking the required courses. In this case number of responsibilities is three.Responsibilities should be distributed amongst classes to cover the whole system. This would avoid an imbalance in design. We need to refine the overly complex class into a series of simpler objects. This will make the system easier to understand, implement and reuse. For most commercial transaction oriented systems, values approximately between eight and eighteen are common.&lt;br /&gt;
&lt;br /&gt;
==Advantages==&lt;br /&gt;
* CRC cards create a first-cut analysis for complex systems, and let analysts and users examine the operation of discrete subsystems.&lt;br /&gt;
* CRC cards are invaluable input into more formal methods. Agile development methods often use CRC cards. They are popular as a front end to UML&lt;br /&gt;
* CRC cards are a great way to build teamwork and common understanding.&lt;br /&gt;
* Part of the CRC card attraction is their simplicity. Developers can use them with little formal training and just paper and pencil for tools&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Software for CRC card==&lt;br /&gt;
&lt;br /&gt;
It is difficult to maintain, change, share paper based cards for large projects. Software for CRC cards offer many advantages in such scenarios such as&lt;br /&gt;
&lt;br /&gt;
*Easy Revision: As CRC cards are part of development process, constant changes are made by developers to edit the information .Change to one card might require changes to other cards. It becomes difficult to handle such interdependent changes for various fields such as attribute, responsibility, collaboration on paper based system. Software will reflect one change to every corresponding reference in the design. This saves a lot of time and also avoids the manual errors that may be evident on paper based system.&lt;br /&gt;
&lt;br /&gt;
*Easy sharing: Paper based systems make sharing difficult by necessitating team members to be physically present at one location. Using software, team members can work from different locations.&lt;br /&gt;
&lt;br /&gt;
*Better representation: It is possible to group cards from different perspective such as hierarchy, attributes, parent. This helps better understanding and thinking. Some software also aid graphical display of data.&lt;br /&gt;
&lt;br /&gt;
*Inputs to methodologies: Software for CRC cards can provide the input files for UML class diagram generation software saving lot of time in the development cycle.&lt;br /&gt;
&lt;br /&gt;
*Making additions to existing code: Many projects   make addition to existing code or reuse already developed code in their project. Software can produce CRC cards with existing source code as an input. This would help the team to understand the code in efficient manner and less time.&lt;br /&gt;
&lt;br /&gt;
However,it comes with a cost.Based on required features and cost,team may select from various commercially available software products.Below are few links:&lt;br /&gt;
&lt;br /&gt;
*quickCRC:http://www.excelsoftware.com/&lt;br /&gt;
*CRC card support is part of Visual Paradigm for UML:  http://www.visual-paradigm.com/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==CRC cards Limitations and formal object modeling methodologies(UML)==&lt;br /&gt;
&lt;br /&gt;
CRC cards are used to form initial class definitions but alone are not sufficient to be directly coded into software for large systems.It is difficult to keep track of cards as the systems grows and work on subsystems simultaneously and independently.CRC cards lack the notational power to document all the components of a system and cannot provide implementation specifications such as transition states of objects during its life cycle,interface design,data structures,performance and resource utilization. To bridge this gap,more formal object modeling methodology such as UML is used.UML captures the bigger picture.It provides detailed mapping of use cases(operations),object state transitions,inter-process communication functionality,algorithm design.UML is very effective in incremental model of SDLC where  lot of details need to captured for precise addition.Information  about requirements is represented in detail and whole picture of the system and users is visible.CRC cards are used as effective inputs to UML.CRC card techniques such as brainstorming and role play help enhance functional understanding which helps in preparing better UML use cases.CRC cards given the content for  class diagrams,inheritance diagrams,class specifications and object specifications for UML.CRC cards can keep track of attributes that can aid listing them as a part of class specification in UML.Most CRC card software have the facility to export CRC analysis file that can be directly used as an input for UML.Following case study develops UML with the help of CRC cards:&lt;br /&gt;
&lt;br /&gt;
http://www.math.gordon.edu/courses/cs211/ATMExample/&lt;br /&gt;
&lt;br /&gt;
==Summary==&lt;br /&gt;
CRC cards are very useful to form the base of object oriented methodology.Techniques such as brain storming and role play enhance the understanding of requirements.CRC automation makes card handling and sharing  quick and efficient.For large projects more formal technology such as UML is required but CRC cards can provide a very good starting point.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Reference==&lt;br /&gt;
*Introduction to CRC Cards: http://www.softstar-inc.com/Download/Intro%20to%20CRC.pdf&lt;br /&gt;
*CRC Cards for ATM : http://www.math-cs.gordon.edu/courses/cps211/ATMExample/CRCCards.html&lt;br /&gt;
*UML methodology for ATM :http://www.math.gordon.edu/courses/cs211/ATMExample/&lt;br /&gt;
*CRC software:&lt;br /&gt;
**quickCRC:http://www.excelsoftware.com/&lt;br /&gt;
**Visual Paradigm:  http://www.visual-paradigm.com/            &lt;br /&gt;
*Bellin, D and Simone, S.S ‘The CRC Card Book’, Addison Wesely, 1997&lt;/div&gt;</summary>
		<author><name>Bluehat</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=User:Bluehat&amp;diff=33744</id>
		<title>User:Bluehat</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=User:Bluehat&amp;diff=33744"/>
		<updated>2010-09-08T14:55:30Z</updated>

		<summary type="html">&lt;p&gt;Bluehat: /* CRC Process */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
The onset of the object oriented paradigm in the software industry brought about a big change in the basic approach to system design and the software development life cycle.The major task in the development of any application using the object oriented paradigm is to identify ‘classes’, and how these classes interact and collaborate with each other in the system scope. &lt;br /&gt;
&lt;br /&gt;
Whenever a system is designed with classes, each class has a specific role to play in the system.It has certain responsibilities and each class collaborates with other classes to provide the complete system functionality. In such a scenario, identifying classes becomes the key to a good system design.Although it seems to be a simple,intuitive process,identifying classes can be quite complex when it comes to large scale systems. &lt;br /&gt;
&lt;br /&gt;
One such technique for identification of classes that make up the system and its collaborations is the ‘CRC Card’ technique. The concept of CRC cards was first put forth by Kent Beck and Ward Cunningham and it became very popular as it is easy to use and it supports development of any kind of object oriented development regardless of its scale,the method used, the technology or the language used for development&lt;br /&gt;
&lt;br /&gt;
==Definition==&lt;br /&gt;
Class Responsibility Collaboration (CRC) cards is an object-oriented design method that uses ordinary 3x5 index cards card made for each class containing responsibilities (knowledge and services) and collaborators (interactions with other classes). The cards provide an informal, intuitive way for group members to work on object design together.&lt;br /&gt;
A typical CRC card layout is shown below.&lt;br /&gt;
[[Image:Crccard2.jpg|frame|center|CRC CARD Template]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example: Consider a Student class where a student can enroll for a seminar. In this case ‘Student’ will be one class and ‘Seminar’ can be another class that collaborates with the Student class.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:CrcStudent.jpg|frame|center|Student CRC Card ]]&lt;br /&gt;
&lt;br /&gt;
To know more about CRC cards please refer to http://www.hsanchez.net/repository/hsanchez-PLCRC-plop04.pdf&lt;br /&gt;
&lt;br /&gt;
==Principle and Process==&lt;br /&gt;
&lt;br /&gt;
===CRC Principle===&lt;br /&gt;
&lt;br /&gt;
A CRC model includes a collection of cards and each card is divided into three sections. &lt;br /&gt;
*Class Name: &lt;br /&gt;
**Appears on the top of the CRC card&lt;br /&gt;
**Class denotes a set of similar objects that are being modeled in the system&lt;br /&gt;
&lt;br /&gt;
*Responsibilities:&lt;br /&gt;
**Appears on the left hand side of the CRC card&lt;br /&gt;
**It is a list of the responsibilities of the class i.e. things a class can do with its knowledge&lt;br /&gt;
&lt;br /&gt;
*Collaborators:&lt;br /&gt;
**Appear on the right hand side of the CRC card&lt;br /&gt;
**They are other classes that the class works with to get information or perform a certain function&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===CRC Process===&lt;br /&gt;
&lt;br /&gt;
CRC modeling process includes the users, analysts and developers bringing together the entire development team to form a common understanding of an OO development project.For e.g consider a software application to implement a game of blackjack. To implement the CRC technique to design this software, following steps are taken:&lt;br /&gt;
&lt;br /&gt;
*Explanation of the CRC Technique&lt;br /&gt;
**The facilitator explains the purpose of the CRC modeling session&lt;br /&gt;
**It can include explanation of CRC Cards and creation of sample CRC Cards&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Brainstorming&lt;br /&gt;
**A brainstorming session at the very beginning brings in new ideas, new perspectives to the problem being solved.&lt;br /&gt;
**Every team member can contribute with innovative ideas&lt;br /&gt;
**A list of candidate classes can be drawn up from this activity&lt;br /&gt;
&lt;br /&gt;
For e.g considering the above example, we can identify candidate classes by listing down the nouns relating to the game of blackjack. Say, game, blackjack, dealer, players, card, deck, hand, bet, king, queen, jack, ace, suit, winner, game.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Selecting a scenario and Core classes&lt;br /&gt;
**The scenario chosen at the beginning of the session should be simple, clear and well documented&lt;br /&gt;
**Related scenarios should be identified and dealt with separately&lt;br /&gt;
**Identification of critical classes from the candidate class list is also very important&lt;br /&gt;
**This helps to eliminate irrelevant classes and review remaining classes&lt;br /&gt;
**This also helps clarify the system scope&lt;br /&gt;
&lt;br /&gt;
For e.g we can apply the elimination process to the candidate class list. We can eliminate blackjack as it is the name of the system. ‘House’ can be eliminated as it is another name for the dealer. Also, instead of making ace, king, queen and jack as separate classes, we can represent them as attributes of individual classes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Create initial CRC cards&lt;br /&gt;
From the information gathered in the step above, CRC cards are written&lt;br /&gt;
&lt;br /&gt;
[[Image:Deck1.jpg |frame|center|Deck CRC Card]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Dealer.jpg |frame|center|Dealer CRC Card]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Player.jpg |frame|center|Player CRC Card]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Creating a CRC Model&lt;br /&gt;
&lt;br /&gt;
**After the CRC cards  are written, they are placed appropriately, with collaborating classes closer to each other.&lt;br /&gt;
**Accordingly, place each card in position till the entire picture of the system is finalized.&lt;br /&gt;
**This process may have to be done in several iterations to get a refined view of the system to be modeled.&lt;br /&gt;
&lt;br /&gt;
For more information on using CRC Cards please refer to http://alistair.cockburn.us/Using+CRC+cards&lt;br /&gt;
&lt;br /&gt;
==CRC Team==&lt;br /&gt;
&lt;br /&gt;
*Domain Experts:&lt;br /&gt;
**Core team that writes the cards&lt;br /&gt;
**Have good business domain knowledge for which the system is being designed&lt;br /&gt;
**Usually are 3-5 people&lt;br /&gt;
&lt;br /&gt;
*Object Oriented Design Analyst:&lt;br /&gt;
**Analysts and developers those are familiar with object oriented design methodologies&lt;br /&gt;
**Usually are 1-2 people&lt;br /&gt;
&lt;br /&gt;
*Facilitator:&lt;br /&gt;
**Most important member who conducts the CRC modeling session&lt;br /&gt;
**Acts as an intermediary when there is difference of opinion regarding class responsibilities and paths of collaboration&lt;br /&gt;
**Usually a single person&lt;br /&gt;
&lt;br /&gt;
*Scribe:&lt;br /&gt;
**Responsible for documenting any business logic that evolves by way of discussions during the CRC modeling process.&lt;br /&gt;
**This documentation can be added to the requirements and business documents which can be used by design analysts at a later stage&lt;br /&gt;
**Usually are 1-2 people&lt;br /&gt;
&lt;br /&gt;
==Case study==&lt;br /&gt;
&lt;br /&gt;
To understand the working of CRC card modeling better, here is an example of an ATM system designed using CRC cards. Here, the software system under consideration has to control an automated teller machine. The ATM has a magnetic stripe reader for reading an ATM card, a customer console (keyboard and display) for interaction with the customer, a slot for depositing envelopes, a dispenser for cash (in multiples of $20), a printer for printing customer receipts, and a key-operated switch to allow an operator to start or stop the machine. Also, the ATM will communicate with the bank's computer over an appropriate communication link.&lt;br /&gt;
&lt;br /&gt;
To perform a transaction, a customer will be required to insert an ATM card and enter a personal identification number (PIN) - both of which will be sent to the bank for validation. The customer will then be able to perform one or more transactions. The card will be retained in the machine until the customer indicates that there are no further transactions, at which point it will be returned. For more on the case study.&lt;br /&gt;
&lt;br /&gt;
http://www.math-cs.gordon.edu/courses/cps211/ATMExample/CRCCards.html&lt;br /&gt;
&lt;br /&gt;
==Metrics for CRC Analysis==&lt;br /&gt;
&lt;br /&gt;
CRC analysis metrics can help evaluate the level of ease in designing and coding with CRC cards. These metrics also contribute to other project planning factors to give overall sense of project development.These metrics can be calculated easily and quickly without the need of special tools. Three metrics are broadly identified as: maximum depth of inheritance, the number of responsibilities assigned to each class and the number of collaborators for a class. With the example below an attempt has been made to explain these metrics.In the diagram, black line indicates inheritance while blue line indicates collaboration. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Class_hierarchy1.png|frame|center|CRC metrics example]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Maximum depth of inheritance===&lt;br /&gt;
&lt;br /&gt;
This metric gives an idea of the class hierarchy. It is the count of number of subclasses in the hierarchy.From the diagram,it can be seen that Part Time student is a subclass of Distance Education which in turn is a subclass of student.Thus,maximum depth of inheritance in this case is two with  reference to class Student. Each subclass shares the overall functions defined in class Student. For short hierarchies, this is a positive benefit of OO. If number of subclasses become too long, it becomes difficult to trace the flow of functions, resulting in overly complex systems. This makes testing, reviewing and reusing difficult.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Number of collaborators===&lt;br /&gt;
&lt;br /&gt;
This is the count of all the supporting classes to help a class.In the diagram,there are four collaborators for class Student:Teacher,Library,Computer Labs and Gymnasium.Confusion between collaborators and subclasses may result in creation many collaborators.This will affect the encapsulation of the design.Typical value for this metric is eight.If this value is large,design may be reviewed to see if inheritance is implemented correctly.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Number of responsibilities===&lt;br /&gt;
This is the count of clearly defined set of duties to each class.For example class Student may have functions like Attending  Lectures,&lt;br /&gt;
Maintaining a certain GPA,Taking the required courses. In this case number of responsibilities is three.Responsibilities should be distributed amongst classes to cover the whole system. This would avoid an imbalance in design. We need to refine the overly complex class into a series of simpler objects. This will make the system easier to understand, implement and reuse. For most commercial transaction oriented systems, values approximately between eight and eighteen are common.&lt;br /&gt;
&lt;br /&gt;
==Advantages==&lt;br /&gt;
* CRC cards create a first-cut analysis for complex systems, and let analysts and users examine the operation of discrete subsystems.&lt;br /&gt;
* CRC cards are invaluable input into more formal methods. Agile development methods often use CRC cards. They are popular as a front end to UML&lt;br /&gt;
* CRC cards are a great way to build teamwork and common understanding.&lt;br /&gt;
* Part of the CRC card attraction is their simplicity. Developers can use them with little formal training and just paper and pencil for tools&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Software for CRC card==&lt;br /&gt;
&lt;br /&gt;
It is difficult to maintain, change, share paper based cards for large projects. Software for CRC cards offer many advantages in such scenarios such as&lt;br /&gt;
&lt;br /&gt;
*Easy Revision: As CRC cards are part of development process, constant changes are made by developers to edit the information .Change to one card might require changes to other cards. It becomes difficult to handle such interdependent changes for various fields such as attribute, responsibility, collaboration on paper based system. Software will reflect one change to every corresponding reference in the design. This saves a lot of time and also avoids the manual errors that may be evident on paper based system.&lt;br /&gt;
&lt;br /&gt;
*Easy sharing: Paper based systems make sharing difficult by necessitating team members to be physically present at one location. Using software, team members can work from different locations.&lt;br /&gt;
&lt;br /&gt;
*Better representation: It is possible to group cards from different perspective such as hierarchy, attributes, parent. This helps better understanding and thinking. Some software also aid graphical display of data.&lt;br /&gt;
&lt;br /&gt;
*Inputs to methodologies: Software for CRC cards can provide the input files for UML class diagram generation software saving lot of time in the development cycle.&lt;br /&gt;
&lt;br /&gt;
*Making additions to existing code: Many projects   make addition to existing code or reuse already developed code in their project. Software can produce CRC cards with existing source code as an input. This would help the team to understand the code in efficient manner and less time.&lt;br /&gt;
&lt;br /&gt;
However,it comes with a cost.Based on required features and cost,team may select from various commercially available software products.Below are few links:&lt;br /&gt;
&lt;br /&gt;
*quickCRC:http://www.excelsoftware.com/&lt;br /&gt;
*CRC card support is part of Visual Paradigm for UML:  http://www.visual-paradigm.com/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==CRC cards Limitations and formal object modeling methodologies(UML)==&lt;br /&gt;
&lt;br /&gt;
CRC cards are used to form initial class definitions but alone are not sufficient to be directly coded into software for large systems.It is difficult to keep track of cards as the systems grows and work on subsystems simultaneously and independently.CRC cards lack the notational power to document all the components of a system and cannot provide implementation specifications such as transition states of objects during its life cycle,interface design,data structures,performance and resource utilization. To bridge this gap,more formal object modeling methodology such as UML is used.UML captures the bigger picture.It provides detailed mapping of use cases(operations),object state transitions,inter-process communication functionality,algorithm design.UML is very effective in incremental model of SDLC where  lot of details need to captured for precise addition.Information  about requirements is represented in detail and whole picture of the system and users is visible.CRC cards are used as effective inputs to UML.CRC card techniques such as brainstorming and role play help enhance functional understanding which helps in preparing better UML use cases.CRC cards given the content for  class diagrams,inheritance diagrams,class specifications and object specifications for UML.CRC cards can keep track of attributes that can aid listing them as a part of class specification in UML.Most CRC card software have the facility to export CRC analysis file that can be directly used as an input for UML.Following case study develops UML with the help of CRC cards:&lt;br /&gt;
&lt;br /&gt;
http://www.math.gordon.edu/courses/cs211/ATMExample/&lt;br /&gt;
&lt;br /&gt;
==Summary==&lt;br /&gt;
CRC cards are very useful to form the base of object oriented methodology.Techniques such as brain storming and role play enhance the understanding of requirements.CRC automation makes card handling and sharing  quick and efficient.For large projects more formal technology such as UML is required but CRC cards can provide a very good starting point.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Reference==&lt;br /&gt;
*Introduction to CRC Cards: http://www.softstar-inc.com/Download/Intro%20to%20CRC.pdf&lt;br /&gt;
*CRC Cards for ATM : http://www.math-cs.gordon.edu/courses/cps211/ATMExample/CRCCards.html&lt;br /&gt;
*UML methodology for ATM :http://www.math.gordon.edu/courses/cs211/ATMExample/&lt;br /&gt;
*CRC software:&lt;br /&gt;
**quickCRC:http://www.excelsoftware.com/&lt;br /&gt;
**Visual Paradigm:  http://www.visual-paradigm.com/            &lt;br /&gt;
*Bellin, D and Simone, S.S ‘The CRC Card Book’, Addison Wesely, 1997&lt;/div&gt;</summary>
		<author><name>Bluehat</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=User:Bluehat&amp;diff=33742</id>
		<title>User:Bluehat</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=User:Bluehat&amp;diff=33742"/>
		<updated>2010-09-08T14:51:38Z</updated>

		<summary type="html">&lt;p&gt;Bluehat: /* CRC Process */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
The onset of the object oriented paradigm in the software industry brought about a big change in the basic approach to system design and the software development life cycle.The major task in the development of any application using the object oriented paradigm is to identify ‘classes’, and how these classes interact and collaborate with each other in the system scope. &lt;br /&gt;
&lt;br /&gt;
Whenever a system is designed with classes, each class has a specific role to play in the system.It has certain responsibilities and each class collaborates with other classes to provide the complete system functionality. In such a scenario, identifying classes becomes the key to a good system design.Although it seems to be a simple,intuitive process,identifying classes can be quite complex when it comes to large scale systems. &lt;br /&gt;
&lt;br /&gt;
One such technique for identification of classes that make up the system and its collaborations is the ‘CRC Card’ technique. The concept of CRC cards was first put forth by Kent Beck and Ward Cunningham and it became very popular as it is easy to use and it supports development of any kind of object oriented development regardless of its scale,the method used, the technology or the language used for development&lt;br /&gt;
&lt;br /&gt;
==Definition==&lt;br /&gt;
Class Responsibility Collaboration (CRC) cards is an object-oriented design method that uses ordinary 3x5 index cards card made for each class containing responsibilities (knowledge and services) and collaborators (interactions with other classes). The cards provide an informal, intuitive way for group members to work on object design together.&lt;br /&gt;
A typical CRC card layout is shown below.&lt;br /&gt;
[[Image:Crccard2.jpg|frame|center|CRC CARD Template]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example: Consider a Student class where a student can enroll for a seminar. In this case ‘Student’ will be one class and ‘Seminar’ can be another class that collaborates with the Student class.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:CrcStudent.jpg|frame|center|Student CRC Card ]]&lt;br /&gt;
&lt;br /&gt;
To know more about CRC cards please refer to http://www.hsanchez.net/repository/hsanchez-PLCRC-plop04.pdf&lt;br /&gt;
&lt;br /&gt;
==Principle and Process==&lt;br /&gt;
&lt;br /&gt;
===CRC Principle===&lt;br /&gt;
&lt;br /&gt;
A CRC model includes a collection of cards and each card is divided into three sections. &lt;br /&gt;
*Class Name: &lt;br /&gt;
**Appears on the top of the CRC card&lt;br /&gt;
**Class denotes a set of similar objects that are being modeled in the system&lt;br /&gt;
&lt;br /&gt;
*Responsibilities:&lt;br /&gt;
**Appears on the left hand side of the CRC card&lt;br /&gt;
**It is a list of the responsibilities of the class i.e. things a class can do with its knowledge&lt;br /&gt;
&lt;br /&gt;
*Collaborators:&lt;br /&gt;
**Appear on the right hand side of the CRC card&lt;br /&gt;
**They are other classes that the class works with to get information or perform a certain function&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===CRC Process===&lt;br /&gt;
&lt;br /&gt;
CRC modeling process includes the users, analysts and developers bringing together the entire development team to form a common understanding of an OO development project.For e.g consider a software application to implement a game of blackjack. To implement the CRC technique to design this software, following steps are taken:&lt;br /&gt;
&lt;br /&gt;
*Explanation of the CRC Technique&lt;br /&gt;
**The facilitator explains the purpose of the CRC modeling session&lt;br /&gt;
**It can include explanation of CRC Cards and creation of sample CRC Cards&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Brainstorming&lt;br /&gt;
**A brainstorming session at the very beginning brings in new ideas, new perspectives to the problem being solved.&lt;br /&gt;
**Every team member can contribute with innovative ideas&lt;br /&gt;
**A list of candidate classes can be drawn up from this activity&lt;br /&gt;
&lt;br /&gt;
For e.g considering the above example, we can identify candidate classes by listing down the nouns relating to the game of blackjack. Say, game, blackjack, dealer, players, card, deck, hand, bet, king, queen, jack, ace, suit, winner, game.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Selecting a scenario and Core classes&lt;br /&gt;
**The scenario chosen at the beginning of the session should be simple, clear and well documented&lt;br /&gt;
**Related scenarios should be identified and dealt with separately&lt;br /&gt;
**Identification of critical classes from the candidate class list is also very important&lt;br /&gt;
**This helps to eliminate irrelevant classes and review remaining classes&lt;br /&gt;
**This also helps clarify the system scope&lt;br /&gt;
&lt;br /&gt;
For e.g we can apply the elimination process to the candidate class list. We can eliminate blackjack as it is the name of the system. ‘House’ can be eliminated as it is another name for the dealer. Also, instead of making ace, king, queen and jack as separate classes, we can represent them as attributes of individual classes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Create initial CRC cards&lt;br /&gt;
From the information gathered in the step above, CRC cards are written&lt;br /&gt;
&lt;br /&gt;
[[Image:Deck1.jpg |frame|center|Deck CRC Card]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Dealer.jpg |frame|center|Dealer CRC Card]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Player.jpg |frame|center|Player CRC Card]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Creating a CRC Model&lt;br /&gt;
&lt;br /&gt;
**After the CRC cards  are written, they are placed appropriately, with collaborating classes closer to each other&lt;br /&gt;
**Accordingly, place each card in position till the entire picture of the system is finalized.&lt;br /&gt;
**This process may have to be done in several iterations to get a refined view of the system to be modeled&lt;br /&gt;
&lt;br /&gt;
For more information on using CRC Cards please refer to http://alistair.cockburn.us/Using+CRC+cards&lt;br /&gt;
&lt;br /&gt;
==CRC Team==&lt;br /&gt;
&lt;br /&gt;
*Domain Experts:&lt;br /&gt;
**Core team that writes the cards&lt;br /&gt;
**Have good business domain knowledge for which the system is being designed&lt;br /&gt;
**Usually are 3-5 people&lt;br /&gt;
&lt;br /&gt;
*Object Oriented Design Analyst:&lt;br /&gt;
**Analysts and developers those are familiar with object oriented design methodologies&lt;br /&gt;
**Usually are 1-2 people&lt;br /&gt;
&lt;br /&gt;
*Facilitator:&lt;br /&gt;
**Most important member who conducts the CRC modeling session&lt;br /&gt;
**Acts as an intermediary when there is difference of opinion regarding class responsibilities and paths of collaboration&lt;br /&gt;
**Usually a single person&lt;br /&gt;
&lt;br /&gt;
*Scribe:&lt;br /&gt;
**Responsible for documenting any business logic that evolves by way of discussions during the CRC modeling process.&lt;br /&gt;
**This documentation can be added to the requirements and business documents which can be used by design analysts at a later stage&lt;br /&gt;
**Usually are 1-2 people&lt;br /&gt;
&lt;br /&gt;
==Case study==&lt;br /&gt;
&lt;br /&gt;
To understand the working of CRC card modeling better, here is an example of an ATM system designed using CRC cards. Here, the software system under consideration has to control an automated teller machine. The ATM has a magnetic stripe reader for reading an ATM card, a customer console (keyboard and display) for interaction with the customer, a slot for depositing envelopes, a dispenser for cash (in multiples of $20), a printer for printing customer receipts, and a key-operated switch to allow an operator to start or stop the machine. Also, the ATM will communicate with the bank's computer over an appropriate communication link.&lt;br /&gt;
&lt;br /&gt;
To perform a transaction, a customer will be required to insert an ATM card and enter a personal identification number (PIN) - both of which will be sent to the bank for validation. The customer will then be able to perform one or more transactions. The card will be retained in the machine until the customer indicates that there are no further transactions, at which point it will be returned. For more on the case study.&lt;br /&gt;
&lt;br /&gt;
http://www.math-cs.gordon.edu/courses/cps211/ATMExample/CRCCards.html&lt;br /&gt;
&lt;br /&gt;
==Metrics for CRC Analysis==&lt;br /&gt;
&lt;br /&gt;
CRC analysis metrics can help evaluate the level of ease in designing and coding with CRC cards. These metrics also contribute to other project planning factors to give overall sense of project development.These metrics can be calculated easily and quickly without the need of special tools. Three metrics are broadly identified as: maximum depth of inheritance, the number of responsibilities assigned to each class and the number of collaborators for a class. With the example below an attempt has been made to explain these metrics.In the diagram, black line indicates inheritance while blue line indicates collaboration. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Class_hierarchy1.png|frame|center|CRC metrics example]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Maximum depth of inheritance===&lt;br /&gt;
&lt;br /&gt;
This metric gives an idea of the class hierarchy. It is the count of number of subclasses in the hierarchy.From the diagram,it can be seen that Part Time student is a subclass of Distance Education which in turn is a subclass of student.Thus,maximum depth of inheritance in this case is two with  reference to class Student. Each subclass shares the overall functions defined in class Student. For short hierarchies, this is a positive benefit of OO. If number of subclasses become too long, it becomes difficult to trace the flow of functions, resulting in overly complex systems. This makes testing, reviewing and reusing difficult.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Number of collaborators===&lt;br /&gt;
&lt;br /&gt;
This is the count of all the supporting classes to help a class.In the diagram,there are four collaborators for class Student:Teacher,Library,Computer Labs and Gymnasium.Confusion between collaborators and subclasses may result in creation many collaborators.This will affect the encapsulation of the design.Typical value for this metric is eight.If this value is large,design may be reviewed to see if inheritance is implemented correctly.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Number of responsibilities===&lt;br /&gt;
This is the count of clearly defined set of duties to each class.For example class Student may have functions like Attending  Lectures,&lt;br /&gt;
Maintaining a certain GPA,Taking the required courses. In this case number of responsibilities is three.Responsibilities should be distributed amongst classes to cover the whole system. This would avoid an imbalance in design. We need to refine the overly complex class into a series of simpler objects. This will make the system easier to understand, implement and reuse. For most commercial transaction oriented systems, values approximately between eight and eighteen are common.&lt;br /&gt;
&lt;br /&gt;
==Advantages==&lt;br /&gt;
* CRC cards create a first-cut analysis for complex systems, and let analysts and users examine the operation of discrete subsystems.&lt;br /&gt;
* CRC cards are invaluable input into more formal methods. Agile development methods often use CRC cards. They are popular as a front end to UML&lt;br /&gt;
* CRC cards are a great way to build teamwork and common understanding.&lt;br /&gt;
* Part of the CRC card attraction is their simplicity. Developers can use them with little formal training and just paper and pencil for tools&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Software for CRC card==&lt;br /&gt;
&lt;br /&gt;
It is difficult to maintain, change, share paper based cards for large projects. Software for CRC cards offer many advantages in such scenarios such as&lt;br /&gt;
&lt;br /&gt;
*Easy Revision: As CRC cards are part of development process, constant changes are made by developers to edit the information .Change to one card might require changes to other cards. It becomes difficult to handle such interdependent changes for various fields such as attribute, responsibility, collaboration on paper based system. Software will reflect one change to every corresponding reference in the design. This saves a lot of time and also avoids the manual errors that may be evident on paper based system.&lt;br /&gt;
&lt;br /&gt;
*Easy sharing: Paper based systems make sharing difficult by necessitating team members to be physically present at one location. Using software, team members can work from different locations.&lt;br /&gt;
&lt;br /&gt;
*Better representation: It is possible to group cards from different perspective such as hierarchy, attributes, parent. This helps better understanding and thinking. Some software also aid graphical display of data.&lt;br /&gt;
&lt;br /&gt;
*Inputs to methodologies: Software for CRC cards can provide the input files for UML class diagram generation software saving lot of time in the development cycle.&lt;br /&gt;
&lt;br /&gt;
*Making additions to existing code: Many projects   make addition to existing code or reuse already developed code in their project. Software can produce CRC cards with existing source code as an input. This would help the team to understand the code in efficient manner and less time.&lt;br /&gt;
&lt;br /&gt;
However,it comes with a cost.Based on required features and cost,team may select from various commercially available software products.Below are few links:&lt;br /&gt;
&lt;br /&gt;
*quickCRC:http://www.excelsoftware.com/&lt;br /&gt;
*CRC card support is part of Visual Paradigm for UML:  http://www.visual-paradigm.com/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==CRC cards Limitations and formal object modeling methodologies(UML)==&lt;br /&gt;
&lt;br /&gt;
CRC cards are used to form initial class definitions but alone are not sufficient to be directly coded into software for large systems.It is difficult to keep track of cards as the systems grows and work on subsystems simultaneously and independently.CRC cards lack the notational power to document all the components of a system and cannot provide implementation specifications such as transition states of objects during its life cycle,interface design,data structures,performance and resource utilization. To bridge this gap,more formal object modeling methodology such as UML is used.UML captures the bigger picture.It provides detailed mapping of use cases(operations),object state transitions,inter-process communication functionality,algorithm design.UML is very effective in incremental model of SDLC where  lot of details need to captured for precise addition.Information  about requirements is represented in detail and whole picture of the system and users is visible.CRC cards are used as effective inputs to UML.CRC card techniques such as brainstorming and role play help enhance functional understanding which helps in preparing better UML use cases.CRC cards given the content for  class diagrams,inheritance diagrams,class specifications and object specifications for UML.CRC cards can keep track of attributes that can aid listing them as a part of class specification in UML.Most CRC card software have the facility to export CRC analysis file that can be directly used as an input for UML.Following case study develops UML with the help of CRC cards:&lt;br /&gt;
&lt;br /&gt;
http://www.math.gordon.edu/courses/cs211/ATMExample/&lt;br /&gt;
&lt;br /&gt;
==Summary==&lt;br /&gt;
CRC cards are very useful to form the base of object oriented methodology.Techniques such as brain storming and role play enhance the understanding of requirements.CRC automation makes card handling and sharing  quick and efficient.For large projects more formal technology such as UML is required but CRC cards can provide a very good starting point.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Reference==&lt;br /&gt;
*Introduction to CRC Cards: http://www.softstar-inc.com/Download/Intro%20to%20CRC.pdf&lt;br /&gt;
*CRC Cards for ATM : http://www.math-cs.gordon.edu/courses/cps211/ATMExample/CRCCards.html&lt;br /&gt;
*UML methodology for ATM :http://www.math.gordon.edu/courses/cs211/ATMExample/&lt;br /&gt;
*CRC software:&lt;br /&gt;
**quickCRC:http://www.excelsoftware.com/&lt;br /&gt;
**Visual Paradigm:  http://www.visual-paradigm.com/            &lt;br /&gt;
*Bellin, D and Simone, S.S ‘The CRC Card Book’, Addison Wesely, 1997&lt;/div&gt;</summary>
		<author><name>Bluehat</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=User:Bluehat&amp;diff=33741</id>
		<title>User:Bluehat</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=User:Bluehat&amp;diff=33741"/>
		<updated>2010-09-08T14:48:24Z</updated>

		<summary type="html">&lt;p&gt;Bluehat: /* The CRC Team */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
The onset of the object oriented paradigm in the software industry brought about a big change in the basic approach to system design and the software development life cycle.The major task in the development of any application using the object oriented paradigm is to identify ‘classes’, and how these classes interact and collaborate with each other in the system scope. &lt;br /&gt;
&lt;br /&gt;
Whenever a system is designed with classes, each class has a specific role to play in the system.It has certain responsibilities and each class collaborates with other classes to provide the complete system functionality. In such a scenario, identifying classes becomes the key to a good system design.Although it seems to be a simple,intuitive process,identifying classes can be quite complex when it comes to large scale systems. &lt;br /&gt;
&lt;br /&gt;
One such technique for identification of classes that make up the system and its collaborations is the ‘CRC Card’ technique. The concept of CRC cards was first put forth by Kent Beck and Ward Cunningham and it became very popular as it is easy to use and it supports development of any kind of object oriented development regardless of its scale,the method used, the technology or the language used for development&lt;br /&gt;
&lt;br /&gt;
==Definition==&lt;br /&gt;
Class Responsibility Collaboration (CRC) cards is an object-oriented design method that uses ordinary 3x5 index cards card made for each class containing responsibilities (knowledge and services) and collaborators (interactions with other classes). The cards provide an informal, intuitive way for group members to work on object design together.&lt;br /&gt;
A typical CRC card layout is shown below.&lt;br /&gt;
[[Image:Crccard2.jpg|frame|center|CRC CARD Template]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example: Consider a Student class where a student can enroll for a seminar. In this case ‘Student’ will be one class and ‘Seminar’ can be another class that collaborates with the Student class.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:CrcStudent.jpg|frame|center|Student CRC Card ]]&lt;br /&gt;
&lt;br /&gt;
To know more about CRC cards please refer to http://www.hsanchez.net/repository/hsanchez-PLCRC-plop04.pdf&lt;br /&gt;
&lt;br /&gt;
==Principle and Process==&lt;br /&gt;
&lt;br /&gt;
===CRC Principle===&lt;br /&gt;
&lt;br /&gt;
A CRC model includes a collection of cards and each card is divided into three sections. &lt;br /&gt;
*Class Name: &lt;br /&gt;
**Appears on the top of the CRC card&lt;br /&gt;
**Class denotes a set of similar objects that are being modeled in the system&lt;br /&gt;
&lt;br /&gt;
*Responsibilities:&lt;br /&gt;
**Appears on the left hand side of the CRC card&lt;br /&gt;
**It is a list of the responsibilities of the class i.e. things a class can do with its knowledge&lt;br /&gt;
&lt;br /&gt;
*Collaborators:&lt;br /&gt;
**Appear on the right hand side of the CRC card&lt;br /&gt;
**They are other classes that the class works with to get information or perform a certain function&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===CRC Process===&lt;br /&gt;
&lt;br /&gt;
CRC modeling process includes the users, analysts and developers bringing together the entire development team to form a common understanding of an OO development project.For e.g consider a software application to implement a game of blackjack. To implement the CRC technique to design this software, following steps are taken:&lt;br /&gt;
&lt;br /&gt;
*Explanation of the CRC Technique&lt;br /&gt;
**The facilitator explains the purpose of the CRC modeling session&lt;br /&gt;
**It can include explanation of CRC Cards and creation of sample CRC Cards&lt;br /&gt;
&lt;br /&gt;
*Brainstorming&lt;br /&gt;
**A brainstorming session at the very beginning brings in new ideas, new perspectives to the problem being solved.&lt;br /&gt;
**Every team member can contribute with innovative ideas&lt;br /&gt;
**A list of candidate classes can be drawn up from this activity&lt;br /&gt;
&lt;br /&gt;
For e.g considering the above example, we can identify candidate classes by listing down the nouns relating to the game of blackjack. Say, game, blackjack, dealer, players, card, deck, hand, bet, king, queen, jack, ace, suit, winner, game.&lt;br /&gt;
&lt;br /&gt;
*Selecting a scenario and Core classes&lt;br /&gt;
**The scenario chosen at the beginning of the session should be simple, clear and well documented&lt;br /&gt;
**Related scenarios should be identified and dealt with separately&lt;br /&gt;
**Identification of critical classes from the candidate class list is also very important&lt;br /&gt;
**This helps to eliminate irrelevant classes and review remaining classes&lt;br /&gt;
**This also helps clarify the system scope&lt;br /&gt;
&lt;br /&gt;
For e.g we can apply the elimination process to the candidate class list. We can eliminate blackjack as it is the name of the system. ‘House’ can be eliminated as it is another name for the dealer. Also, instead of making ace, king, queen and jack as separate classes, we can represent them as attributes of individual classes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Create initial CRC cards&lt;br /&gt;
&lt;br /&gt;
[[Image:Deck1.jpg |frame|center|Deck CRC Card]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Dealer.jpg |frame|center|Dealer CRC Card]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Player.jpg |frame|center|Player CRC Card]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
**From the information gathered in the step above, CRC cards are written&lt;br /&gt;
&lt;br /&gt;
*Creating a CRC Model&lt;br /&gt;
&lt;br /&gt;
**From the CRC cards written, they are placed appropriately, with collaborating classes closer to each other&lt;br /&gt;
**Accordingly, place each card in position till the entire picture of the system is finalized.&lt;br /&gt;
**This process may have to be done in several iterations to get a refined view of the system to be modeled&lt;br /&gt;
&lt;br /&gt;
Using CRC Cards: http://alistair.cockburn.us/Using+CRC+cards&lt;br /&gt;
&lt;br /&gt;
==CRC Team==&lt;br /&gt;
&lt;br /&gt;
*Domain Experts:&lt;br /&gt;
**Core team that writes the cards&lt;br /&gt;
**Have good business domain knowledge for which the system is being designed&lt;br /&gt;
**Usually are 3-5 people&lt;br /&gt;
&lt;br /&gt;
*Object Oriented Design Analyst:&lt;br /&gt;
**Analysts and developers those are familiar with object oriented design methodologies&lt;br /&gt;
**Usually are 1-2 people&lt;br /&gt;
&lt;br /&gt;
*Facilitator:&lt;br /&gt;
**Most important member who conducts the CRC modeling session&lt;br /&gt;
**Acts as an intermediary when there is difference of opinion regarding class responsibilities and paths of collaboration&lt;br /&gt;
**Usually a single person&lt;br /&gt;
&lt;br /&gt;
*Scribe:&lt;br /&gt;
**Responsible for documenting any business logic that evolves by way of discussions during the CRC modeling process.&lt;br /&gt;
**This documentation can be added to the requirements and business documents which can be used by design analysts at a later stage&lt;br /&gt;
**Usually are 1-2 people&lt;br /&gt;
&lt;br /&gt;
==Case study==&lt;br /&gt;
&lt;br /&gt;
To understand the working of CRC card modeling better, here is an example of an ATM system designed using CRC cards. Here, the software system under consideration has to control an automated teller machine. The ATM has a magnetic stripe reader for reading an ATM card, a customer console (keyboard and display) for interaction with the customer, a slot for depositing envelopes, a dispenser for cash (in multiples of $20), a printer for printing customer receipts, and a key-operated switch to allow an operator to start or stop the machine. Also, the ATM will communicate with the bank's computer over an appropriate communication link.&lt;br /&gt;
&lt;br /&gt;
To perform a transaction, a customer will be required to insert an ATM card and enter a personal identification number (PIN) - both of which will be sent to the bank for validation. The customer will then be able to perform one or more transactions. The card will be retained in the machine until the customer indicates that there are no further transactions, at which point it will be returned. For more on the case study.&lt;br /&gt;
&lt;br /&gt;
http://www.math-cs.gordon.edu/courses/cps211/ATMExample/CRCCards.html&lt;br /&gt;
&lt;br /&gt;
==Metrics for CRC Analysis==&lt;br /&gt;
&lt;br /&gt;
CRC analysis metrics can help evaluate the level of ease in designing and coding with CRC cards. These metrics also contribute to other project planning factors to give overall sense of project development.These metrics can be calculated easily and quickly without the need of special tools. Three metrics are broadly identified as: maximum depth of inheritance, the number of responsibilities assigned to each class and the number of collaborators for a class. With the example below an attempt has been made to explain these metrics.In the diagram, black line indicates inheritance while blue line indicates collaboration. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Class_hierarchy1.png|frame|center|CRC metrics example]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Maximum depth of inheritance===&lt;br /&gt;
&lt;br /&gt;
This metric gives an idea of the class hierarchy. It is the count of number of subclasses in the hierarchy.From the diagram,it can be seen that Part Time student is a subclass of Distance Education which in turn is a subclass of student.Thus,maximum depth of inheritance in this case is two with  reference to class Student. Each subclass shares the overall functions defined in class Student. For short hierarchies, this is a positive benefit of OO. If number of subclasses become too long, it becomes difficult to trace the flow of functions, resulting in overly complex systems. This makes testing, reviewing and reusing difficult.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Number of collaborators===&lt;br /&gt;
&lt;br /&gt;
This is the count of all the supporting classes to help a class.In the diagram,there are four collaborators for class Student:Teacher,Library,Computer Labs and Gymnasium.Confusion between collaborators and subclasses may result in creation many collaborators.This will affect the encapsulation of the design.Typical value for this metric is eight.If this value is large,design may be reviewed to see if inheritance is implemented correctly.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Number of responsibilities===&lt;br /&gt;
This is the count of clearly defined set of duties to each class.For example class Student may have functions like Attending  Lectures,&lt;br /&gt;
Maintaining a certain GPA,Taking the required courses. In this case number of responsibilities is three.Responsibilities should be distributed amongst classes to cover the whole system. This would avoid an imbalance in design. We need to refine the overly complex class into a series of simpler objects. This will make the system easier to understand, implement and reuse. For most commercial transaction oriented systems, values approximately between eight and eighteen are common.&lt;br /&gt;
&lt;br /&gt;
==Advantages==&lt;br /&gt;
* CRC cards create a first-cut analysis for complex systems, and let analysts and users examine the operation of discrete subsystems.&lt;br /&gt;
* CRC cards are invaluable input into more formal methods. Agile development methods often use CRC cards. They are popular as a front end to UML&lt;br /&gt;
* CRC cards are a great way to build teamwork and common understanding.&lt;br /&gt;
* Part of the CRC card attraction is their simplicity. Developers can use them with little formal training and just paper and pencil for tools&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Software for CRC card==&lt;br /&gt;
&lt;br /&gt;
It is difficult to maintain, change, share paper based cards for large projects. Software for CRC cards offer many advantages in such scenarios such as&lt;br /&gt;
&lt;br /&gt;
*Easy Revision: As CRC cards are part of development process, constant changes are made by developers to edit the information .Change to one card might require changes to other cards. It becomes difficult to handle such interdependent changes for various fields such as attribute, responsibility, collaboration on paper based system. Software will reflect one change to every corresponding reference in the design. This saves a lot of time and also avoids the manual errors that may be evident on paper based system.&lt;br /&gt;
&lt;br /&gt;
*Easy sharing: Paper based systems make sharing difficult by necessitating team members to be physically present at one location. Using software, team members can work from different locations.&lt;br /&gt;
&lt;br /&gt;
*Better representation: It is possible to group cards from different perspective such as hierarchy, attributes, parent. This helps better understanding and thinking. Some software also aid graphical display of data.&lt;br /&gt;
&lt;br /&gt;
*Inputs to methodologies: Software for CRC cards can provide the input files for UML class diagram generation software saving lot of time in the development cycle.&lt;br /&gt;
&lt;br /&gt;
*Making additions to existing code: Many projects   make addition to existing code or reuse already developed code in their project. Software can produce CRC cards with existing source code as an input. This would help the team to understand the code in efficient manner and less time.&lt;br /&gt;
&lt;br /&gt;
However,it comes with a cost.Based on required features and cost,team may select from various commercially available software products.Below are few links:&lt;br /&gt;
&lt;br /&gt;
*quickCRC:http://www.excelsoftware.com/&lt;br /&gt;
*CRC card support is part of Visual Paradigm for UML:  http://www.visual-paradigm.com/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==CRC cards Limitations and formal object modeling methodologies(UML)==&lt;br /&gt;
&lt;br /&gt;
CRC cards are used to form initial class definitions but alone are not sufficient to be directly coded into software for large systems.It is difficult to keep track of cards as the systems grows and work on subsystems simultaneously and independently.CRC cards lack the notational power to document all the components of a system and cannot provide implementation specifications such as transition states of objects during its life cycle,interface design,data structures,performance and resource utilization. To bridge this gap,more formal object modeling methodology such as UML is used.UML captures the bigger picture.It provides detailed mapping of use cases(operations),object state transitions,inter-process communication functionality,algorithm design.UML is very effective in incremental model of SDLC where  lot of details need to captured for precise addition.Information  about requirements is represented in detail and whole picture of the system and users is visible.CRC cards are used as effective inputs to UML.CRC card techniques such as brainstorming and role play help enhance functional understanding which helps in preparing better UML use cases.CRC cards given the content for  class diagrams,inheritance diagrams,class specifications and object specifications for UML.CRC cards can keep track of attributes that can aid listing them as a part of class specification in UML.Most CRC card software have the facility to export CRC analysis file that can be directly used as an input for UML.Following case study develops UML with the help of CRC cards:&lt;br /&gt;
&lt;br /&gt;
http://www.math.gordon.edu/courses/cs211/ATMExample/&lt;br /&gt;
&lt;br /&gt;
==Summary==&lt;br /&gt;
CRC cards are very useful to form the base of object oriented methodology.Techniques such as brain storming and role play enhance the understanding of requirements.CRC automation makes card handling and sharing  quick and efficient.For large projects more formal technology such as UML is required but CRC cards can provide a very good starting point.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Reference==&lt;br /&gt;
*Introduction to CRC Cards: http://www.softstar-inc.com/Download/Intro%20to%20CRC.pdf&lt;br /&gt;
*CRC Cards for ATM : http://www.math-cs.gordon.edu/courses/cps211/ATMExample/CRCCards.html&lt;br /&gt;
*UML methodology for ATM :http://www.math.gordon.edu/courses/cs211/ATMExample/&lt;br /&gt;
*CRC software:&lt;br /&gt;
**quickCRC:http://www.excelsoftware.com/&lt;br /&gt;
**Visual Paradigm:  http://www.visual-paradigm.com/            &lt;br /&gt;
*Bellin, D and Simone, S.S ‘The CRC Card Book’, Addison Wesely, 1997&lt;/div&gt;</summary>
		<author><name>Bluehat</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=User:Bluehat&amp;diff=33740</id>
		<title>User:Bluehat</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=User:Bluehat&amp;diff=33740"/>
		<updated>2010-09-08T14:47:25Z</updated>

		<summary type="html">&lt;p&gt;Bluehat: /* CRC Process */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
The onset of the object oriented paradigm in the software industry brought about a big change in the basic approach to system design and the software development life cycle.The major task in the development of any application using the object oriented paradigm is to identify ‘classes’, and how these classes interact and collaborate with each other in the system scope. &lt;br /&gt;
&lt;br /&gt;
Whenever a system is designed with classes, each class has a specific role to play in the system.It has certain responsibilities and each class collaborates with other classes to provide the complete system functionality. In such a scenario, identifying classes becomes the key to a good system design.Although it seems to be a simple,intuitive process,identifying classes can be quite complex when it comes to large scale systems. &lt;br /&gt;
&lt;br /&gt;
One such technique for identification of classes that make up the system and its collaborations is the ‘CRC Card’ technique. The concept of CRC cards was first put forth by Kent Beck and Ward Cunningham and it became very popular as it is easy to use and it supports development of any kind of object oriented development regardless of its scale,the method used, the technology or the language used for development&lt;br /&gt;
&lt;br /&gt;
==Definition==&lt;br /&gt;
Class Responsibility Collaboration (CRC) cards is an object-oriented design method that uses ordinary 3x5 index cards card made for each class containing responsibilities (knowledge and services) and collaborators (interactions with other classes). The cards provide an informal, intuitive way for group members to work on object design together.&lt;br /&gt;
A typical CRC card layout is shown below.&lt;br /&gt;
[[Image:Crccard2.jpg|frame|center|CRC CARD Template]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example: Consider a Student class where a student can enroll for a seminar. In this case ‘Student’ will be one class and ‘Seminar’ can be another class that collaborates with the Student class.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:CrcStudent.jpg|frame|center|Student CRC Card ]]&lt;br /&gt;
&lt;br /&gt;
To know more about CRC cards please refer to http://www.hsanchez.net/repository/hsanchez-PLCRC-plop04.pdf&lt;br /&gt;
&lt;br /&gt;
==Principle and Process==&lt;br /&gt;
&lt;br /&gt;
===CRC Principle===&lt;br /&gt;
&lt;br /&gt;
A CRC model includes a collection of cards and each card is divided into three sections. &lt;br /&gt;
*Class Name: &lt;br /&gt;
**Appears on the top of the CRC card&lt;br /&gt;
**Class denotes a set of similar objects that are being modeled in the system&lt;br /&gt;
&lt;br /&gt;
*Responsibilities:&lt;br /&gt;
**Appears on the left hand side of the CRC card&lt;br /&gt;
**It is a list of the responsibilities of the class i.e. things a class can do with its knowledge&lt;br /&gt;
&lt;br /&gt;
*Collaborators:&lt;br /&gt;
**Appear on the right hand side of the CRC card&lt;br /&gt;
**They are other classes that the class works with to get information or perform a certain function&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===CRC Process===&lt;br /&gt;
&lt;br /&gt;
CRC modeling process includes the users, analysts and developers bringing together the entire development team to form a common understanding of an OO development project.For e.g consider a software application to implement a game of blackjack. To implement the CRC technique to design this software, following steps are taken:&lt;br /&gt;
&lt;br /&gt;
*Explanation of the CRC Technique&lt;br /&gt;
**The facilitator explains the purpose of the CRC modeling session&lt;br /&gt;
**It can include explanation of CRC Cards and creation of sample CRC Cards&lt;br /&gt;
&lt;br /&gt;
*Brainstorming&lt;br /&gt;
**A brainstorming session at the very beginning brings in new ideas, new perspectives to the problem being solved.&lt;br /&gt;
**Every team member can contribute with innovative ideas&lt;br /&gt;
**A list of candidate classes can be drawn up from this activity&lt;br /&gt;
&lt;br /&gt;
For e.g considering the above example, we can identify candidate classes by listing down the nouns relating to the game of blackjack. Say, game, blackjack, dealer, players, card, deck, hand, bet, king, queen, jack, ace, suit, winner, game.&lt;br /&gt;
&lt;br /&gt;
*Selecting a scenario and Core classes&lt;br /&gt;
**The scenario chosen at the beginning of the session should be simple, clear and well documented&lt;br /&gt;
**Related scenarios should be identified and dealt with separately&lt;br /&gt;
**Identification of critical classes from the candidate class list is also very important&lt;br /&gt;
**This helps to eliminate irrelevant classes and review remaining classes&lt;br /&gt;
**This also helps clarify the system scope&lt;br /&gt;
&lt;br /&gt;
For e.g we can apply the elimination process to the candidate class list. We can eliminate blackjack as it is the name of the system. ‘House’ can be eliminated as it is another name for the dealer. Also, instead of making ace, king, queen and jack as separate classes, we can represent them as attributes of individual classes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Create initial CRC cards&lt;br /&gt;
&lt;br /&gt;
[[Image:Deck1.jpg |frame|center|Deck CRC Card]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Dealer.jpg |frame|center|Dealer CRC Card]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Player.jpg |frame|center|Player CRC Card]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
**From the information gathered in the step above, CRC cards are written&lt;br /&gt;
&lt;br /&gt;
*Creating a CRC Model&lt;br /&gt;
&lt;br /&gt;
**From the CRC cards written, they are placed appropriately, with collaborating classes closer to each other&lt;br /&gt;
**Accordingly, place each card in position till the entire picture of the system is finalized.&lt;br /&gt;
**This process may have to be done in several iterations to get a refined view of the system to be modeled&lt;br /&gt;
&lt;br /&gt;
Using CRC Cards: http://alistair.cockburn.us/Using+CRC+cards&lt;br /&gt;
&lt;br /&gt;
==The CRC Team==&lt;br /&gt;
&lt;br /&gt;
*Domain Experts:&lt;br /&gt;
**Core team that writes the cards&lt;br /&gt;
**Have good business domain knowledge for which the system is being designed&lt;br /&gt;
**Usually are 3-5 people&lt;br /&gt;
&lt;br /&gt;
*Object Oriented Design Analyst:&lt;br /&gt;
**Analysts and developers those are familiar with object oriented design methodologies&lt;br /&gt;
**Usually are 1-2 people&lt;br /&gt;
&lt;br /&gt;
*Facilitator:&lt;br /&gt;
**Most important member who conducts the CRC modeling session&lt;br /&gt;
**Acts as an intermediary when there is difference of opinion regarding class responsibilities and paths of collaboration&lt;br /&gt;
**Usually a single person&lt;br /&gt;
&lt;br /&gt;
*Scribe:&lt;br /&gt;
**Responsible for documenting any business logic that evolves by way of discussions during the CRC modeling process.&lt;br /&gt;
**This documentation can be added to the requirements and business documents which can be used by design analysts at a later stage&lt;br /&gt;
**Usually are 1-2 people&lt;br /&gt;
&lt;br /&gt;
==Case study==&lt;br /&gt;
&lt;br /&gt;
To understand the working of CRC card modeling better, here is an example of an ATM system designed using CRC cards. Here, the software system under consideration has to control an automated teller machine. The ATM has a magnetic stripe reader for reading an ATM card, a customer console (keyboard and display) for interaction with the customer, a slot for depositing envelopes, a dispenser for cash (in multiples of $20), a printer for printing customer receipts, and a key-operated switch to allow an operator to start or stop the machine. Also, the ATM will communicate with the bank's computer over an appropriate communication link.&lt;br /&gt;
&lt;br /&gt;
To perform a transaction, a customer will be required to insert an ATM card and enter a personal identification number (PIN) - both of which will be sent to the bank for validation. The customer will then be able to perform one or more transactions. The card will be retained in the machine until the customer indicates that there are no further transactions, at which point it will be returned. For more on the case study.&lt;br /&gt;
&lt;br /&gt;
http://www.math-cs.gordon.edu/courses/cps211/ATMExample/CRCCards.html&lt;br /&gt;
&lt;br /&gt;
==Metrics for CRC Analysis==&lt;br /&gt;
&lt;br /&gt;
CRC analysis metrics can help evaluate the level of ease in designing and coding with CRC cards. These metrics also contribute to other project planning factors to give overall sense of project development.These metrics can be calculated easily and quickly without the need of special tools. Three metrics are broadly identified as: maximum depth of inheritance, the number of responsibilities assigned to each class and the number of collaborators for a class. With the example below an attempt has been made to explain these metrics.In the diagram, black line indicates inheritance while blue line indicates collaboration. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Class_hierarchy1.png|frame|center|CRC metrics example]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Maximum depth of inheritance===&lt;br /&gt;
&lt;br /&gt;
This metric gives an idea of the class hierarchy. It is the count of number of subclasses in the hierarchy.From the diagram,it can be seen that Part Time student is a subclass of Distance Education which in turn is a subclass of student.Thus,maximum depth of inheritance in this case is two with  reference to class Student. Each subclass shares the overall functions defined in class Student. For short hierarchies, this is a positive benefit of OO. If number of subclasses become too long, it becomes difficult to trace the flow of functions, resulting in overly complex systems. This makes testing, reviewing and reusing difficult.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Number of collaborators===&lt;br /&gt;
&lt;br /&gt;
This is the count of all the supporting classes to help a class.In the diagram,there are four collaborators for class Student:Teacher,Library,Computer Labs and Gymnasium.Confusion between collaborators and subclasses may result in creation many collaborators.This will affect the encapsulation of the design.Typical value for this metric is eight.If this value is large,design may be reviewed to see if inheritance is implemented correctly.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Number of responsibilities===&lt;br /&gt;
This is the count of clearly defined set of duties to each class.For example class Student may have functions like Attending  Lectures,&lt;br /&gt;
Maintaining a certain GPA,Taking the required courses. In this case number of responsibilities is three.Responsibilities should be distributed amongst classes to cover the whole system. This would avoid an imbalance in design. We need to refine the overly complex class into a series of simpler objects. This will make the system easier to understand, implement and reuse. For most commercial transaction oriented systems, values approximately between eight and eighteen are common.&lt;br /&gt;
&lt;br /&gt;
==Advantages==&lt;br /&gt;
* CRC cards create a first-cut analysis for complex systems, and let analysts and users examine the operation of discrete subsystems.&lt;br /&gt;
* CRC cards are invaluable input into more formal methods. Agile development methods often use CRC cards. They are popular as a front end to UML&lt;br /&gt;
* CRC cards are a great way to build teamwork and common understanding.&lt;br /&gt;
* Part of the CRC card attraction is their simplicity. Developers can use them with little formal training and just paper and pencil for tools&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Software for CRC card==&lt;br /&gt;
&lt;br /&gt;
It is difficult to maintain, change, share paper based cards for large projects. Software for CRC cards offer many advantages in such scenarios such as&lt;br /&gt;
&lt;br /&gt;
*Easy Revision: As CRC cards are part of development process, constant changes are made by developers to edit the information .Change to one card might require changes to other cards. It becomes difficult to handle such interdependent changes for various fields such as attribute, responsibility, collaboration on paper based system. Software will reflect one change to every corresponding reference in the design. This saves a lot of time and also avoids the manual errors that may be evident on paper based system.&lt;br /&gt;
&lt;br /&gt;
*Easy sharing: Paper based systems make sharing difficult by necessitating team members to be physically present at one location. Using software, team members can work from different locations.&lt;br /&gt;
&lt;br /&gt;
*Better representation: It is possible to group cards from different perspective such as hierarchy, attributes, parent. This helps better understanding and thinking. Some software also aid graphical display of data.&lt;br /&gt;
&lt;br /&gt;
*Inputs to methodologies: Software for CRC cards can provide the input files for UML class diagram generation software saving lot of time in the development cycle.&lt;br /&gt;
&lt;br /&gt;
*Making additions to existing code: Many projects   make addition to existing code or reuse already developed code in their project. Software can produce CRC cards with existing source code as an input. This would help the team to understand the code in efficient manner and less time.&lt;br /&gt;
&lt;br /&gt;
However,it comes with a cost.Based on required features and cost,team may select from various commercially available software products.Below are few links:&lt;br /&gt;
&lt;br /&gt;
*quickCRC:http://www.excelsoftware.com/&lt;br /&gt;
*CRC card support is part of Visual Paradigm for UML:  http://www.visual-paradigm.com/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==CRC cards Limitations and formal object modeling methodologies(UML)==&lt;br /&gt;
&lt;br /&gt;
CRC cards are used to form initial class definitions but alone are not sufficient to be directly coded into software for large systems.It is difficult to keep track of cards as the systems grows and work on subsystems simultaneously and independently.CRC cards lack the notational power to document all the components of a system and cannot provide implementation specifications such as transition states of objects during its life cycle,interface design,data structures,performance and resource utilization. To bridge this gap,more formal object modeling methodology such as UML is used.UML captures the bigger picture.It provides detailed mapping of use cases(operations),object state transitions,inter-process communication functionality,algorithm design.UML is very effective in incremental model of SDLC where  lot of details need to captured for precise addition.Information  about requirements is represented in detail and whole picture of the system and users is visible.CRC cards are used as effective inputs to UML.CRC card techniques such as brainstorming and role play help enhance functional understanding which helps in preparing better UML use cases.CRC cards given the content for  class diagrams,inheritance diagrams,class specifications and object specifications for UML.CRC cards can keep track of attributes that can aid listing them as a part of class specification in UML.Most CRC card software have the facility to export CRC analysis file that can be directly used as an input for UML.Following case study develops UML with the help of CRC cards:&lt;br /&gt;
&lt;br /&gt;
http://www.math.gordon.edu/courses/cs211/ATMExample/&lt;br /&gt;
&lt;br /&gt;
==Summary==&lt;br /&gt;
CRC cards are very useful to form the base of object oriented methodology.Techniques such as brain storming and role play enhance the understanding of requirements.CRC automation makes card handling and sharing  quick and efficient.For large projects more formal technology such as UML is required but CRC cards can provide a very good starting point.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Reference==&lt;br /&gt;
*Introduction to CRC Cards: http://www.softstar-inc.com/Download/Intro%20to%20CRC.pdf&lt;br /&gt;
*CRC Cards for ATM : http://www.math-cs.gordon.edu/courses/cps211/ATMExample/CRCCards.html&lt;br /&gt;
*UML methodology for ATM :http://www.math.gordon.edu/courses/cs211/ATMExample/&lt;br /&gt;
*CRC software:&lt;br /&gt;
**quickCRC:http://www.excelsoftware.com/&lt;br /&gt;
**Visual Paradigm:  http://www.visual-paradigm.com/            &lt;br /&gt;
*Bellin, D and Simone, S.S ‘The CRC Card Book’, Addison Wesely, 1997&lt;/div&gt;</summary>
		<author><name>Bluehat</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=User:Bluehat&amp;diff=33739</id>
		<title>User:Bluehat</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=User:Bluehat&amp;diff=33739"/>
		<updated>2010-09-08T14:39:50Z</updated>

		<summary type="html">&lt;p&gt;Bluehat: /* CRC Process */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
The onset of the object oriented paradigm in the software industry brought about a big change in the basic approach to system design and the software development life cycle.The major task in the development of any application using the object oriented paradigm is to identify ‘classes’, and how these classes interact and collaborate with each other in the system scope. &lt;br /&gt;
&lt;br /&gt;
Whenever a system is designed with classes, each class has a specific role to play in the system.It has certain responsibilities and each class collaborates with other classes to provide the complete system functionality. In such a scenario, identifying classes becomes the key to a good system design.Although it seems to be a simple,intuitive process,identifying classes can be quite complex when it comes to large scale systems. &lt;br /&gt;
&lt;br /&gt;
One such technique for identification of classes that make up the system and its collaborations is the ‘CRC Card’ technique. The concept of CRC cards was first put forth by Kent Beck and Ward Cunningham and it became very popular as it is easy to use and it supports development of any kind of object oriented development regardless of its scale,the method used, the technology or the language used for development&lt;br /&gt;
&lt;br /&gt;
==Definition==&lt;br /&gt;
Class Responsibility Collaboration (CRC) cards is an object-oriented design method that uses ordinary 3x5 index cards card made for each class containing responsibilities (knowledge and services) and collaborators (interactions with other classes). The cards provide an informal, intuitive way for group members to work on object design together.&lt;br /&gt;
A typical CRC card layout is shown below.&lt;br /&gt;
[[Image:Crccard2.jpg|frame|center|CRC CARD Template]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example: Consider a Student class where a student can enroll for a seminar. In this case ‘Student’ will be one class and ‘Seminar’ can be another class that collaborates with the Student class.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:CrcStudent.jpg|frame|center|Student CRC Card ]]&lt;br /&gt;
&lt;br /&gt;
To know more about CRC cards please refer to http://www.hsanchez.net/repository/hsanchez-PLCRC-plop04.pdf&lt;br /&gt;
&lt;br /&gt;
==Principle and Process==&lt;br /&gt;
&lt;br /&gt;
===CRC Principle===&lt;br /&gt;
&lt;br /&gt;
A CRC model includes a collection of cards and each card is divided into three sections. &lt;br /&gt;
*Class Name: &lt;br /&gt;
**Appears on the top of the CRC card&lt;br /&gt;
**Class denotes a set of similar objects that are being modeled in the system&lt;br /&gt;
&lt;br /&gt;
*Responsibilities:&lt;br /&gt;
**Appears on the left hand side of the CRC card&lt;br /&gt;
**It is a list of the responsibilities of the class i.e. things a class can do with its knowledge&lt;br /&gt;
&lt;br /&gt;
*Collaborators:&lt;br /&gt;
**Appear on the right hand side of the CRC card&lt;br /&gt;
**They are other classes that the class works with to get information or perform a certain function&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===CRC Process===&lt;br /&gt;
&lt;br /&gt;
CRC modeling process includes the users, analysts, and developers in a modeling and design process, bringing together the entire development team to form a common understanding of an OO development project.Example: Consider a software application to implement a game of blackjack. To implement the CRC technique to design this software, the steps of the process are as follows:&lt;br /&gt;
&lt;br /&gt;
*Explanation of the CRC Technique&lt;br /&gt;
&lt;br /&gt;
**The facilitator explains the purpose of the CRC modeling session&lt;br /&gt;
**It can include explanation of CRC Cards and creation of sample CRC Cards&lt;br /&gt;
&lt;br /&gt;
*Brainstorming&lt;br /&gt;
&lt;br /&gt;
**A brainstorming session at the very beginning brings in new ideas, new perspectives to the problem being solved.&lt;br /&gt;
**Every team member can contribute with innovative ideas&lt;br /&gt;
**A list of candidate classes can be drawn up from this activity&lt;br /&gt;
&lt;br /&gt;
Example: considering the above example, we can identify candidate classes by listing down the nouns relating to the game of blackjack. Say, game, blackjack, dealer, players, card, deck, hand, bet, king, queen, jack, ace, suit, winner, game.&lt;br /&gt;
&lt;br /&gt;
*Selecting a scenario and Core classes&lt;br /&gt;
&lt;br /&gt;
**The scenario chosen at the beginning of the session should be simple, clear and well documented&lt;br /&gt;
**Related scenarios should be identified and dealt with separately&lt;br /&gt;
**Identification of critical classes from the candidate class list is also very important&lt;br /&gt;
**This helps to eliminate irrelevant classes and review remaining classes&lt;br /&gt;
**This also helps clarify the system scope&lt;br /&gt;
&lt;br /&gt;
Example: We can apply the elimination process to the candidate class list. We can eliminate blackjack as it is the name of the system. ‘House’ can be eliminated as it is another name for the dealer. Also, instead of making ace, king, queen and jack as separate classes, we can represent them as attributes of individual classes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Create initial CRC cards&lt;br /&gt;
&lt;br /&gt;
[[Image:Deck1.jpg |frame|center|Deck CRC Card]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Dealer.jpg |frame|center|Dealer CRC Card]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Player.jpg |frame|center|Player CRC Card]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
**From the information gathered in the step above, CRC cards are written&lt;br /&gt;
&lt;br /&gt;
*Creating a CRC Model&lt;br /&gt;
&lt;br /&gt;
**From the CRC cards written, they are placed appropriately, with collaborating classes closer to each other&lt;br /&gt;
**Accordingly, place each card in position till the entire picture of the system is finalized.&lt;br /&gt;
**This process may have to be done in several iterations to get a refined view of the system to be modeled&lt;br /&gt;
&lt;br /&gt;
Using CRC Cards: http://alistair.cockburn.us/Using+CRC+cards&lt;br /&gt;
&lt;br /&gt;
==The CRC Team==&lt;br /&gt;
&lt;br /&gt;
*Domain Experts:&lt;br /&gt;
**Core team that writes the cards&lt;br /&gt;
**Have good business domain knowledge for which the system is being designed&lt;br /&gt;
**Usually are 3-5 people&lt;br /&gt;
&lt;br /&gt;
*Object Oriented Design Analyst:&lt;br /&gt;
**Analysts and developers those are familiar with object oriented design methodologies&lt;br /&gt;
**Usually are 1-2 people&lt;br /&gt;
&lt;br /&gt;
*Facilitator:&lt;br /&gt;
**Most important member who conducts the CRC modeling session&lt;br /&gt;
**Acts as an intermediary when there is difference of opinion regarding class responsibilities and paths of collaboration&lt;br /&gt;
**Usually a single person&lt;br /&gt;
&lt;br /&gt;
*Scribe:&lt;br /&gt;
**Responsible for documenting any business logic that evolves by way of discussions during the CRC modeling process.&lt;br /&gt;
**This documentation can be added to the requirements and business documents which can be used by design analysts at a later stage&lt;br /&gt;
**Usually are 1-2 people&lt;br /&gt;
&lt;br /&gt;
==Case study==&lt;br /&gt;
&lt;br /&gt;
To understand the working of CRC card modeling better, here is an example of an ATM system designed using CRC cards. Here, the software system under consideration has to control an automated teller machine. The ATM has a magnetic stripe reader for reading an ATM card, a customer console (keyboard and display) for interaction with the customer, a slot for depositing envelopes, a dispenser for cash (in multiples of $20), a printer for printing customer receipts, and a key-operated switch to allow an operator to start or stop the machine. Also, the ATM will communicate with the bank's computer over an appropriate communication link.&lt;br /&gt;
&lt;br /&gt;
To perform a transaction, a customer will be required to insert an ATM card and enter a personal identification number (PIN) - both of which will be sent to the bank for validation. The customer will then be able to perform one or more transactions. The card will be retained in the machine until the customer indicates that there are no further transactions, at which point it will be returned. For more on the case study.&lt;br /&gt;
&lt;br /&gt;
http://www.math-cs.gordon.edu/courses/cps211/ATMExample/CRCCards.html&lt;br /&gt;
&lt;br /&gt;
==Metrics for CRC Analysis==&lt;br /&gt;
&lt;br /&gt;
CRC analysis metrics can help evaluate the level of ease in designing and coding with CRC cards. These metrics also contribute to other project planning factors to give overall sense of project development.These metrics can be calculated easily and quickly without the need of special tools. Three metrics are broadly identified as: maximum depth of inheritance, the number of responsibilities assigned to each class and the number of collaborators for a class. With the example below an attempt has been made to explain these metrics.In the diagram, black line indicates inheritance while blue line indicates collaboration. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Class_hierarchy1.png|frame|center|CRC metrics example]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Maximum depth of inheritance===&lt;br /&gt;
&lt;br /&gt;
This metric gives an idea of the class hierarchy. It is the count of number of subclasses in the hierarchy.From the diagram,it can be seen that Part Time student is a subclass of Distance Education which in turn is a subclass of student.Thus,maximum depth of inheritance in this case is two with  reference to class Student. Each subclass shares the overall functions defined in class Student. For short hierarchies, this is a positive benefit of OO. If number of subclasses become too long, it becomes difficult to trace the flow of functions, resulting in overly complex systems. This makes testing, reviewing and reusing difficult.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Number of collaborators===&lt;br /&gt;
&lt;br /&gt;
This is the count of all the supporting classes to help a class.In the diagram,there are four collaborators for class Student:Teacher,Library,Computer Labs and Gymnasium.Confusion between collaborators and subclasses may result in creation many collaborators.This will affect the encapsulation of the design.Typical value for this metric is eight.If this value is large,design may be reviewed to see if inheritance is implemented correctly.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Number of responsibilities===&lt;br /&gt;
This is the count of clearly defined set of duties to each class.For example class Student may have functions like Attending  Lectures,&lt;br /&gt;
Maintaining a certain GPA,Taking the required courses. In this case number of responsibilities is three.Responsibilities should be distributed amongst classes to cover the whole system. This would avoid an imbalance in design. We need to refine the overly complex class into a series of simpler objects. This will make the system easier to understand, implement and reuse. For most commercial transaction oriented systems, values approximately between eight and eighteen are common.&lt;br /&gt;
&lt;br /&gt;
==Advantages==&lt;br /&gt;
* CRC cards create a first-cut analysis for complex systems, and let analysts and users examine the operation of discrete subsystems.&lt;br /&gt;
* CRC cards are invaluable input into more formal methods. Agile development methods often use CRC cards. They are popular as a front end to UML&lt;br /&gt;
* CRC cards are a great way to build teamwork and common understanding.&lt;br /&gt;
* Part of the CRC card attraction is their simplicity. Developers can use them with little formal training and just paper and pencil for tools&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Software for CRC card==&lt;br /&gt;
&lt;br /&gt;
It is difficult to maintain, change, share paper based cards for large projects. Software for CRC cards offer many advantages in such scenarios such as&lt;br /&gt;
&lt;br /&gt;
*Easy Revision: As CRC cards are part of development process, constant changes are made by developers to edit the information .Change to one card might require changes to other cards. It becomes difficult to handle such interdependent changes for various fields such as attribute, responsibility, collaboration on paper based system. Software will reflect one change to every corresponding reference in the design. This saves a lot of time and also avoids the manual errors that may be evident on paper based system.&lt;br /&gt;
&lt;br /&gt;
*Easy sharing: Paper based systems make sharing difficult by necessitating team members to be physically present at one location. Using software, team members can work from different locations.&lt;br /&gt;
&lt;br /&gt;
*Better representation: It is possible to group cards from different perspective such as hierarchy, attributes, parent. This helps better understanding and thinking. Some software also aid graphical display of data.&lt;br /&gt;
&lt;br /&gt;
*Inputs to methodologies: Software for CRC cards can provide the input files for UML class diagram generation software saving lot of time in the development cycle.&lt;br /&gt;
&lt;br /&gt;
*Making additions to existing code: Many projects   make addition to existing code or reuse already developed code in their project. Software can produce CRC cards with existing source code as an input. This would help the team to understand the code in efficient manner and less time.&lt;br /&gt;
&lt;br /&gt;
However,it comes with a cost.Based on required features and cost,team may select from various commercially available software products.Below are few links:&lt;br /&gt;
&lt;br /&gt;
*quickCRC:http://www.excelsoftware.com/&lt;br /&gt;
*CRC card support is part of Visual Paradigm for UML:  http://www.visual-paradigm.com/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==CRC cards Limitations and formal object modeling methodologies(UML)==&lt;br /&gt;
&lt;br /&gt;
CRC cards are used to form initial class definitions but alone are not sufficient to be directly coded into software for large systems.It is difficult to keep track of cards as the systems grows and work on subsystems simultaneously and independently.CRC cards lack the notational power to document all the components of a system and cannot provide implementation specifications such as transition states of objects during its life cycle,interface design,data structures,performance and resource utilization. To bridge this gap,more formal object modeling methodology such as UML is used.UML captures the bigger picture.It provides detailed mapping of use cases(operations),object state transitions,inter-process communication functionality,algorithm design.UML is very effective in incremental model of SDLC where  lot of details need to captured for precise addition.Information  about requirements is represented in detail and whole picture of the system and users is visible.CRC cards are used as effective inputs to UML.CRC card techniques such as brainstorming and role play help enhance functional understanding which helps in preparing better UML use cases.CRC cards given the content for  class diagrams,inheritance diagrams,class specifications and object specifications for UML.CRC cards can keep track of attributes that can aid listing them as a part of class specification in UML.Most CRC card software have the facility to export CRC analysis file that can be directly used as an input for UML.Following case study develops UML with the help of CRC cards:&lt;br /&gt;
&lt;br /&gt;
http://www.math.gordon.edu/courses/cs211/ATMExample/&lt;br /&gt;
&lt;br /&gt;
==Summary==&lt;br /&gt;
CRC cards are very useful to form the base of object oriented methodology.Techniques such as brain storming and role play enhance the understanding of requirements.CRC automation makes card handling and sharing  quick and efficient.For large projects more formal technology such as UML is required but CRC cards can provide a very good starting point.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Reference==&lt;br /&gt;
*Introduction to CRC Cards: http://www.softstar-inc.com/Download/Intro%20to%20CRC.pdf&lt;br /&gt;
*CRC Cards for ATM : http://www.math-cs.gordon.edu/courses/cps211/ATMExample/CRCCards.html&lt;br /&gt;
*UML methodology for ATM :http://www.math.gordon.edu/courses/cs211/ATMExample/&lt;br /&gt;
*CRC software:&lt;br /&gt;
**quickCRC:http://www.excelsoftware.com/&lt;br /&gt;
**Visual Paradigm:  http://www.visual-paradigm.com/            &lt;br /&gt;
*Bellin, D and Simone, S.S ‘The CRC Card Book’, Addison Wesely, 1997&lt;/div&gt;</summary>
		<author><name>Bluehat</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=User:Bluehat&amp;diff=33738</id>
		<title>User:Bluehat</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=User:Bluehat&amp;diff=33738"/>
		<updated>2010-09-08T14:39:19Z</updated>

		<summary type="html">&lt;p&gt;Bluehat: /* CRC Principle */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
The onset of the object oriented paradigm in the software industry brought about a big change in the basic approach to system design and the software development life cycle.The major task in the development of any application using the object oriented paradigm is to identify ‘classes’, and how these classes interact and collaborate with each other in the system scope. &lt;br /&gt;
&lt;br /&gt;
Whenever a system is designed with classes, each class has a specific role to play in the system.It has certain responsibilities and each class collaborates with other classes to provide the complete system functionality. In such a scenario, identifying classes becomes the key to a good system design.Although it seems to be a simple,intuitive process,identifying classes can be quite complex when it comes to large scale systems. &lt;br /&gt;
&lt;br /&gt;
One such technique for identification of classes that make up the system and its collaborations is the ‘CRC Card’ technique. The concept of CRC cards was first put forth by Kent Beck and Ward Cunningham and it became very popular as it is easy to use and it supports development of any kind of object oriented development regardless of its scale,the method used, the technology or the language used for development&lt;br /&gt;
&lt;br /&gt;
==Definition==&lt;br /&gt;
Class Responsibility Collaboration (CRC) cards is an object-oriented design method that uses ordinary 3x5 index cards card made for each class containing responsibilities (knowledge and services) and collaborators (interactions with other classes). The cards provide an informal, intuitive way for group members to work on object design together.&lt;br /&gt;
A typical CRC card layout is shown below.&lt;br /&gt;
[[Image:Crccard2.jpg|frame|center|CRC CARD Template]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example: Consider a Student class where a student can enroll for a seminar. In this case ‘Student’ will be one class and ‘Seminar’ can be another class that collaborates with the Student class.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:CrcStudent.jpg|frame|center|Student CRC Card ]]&lt;br /&gt;
&lt;br /&gt;
To know more about CRC cards please refer to http://www.hsanchez.net/repository/hsanchez-PLCRC-plop04.pdf&lt;br /&gt;
&lt;br /&gt;
==Principle and Process==&lt;br /&gt;
&lt;br /&gt;
===CRC Principle===&lt;br /&gt;
&lt;br /&gt;
A CRC model includes a collection of cards and each card is divided into three sections. &lt;br /&gt;
*Class Name: &lt;br /&gt;
**Appears on the top of the CRC card&lt;br /&gt;
**Class denotes a set of similar objects that are being modeled in the system&lt;br /&gt;
&lt;br /&gt;
*Responsibilities:&lt;br /&gt;
**Appears on the left hand side of the CRC card&lt;br /&gt;
**It is a list of the responsibilities of the class i.e. things a class can do with its knowledge&lt;br /&gt;
&lt;br /&gt;
*Collaborators:&lt;br /&gt;
**Appear on the right hand side of the CRC card&lt;br /&gt;
**They are other classes that the class works with to get information or perform a certain function&lt;br /&gt;
&lt;br /&gt;
===CRC Process===&lt;br /&gt;
&lt;br /&gt;
CRC modeling process includes the users, analysts, and developers in a modeling and design process, bringing together the entire development team to form a common understanding of an OO development project.Example: Consider a software application to implement a game of blackjack. To implement the CRC technique to design this software, the steps of the process are as follows:&lt;br /&gt;
&lt;br /&gt;
*Explanation of the CRC Technique&lt;br /&gt;
&lt;br /&gt;
**The facilitator explains the purpose of the CRC modeling session&lt;br /&gt;
**It can include explanation of CRC Cards and creation of sample CRC Cards&lt;br /&gt;
&lt;br /&gt;
*Brainstorming&lt;br /&gt;
&lt;br /&gt;
**A brainstorming session at the very beginning brings in new ideas, new perspectives to the problem being solved.&lt;br /&gt;
**Every team member can contribute with innovative ideas&lt;br /&gt;
**A list of candidate classes can be drawn up from this activity&lt;br /&gt;
&lt;br /&gt;
Example: considering the above example, we can identify candidate classes by listing down the nouns relating to the game of blackjack. Say, game, blackjack, dealer, players, card, deck, hand, bet, king, queen, jack, ace, suit, winner, game.&lt;br /&gt;
&lt;br /&gt;
*Selecting a scenario and Core classes&lt;br /&gt;
&lt;br /&gt;
**The scenario chosen at the beginning of the session should be simple, clear and well documented&lt;br /&gt;
**Related scenarios should be identified and dealt with separately&lt;br /&gt;
**Identification of critical classes from the candidate class list is also very important&lt;br /&gt;
**This helps to eliminate irrelevant classes and review remaining classes&lt;br /&gt;
**This also helps clarify the system scope&lt;br /&gt;
&lt;br /&gt;
Example: We can apply the elimination process to the candidate class list. We can eliminate blackjack as it is the name of the system. ‘House’ can be eliminated as it is another name for the dealer. Also, instead of making ace, king, queen and jack as separate classes, we can represent them as attributes of individual classes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Create initial CRC cards&lt;br /&gt;
&lt;br /&gt;
[[Image:Deck1.jpg |frame|center|Deck CRC Card]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Dealer.jpg |frame|center|Dealer CRC Card]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Player.jpg |frame|center|Player CRC Card]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
**From the information gathered in the step above, CRC cards are written&lt;br /&gt;
&lt;br /&gt;
*Creating a CRC Model&lt;br /&gt;
&lt;br /&gt;
**From the CRC cards written, they are placed appropriately, with collaborating classes closer to each other&lt;br /&gt;
**Accordingly, place each card in position till the entire picture of the system is finalized.&lt;br /&gt;
**This process may have to be done in several iterations to get a refined view of the system to be modeled&lt;br /&gt;
&lt;br /&gt;
Using CRC Cards: http://alistair.cockburn.us/Using+CRC+cards&lt;br /&gt;
&lt;br /&gt;
==The CRC Team==&lt;br /&gt;
&lt;br /&gt;
*Domain Experts:&lt;br /&gt;
**Core team that writes the cards&lt;br /&gt;
**Have good business domain knowledge for which the system is being designed&lt;br /&gt;
**Usually are 3-5 people&lt;br /&gt;
&lt;br /&gt;
*Object Oriented Design Analyst:&lt;br /&gt;
**Analysts and developers those are familiar with object oriented design methodologies&lt;br /&gt;
**Usually are 1-2 people&lt;br /&gt;
&lt;br /&gt;
*Facilitator:&lt;br /&gt;
**Most important member who conducts the CRC modeling session&lt;br /&gt;
**Acts as an intermediary when there is difference of opinion regarding class responsibilities and paths of collaboration&lt;br /&gt;
**Usually a single person&lt;br /&gt;
&lt;br /&gt;
*Scribe:&lt;br /&gt;
**Responsible for documenting any business logic that evolves by way of discussions during the CRC modeling process.&lt;br /&gt;
**This documentation can be added to the requirements and business documents which can be used by design analysts at a later stage&lt;br /&gt;
**Usually are 1-2 people&lt;br /&gt;
&lt;br /&gt;
==Case study==&lt;br /&gt;
&lt;br /&gt;
To understand the working of CRC card modeling better, here is an example of an ATM system designed using CRC cards. Here, the software system under consideration has to control an automated teller machine. The ATM has a magnetic stripe reader for reading an ATM card, a customer console (keyboard and display) for interaction with the customer, a slot for depositing envelopes, a dispenser for cash (in multiples of $20), a printer for printing customer receipts, and a key-operated switch to allow an operator to start or stop the machine. Also, the ATM will communicate with the bank's computer over an appropriate communication link.&lt;br /&gt;
&lt;br /&gt;
To perform a transaction, a customer will be required to insert an ATM card and enter a personal identification number (PIN) - both of which will be sent to the bank for validation. The customer will then be able to perform one or more transactions. The card will be retained in the machine until the customer indicates that there are no further transactions, at which point it will be returned. For more on the case study.&lt;br /&gt;
&lt;br /&gt;
http://www.math-cs.gordon.edu/courses/cps211/ATMExample/CRCCards.html&lt;br /&gt;
&lt;br /&gt;
==Metrics for CRC Analysis==&lt;br /&gt;
&lt;br /&gt;
CRC analysis metrics can help evaluate the level of ease in designing and coding with CRC cards. These metrics also contribute to other project planning factors to give overall sense of project development.These metrics can be calculated easily and quickly without the need of special tools. Three metrics are broadly identified as: maximum depth of inheritance, the number of responsibilities assigned to each class and the number of collaborators for a class. With the example below an attempt has been made to explain these metrics.In the diagram, black line indicates inheritance while blue line indicates collaboration. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Class_hierarchy1.png|frame|center|CRC metrics example]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Maximum depth of inheritance===&lt;br /&gt;
&lt;br /&gt;
This metric gives an idea of the class hierarchy. It is the count of number of subclasses in the hierarchy.From the diagram,it can be seen that Part Time student is a subclass of Distance Education which in turn is a subclass of student.Thus,maximum depth of inheritance in this case is two with  reference to class Student. Each subclass shares the overall functions defined in class Student. For short hierarchies, this is a positive benefit of OO. If number of subclasses become too long, it becomes difficult to trace the flow of functions, resulting in overly complex systems. This makes testing, reviewing and reusing difficult.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Number of collaborators===&lt;br /&gt;
&lt;br /&gt;
This is the count of all the supporting classes to help a class.In the diagram,there are four collaborators for class Student:Teacher,Library,Computer Labs and Gymnasium.Confusion between collaborators and subclasses may result in creation many collaborators.This will affect the encapsulation of the design.Typical value for this metric is eight.If this value is large,design may be reviewed to see if inheritance is implemented correctly.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Number of responsibilities===&lt;br /&gt;
This is the count of clearly defined set of duties to each class.For example class Student may have functions like Attending  Lectures,&lt;br /&gt;
Maintaining a certain GPA,Taking the required courses. In this case number of responsibilities is three.Responsibilities should be distributed amongst classes to cover the whole system. This would avoid an imbalance in design. We need to refine the overly complex class into a series of simpler objects. This will make the system easier to understand, implement and reuse. For most commercial transaction oriented systems, values approximately between eight and eighteen are common.&lt;br /&gt;
&lt;br /&gt;
==Advantages==&lt;br /&gt;
* CRC cards create a first-cut analysis for complex systems, and let analysts and users examine the operation of discrete subsystems.&lt;br /&gt;
* CRC cards are invaluable input into more formal methods. Agile development methods often use CRC cards. They are popular as a front end to UML&lt;br /&gt;
* CRC cards are a great way to build teamwork and common understanding.&lt;br /&gt;
* Part of the CRC card attraction is their simplicity. Developers can use them with little formal training and just paper and pencil for tools&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Software for CRC card==&lt;br /&gt;
&lt;br /&gt;
It is difficult to maintain, change, share paper based cards for large projects. Software for CRC cards offer many advantages in such scenarios such as&lt;br /&gt;
&lt;br /&gt;
*Easy Revision: As CRC cards are part of development process, constant changes are made by developers to edit the information .Change to one card might require changes to other cards. It becomes difficult to handle such interdependent changes for various fields such as attribute, responsibility, collaboration on paper based system. Software will reflect one change to every corresponding reference in the design. This saves a lot of time and also avoids the manual errors that may be evident on paper based system.&lt;br /&gt;
&lt;br /&gt;
*Easy sharing: Paper based systems make sharing difficult by necessitating team members to be physically present at one location. Using software, team members can work from different locations.&lt;br /&gt;
&lt;br /&gt;
*Better representation: It is possible to group cards from different perspective such as hierarchy, attributes, parent. This helps better understanding and thinking. Some software also aid graphical display of data.&lt;br /&gt;
&lt;br /&gt;
*Inputs to methodologies: Software for CRC cards can provide the input files for UML class diagram generation software saving lot of time in the development cycle.&lt;br /&gt;
&lt;br /&gt;
*Making additions to existing code: Many projects   make addition to existing code or reuse already developed code in their project. Software can produce CRC cards with existing source code as an input. This would help the team to understand the code in efficient manner and less time.&lt;br /&gt;
&lt;br /&gt;
However,it comes with a cost.Based on required features and cost,team may select from various commercially available software products.Below are few links:&lt;br /&gt;
&lt;br /&gt;
*quickCRC:http://www.excelsoftware.com/&lt;br /&gt;
*CRC card support is part of Visual Paradigm for UML:  http://www.visual-paradigm.com/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==CRC cards Limitations and formal object modeling methodologies(UML)==&lt;br /&gt;
&lt;br /&gt;
CRC cards are used to form initial class definitions but alone are not sufficient to be directly coded into software for large systems.It is difficult to keep track of cards as the systems grows and work on subsystems simultaneously and independently.CRC cards lack the notational power to document all the components of a system and cannot provide implementation specifications such as transition states of objects during its life cycle,interface design,data structures,performance and resource utilization. To bridge this gap,more formal object modeling methodology such as UML is used.UML captures the bigger picture.It provides detailed mapping of use cases(operations),object state transitions,inter-process communication functionality,algorithm design.UML is very effective in incremental model of SDLC where  lot of details need to captured for precise addition.Information  about requirements is represented in detail and whole picture of the system and users is visible.CRC cards are used as effective inputs to UML.CRC card techniques such as brainstorming and role play help enhance functional understanding which helps in preparing better UML use cases.CRC cards given the content for  class diagrams,inheritance diagrams,class specifications and object specifications for UML.CRC cards can keep track of attributes that can aid listing them as a part of class specification in UML.Most CRC card software have the facility to export CRC analysis file that can be directly used as an input for UML.Following case study develops UML with the help of CRC cards:&lt;br /&gt;
&lt;br /&gt;
http://www.math.gordon.edu/courses/cs211/ATMExample/&lt;br /&gt;
&lt;br /&gt;
==Summary==&lt;br /&gt;
CRC cards are very useful to form the base of object oriented methodology.Techniques such as brain storming and role play enhance the understanding of requirements.CRC automation makes card handling and sharing  quick and efficient.For large projects more formal technology such as UML is required but CRC cards can provide a very good starting point.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Reference==&lt;br /&gt;
*Introduction to CRC Cards: http://www.softstar-inc.com/Download/Intro%20to%20CRC.pdf&lt;br /&gt;
*CRC Cards for ATM : http://www.math-cs.gordon.edu/courses/cps211/ATMExample/CRCCards.html&lt;br /&gt;
*UML methodology for ATM :http://www.math.gordon.edu/courses/cs211/ATMExample/&lt;br /&gt;
*CRC software:&lt;br /&gt;
**quickCRC:http://www.excelsoftware.com/&lt;br /&gt;
**Visual Paradigm:  http://www.visual-paradigm.com/            &lt;br /&gt;
*Bellin, D and Simone, S.S ‘The CRC Card Book’, Addison Wesely, 1997&lt;/div&gt;</summary>
		<author><name>Bluehat</name></author>
	</entry>
</feed>