<?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=Pgjalisa</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=Pgjalisa"/>
	<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Special:Contributions/Pgjalisa"/>
	<updated>2026-05-22T01:19:51Z</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_2012/ch2a_2w33_pv&amp;diff=68627</id>
		<title>CSC/ECE 517 Fall 2012/ch2a 2w33 pv</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w33_pv&amp;diff=68627"/>
		<updated>2012-10-27T00:34:57Z</updated>

		<summary type="html">&lt;p&gt;Pgjalisa: /* Also see */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;big&amp;gt;'''SaaS - 5.5 - Fixtures and Factories'''&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
One of the best parts about [http://www.ruby-lang.org/en/ Ruby] community is the degree to which the developers focus on testing. Developers work with 3 types of tests namely, units (for models), functional (for controllers) and integration tests. Testing requires providing the code with inputs and matching the output generated with the expected outputs. Testing data from the database is however is a little challenging since data should be first stored in the database so that the tests can run on it. These tests may make a few modifications(adding, deleting or updating rows) to the data present in the database. These changes will stay for the next test which is not desirable. Therefore, we need a way to put the database into a known state before the next test begins. This can be achieved using Fixtures and Factories.&amp;lt;ref&amp;gt;http://www.linuxjournal.com/magazine/forge-fixtures-and-factories?page=0,0&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Fixtures=&lt;br /&gt;
Fixtures are sample data on which all the tests run.&lt;br /&gt;
&lt;br /&gt;
There can be 3 types of fixtures&amp;lt;ref&amp;gt;http://ar.rubyonrails.org/classes/Fixtures.html&amp;lt;/ref&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
1. YAML fixtures&lt;br /&gt;
&lt;br /&gt;
2. CSV fixtures&lt;br /&gt;
&lt;br /&gt;
3. Single-file fixtures&lt;br /&gt;
&lt;br /&gt;
==YAML Fixtures==&lt;br /&gt;
YAML is a recursive acronym for &amp;quot;YAML Ain't Markup Language&amp;quot;.&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/YAML&amp;lt;/ref&amp;gt; YAML is a file format which describes data structures in a non-verbose, human-readable format. YAML consists of name-value pairs within a hierarchy, and indentation indicates where in the hierarchy a particular name-value pair exists. This file ends with .yml extension.&lt;br /&gt;
&lt;br /&gt;
The following example shows the format of a YAML fixture for a post:&lt;br /&gt;
&lt;br /&gt;
 post_one:&lt;br /&gt;
   title: one&lt;br /&gt;
   description: post_one_desc&lt;br /&gt;
   category: category_one&lt;br /&gt;
 &lt;br /&gt;
 post_two:&lt;br /&gt;
   title: two&lt;br /&gt;
   description: post_two_desc&lt;br /&gt;
   category: category_two&lt;br /&gt;
&lt;br /&gt;
==CSV fixtures==&lt;br /&gt;
Comma Separated Value format can be used to store sample data. The files end with &amp;quot;.csv&amp;quot; extension. The first line of the CSV file is a comma-separated list of field names. The rest of the file contains the actual data. CSV fixtures have no fixture names.&lt;br /&gt;
&lt;br /&gt;
The following example shows the format of a CSV fixture: &lt;br /&gt;
 &lt;br /&gt;
 title,description, category&lt;br /&gt;
 one, post_one_desc, category_one&lt;br /&gt;
 two, post_two_desc, category_two&lt;br /&gt;
&lt;br /&gt;
==Single-file fixtures==&lt;br /&gt;
Fixtures for this format are created by placing text files in a sub-directory (with the name of the model) to the directory appointed by ActiveSupport::TestCase.fixture_path=(path). Each text file placed in this directory represents a &amp;quot;record&amp;quot;. Usually these types of fixtures are named without extensions.&lt;br /&gt;
&lt;br /&gt;
The following example shows the format of a single-file fixture: &lt;br /&gt;
 &lt;br /&gt;
 posts/post_one&lt;br /&gt;
 posts/post_two&lt;br /&gt;
&lt;br /&gt;
Fixtures are basically Hash objects&amp;lt;ref&amp;gt;http://guides.rubyonrails.org/testing.html#the-low-down-on-fixtures&amp;lt;/ref&amp;gt;. We can access the hash object directly because it is automatically setup as a local variable of the test case. For example:&lt;br /&gt;
&lt;br /&gt;
 # this will return the Hash for the fixture named post_one&lt;br /&gt;
 posts(:post_one)&lt;br /&gt;
&lt;br /&gt;
=Factories=&lt;br /&gt;
For a small site, fixtures are enough. However, in bigger sites fixtures might get confusing. Factories are alternatives to fixtures in such cases. They have become increasingly popular in the last few years since they allow you to do things that cannot be done using YAML.&lt;br /&gt;
&lt;br /&gt;
A factory is an object used to create other objects. Factory objects are used in [http://en.wikipedia.org/wiki/Test-driven_development test-driven development] to allow the classes to be put under test.&lt;br /&gt;
&lt;br /&gt;
Factory Girl&amp;lt;ref&amp;gt;https://github.com/thoughtbot/factory_girl&amp;lt;/ref&amp;gt; is one of the well known factories which is widely used. It is written by Thoughtbot company and is available as a Ruby gem. Unlike fixtures, Factory Girl allows us to create objects rather than use defaults. &lt;br /&gt;
&lt;br /&gt;
To set up Factory Girl&amp;lt;ref&amp;gt;https://github.com/thoughtbot/factory_girl/blob/master/GETTING_STARTED.md&amp;lt;/ref&amp;gt;, update the GemFile with the following&lt;br /&gt;
 gem &amp;quot;factory_girl_rails&amp;quot;, &amp;quot;~&amp;gt; 4.0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The following example shows how a factory can be defined using Factory Girl:&lt;br /&gt;
&lt;br /&gt;
 Factory.define :post do |p|&lt;br /&gt;
   p.title 'Fixtures and Factories'&lt;br /&gt;
   p.description  'This a wiki for fixtures and factories'&lt;br /&gt;
   p.category 'OOLS'&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
=Fixtures vs. Factories=&lt;br /&gt;
&lt;br /&gt;
Fixtures allow known data to be statically pre-loaded into database tables before testing. Factories create only whatever is needed on a case by case basis.&lt;br /&gt;
&lt;br /&gt;
==Fixtures Advantages==&lt;br /&gt;
&lt;br /&gt;
* Easy to view all the data in one place&lt;br /&gt;
* Data is truly static&lt;br /&gt;
* Simple and clean&lt;br /&gt;
&lt;br /&gt;
==Fixtures Disadvantages==&lt;br /&gt;
&lt;br /&gt;
* Inserting data into the database for each run slows down the testing process&lt;br /&gt;
* Introduces dependency on fixture data&lt;br /&gt;
* Data customization is more complex&lt;br /&gt;
* Fixtures cannot be parameterized&lt;br /&gt;
&lt;br /&gt;
==Factories Advantages==&lt;br /&gt;
&lt;br /&gt;
* Maintains independence of tests&lt;br /&gt;
* Better overall performance since data is created only on a per need basis&lt;br /&gt;
* Tests and data are well isolated&lt;br /&gt;
 &lt;br /&gt;
==Factories Disadvantages==&lt;br /&gt;
&lt;br /&gt;
* Complex relationships might be hard to capture&lt;br /&gt;
* Performance might sometimes be degraded, due to the create operations.&lt;br /&gt;
&lt;br /&gt;
= References = &lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pgjalisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w33_pv&amp;diff=68395</id>
		<title>CSC/ECE 517 Fall 2012/ch2a 2w33 pv</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w33_pv&amp;diff=68395"/>
		<updated>2012-10-26T23:09:35Z</updated>

		<summary type="html">&lt;p&gt;Pgjalisa: /* Factories */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;big&amp;gt;'''SaaS - 5.5 - Fixtures and Factories'''&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
One of the best parts about [http://www.ruby-lang.org/en/ Ruby] community is the degree to which the developers focus on testing. Developers work with 3 types of tests namely, units (for models), functional (for controllers) and integration tests. Testing requires providing the code with inputs and matching the output generated with the expected outputs. Testing data from the database is however is a little challenging since data should be first stored in the database so that the tests can run on it. These tests may make a few modifications(adding, deleting or updating rows) to the data present in the database. These changes will stay for the next test which is not desirable. Therefore, we need a way to put the database into a known state before the next test begins. This can be achieved using Fixtures and Factories.&amp;lt;ref&amp;gt;http://www.linuxjournal.com/magazine/forge-fixtures-and-factories?page=0,0&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Fixtures=&lt;br /&gt;
Fixtures are sample data on which all the tests run.&lt;br /&gt;
&lt;br /&gt;
There can be 3 types of fixtures&amp;lt;ref&amp;gt;http://ar.rubyonrails.org/classes/Fixtures.html&amp;lt;/ref&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
1. YAML fixtures&lt;br /&gt;
&lt;br /&gt;
2. CSV fixtures&lt;br /&gt;
&lt;br /&gt;
3. Single-file fixtures&lt;br /&gt;
&lt;br /&gt;
==YAML Fixtures==&lt;br /&gt;
YAML is a recursive acronym for &amp;quot;YAML Ain't Markup Language&amp;quot;.&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/YAML&amp;lt;/ref&amp;gt; YAML is a file format which describes data structures in a non-verbose, human-readable format. YAML consists of name-value pairs within a hierarchy, and indentation indicates where in the hierarchy a particular name-value pair exists. This file ends with .yml extension.&lt;br /&gt;
&lt;br /&gt;
The following example shows the format of a YAML fixture for a post:&lt;br /&gt;
&lt;br /&gt;
 post_one:&lt;br /&gt;
   title: one&lt;br /&gt;
   description: post_one_desc&lt;br /&gt;
   category: category_one&lt;br /&gt;
 &lt;br /&gt;
 post_two:&lt;br /&gt;
   title: two&lt;br /&gt;
   description: post_two_desc&lt;br /&gt;
   category: category_two&lt;br /&gt;
&lt;br /&gt;
==CSV fixtures==&lt;br /&gt;
Comma Separated Value format can be used to store sample data. The files end with &amp;quot;.csv&amp;quot; extension. The first line of the CSV file is a comma-separated list of field names. The rest of the file contains the actual data. CSV fixtures have no fixture names.&lt;br /&gt;
&lt;br /&gt;
The following example shows the format of a CSV fixture: &lt;br /&gt;
 &lt;br /&gt;
 title,description, category&lt;br /&gt;
 one, post_one_desc, category_one&lt;br /&gt;
 two, post_two_desc, category_two&lt;br /&gt;
&lt;br /&gt;
==Single-file fixtures==&lt;br /&gt;
Fixtures for this format are created by placing text files in a sub-directory (with the name of the model) to the directory appointed by ActiveSupport::TestCase.fixture_path=(path). Each text file placed in this directory represents a &amp;quot;record&amp;quot;. Usually these types of fixtures are named without extensions.&lt;br /&gt;
&lt;br /&gt;
The following example shows the format of a single-file fixture: &lt;br /&gt;
 &lt;br /&gt;
 posts/post_one&lt;br /&gt;
 posts/post_two&lt;br /&gt;
&lt;br /&gt;
Fixtures are basically Hash objects&amp;lt;ref&amp;gt;http://guides.rubyonrails.org/testing.html#the-low-down-on-fixtures&amp;lt;/ref&amp;gt;. We can access the hash object directly because it is automatically setup as a local variable of the test case. For example:&lt;br /&gt;
&lt;br /&gt;
 # this will return the Hash for the fixture named post_one&lt;br /&gt;
 posts(:post_one)&lt;br /&gt;
&lt;br /&gt;
=Factories=&lt;br /&gt;
For a small site, fixtures are enough. However, in bigger sites fixtures might get confusing. Factories are alternatives to fixtures in such cases. They have become increasingly popular in the last few years since they allow you to do things that cannot be done using YAML.&lt;br /&gt;
&lt;br /&gt;
A factory is an object used to create other objects. Factory objects are used in [http://en.wikipedia.org/wiki/Test-driven_development test-driven development] to allow the classes to be put under test.&lt;br /&gt;
&lt;br /&gt;
Factory Girl&amp;lt;ref&amp;gt;https://github.com/thoughtbot/factory_girl&amp;lt;/ref&amp;gt; is one of the well known factories which is widely used. It is written by Thoughtbot company and is available as a Ruby gem. Unlike fixtures, Factory Girl allows us to create objects rather than use defaults. &lt;br /&gt;
&lt;br /&gt;
To set up Factory Girl&amp;lt;ref&amp;gt;https://github.com/thoughtbot/factory_girl/blob/master/GETTING_STARTED.md&amp;lt;/ref&amp;gt;, update the GemFile with the following&lt;br /&gt;
 gem &amp;quot;factory_girl_rails&amp;quot;, &amp;quot;~&amp;gt; 4.0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The following example shows how a factory can be defined using Factory Girl:&lt;br /&gt;
&lt;br /&gt;
 Factory.define :post do |p|&lt;br /&gt;
   p.title 'Fixtures and Factories'&lt;br /&gt;
   p.description  'This a wiki for fixtures and factories'&lt;br /&gt;
   p.category 'OOLS'&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
=Fixtures vs. Factories=&lt;br /&gt;
&lt;br /&gt;
==Fixtures Advantages==&lt;br /&gt;
&lt;br /&gt;
==Fixtures Disadvantages==&lt;br /&gt;
&lt;br /&gt;
==Factories Advantages==&lt;br /&gt;
&lt;br /&gt;
==Factories Disadvantages==&lt;br /&gt;
&lt;br /&gt;
=Also see=&lt;br /&gt;
&lt;br /&gt;
= References = &lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pgjalisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w33_pv&amp;diff=68362</id>
		<title>CSC/ECE 517 Fall 2012/ch2a 2w33 pv</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w33_pv&amp;diff=68362"/>
		<updated>2012-10-26T22:48:17Z</updated>

		<summary type="html">&lt;p&gt;Pgjalisa: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;big&amp;gt;'''SaaS - 5.5 - Fixtures and Factories'''&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
One of the best parts about [http://www.ruby-lang.org/en/ Ruby] community is the degree to which the developers focus on testing. Developers work with 3 types of tests namely, units (for models), functional (for controllers) and integration tests. Testing requires providing the code with inputs and matching the output generated with the expected outputs. Testing data from the database is however is a little challenging since data should be first stored in the database so that the tests can run on it. These tests may make a few modifications(adding, deleting or updating rows) to the data present in the database. These changes will stay for the next test which is not desirable. Therefore, we need a way to put the database into a known state before the next test begins. This can be achieved using Fixtures and Factories.&amp;lt;ref&amp;gt;http://www.linuxjournal.com/magazine/forge-fixtures-and-factories?page=0,0&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Fixtures=&lt;br /&gt;
Fixtures are sample data on which all the tests run.&lt;br /&gt;
&lt;br /&gt;
There can be 3 types of fixtures&amp;lt;ref&amp;gt;http://ar.rubyonrails.org/classes/Fixtures.html&amp;lt;/ref&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
1. YAML fixtures&lt;br /&gt;
&lt;br /&gt;
2. CSV fixtures&lt;br /&gt;
&lt;br /&gt;
3. Single-file fixtures&lt;br /&gt;
&lt;br /&gt;
==YAML Fixtures==&lt;br /&gt;
YAML is a recursive acronym for &amp;quot;YAML Ain't Markup Language&amp;quot;.&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/YAML&amp;lt;/ref&amp;gt; YAML is a file format which describes data structures in a non-verbose, human-readable format. YAML consists of name-value pairs within a hierarchy, and indentation indicates where in the hierarchy a particular name-value pair exists. This file ends with .yml extension.&lt;br /&gt;
&lt;br /&gt;
The following example shows the format of a YAML fixture for a post:&lt;br /&gt;
&lt;br /&gt;
 post_one:&lt;br /&gt;
   title: one&lt;br /&gt;
   description: post_one_desc&lt;br /&gt;
   category: category_one&lt;br /&gt;
 &lt;br /&gt;
 post_two:&lt;br /&gt;
   title: two&lt;br /&gt;
   description: post_two_desc&lt;br /&gt;
   category: category_two&lt;br /&gt;
&lt;br /&gt;
==CSV fixtures==&lt;br /&gt;
Comma Separated Value format can be used to store sample data. The files end with &amp;quot;.csv&amp;quot; extension. The first line of the CSV file is a comma-separated list of field names. The rest of the file contains the actual data. CSV fixtures have no fixture names.&lt;br /&gt;
&lt;br /&gt;
The following example shows the format of a CSV fixture: &lt;br /&gt;
 &lt;br /&gt;
 title,description, category&lt;br /&gt;
 one, post_one_desc, category_one&lt;br /&gt;
 two, post_two_desc, category_two&lt;br /&gt;
&lt;br /&gt;
==Single-file fixtures==&lt;br /&gt;
Fixtures for this format are created by placing text files in a sub-directory (with the name of the model) to the directory appointed by ActiveSupport::TestCase.fixture_path=(path). Each text file placed in this directory represents a &amp;quot;record&amp;quot;. Usually these types of fixtures are named without extensions.&lt;br /&gt;
&lt;br /&gt;
The following example shows the format of a single-file fixture: &lt;br /&gt;
 &lt;br /&gt;
 posts/post_one&lt;br /&gt;
 posts/post_two&lt;br /&gt;
&lt;br /&gt;
Fixtures are basically Hash objects&amp;lt;ref&amp;gt;http://guides.rubyonrails.org/testing.html#the-low-down-on-fixtures&amp;lt;/ref&amp;gt;. We can access the hash object directly because it is automatically setup as a local variable of the test case. For example:&lt;br /&gt;
&lt;br /&gt;
 # this will return the Hash for the fixture named post_one&lt;br /&gt;
 posts(:post_one)&lt;br /&gt;
&lt;br /&gt;
=Factories=&lt;br /&gt;
For a small site, fixtures are enough. However, in bigger sites fixtures might get confusing. Factories are alternatives to fixtures in such cases. They have become increasingly popular in the last few years since they allow you to do things that cannot be done using YAML.&lt;br /&gt;
&lt;br /&gt;
A factory is an object used to create other objects. Factory objects are used in [http://en.wikipedia.org/wiki/Test-driven_development test-driven development] to allow the classes to be put under test.&lt;br /&gt;
&lt;br /&gt;
Factory Girl&amp;lt;ref&amp;gt;https://github.com/thoughtbot/factory_girl&amp;lt;/ref&amp;gt; is one of the well known factories which is widely used. It is written by Thoughtbot company and is available as a Ruby gem. Unlike fixtures, Factory Girl allows us to create objects rather than use defaults. &lt;br /&gt;
&lt;br /&gt;
To set up Factory Girl, update the GemFile with the following&lt;br /&gt;
 gem &amp;quot;factory_girl_rails&amp;quot;, &amp;quot;~&amp;gt; 4.0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 Factory.define :post do |p|&lt;br /&gt;
   p.title 'Fixtues and Factories'&lt;br /&gt;
   p.description  'This a wiki for fixtures and factories'&lt;br /&gt;
   p.category 'OOLS'&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
=Fixtures vs. Factories=&lt;br /&gt;
&lt;br /&gt;
==Fixtures Advantages==&lt;br /&gt;
&lt;br /&gt;
==Fixtures Disadvantages==&lt;br /&gt;
&lt;br /&gt;
==Factories Advantages==&lt;br /&gt;
&lt;br /&gt;
==Factories Disadvantages==&lt;br /&gt;
&lt;br /&gt;
=Also see=&lt;br /&gt;
&lt;br /&gt;
= References = &lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pgjalisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w33_pv&amp;diff=68316</id>
		<title>CSC/ECE 517 Fall 2012/ch2a 2w33 pv</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w33_pv&amp;diff=68316"/>
		<updated>2012-10-26T22:01:39Z</updated>

		<summary type="html">&lt;p&gt;Pgjalisa: /* Factories */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;big&amp;gt;'''SaaS - 5.5 - Fixtures and Factories'''&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
One of the best parts about [http://www.ruby-lang.org/en/ Ruby] community is the degree to which the developers focus on testing. Developers work with 3 types of tests namely, units (for models), functional (for controllers) and integration tests. Testing requires providing the code with inputs and matching the output generated with the expected outputs. Testing data from the database is however is a little challenging since data should be first stored in the database so that the tests can run on it. These tests may make a few modifications(adding, deleting or updating rows) to the data present in the database. These changes will stay for the next test which is not desirable. Therefore, we need a way to put the database into a known state before the next test begins. This can be achieved using Fixtures and Factories.&amp;lt;ref&amp;gt;http://www.linuxjournal.com/magazine/forge-fixtures-and-factories?page=0,0&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Fixtures=&lt;br /&gt;
Fixtures are sample data on which all the tests run.&lt;br /&gt;
&lt;br /&gt;
There can be 3 types of fixtures&amp;lt;ref&amp;gt;http://ar.rubyonrails.org/classes/Fixtures.html&amp;lt;/ref&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
1. YAML fixtures&lt;br /&gt;
&lt;br /&gt;
2. CSV fixtures&lt;br /&gt;
&lt;br /&gt;
3. Single-file fixtures&lt;br /&gt;
&lt;br /&gt;
==YAML Fixtures==&lt;br /&gt;
YAML is a recursive acronym for &amp;quot;YAML Ain't Markup Language&amp;quot;.&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/YAML&amp;lt;/ref&amp;gt; YAML is a file format which describes data structures in a non-verbose, human-readable format. YAML consists of name-value pairs within a hierarchy, and indentation indicates where in the hierarchy a particular name-value pair exists. This file ends with .yml extension.&lt;br /&gt;
&lt;br /&gt;
The following example shows the format of a YAML fixture:&lt;br /&gt;
&lt;br /&gt;
 post_one:&lt;br /&gt;
   title: one&lt;br /&gt;
   description: post_one_desc&lt;br /&gt;
   category: category_one&lt;br /&gt;
   user: user_one&lt;br /&gt;
 &lt;br /&gt;
 post_two:&lt;br /&gt;
   title: two&lt;br /&gt;
   description: post_two_desc&lt;br /&gt;
   category: category_two&lt;br /&gt;
   user: user_two&lt;br /&gt;
&lt;br /&gt;
==CSV fixtures==&lt;br /&gt;
Comma Separated Value format can be used to store sample data. The files end with &amp;quot;.csv&amp;quot; extension. The first line of the CSV file is a comma-separated list of field names. The rest of the file contains the actual data. CSV fixtures have no fixture names.&lt;br /&gt;
&lt;br /&gt;
The following example shows the format of a CSV fixture: &lt;br /&gt;
 &lt;br /&gt;
 title,description, category, user&lt;br /&gt;
 one, post_one_desc, category_one, user_one &lt;br /&gt;
 two, post_two_desc, category_two, user_two&lt;br /&gt;
&lt;br /&gt;
==Single-file fixtures==&lt;br /&gt;
Fixtures for this format are created by placing text files in a sub-directory (with the name of the model) to the directory appointed by ActiveSupport::TestCase.fixture_path=(path). Each text file placed in this directory represents a &amp;quot;record&amp;quot;. Usually these types of fixtures are named without extensions.&lt;br /&gt;
&lt;br /&gt;
The following example shows the format of a single-file fixture: &lt;br /&gt;
 &lt;br /&gt;
 posts/post_one&lt;br /&gt;
 posts/post_two&lt;br /&gt;
&lt;br /&gt;
Fixtures are basically Hash objects&amp;lt;ref&amp;gt;http://guides.rubyonrails.org/testing.html#the-low-down-on-fixtures&amp;lt;/ref&amp;gt;. We can access the hash object directly because it is automatically setup as a local variable of the test case. For example:&lt;br /&gt;
&lt;br /&gt;
 # this will return the Hash for the fixture named post_one&lt;br /&gt;
 posts(:post_one)&lt;br /&gt;
&lt;br /&gt;
=Factories=&lt;br /&gt;
For a small site, fixtures are enough. However, in bigger sites fixtures might get confusing. Factories are alternatives to fixtures in such cases. They have become increasingly popular in the last few years since they allow you to do things that cannot be done using YAML.&lt;br /&gt;
&lt;br /&gt;
A factory is an object used to create other objects. Factory objects are used in [http://en.wikipedia.org/wiki/Test-driven_development test-driven development] to allow the classes to be put under test.&lt;br /&gt;
&lt;br /&gt;
Factory Girl&amp;lt;ref&amp;gt;https://github.com/thoughtbot/factory_girl&amp;lt;/ref&amp;gt; is one of the well known factories which is widely used. It is written by Thoughtbot company and is available as a Ruby gem. Unlike fixtures, Factory Girl allows us to create objects rather than use defaults. &lt;br /&gt;
&lt;br /&gt;
To set up Factory Girl, update the GemFile with the following&lt;br /&gt;
 gem &amp;quot;factory_girl_rails&amp;quot;, &amp;quot;~&amp;gt; 4.0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Factory.define :user do |u|&lt;br /&gt;
  u.first_name 'John'&lt;br /&gt;
  u.last_name  'Doe'&lt;br /&gt;
  u.admin false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
=Also see=&lt;br /&gt;
&lt;br /&gt;
= References = &lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pgjalisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w33_pv&amp;diff=68081</id>
		<title>CSC/ECE 517 Fall 2012/ch2a 2w33 pv</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w33_pv&amp;diff=68081"/>
		<updated>2012-10-24T04:43:47Z</updated>

		<summary type="html">&lt;p&gt;Pgjalisa: /* Fixtures */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;big&amp;gt;'''SaaS - 5.5 - Fixtures and Factories'''&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
One of the best parts about [http://www.ruby-lang.org/en/ Ruby] community is the degree to which the developers focus on testing. Developers work with 3 types of tests namely, units (for models), functional (for controllers) and integration tests. Testing requires providing the code with inputs and matching the output generated with the expected outputs. Testing data from the database is however is a little challenging since data should be first stored in the database so that the tests can run on it. These tests may make a few modifications(adding, deleting or updating rows) to the data present in the database. These changes will stay for the next test which is not desirable. Therefore, we need a way to put the database into a known state before the next test begins. This can be achieved using Fixtures and Factories.&amp;lt;ref&amp;gt;http://www.linuxjournal.com/magazine/forge-fixtures-and-factories?page=0,0&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Fixtures=&lt;br /&gt;
Fixtures are sample data on which all the tests run.&lt;br /&gt;
&lt;br /&gt;
There can be 3 types of fixtures&amp;lt;ref&amp;gt;http://ar.rubyonrails.org/classes/Fixtures.html&amp;lt;/ref&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
1. YAML fixtures&lt;br /&gt;
&lt;br /&gt;
2. CSV fixtures&lt;br /&gt;
&lt;br /&gt;
3. Single-file fixtures&lt;br /&gt;
&lt;br /&gt;
==YAML Fixtures==&lt;br /&gt;
YAML is a recursive acronym for &amp;quot;YAML Ain't Markup Language&amp;quot;.&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/YAML&amp;lt;/ref&amp;gt; YAML is a file format which describes data structures in a non-verbose, human-readable format. YAML consists of name-value pairs within a hierarchy, and indentation indicates where in the hierarchy a particular name-value pair exists. This file ends with .yml extension.&lt;br /&gt;
&lt;br /&gt;
The following example shows the format of a YAML fixture:&lt;br /&gt;
&lt;br /&gt;
 post_one:&lt;br /&gt;
   title: one&lt;br /&gt;
   description: post_one_desc&lt;br /&gt;
   category: category_one&lt;br /&gt;
   user: user_one&lt;br /&gt;
 &lt;br /&gt;
 post_two:&lt;br /&gt;
   title: two&lt;br /&gt;
   description: post_two_desc&lt;br /&gt;
   category: category_two&lt;br /&gt;
   user: user_two&lt;br /&gt;
&lt;br /&gt;
==CSV fixtures==&lt;br /&gt;
Comma Separated Value format can be used to store sample data. The files end with &amp;quot;.csv&amp;quot; extension. The first line of the CSV file is a comma-separated list of field names. The rest of the file contains the actual data. CSV fixtures have no fixture names.&lt;br /&gt;
&lt;br /&gt;
The following example shows the format of a CSV fixture: &lt;br /&gt;
 &lt;br /&gt;
 title,description, category, user&lt;br /&gt;
 one, post_one_desc, category_one, user_one &lt;br /&gt;
 two, post_two_desc, category_two, user_two&lt;br /&gt;
&lt;br /&gt;
==Single-file fixtures==&lt;br /&gt;
Fixtures for this format are created by placing text files in a sub-directory (with the name of the model) to the directory appointed by ActiveSupport::TestCase.fixture_path=(path). Each text file placed in this directory represents a &amp;quot;record&amp;quot;. Usually these types of fixtures are named without extensions.&lt;br /&gt;
&lt;br /&gt;
The following example shows the format of a single-file fixture: &lt;br /&gt;
 &lt;br /&gt;
 posts/post_one&lt;br /&gt;
 posts/post_two&lt;br /&gt;
&lt;br /&gt;
Fixtures are basically Hash objects&amp;lt;ref&amp;gt;http://guides.rubyonrails.org/testing.html#the-low-down-on-fixtures&amp;lt;/ref&amp;gt;. We can access the hash object directly because it is automatically setup as a local variable of the test case. For example:&lt;br /&gt;
&lt;br /&gt;
 # this will return the Hash for the fixture named post_one&lt;br /&gt;
 posts(:post_one)&lt;br /&gt;
&lt;br /&gt;
=Factories=&lt;br /&gt;
For a small site, fixtures are enough. However, in bigger sites fixtures might get confusing. Factories are alternatives to fixtures in such cases. They have become increasingly popular in the last few years since they allow you to do things that cannot be done using YAML.&lt;br /&gt;
&lt;br /&gt;
A factory is an object used to create other objects. Factory objects are used in [http://en.wikipedia.org/wiki/Test-driven_development test-driven development] to allow the classes to be put under test.&lt;br /&gt;
&lt;br /&gt;
Factory Girl&amp;lt;ref&amp;gt;https://github.com/thoughtbot/factory_girl&amp;lt;/ref&amp;gt; is one of the well known factories which is widely used. It is written by Thoughtbot company and is available as a Ruby gem.&lt;br /&gt;
&lt;br /&gt;
=Also see=&lt;br /&gt;
&lt;br /&gt;
= References = &lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pgjalisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w33_pv&amp;diff=68080</id>
		<title>CSC/ECE 517 Fall 2012/ch2a 2w33 pv</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w33_pv&amp;diff=68080"/>
		<updated>2012-10-24T04:43:02Z</updated>

		<summary type="html">&lt;p&gt;Pgjalisa: /* Fixtures */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;big&amp;gt;'''SaaS - 5.5 - Fixtures and Factories'''&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
One of the best parts about [http://www.ruby-lang.org/en/ Ruby] community is the degree to which the developers focus on testing. Developers work with 3 types of tests namely, units (for models), functional (for controllers) and integration tests. Testing requires providing the code with inputs and matching the output generated with the expected outputs. Testing data from the database is however is a little challenging since data should be first stored in the database so that the tests can run on it. These tests may make a few modifications(adding, deleting or updating rows) to the data present in the database. These changes will stay for the next test which is not desirable. Therefore, we need a way to put the database into a known state before the next test begins. This can be achieved using Fixtures and Factories.&amp;lt;ref&amp;gt;http://www.linuxjournal.com/magazine/forge-fixtures-and-factories?page=0,0&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Fixtures=&lt;br /&gt;
Fixtures are sample data on which all the tests run.&lt;br /&gt;
&lt;br /&gt;
There can be 3 types of fixtures&amp;lt;ref&amp;gt;http://ar.rubyonrails.org/classes/Fixtures.html&amp;lt;/ref&amp;gt;:&lt;br /&gt;
1. YAML fixtures&lt;br /&gt;
2. CSV fixtures&lt;br /&gt;
3. Single-file fixtures&lt;br /&gt;
&lt;br /&gt;
==YAML Fixtures==&lt;br /&gt;
YAML is a recursive acronym for &amp;quot;YAML Ain't Markup Language&amp;quot;.&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/YAML&amp;lt;/ref&amp;gt; YAML is a file format which describes data structures in a non-verbose, human-readable format. YAML consists of name-value pairs within a hierarchy, and indentation indicates where in the hierarchy a particular name-value pair exists. This file ends with .yml extension.&lt;br /&gt;
&lt;br /&gt;
The following example shows the format of a YAML fixture:&lt;br /&gt;
&lt;br /&gt;
 post_one:&lt;br /&gt;
   title: one&lt;br /&gt;
   description: post_one_desc&lt;br /&gt;
   category: category_one&lt;br /&gt;
   user: user_one&lt;br /&gt;
 &lt;br /&gt;
 post_two:&lt;br /&gt;
   title: two&lt;br /&gt;
   description: post_two_desc&lt;br /&gt;
   category: category_two&lt;br /&gt;
   user: user_two&lt;br /&gt;
&lt;br /&gt;
==CSV fixtures==&lt;br /&gt;
Comma Separated Value format can be used to store sample data. The files end with &amp;quot;.csv&amp;quot; extension. The first line of the CSV file is a comma-separated list of field names. The rest of the file contains the actual data. CSV fixtures have no fixture names.&lt;br /&gt;
&lt;br /&gt;
The following example shows the format of a CSV fixture: &lt;br /&gt;
 &lt;br /&gt;
 title,description, category, user&lt;br /&gt;
 one, post_one_desc, category_one, user_one &lt;br /&gt;
 two, post_two_desc, category_two, user_two&lt;br /&gt;
&lt;br /&gt;
==Single-file fixtures==&lt;br /&gt;
Fixtures for this format are created by placing text files in a sub-directory (with the name of the model) to the directory appointed by ActiveSupport::TestCase.fixture_path=(path). Each text file placed in this directory represents a &amp;quot;record&amp;quot;. Usually these types of fixtures are named without extensions.&lt;br /&gt;
&lt;br /&gt;
The following example shows the format of a single-file fixture: &lt;br /&gt;
 &lt;br /&gt;
 posts/post_one&lt;br /&gt;
 posts/post_two&lt;br /&gt;
&lt;br /&gt;
Fixtures are basically Hash objects&amp;lt;ref&amp;gt;http://guides.rubyonrails.org/testing.html#the-low-down-on-fixtures&amp;lt;/ref&amp;gt;. We can access the hash object directly because it is automatically setup as a local variable of the test case. For example:&lt;br /&gt;
&lt;br /&gt;
 # this will return the Hash for the fixture named post_one&lt;br /&gt;
 posts(:post_one)&lt;br /&gt;
&lt;br /&gt;
=Factories=&lt;br /&gt;
For a small site, fixtures are enough. However, in bigger sites fixtures might get confusing. Factories are alternatives to fixtures in such cases. They have become increasingly popular in the last few years since they allow you to do things that cannot be done using YAML.&lt;br /&gt;
&lt;br /&gt;
A factory is an object used to create other objects. Factory objects are used in [http://en.wikipedia.org/wiki/Test-driven_development test-driven development] to allow the classes to be put under test.&lt;br /&gt;
&lt;br /&gt;
Factory Girl&amp;lt;ref&amp;gt;https://github.com/thoughtbot/factory_girl&amp;lt;/ref&amp;gt; is one of the well known factories which is widely used. It is written by Thoughtbot company and is available as a Ruby gem.&lt;br /&gt;
&lt;br /&gt;
=Also see=&lt;br /&gt;
&lt;br /&gt;
= References = &lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pgjalisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w33_pv&amp;diff=68079</id>
		<title>CSC/ECE 517 Fall 2012/ch2a 2w33 pv</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w33_pv&amp;diff=68079"/>
		<updated>2012-10-24T04:27:11Z</updated>

		<summary type="html">&lt;p&gt;Pgjalisa: /* Factories */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;big&amp;gt;'''SaaS - 5.5 - Fixtures and Factories'''&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
One of the best parts about [http://www.ruby-lang.org/en/ Ruby] community is the degree to which the developers focus on testing. Developers work with 3 types of tests namely, units (for models), functional (for controllers) and integration tests. Testing requires providing the code with inputs and matching the output generated with the expected outputs. Testing data from the database is however is a little challenging since data should be first stored in the database so that the tests can run on it. These tests may make a few modifications(adding, deleting or updating rows) to the data present in the database. These changes will stay for the next test which is not desirable. Therefore, we need a way to put the database into a known state before the next test begins. This can be achieved using Fixtures and Factories.&amp;lt;ref&amp;gt;http://www.linuxjournal.com/magazine/forge-fixtures-and-factories?page=0,0&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Fixtures=&lt;br /&gt;
Fixtures are sample data on which all the tests run.&lt;br /&gt;
&lt;br /&gt;
There can be 3 types of fixtures&amp;lt;ref&amp;gt;http://ar.rubyonrails.org/classes/Fixtures.html&amp;lt;/ref&amp;gt;:&lt;br /&gt;
 1. YAML fixtures&lt;br /&gt;
 2. CSV fixtures&lt;br /&gt;
 3. Single-file fixtures&lt;br /&gt;
&lt;br /&gt;
==YAML Fixtures==&lt;br /&gt;
YAML is a recursive acronym for &amp;quot;YAML Ain't Markup Language&amp;quot;.&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/YAML&amp;lt;/ref&amp;gt; YAML is a file format which describes data structures in a non-verbose, human-readable format. YAML consists of name-value pairs within a hierarchy, and indentation indicates where in the hierarchy a particular name-value pair exists. This file ends with .yml extension.&lt;br /&gt;
&lt;br /&gt;
The following example shows the format of a YAML fixture:&lt;br /&gt;
&lt;br /&gt;
 post_one:&lt;br /&gt;
   title: one&lt;br /&gt;
   description: post_one_desc&lt;br /&gt;
   category: category_one&lt;br /&gt;
   user: user_one&lt;br /&gt;
 &lt;br /&gt;
 post_two:&lt;br /&gt;
   title: two&lt;br /&gt;
   description: post_two_desc&lt;br /&gt;
   category: category_two&lt;br /&gt;
   user: user_two&lt;br /&gt;
&lt;br /&gt;
==CSV fixtures==&lt;br /&gt;
Comma Separated Value format can be used to store sample data. The files end with &amp;quot;.csv&amp;quot; extension. The first line of the CSV file is a comma-separated list of field names. The rest of the file contains the actual data. CSV fixtures have no fixture names.&lt;br /&gt;
&lt;br /&gt;
The following example shows the format of a CSV fixture: &lt;br /&gt;
 &lt;br /&gt;
 title,description, category, user&lt;br /&gt;
 one, post_one_desc, category_one, user_one &lt;br /&gt;
 two, post_two_desc, category_two, user_two&lt;br /&gt;
&lt;br /&gt;
==Single-file fixtures==&lt;br /&gt;
Fixtures for this format are created by placing text files in a sub-directory (with the name of the model) to the directory appointed by ActiveSupport::TestCase.fixture_path=(path). Each text file placed in this directory represents a &amp;quot;record&amp;quot;. Usually these types of fixtures are named without extensions.&lt;br /&gt;
&lt;br /&gt;
The following example shows the format of a single-file fixture: &lt;br /&gt;
 &lt;br /&gt;
 posts/post_one&lt;br /&gt;
 posts/post_two&lt;br /&gt;
&lt;br /&gt;
Fixtures are basically Hash objects&amp;lt;ref&amp;gt;http://guides.rubyonrails.org/testing.html#the-low-down-on-fixtures&amp;lt;/ref&amp;gt;. We can access the hash object directly because it is automatically setup as a local variable of the test case. For example:&lt;br /&gt;
&lt;br /&gt;
 # this will return the Hash for the fixture named post_one&lt;br /&gt;
 posts(:post_one)&lt;br /&gt;
&lt;br /&gt;
=Factories=&lt;br /&gt;
For a small site, fixtures are enough. However, in bigger sites fixtures might get confusing. Factories are alternatives to fixtures in such cases. They have become increasingly popular in the last few years since they allow you to do things that cannot be done using YAML.&lt;br /&gt;
&lt;br /&gt;
A factory is an object used to create other objects. Factory objects are used in [http://en.wikipedia.org/wiki/Test-driven_development test-driven development] to allow the classes to be put under test.&lt;br /&gt;
&lt;br /&gt;
Factory Girl&amp;lt;ref&amp;gt;https://github.com/thoughtbot/factory_girl&amp;lt;/ref&amp;gt; is one of the well known factories which is widely used. It is written by Thoughtbot company and is available as a Ruby gem.&lt;br /&gt;
&lt;br /&gt;
=Also see=&lt;br /&gt;
&lt;br /&gt;
= References = &lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pgjalisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w33_pv&amp;diff=68078</id>
		<title>CSC/ECE 517 Fall 2012/ch2a 2w33 pv</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w33_pv&amp;diff=68078"/>
		<updated>2012-10-24T04:00:33Z</updated>

		<summary type="html">&lt;p&gt;Pgjalisa: /* YAML Fixtures */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;big&amp;gt;'''SaaS - 5.5 - Fixtures and Factories'''&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
One of the best parts about [http://www.ruby-lang.org/en/ Ruby] community is the degree to which the developers focus on testing. Developers work with 3 types of tests namely, units (for models), functional (for controllers) and integration tests. Testing requires providing the code with inputs and matching the output generated with the expected outputs. Testing data from the database is however is a little challenging since data should be first stored in the database so that the tests can run on it. These tests may make a few modifications(adding, deleting or updating rows) to the data present in the database. These changes will stay for the next test which is not desirable. Therefore, we need a way to put the database into a known state before the next test begins. This can be achieved using Fixtures and Factories.&amp;lt;ref&amp;gt;http://www.linuxjournal.com/magazine/forge-fixtures-and-factories?page=0,0&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Fixtures=&lt;br /&gt;
Fixtures are sample data on which all the tests run.&lt;br /&gt;
&lt;br /&gt;
There can be 3 types of fixtures&amp;lt;ref&amp;gt;http://ar.rubyonrails.org/classes/Fixtures.html&amp;lt;/ref&amp;gt;:&lt;br /&gt;
 1. YAML fixtures&lt;br /&gt;
 2. CSV fixtures&lt;br /&gt;
 3. Single-file fixtures&lt;br /&gt;
&lt;br /&gt;
==YAML Fixtures==&lt;br /&gt;
YAML is a recursive acronym for &amp;quot;YAML Ain't Markup Language&amp;quot;.&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/YAML&amp;lt;/ref&amp;gt; YAML is a file format which describes data structures in a non-verbose, human-readable format. YAML consists of name-value pairs within a hierarchy, and indentation indicates where in the hierarchy a particular name-value pair exists. This file ends with .yml extension.&lt;br /&gt;
&lt;br /&gt;
The following example shows the format of a YAML fixture:&lt;br /&gt;
&lt;br /&gt;
 post_one:&lt;br /&gt;
   title: one&lt;br /&gt;
   description: post_one_desc&lt;br /&gt;
   category: category_one&lt;br /&gt;
   user: user_one&lt;br /&gt;
 &lt;br /&gt;
 post_two:&lt;br /&gt;
   title: two&lt;br /&gt;
   description: post_two_desc&lt;br /&gt;
   category: category_two&lt;br /&gt;
   user: user_two&lt;br /&gt;
&lt;br /&gt;
==CSV fixtures==&lt;br /&gt;
Comma Separated Value format can be used to store sample data. The files end with &amp;quot;.csv&amp;quot; extension. The first line of the CSV file is a comma-separated list of field names. The rest of the file contains the actual data. CSV fixtures have no fixture names.&lt;br /&gt;
&lt;br /&gt;
The following example shows the format of a CSV fixture: &lt;br /&gt;
 &lt;br /&gt;
 title,description, category, user&lt;br /&gt;
 one, post_one_desc, category_one, user_one &lt;br /&gt;
 two, post_two_desc, category_two, user_two&lt;br /&gt;
&lt;br /&gt;
==Single-file fixtures==&lt;br /&gt;
Fixtures for this format are created by placing text files in a sub-directory (with the name of the model) to the directory appointed by ActiveSupport::TestCase.fixture_path=(path). Each text file placed in this directory represents a &amp;quot;record&amp;quot;. Usually these types of fixtures are named without extensions.&lt;br /&gt;
&lt;br /&gt;
The following example shows the format of a single-file fixture: &lt;br /&gt;
 &lt;br /&gt;
 posts/post_one&lt;br /&gt;
 posts/post_two&lt;br /&gt;
&lt;br /&gt;
Fixtures are basically Hash objects&amp;lt;ref&amp;gt;http://guides.rubyonrails.org/testing.html#the-low-down-on-fixtures&amp;lt;/ref&amp;gt;. We can access the hash object directly because it is automatically setup as a local variable of the test case. For example:&lt;br /&gt;
&lt;br /&gt;
 # this will return the Hash for the fixture named post_one&lt;br /&gt;
 posts(:post_one)&lt;br /&gt;
&lt;br /&gt;
=Factories=&lt;br /&gt;
A factory is an object used to create other objects. Factory objects are used in [http://en.wikipedia.org/wiki/Test-driven_development test-driven development] to allow the classes to be put under test.&lt;br /&gt;
&lt;br /&gt;
=Also see=&lt;br /&gt;
&lt;br /&gt;
= References = &lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pgjalisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w33_pv&amp;diff=68077</id>
		<title>CSC/ECE 517 Fall 2012/ch2a 2w33 pv</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w33_pv&amp;diff=68077"/>
		<updated>2012-10-24T01:09:31Z</updated>

		<summary type="html">&lt;p&gt;Pgjalisa: /* YAML Fixtures */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;big&amp;gt;'''SaaS - 5.5 - Fixtures and Factories'''&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
One of the best parts about [http://www.ruby-lang.org/en/ Ruby] community is the degree to which the developers focus on testing. Developers work with 3 types of tests namely, units (for models), functional (for controllers) and integration tests. Testing requires providing the code with inputs and matching the output generated with the expected outputs. Testing data from the database is however is a little challenging since data should be first stored in the database so that the tests can run on it. These tests may make a few modifications(adding, deleting or updating rows) to the data present in the database. These changes will stay for the next test which is not desirable. Therefore, we need a way to put the database into a known state before the next test begins. This can be achieved using Fixtures and Factories.&amp;lt;ref&amp;gt;http://www.linuxjournal.com/magazine/forge-fixtures-and-factories?page=0,0&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Fixtures=&lt;br /&gt;
Fixtures are sample data on which all the tests run.&lt;br /&gt;
&lt;br /&gt;
There can be 3 types of fixtures&amp;lt;ref&amp;gt;http://ar.rubyonrails.org/classes/Fixtures.html&amp;lt;/ref&amp;gt;:&lt;br /&gt;
 1. YAML fixtures&lt;br /&gt;
 2. CSV fixtures&lt;br /&gt;
 3. Single-file fixtures&lt;br /&gt;
&lt;br /&gt;
==YAML Fixtures==&lt;br /&gt;
YAML is a recursive acronym for &amp;quot;YAML Ain't Markup Language&amp;quot;.&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/YAML&amp;lt;/ref&amp;gt; YAML is a file format which describes data structures in a non-verbose, human-readable format. This file ends with .yml extension.&lt;br /&gt;
&lt;br /&gt;
The following example shows the format of a YAML fixture:&lt;br /&gt;
&lt;br /&gt;
 post_one:&lt;br /&gt;
   title: one&lt;br /&gt;
   description: post_one_desc&lt;br /&gt;
   category: category_one&lt;br /&gt;
   user: user_one&lt;br /&gt;
 &lt;br /&gt;
 post_two:&lt;br /&gt;
   title: two&lt;br /&gt;
   description: post_two_desc&lt;br /&gt;
   category: category_two&lt;br /&gt;
   user: user_two&lt;br /&gt;
&lt;br /&gt;
==CSV fixtures==&lt;br /&gt;
Comma Separated Value format can be used to store sample data. The files end with &amp;quot;.csv&amp;quot; extension. The first line of the CSV file is a comma-separated list of field names. The rest of the file contains the actual data. CSV fixtures have no fixture names.&lt;br /&gt;
&lt;br /&gt;
The following example shows the format of a CSV fixture: &lt;br /&gt;
 &lt;br /&gt;
 title,description, category, user&lt;br /&gt;
 one, post_one_desc, category_one, user_one &lt;br /&gt;
 two, post_two_desc, category_two, user_two&lt;br /&gt;
&lt;br /&gt;
==Single-file fixtures==&lt;br /&gt;
Fixtures for this format are created by placing text files in a sub-directory (with the name of the model) to the directory appointed by ActiveSupport::TestCase.fixture_path=(path). Each text file placed in this directory represents a &amp;quot;record&amp;quot;. Usually these types of fixtures are named without extensions.&lt;br /&gt;
&lt;br /&gt;
The following example shows the format of a single-file fixture: &lt;br /&gt;
 &lt;br /&gt;
 posts/post_one&lt;br /&gt;
 posts/post_two&lt;br /&gt;
&lt;br /&gt;
Fixtures are basically Hash objects&amp;lt;ref&amp;gt;http://guides.rubyonrails.org/testing.html#the-low-down-on-fixtures&amp;lt;/ref&amp;gt;. We can access the hash object directly because it is automatically setup as a local variable of the test case. For example:&lt;br /&gt;
&lt;br /&gt;
 # this will return the Hash for the fixture named post_one&lt;br /&gt;
 posts(:post_one)&lt;br /&gt;
&lt;br /&gt;
=Factories=&lt;br /&gt;
A factory is an object used to create other objects. Factory objects are used in [http://en.wikipedia.org/wiki/Test-driven_development test-driven development] to allow the classes to be put under test.&lt;br /&gt;
&lt;br /&gt;
=Also see=&lt;br /&gt;
&lt;br /&gt;
= References = &lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pgjalisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w33_pv&amp;diff=68076</id>
		<title>CSC/ECE 517 Fall 2012/ch2a 2w33 pv</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w33_pv&amp;diff=68076"/>
		<updated>2012-10-23T22:18:49Z</updated>

		<summary type="html">&lt;p&gt;Pgjalisa: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;big&amp;gt;'''SaaS - 5.5 - Fixtures and Factories'''&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
One of the best parts about [http://www.ruby-lang.org/en/ Ruby] community is the degree to which the developers focus on testing. Developers work with 3 types of tests namely, units (for models), functional (for controllers) and integration tests. Testing requires providing the code with inputs and matching the output generated with the expected outputs. Testing data from the database is however is a little challenging since data should be first stored in the database so that the tests can run on it. These tests may make a few modifications(adding, deleting or updating rows) to the data present in the database. These changes will stay for the next test which is not desirable. Therefore, we need a way to put the database into a known state before the next test begins. This can be achieved using Fixtures and Factories.&amp;lt;ref&amp;gt;http://www.linuxjournal.com/magazine/forge-fixtures-and-factories?page=0,0&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Fixtures=&lt;br /&gt;
Fixtures are sample data on which all the tests run.&lt;br /&gt;
&lt;br /&gt;
There can be 3 types of fixtures&amp;lt;ref&amp;gt;http://ar.rubyonrails.org/classes/Fixtures.html&amp;lt;/ref&amp;gt;:&lt;br /&gt;
 1. YAML fixtures&lt;br /&gt;
 2. CSV fixtures&lt;br /&gt;
 3. Single-file fixtures&lt;br /&gt;
&lt;br /&gt;
==YAML Fixtures==&lt;br /&gt;
YAML is a recursive acronym for &amp;quot;YAML Ain't Markup Language&amp;quot;.&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/YAML&amp;lt;/ref&amp;gt; YAML is a file format which describes data structures in a non-verbose, human-readable format. This file ends with the .yml extension.&lt;br /&gt;
&lt;br /&gt;
The following example shows the format of a YAML fixture:&lt;br /&gt;
&lt;br /&gt;
 post_one:&lt;br /&gt;
   title: one&lt;br /&gt;
   description: post_one_desc&lt;br /&gt;
   category: category_one&lt;br /&gt;
   user: user_one&lt;br /&gt;
 &lt;br /&gt;
 post_two:&lt;br /&gt;
   title: two&lt;br /&gt;
   description: post_two_desc&lt;br /&gt;
   category: category_two&lt;br /&gt;
   user: user_two&lt;br /&gt;
&lt;br /&gt;
==CSV fixtures==&lt;br /&gt;
Comma Separated Value format can be used to store sample data. The files end with &amp;quot;.csv&amp;quot; extension. The first line of the CSV file is a comma-separated list of field names. The rest of the file contains the actual data. CSV fixtures have no fixture names.&lt;br /&gt;
&lt;br /&gt;
The following example shows the format of a CSV fixture: &lt;br /&gt;
 &lt;br /&gt;
 title,description, category, user&lt;br /&gt;
 one, post_one_desc, category_one, user_one &lt;br /&gt;
 two, post_two_desc, category_two, user_two&lt;br /&gt;
&lt;br /&gt;
==Single-file fixtures==&lt;br /&gt;
Fixtures for this format are created by placing text files in a sub-directory (with the name of the model) to the directory appointed by ActiveSupport::TestCase.fixture_path=(path). Each text file placed in this directory represents a &amp;quot;record&amp;quot;. Usually these types of fixtures are named without extensions.&lt;br /&gt;
&lt;br /&gt;
The following example shows the format of a single-file fixture: &lt;br /&gt;
 &lt;br /&gt;
 posts/post_one&lt;br /&gt;
 posts/post_two&lt;br /&gt;
&lt;br /&gt;
Fixtures are basically Hash objects&amp;lt;ref&amp;gt;http://guides.rubyonrails.org/testing.html#the-low-down-on-fixtures&amp;lt;/ref&amp;gt;. We can access the hash object directly because it is automatically setup as a local variable of the test case. For example:&lt;br /&gt;
&lt;br /&gt;
 # this will return the Hash for the fixture named post_one&lt;br /&gt;
 posts(:post_one)&lt;br /&gt;
&lt;br /&gt;
=Factories=&lt;br /&gt;
A factory is an object used to create other objects. Factory objects are used in [http://en.wikipedia.org/wiki/Test-driven_development test-driven development] to allow the classes to be put under test.&lt;br /&gt;
&lt;br /&gt;
=Also see=&lt;br /&gt;
&lt;br /&gt;
= References = &lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pgjalisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w33_pv&amp;diff=68075</id>
		<title>CSC/ECE 517 Fall 2012/ch2a 2w33 pv</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w33_pv&amp;diff=68075"/>
		<updated>2012-10-23T22:16:48Z</updated>

		<summary type="html">&lt;p&gt;Pgjalisa: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;big&amp;gt;'''SaaS - 5.5 - Fixtures and Factories'''&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
One of the best parts about [http://www.ruby-lang.org/en/ Ruby] community is the degree to which the developers focus on testing. Developers work with 3 types of tests namely, units (for models), functional (for controllers) and integration tests. Testing requires providing the code with inputs and matching the output generated with the expected outputs. Testing data from the database is however is a little challenging since data should be first stored in the database so that the tests can run on it. These tests may make a few modifications(adding, deleting or updating rows) to the data present in the database. These changes will stay for the next test which is not desirable. Therefore, we need a way to put the database into a known state before the next test begins. This can be achieved using Fixtures and Factories.&lt;br /&gt;
&lt;br /&gt;
=Fixtures=&lt;br /&gt;
Fixtures are sample data on which all the tests run.&lt;br /&gt;
&lt;br /&gt;
There can be 3 types of fixtures&amp;lt;ref&amp;gt;http://ar.rubyonrails.org/classes/Fixtures.html&amp;lt;/ref&amp;gt;:&lt;br /&gt;
 1. YAML fixtures&lt;br /&gt;
 2. CSV fixtures&lt;br /&gt;
 3. Single-file fixtures&lt;br /&gt;
&lt;br /&gt;
==YAML Fixtures==&lt;br /&gt;
YAML is a recursive acronym for &amp;quot;YAML Ain't Markup Language&amp;quot;.&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/YAML&amp;lt;/ref&amp;gt; YAML is a file format which describes data structures in a non-verbose, human-readable format. This file ends with the .yml extension.&lt;br /&gt;
&lt;br /&gt;
The following example shows the format of a YAML fixture:&lt;br /&gt;
&lt;br /&gt;
 post_one:&lt;br /&gt;
   title: one&lt;br /&gt;
   description: post_one_desc&lt;br /&gt;
   category: category_one&lt;br /&gt;
   user: user_one&lt;br /&gt;
 &lt;br /&gt;
 post_two:&lt;br /&gt;
   title: two&lt;br /&gt;
   description: post_two_desc&lt;br /&gt;
   category: category_two&lt;br /&gt;
   user: user_two&lt;br /&gt;
&lt;br /&gt;
==CSV fixtures==&lt;br /&gt;
Comma Separated Value format can be used to store sample data. The files end with &amp;quot;.csv&amp;quot; extension. The first line of the CSV file is a comma-separated list of field names. The rest of the file contains the actual data. CSV fixtures have no fixture names.&lt;br /&gt;
&lt;br /&gt;
The following example shows the format of a CSV fixture: &lt;br /&gt;
 &lt;br /&gt;
 title,description, category, user&lt;br /&gt;
 one, post_one_desc, category_one, user_one &lt;br /&gt;
 two, post_two_desc, category_two, user_two&lt;br /&gt;
&lt;br /&gt;
==Single-file fixtures==&lt;br /&gt;
Fixtures for this format are created by placing text files in a sub-directory (with the name of the model) to the directory appointed by ActiveSupport::TestCase.fixture_path=(path). Each text file placed in this directory represents a &amp;quot;record&amp;quot;. Usually these types of fixtures are named without extensions.&lt;br /&gt;
&lt;br /&gt;
The following example shows the format of a single-file fixture: &lt;br /&gt;
 &lt;br /&gt;
 posts/post_one&lt;br /&gt;
 posts/post_two&lt;br /&gt;
&lt;br /&gt;
Fixtures are basically Hash objects&amp;lt;ref&amp;gt;http://guides.rubyonrails.org/testing.html#the-low-down-on-fixtures&amp;lt;/ref&amp;gt;. We can access the hash object directly because it is automatically setup as a local variable of the test case. For example:&lt;br /&gt;
&lt;br /&gt;
 # this will return the Hash for the fixture named post_one&lt;br /&gt;
 posts(:post_one)&lt;br /&gt;
&lt;br /&gt;
=Factories=&lt;br /&gt;
A factory is an object used to create other objects. Factory objects are used in [http://en.wikipedia.org/wiki/Test-driven_development test-driven development] to allow the classes to be put under test.&lt;br /&gt;
&lt;br /&gt;
=Also see=&lt;br /&gt;
&lt;br /&gt;
= References = &lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pgjalisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w33_pv&amp;diff=68074</id>
		<title>CSC/ECE 517 Fall 2012/ch2a 2w33 pv</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w33_pv&amp;diff=68074"/>
		<updated>2012-10-23T21:54:02Z</updated>

		<summary type="html">&lt;p&gt;Pgjalisa: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;big&amp;gt;'''SaaS - 5.5 - Fixtures and Factories'''&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
One of the best parts about [http://www.ruby-lang.org/en/ Ruby] community is the degree to which the developers focus on testing. Developers work with 3 types of tests namely, units (for models), functional (for controllers) and integration tests. Testing requires providing the code with inputs and matching the output generated with the expected outputs. Testing data from the database is however is a little challenging since data should be first stored in the database so that the tests can run on it. These tests may make a few changes to the data present in the database.&lt;br /&gt;
&lt;br /&gt;
=Fixtures=&lt;br /&gt;
Fixtures are sample data on which all the tests run.&lt;br /&gt;
&lt;br /&gt;
There can be 3 types of fixtures&amp;lt;ref&amp;gt;http://ar.rubyonrails.org/classes/Fixtures.html&amp;lt;/ref&amp;gt;:&lt;br /&gt;
 1. YAML fixtures&lt;br /&gt;
 2. CSV fixtures&lt;br /&gt;
 3. Single-file fixtures&lt;br /&gt;
&lt;br /&gt;
==YAML Fixtures==&lt;br /&gt;
YAML is a recursive acronym for &amp;quot;YAML Ain't Markup Language&amp;quot;.&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/YAML&amp;lt;/ref&amp;gt; YAML is a file format which describes data structures in a non-verbose, human-readable format. This file ends with the .yml extension.&lt;br /&gt;
&lt;br /&gt;
The following example shows the format of a YAML fixture:&lt;br /&gt;
&lt;br /&gt;
 post_one:&lt;br /&gt;
   title: one&lt;br /&gt;
   description: post_one_desc&lt;br /&gt;
   category: category_one&lt;br /&gt;
   user: user_one&lt;br /&gt;
 &lt;br /&gt;
 post_two:&lt;br /&gt;
   title: two&lt;br /&gt;
   description: post_two_desc&lt;br /&gt;
   category: category_two&lt;br /&gt;
   user: user_two&lt;br /&gt;
&lt;br /&gt;
==CSV fixtures==&lt;br /&gt;
Comma Separated Value format can be used to store sample data. The files end with &amp;quot;.csv&amp;quot; extension. The first line of the CSV file is a comma-separated list of field names. The rest of the file contains the actual data. CSV fixtures have no fixture names.&lt;br /&gt;
&lt;br /&gt;
The following example shows the format of a CSV fixture: &lt;br /&gt;
 &lt;br /&gt;
 title,description, category, user&lt;br /&gt;
 one, post_one_desc, category_one, user_one &lt;br /&gt;
 two, post_two_desc, category_two, user_two&lt;br /&gt;
&lt;br /&gt;
==Single-file fixtures==&lt;br /&gt;
Fixtures for this format are created by placing text files in a sub-directory (with the name of the model) to the directory appointed by ActiveSupport::TestCase.fixture_path=(path). Each text file placed in this directory represents a &amp;quot;record&amp;quot;. Usually these types of fixtures are named without extensions.&lt;br /&gt;
&lt;br /&gt;
The following example shows the format of a single-file fixture: &lt;br /&gt;
 &lt;br /&gt;
 posts/post_one&lt;br /&gt;
 posts/post_two&lt;br /&gt;
&lt;br /&gt;
Fixtures are basically Hash objects&amp;lt;ref&amp;gt;http://guides.rubyonrails.org/testing.html#the-low-down-on-fixtures&amp;lt;/ref&amp;gt;. We can access the hash object directly because it is automatically setup as a local variable of the test case. For example:&lt;br /&gt;
&lt;br /&gt;
 # this will return the Hash for the fixture named post_one&lt;br /&gt;
 posts(:post_one)&lt;br /&gt;
&lt;br /&gt;
=Factories=&lt;br /&gt;
A factory is an object used to create other objects. Factory objects are used in [http://en.wikipedia.org/wiki/Test-driven_development test-driven development] to allow the classes to be put under test.&lt;br /&gt;
&lt;br /&gt;
=Also see=&lt;br /&gt;
&lt;br /&gt;
= References = &lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pgjalisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w33_pv&amp;diff=68046</id>
		<title>CSC/ECE 517 Fall 2012/ch2a 2w33 pv</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w33_pv&amp;diff=68046"/>
		<updated>2012-10-23T20:08:15Z</updated>

		<summary type="html">&lt;p&gt;Pgjalisa: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;big&amp;gt;'''SaaS - 5.5 - Fixtures and Factories'''&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
One of the best parts about [http://www.ruby-lang.org/en/ Ruby] community is the degree to which the developers focus on testing. Developers work with 3 types of tests namely, units (for models), functional (for controllers) and integration tests. Testing requires providing the code with inputs and matching the output generated with the expected outputs. Testing data from the database is however is a little challenging since data should be first stored in the database so that the tests can run on it. These tests may make a few changaes to the data present in the database.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Fixtures=&lt;br /&gt;
Fixtures are sample data on which all the tests run.&lt;br /&gt;
&lt;br /&gt;
There can be 3 types of fixtures&amp;lt;ref&amp;gt;http://ar.rubyonrails.org/classes/Fixtures.html&amp;lt;/ref&amp;gt;:&lt;br /&gt;
 1. YAML fixtures&lt;br /&gt;
 2. CSV fixtures&lt;br /&gt;
 3. Single-file fixtures&lt;br /&gt;
&lt;br /&gt;
==YAML Fixtures==&lt;br /&gt;
YAML is a recursive acronym for &amp;quot;YAML Ain't Markup Language&amp;quot;.&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/YAML&amp;lt;/ref&amp;gt; YAML is a file format which describes data structures in a non-verbose, human-readable format. This file ends with the .yml extension.&lt;br /&gt;
&lt;br /&gt;
The following example shows the format of a YAML fixture:&lt;br /&gt;
&lt;br /&gt;
 post_one:&lt;br /&gt;
   title: one&lt;br /&gt;
   description: post_one_desc&lt;br /&gt;
   category: category_one&lt;br /&gt;
   user: user_one&lt;br /&gt;
 &lt;br /&gt;
 post_two:&lt;br /&gt;
   title: two&lt;br /&gt;
   description: post_two_desc&lt;br /&gt;
   category: category_two&lt;br /&gt;
   user: user_two&lt;br /&gt;
&lt;br /&gt;
==CSV fixtures==&lt;br /&gt;
Comma Separated Value format can be used to store sample data. The files end with &amp;quot;.csv&amp;quot; extension. The first line of the CSV file is a comma-separated list of field names. The rest of the file contains the actual data. CSV fixtures have no fixture names.&lt;br /&gt;
&lt;br /&gt;
The following example shows the format of a CSV fixture: &lt;br /&gt;
 &lt;br /&gt;
 title,description, category, user&lt;br /&gt;
 one, post_one_desc, category_one, user_one &lt;br /&gt;
 two, post_two_desc, category_two, user_two&lt;br /&gt;
&lt;br /&gt;
==Single-file fixtures==&lt;br /&gt;
Fixtures for this format are created by placing text files in a sub-directory (with the name of the model) to the directory appointed by ActiveSupport::TestCase.fixture_path=(path). Each text file placed in this directory represents a &amp;quot;record&amp;quot;. Usually these types of fixtures are named without extensions.&lt;br /&gt;
&lt;br /&gt;
The following example shows the format of a single-file fixture: &lt;br /&gt;
 &lt;br /&gt;
 posts/post_one&lt;br /&gt;
 posts/post_two&lt;br /&gt;
&lt;br /&gt;
Fixtures are basically Hash objects&amp;lt;ref&amp;gt;http://guides.rubyonrails.org/testing.html#the-low-down-on-fixtures&amp;lt;/ref&amp;gt;. We can access the hash object directly because it is automatically setup as a local variable of the test case. For example:&lt;br /&gt;
&lt;br /&gt;
 # this will return the Hash for the fixture named post_one&lt;br /&gt;
 posts(:post_one)&lt;br /&gt;
&lt;br /&gt;
=Factories=&lt;br /&gt;
A factory is an object used to create other objects. Factory objects are used in [http://en.wikipedia.org/wiki/Test-driven_development test-driven development] to allow the classes to be put under test.&lt;br /&gt;
&lt;br /&gt;
=Also see=&lt;br /&gt;
&lt;br /&gt;
= References = &lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pgjalisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w33_pv&amp;diff=68012</id>
		<title>CSC/ECE 517 Fall 2012/ch2a 2w33 pv</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w33_pv&amp;diff=68012"/>
		<updated>2012-10-23T14:27:29Z</updated>

		<summary type="html">&lt;p&gt;Pgjalisa: /* Factories */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;big&amp;gt;'''SaaS - 5.5 - Fixtures and Factories'''&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Introduction to Testing=&lt;br /&gt;
&lt;br /&gt;
=Fixtures=&lt;br /&gt;
Fixtures are sample data on which all the tests run.&lt;br /&gt;
&lt;br /&gt;
There can be 3 types of fixtures&amp;lt;ref&amp;gt;http://ar.rubyonrails.org/classes/Fixtures.html&amp;lt;/ref&amp;gt;:&lt;br /&gt;
 1. YAML fixtures&lt;br /&gt;
 2. CSV fixtures&lt;br /&gt;
 3. Single-file fixtures&lt;br /&gt;
&lt;br /&gt;
==YAML Fixtures==&lt;br /&gt;
YAML is a recursive acronym for &amp;quot;YAML Ain't Markup Language&amp;quot;.&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/YAML&amp;lt;/ref&amp;gt; YAML is a file format which describes data structures in a non-verbose, human-readable format. This file ends with the .yml extension.&lt;br /&gt;
&lt;br /&gt;
The following example shows the format of a YAML fixture:&lt;br /&gt;
&lt;br /&gt;
 post_one:&lt;br /&gt;
   title: one&lt;br /&gt;
   description: post_one_desc&lt;br /&gt;
   category: category_one&lt;br /&gt;
   user: user_one&lt;br /&gt;
 &lt;br /&gt;
 post_two:&lt;br /&gt;
   title: two&lt;br /&gt;
   description: post_two_desc&lt;br /&gt;
   category: category_two&lt;br /&gt;
   user: user_two&lt;br /&gt;
&lt;br /&gt;
==CSV fixtures==&lt;br /&gt;
Comma Separated Value format can be used to store sample data. The files end with &amp;quot;.csv&amp;quot; extension. The first line of the CSV file is a comma-separated list of field names. The rest of the file contains the actual data. CSV fixtures have no fixture names.&lt;br /&gt;
&lt;br /&gt;
The following example shows the format of a CSV fixture: &lt;br /&gt;
 &lt;br /&gt;
 title,description, category, user&lt;br /&gt;
 one, post_one_desc, category_one, user_one &lt;br /&gt;
 two, post_two_desc, category_two, user_two&lt;br /&gt;
&lt;br /&gt;
==Single-file fixtures==&lt;br /&gt;
Fixtures for this format are created by placing text files in a sub-directory (with the name of the model) to the directory appointed by ActiveSupport::TestCase.fixture_path=(path). Each text file placed in this directory represents a &amp;quot;record&amp;quot;. Usually these types of fixtures are named without extensions.&lt;br /&gt;
&lt;br /&gt;
The following example shows the format of a single-file fixture: &lt;br /&gt;
 &lt;br /&gt;
 posts/post_one&lt;br /&gt;
 posts/post_two&lt;br /&gt;
&lt;br /&gt;
Fixtures are basically Hash objects&amp;lt;ref&amp;gt;http://guides.rubyonrails.org/testing.html#the-low-down-on-fixtures&amp;lt;/ref&amp;gt;. We can access the hash object directly because it is automatically setup as a local variable of the test case. For example:&lt;br /&gt;
&lt;br /&gt;
 # this will return the Hash for the fixture named post_one&lt;br /&gt;
 posts(:post_one)&lt;br /&gt;
&lt;br /&gt;
=Factories=&lt;br /&gt;
A factory is an object used to create other objects. Factory objects are used in [http://en.wikipedia.org/wiki/Test-driven_development test-driven development] to allow the classes to be put under test.&lt;br /&gt;
&lt;br /&gt;
=Also see=&lt;br /&gt;
&lt;br /&gt;
= References = &lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pgjalisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w33_pv&amp;diff=68007</id>
		<title>CSC/ECE 517 Fall 2012/ch2a 2w33 pv</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w33_pv&amp;diff=68007"/>
		<updated>2012-10-23T07:33:54Z</updated>

		<summary type="html">&lt;p&gt;Pgjalisa: /* Single-file fixtures */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;big&amp;gt;'''SaaS - 5.5 - Fixtures and Factories'''&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Introduction to Testing=&lt;br /&gt;
&lt;br /&gt;
=Fixtures=&lt;br /&gt;
Fixtures are sample data on which all the tests run.&lt;br /&gt;
&lt;br /&gt;
There can be 3 types of fixtures&amp;lt;ref&amp;gt;http://ar.rubyonrails.org/classes/Fixtures.html&amp;lt;/ref&amp;gt;:&lt;br /&gt;
 1. YAML fixtures&lt;br /&gt;
 2. CSV fixtures&lt;br /&gt;
 3. Single-file fixtures&lt;br /&gt;
&lt;br /&gt;
==YAML Fixtures==&lt;br /&gt;
YAML is a recursive acronym for &amp;quot;YAML Ain't Markup Language&amp;quot;.&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/YAML&amp;lt;/ref&amp;gt; YAML is a file format which describes data structures in a non-verbose, human-readable format. This file ends with the .yml extension.&lt;br /&gt;
&lt;br /&gt;
The following example shows the format of a YAML fixture:&lt;br /&gt;
&lt;br /&gt;
 post_one:&lt;br /&gt;
   title: one&lt;br /&gt;
   description: post_one_desc&lt;br /&gt;
   category: category_one&lt;br /&gt;
   user: user_one&lt;br /&gt;
 &lt;br /&gt;
 post_two:&lt;br /&gt;
   title: two&lt;br /&gt;
   description: post_two_desc&lt;br /&gt;
   category: category_two&lt;br /&gt;
   user: user_two&lt;br /&gt;
&lt;br /&gt;
==CSV fixtures==&lt;br /&gt;
Comma Separated Value format can be used to store sample data. The files end with &amp;quot;.csv&amp;quot; extension. The first line of the CSV file is a comma-separated list of field names. The rest of the file contains the actual data. CSV fixtures have no fixture names.&lt;br /&gt;
&lt;br /&gt;
The following example shows the format of a CSV fixture: &lt;br /&gt;
 &lt;br /&gt;
 title,description, category, user&lt;br /&gt;
 one, post_one_desc, category_one, user_one &lt;br /&gt;
 two, post_two_desc, category_two, user_two&lt;br /&gt;
&lt;br /&gt;
==Single-file fixtures==&lt;br /&gt;
Fixtures for this format are created by placing text files in a sub-directory (with the name of the model) to the directory appointed by ActiveSupport::TestCase.fixture_path=(path). Each text file placed in this directory represents a &amp;quot;record&amp;quot;. Usually these types of fixtures are named without extensions.&lt;br /&gt;
&lt;br /&gt;
The following example shows the format of a single-file fixture: &lt;br /&gt;
 &lt;br /&gt;
 posts/post_one&lt;br /&gt;
 posts/post_two&lt;br /&gt;
&lt;br /&gt;
Fixtures are basically Hash objects&amp;lt;ref&amp;gt;http://guides.rubyonrails.org/testing.html#the-low-down-on-fixtures&amp;lt;/ref&amp;gt;. We can access the hash object directly because it is automatically setup as a local variable of the test case. For example:&lt;br /&gt;
&lt;br /&gt;
 # this will return the Hash for the fixture named post_one&lt;br /&gt;
 posts(:post_one)&lt;br /&gt;
&lt;br /&gt;
=Factories=&lt;br /&gt;
&lt;br /&gt;
=Also see=&lt;br /&gt;
&lt;br /&gt;
= References = &lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pgjalisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w33_pv&amp;diff=68006</id>
		<title>CSC/ECE 517 Fall 2012/ch2a 2w33 pv</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w33_pv&amp;diff=68006"/>
		<updated>2012-10-23T07:33:05Z</updated>

		<summary type="html">&lt;p&gt;Pgjalisa: /* Fixtures */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;big&amp;gt;'''SaaS - 5.5 - Fixtures and Factories'''&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Introduction to Testing=&lt;br /&gt;
&lt;br /&gt;
=Fixtures=&lt;br /&gt;
Fixtures are sample data on which all the tests run.&lt;br /&gt;
&lt;br /&gt;
There can be 3 types of fixtures&amp;lt;ref&amp;gt;http://ar.rubyonrails.org/classes/Fixtures.html&amp;lt;/ref&amp;gt;:&lt;br /&gt;
 1. YAML fixtures&lt;br /&gt;
 2. CSV fixtures&lt;br /&gt;
 3. Single-file fixtures&lt;br /&gt;
&lt;br /&gt;
==YAML Fixtures==&lt;br /&gt;
YAML is a recursive acronym for &amp;quot;YAML Ain't Markup Language&amp;quot;.&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/YAML&amp;lt;/ref&amp;gt; YAML is a file format which describes data structures in a non-verbose, human-readable format. This file ends with the .yml extension.&lt;br /&gt;
&lt;br /&gt;
The following example shows the format of a YAML fixture:&lt;br /&gt;
&lt;br /&gt;
 post_one:&lt;br /&gt;
   title: one&lt;br /&gt;
   description: post_one_desc&lt;br /&gt;
   category: category_one&lt;br /&gt;
   user: user_one&lt;br /&gt;
 &lt;br /&gt;
 post_two:&lt;br /&gt;
   title: two&lt;br /&gt;
   description: post_two_desc&lt;br /&gt;
   category: category_two&lt;br /&gt;
   user: user_two&lt;br /&gt;
&lt;br /&gt;
==CSV fixtures==&lt;br /&gt;
Comma Separated Value format can be used to store sample data. The files end with &amp;quot;.csv&amp;quot; extension. The first line of the CSV file is a comma-separated list of field names. The rest of the file contains the actual data. CSV fixtures have no fixture names.&lt;br /&gt;
&lt;br /&gt;
The following example shows the format of a CSV fixture: &lt;br /&gt;
 &lt;br /&gt;
 title,description, category, user&lt;br /&gt;
 one, post_one_desc, category_one, user_one &lt;br /&gt;
 two, post_two_desc, category_two, user_two&lt;br /&gt;
&lt;br /&gt;
==Single-file fixtures==&lt;br /&gt;
Fixtures for this format are created by placing text files in a sub-directory (with the name of the model) to the directory appointed by ActiveSupport::TestCase.fixture_path=(path). Each text file placed in this directory represents a &amp;quot;record&amp;quot;. Usually these types of fixtures are named without extensions.&lt;br /&gt;
&lt;br /&gt;
The following example shows the format of a single-file fixture: &lt;br /&gt;
 &lt;br /&gt;
 posts/post_one&lt;br /&gt;
 posts/post_two&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Fixtures are basically Hash objects&amp;lt;ref&amp;gt;http://guides.rubyonrails.org/testing.html#the-low-down-on-fixtures&amp;lt;/ref&amp;gt;. We can access the hash object directly because it is automatically setup as a local variable of the test case. &lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
 # this will return the Hash for the fixture named post_one&lt;br /&gt;
 posts(:post_one)&lt;br /&gt;
&lt;br /&gt;
=Factories=&lt;br /&gt;
&lt;br /&gt;
=Also see=&lt;br /&gt;
&lt;br /&gt;
= References = &lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pgjalisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w33_pv&amp;diff=68005</id>
		<title>CSC/ECE 517 Fall 2012/ch2a 2w33 pv</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w33_pv&amp;diff=68005"/>
		<updated>2012-10-23T07:32:11Z</updated>

		<summary type="html">&lt;p&gt;Pgjalisa: /* Fixtures */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;big&amp;gt;'''SaaS - 5.5 - Fixtures and Factories'''&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Introduction to Testing=&lt;br /&gt;
&lt;br /&gt;
=Fixtures=&lt;br /&gt;
Fixtures are sample data on which all the tests run.&lt;br /&gt;
&lt;br /&gt;
Fixtures are basically Hash objects&amp;lt;ref&amp;gt;http://guides.rubyonrails.org/testing.html#the-low-down-on-fixtures&amp;lt;/ref&amp;gt;. We can access the hash object directly because it is automatically setup as a local variable of the test case. &lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
 # this will return the Hash for the fixture named david&lt;br /&gt;
 users(:david)&lt;br /&gt;
&lt;br /&gt;
There can be 3 types of fixtures&amp;lt;ref&amp;gt;http://ar.rubyonrails.org/classes/Fixtures.html&amp;lt;/ref&amp;gt;:&lt;br /&gt;
 1. YAML fixtures&lt;br /&gt;
 2. CSV fixtures&lt;br /&gt;
 3. Single-file fixtures&lt;br /&gt;
&lt;br /&gt;
==YAML Fixtures==&lt;br /&gt;
YAML is a recursive acronym for &amp;quot;YAML Ain't Markup Language&amp;quot;.&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/YAML&amp;lt;/ref&amp;gt; YAML is a file format which describes data structures in a non-verbose, human-readable format. This file ends with the .yml extension.&lt;br /&gt;
&lt;br /&gt;
The following example shows the format of a YAML fixture:&lt;br /&gt;
&lt;br /&gt;
 post_one:&lt;br /&gt;
   title: one&lt;br /&gt;
   description: post_one_desc&lt;br /&gt;
   category: category_one&lt;br /&gt;
   user: user_one&lt;br /&gt;
 &lt;br /&gt;
 post_two:&lt;br /&gt;
   title: two&lt;br /&gt;
   description: post_two_desc&lt;br /&gt;
   category: category_two&lt;br /&gt;
   user: user_two&lt;br /&gt;
&lt;br /&gt;
==CSV fixtures==&lt;br /&gt;
Comma Separated Value format can be used to store sample data. The files end with &amp;quot;.csv&amp;quot; extension. The first line of the CSV file is a comma-separated list of field names. The rest of the file contains the actual data. CSV fixtures have no fixture names.&lt;br /&gt;
&lt;br /&gt;
The following example shows the format of a CSV fixture: &lt;br /&gt;
 &lt;br /&gt;
 title,description, category, user&lt;br /&gt;
 one, post_one_desc, category_one, user_one &lt;br /&gt;
 two, post_two_desc, category_two, user_two&lt;br /&gt;
&lt;br /&gt;
==Single-file fixtures==&lt;br /&gt;
Fixtures for this format are created by placing text files in a sub-directory (with the name of the model) to the directory appointed by ActiveSupport::TestCase.fixture_path=(path). Each text file placed in this directory represents a &amp;quot;record&amp;quot;. Usually these types of fixtures are named without extensions.&lt;br /&gt;
&lt;br /&gt;
The following example shows the format of a single-file fixture: &lt;br /&gt;
 &lt;br /&gt;
 posts/post_one&lt;br /&gt;
 posts/post_two&lt;br /&gt;
&lt;br /&gt;
=Factories=&lt;br /&gt;
&lt;br /&gt;
=Also see=&lt;br /&gt;
&lt;br /&gt;
= References = &lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pgjalisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w33_pv&amp;diff=68004</id>
		<title>CSC/ECE 517 Fall 2012/ch2a 2w33 pv</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w33_pv&amp;diff=68004"/>
		<updated>2012-10-23T07:30:00Z</updated>

		<summary type="html">&lt;p&gt;Pgjalisa: /* YAML Fixtures */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;big&amp;gt;'''SaaS - 5.5 - Fixtures and Factories'''&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Introduction to Testing=&lt;br /&gt;
&lt;br /&gt;
=Fixtures=&lt;br /&gt;
Fixtures are sample data on which all the tests run. There can be 3 types of fixtures&amp;lt;ref&amp;gt;http://ar.rubyonrails.org/classes/Fixtures.html&amp;lt;/ref&amp;gt;:&lt;br /&gt;
 1. YAML fixtures&lt;br /&gt;
 2. CSV fixtures&lt;br /&gt;
 3. Single-file fixtures&lt;br /&gt;
&lt;br /&gt;
==YAML Fixtures==&lt;br /&gt;
YAML is a recursive acronym for &amp;quot;YAML Ain't Markup Language&amp;quot;.&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/YAML&amp;lt;/ref&amp;gt; YAML is a file format which describes data structures in a non-verbose, human-readable format. This file ends with the .yml extension.&lt;br /&gt;
&lt;br /&gt;
The following example shows the format of a YAML fixture:&lt;br /&gt;
&lt;br /&gt;
 post_one:&lt;br /&gt;
   title: one&lt;br /&gt;
   description: post_one_desc&lt;br /&gt;
   category: category_one&lt;br /&gt;
   user: user_one&lt;br /&gt;
 &lt;br /&gt;
 post_two:&lt;br /&gt;
   title: two&lt;br /&gt;
   description: post_two_desc&lt;br /&gt;
   category: category_two&lt;br /&gt;
   user: user_two&lt;br /&gt;
&lt;br /&gt;
==CSV fixtures==&lt;br /&gt;
Comma Separated Value format can be used to store sample data. The files end with &amp;quot;.csv&amp;quot; extension. The first line of the CSV file is a comma-separated list of field names. The rest of the file contains the actual data. CSV fixtures have no fixture names.&lt;br /&gt;
&lt;br /&gt;
The following example shows the format of a CSV fixture: &lt;br /&gt;
 &lt;br /&gt;
 title,description, category, user&lt;br /&gt;
 one, post_one_desc, category_one, user_one &lt;br /&gt;
 two, post_two_desc, category_two, user_two&lt;br /&gt;
&lt;br /&gt;
==Single-file fixtures==&lt;br /&gt;
Fixtures for this format are created by placing text files in a sub-directory (with the name of the model) to the directory appointed by ActiveSupport::TestCase.fixture_path=(path). Each text file placed in this directory represents a &amp;quot;record&amp;quot;. Usually these types of fixtures are named without extensions.&lt;br /&gt;
&lt;br /&gt;
The following example shows the format of a single-file fixture: &lt;br /&gt;
 &lt;br /&gt;
 posts/post_one&lt;br /&gt;
 posts/post_two&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Factories=&lt;br /&gt;
&lt;br /&gt;
=Also see=&lt;br /&gt;
&lt;br /&gt;
= References = &lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pgjalisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w33_pv&amp;diff=68003</id>
		<title>CSC/ECE 517 Fall 2012/ch2a 2w33 pv</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w33_pv&amp;diff=68003"/>
		<updated>2012-10-23T07:29:44Z</updated>

		<summary type="html">&lt;p&gt;Pgjalisa: /* YAML Fixtures */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;big&amp;gt;'''SaaS - 5.5 - Fixtures and Factories'''&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Introduction to Testing=&lt;br /&gt;
&lt;br /&gt;
=Fixtures=&lt;br /&gt;
Fixtures are sample data on which all the tests run. There can be 3 types of fixtures&amp;lt;ref&amp;gt;http://ar.rubyonrails.org/classes/Fixtures.html&amp;lt;/ref&amp;gt;:&lt;br /&gt;
 1. YAML fixtures&lt;br /&gt;
 2. CSV fixtures&lt;br /&gt;
 3. Single-file fixtures&lt;br /&gt;
&lt;br /&gt;
==YAML Fixtures==&lt;br /&gt;
YAML is a recursive acronym for &amp;quot;YAML Ain't Markup Language&amp;quot;.&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/YAML&amp;lt;/ref&amp;gt; YAML is a file format which describes data structures in a non-verbose, human-readable format. This file ends with the .yml extension.&lt;br /&gt;
&lt;br /&gt;
The following example shows the format of a YAML fixture:&lt;br /&gt;
&lt;br /&gt;
 post_one:&lt;br /&gt;
   title: one&lt;br /&gt;
   description: post_one_desc&lt;br /&gt;
   category: category_one&lt;br /&gt;
   user: user_one&lt;br /&gt;
  post_two:&lt;br /&gt;
   title: two&lt;br /&gt;
   description: post_two_desc&lt;br /&gt;
   category: category_two&lt;br /&gt;
   user: user_two&lt;br /&gt;
&lt;br /&gt;
==CSV fixtures==&lt;br /&gt;
Comma Separated Value format can be used to store sample data. The files end with &amp;quot;.csv&amp;quot; extension. The first line of the CSV file is a comma-separated list of field names. The rest of the file contains the actual data. CSV fixtures have no fixture names.&lt;br /&gt;
&lt;br /&gt;
The following example shows the format of a CSV fixture: &lt;br /&gt;
 &lt;br /&gt;
 title,description, category, user&lt;br /&gt;
 one, post_one_desc, category_one, user_one &lt;br /&gt;
 two, post_two_desc, category_two, user_two&lt;br /&gt;
&lt;br /&gt;
==Single-file fixtures==&lt;br /&gt;
Fixtures for this format are created by placing text files in a sub-directory (with the name of the model) to the directory appointed by ActiveSupport::TestCase.fixture_path=(path). Each text file placed in this directory represents a &amp;quot;record&amp;quot;. Usually these types of fixtures are named without extensions.&lt;br /&gt;
&lt;br /&gt;
The following example shows the format of a single-file fixture: &lt;br /&gt;
 &lt;br /&gt;
 posts/post_one&lt;br /&gt;
 posts/post_two&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Factories=&lt;br /&gt;
&lt;br /&gt;
=Also see=&lt;br /&gt;
&lt;br /&gt;
= References = &lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pgjalisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w33_pv&amp;diff=68002</id>
		<title>CSC/ECE 517 Fall 2012/ch2a 2w33 pv</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w33_pv&amp;diff=68002"/>
		<updated>2012-10-23T07:29:22Z</updated>

		<summary type="html">&lt;p&gt;Pgjalisa: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;big&amp;gt;'''SaaS - 5.5 - Fixtures and Factories'''&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Introduction to Testing=&lt;br /&gt;
&lt;br /&gt;
=Fixtures=&lt;br /&gt;
Fixtures are sample data on which all the tests run. There can be 3 types of fixtures&amp;lt;ref&amp;gt;http://ar.rubyonrails.org/classes/Fixtures.html&amp;lt;/ref&amp;gt;:&lt;br /&gt;
 1. YAML fixtures&lt;br /&gt;
 2. CSV fixtures&lt;br /&gt;
 3. Single-file fixtures&lt;br /&gt;
&lt;br /&gt;
==YAML Fixtures==&lt;br /&gt;
YAML is a recursive acronym for &amp;quot;YAML Ain't Markup Language&amp;quot;.&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/YAML&amp;lt;/ref&amp;gt; YAML is a file format which describes data structures in a non-verbose, human-readable format. This file ends with the .yml extension.&lt;br /&gt;
&lt;br /&gt;
The following example shows the format of a YAML fixture:&lt;br /&gt;
&lt;br /&gt;
 post_one:&lt;br /&gt;
   title: one&lt;br /&gt;
   description: post_one_desc&lt;br /&gt;
   category: category_one&lt;br /&gt;
   user: user_one&lt;br /&gt;
&lt;br /&gt;
  post_two:&lt;br /&gt;
   title: two&lt;br /&gt;
   description: post_two_desc&lt;br /&gt;
   category: category_two&lt;br /&gt;
   user: user_two&lt;br /&gt;
&lt;br /&gt;
==CSV fixtures==&lt;br /&gt;
Comma Separated Value format can be used to store sample data. The files end with &amp;quot;.csv&amp;quot; extension. The first line of the CSV file is a comma-separated list of field names. The rest of the file contains the actual data. CSV fixtures have no fixture names.&lt;br /&gt;
&lt;br /&gt;
The following example shows the format of a CSV fixture: &lt;br /&gt;
 &lt;br /&gt;
 title,description, category, user&lt;br /&gt;
 one, post_one_desc, category_one, user_one &lt;br /&gt;
 two, post_two_desc, category_two, user_two&lt;br /&gt;
&lt;br /&gt;
==Single-file fixtures==&lt;br /&gt;
Fixtures for this format are created by placing text files in a sub-directory (with the name of the model) to the directory appointed by ActiveSupport::TestCase.fixture_path=(path). Each text file placed in this directory represents a &amp;quot;record&amp;quot;. Usually these types of fixtures are named without extensions.&lt;br /&gt;
&lt;br /&gt;
The following example shows the format of a single-file fixture: &lt;br /&gt;
 &lt;br /&gt;
 posts/post_one&lt;br /&gt;
 posts/post_two&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Factories=&lt;br /&gt;
&lt;br /&gt;
=Also see=&lt;br /&gt;
&lt;br /&gt;
= References = &lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pgjalisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w33_pv&amp;diff=67998</id>
		<title>CSC/ECE 517 Fall 2012/ch2a 2w33 pv</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w33_pv&amp;diff=67998"/>
		<updated>2012-10-23T07:22:48Z</updated>

		<summary type="html">&lt;p&gt;Pgjalisa: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;big&amp;gt;'''SaaS - 5.5 - Fixtures and Factories'''&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Introduction to Testing=&lt;br /&gt;
&lt;br /&gt;
=Fixtures=&lt;br /&gt;
Fixtures are sample data on which all the tests run. There can be 3 types of fixtures&amp;lt;ref&amp;gt;http://ar.rubyonrails.org/classes/Fixtures.html&amp;lt;/ref&amp;gt;:&lt;br /&gt;
 1. YAML fixtures&lt;br /&gt;
 2. CSV fixtures&lt;br /&gt;
 3. Single-file fixtures&lt;br /&gt;
&lt;br /&gt;
==YAML Fixtures==&lt;br /&gt;
YAML is a recursive acronym for &amp;quot;YAML Ain't Markup Language&amp;quot;.&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/YAML&amp;lt;/ref&amp;gt; YAML is a file format which describes data structures in a non-verbose, human-readable format. This file ends with the .yml extension.&lt;br /&gt;
&lt;br /&gt;
The following shows the format of a YAML file:&lt;br /&gt;
&lt;br /&gt;
 post_one:&lt;br /&gt;
   title: one&lt;br /&gt;
   description: post_one_desc&lt;br /&gt;
   category: category_one&lt;br /&gt;
   user: user_one&lt;br /&gt;
&lt;br /&gt;
==CSV fixtures==&lt;br /&gt;
Comma Separated Value format can be used to store sample data. The files end with &amp;quot;.csv&amp;quot; extension. The following show the format of a CSV file.&lt;br /&gt;
&lt;br /&gt;
 one, post_one_desc, category_one, user_one &lt;br /&gt;
&lt;br /&gt;
==Single-file fixtures==&lt;br /&gt;
&lt;br /&gt;
=Factories=&lt;br /&gt;
&lt;br /&gt;
=Also see=&lt;br /&gt;
&lt;br /&gt;
= References = &lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pgjalisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w33_pv&amp;diff=67957</id>
		<title>CSC/ECE 517 Fall 2012/ch2a 2w33 pv</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w33_pv&amp;diff=67957"/>
		<updated>2012-10-23T05:36:13Z</updated>

		<summary type="html">&lt;p&gt;Pgjalisa: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;big&amp;gt;'''SaaS - 5.5 - Fixtures and Factories'''&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Introduction to Testing=&lt;br /&gt;
&lt;br /&gt;
=Fixtures=&lt;br /&gt;
Fixtures are sample data on which all the tests run. There can be 3 types of fixtures&amp;lt;ref&amp;gt;http://ar.rubyonrails.org/classes/Fixtures.html&amp;lt;/ref&amp;gt;:&lt;br /&gt;
 1. YAML fixtures&lt;br /&gt;
 2. CSV fixtures&lt;br /&gt;
 3. Single-file fixtures&lt;br /&gt;
&lt;br /&gt;
==YAML Fixtures==&lt;br /&gt;
YAML is a recursive acronym for &amp;quot;YAML Ain't Markup Language&amp;quot;.&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/YAML&amp;lt;/ref&amp;gt; YAML is a file format which describes data structures in a non-verbose, human-readable format.&lt;br /&gt;
&lt;br /&gt;
==CSV fixtures==&lt;br /&gt;
&lt;br /&gt;
==Single-file fixtures==&lt;br /&gt;
&lt;br /&gt;
=Factories=&lt;br /&gt;
&lt;br /&gt;
=Also see=&lt;br /&gt;
&lt;br /&gt;
= References = &lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pgjalisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w33_pv&amp;diff=67945</id>
		<title>CSC/ECE 517 Fall 2012/ch2a 2w33 pv</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w33_pv&amp;diff=67945"/>
		<updated>2012-10-23T05:16:33Z</updated>

		<summary type="html">&lt;p&gt;Pgjalisa: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;big&amp;gt;'''SaaS - 5.5 - Fixtures and Factories'''&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Introduction to Testing=&lt;br /&gt;
&lt;br /&gt;
=Fixtures=&lt;br /&gt;
Fixtures are sample data on which all the tests run. There can be 3 types of fixtures[]:&lt;br /&gt;
  1. YAML fixtures&lt;br /&gt;
  2. CSV fixtures&lt;br /&gt;
  3. Single-file fixtures&lt;br /&gt;
&lt;br /&gt;
==YAML Fixtures==&lt;br /&gt;
YAML is a recursive acronym for &amp;quot;YAML Ain't Markup Language. &amp;lt;ref&amp;gt;http://ar.rubyonrails.org/classes/Fixtures.html&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==CSV fixtures==&lt;br /&gt;
&lt;br /&gt;
==Single-file fixtures==&lt;br /&gt;
&lt;br /&gt;
=Factories=&lt;br /&gt;
&lt;br /&gt;
=Also see=&lt;br /&gt;
&lt;br /&gt;
= References = &lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pgjalisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w33_pv&amp;diff=67942</id>
		<title>CSC/ECE 517 Fall 2012/ch2a 2w33 pv</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w33_pv&amp;diff=67942"/>
		<updated>2012-10-23T05:09:55Z</updated>

		<summary type="html">&lt;p&gt;Pgjalisa: /* Fixtures */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;big&amp;gt;'''SaaS - 5.5 - Fixtures and Factories'''&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Introduction to Testing=&lt;br /&gt;
&lt;br /&gt;
=Fixtures=&lt;br /&gt;
Fixtures are sample data on which all the tests run. There can be 3 types of fixtures[]:&lt;br /&gt;
  1. YAML fixtures&lt;br /&gt;
  2. CSV fixtures&lt;br /&gt;
  3. Single-file fixtures&lt;br /&gt;
&lt;br /&gt;
==YAML Fixtures==&lt;br /&gt;
YAML is a recursive acronym for &amp;quot;YAML Ain't Markup Language.[]&lt;br /&gt;
&lt;br /&gt;
==CSV fixtures==&lt;br /&gt;
&lt;br /&gt;
==Single-file fixtures==&lt;br /&gt;
&lt;br /&gt;
=Factories=&lt;br /&gt;
&lt;br /&gt;
=References=&lt;br /&gt;
&lt;br /&gt;
=Also see=&lt;/div&gt;</summary>
		<author><name>Pgjalisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w33_pv&amp;diff=67940</id>
		<title>CSC/ECE 517 Fall 2012/ch2a 2w33 pv</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w33_pv&amp;diff=67940"/>
		<updated>2012-10-23T04:54:14Z</updated>

		<summary type="html">&lt;p&gt;Pgjalisa: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;big&amp;gt;'''SaaS - 5.5 - Fixtures and Factories'''&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Introduction to Testing=&lt;br /&gt;
&lt;br /&gt;
=Fixtures=&lt;br /&gt;
Fixtures are sample data on which all the tests run. There can be 3 types of fixtures:&lt;br /&gt;
  1. YAML fixtures&lt;br /&gt;
  2. CSV fixtures&lt;br /&gt;
  3. Single-file fixtures&lt;br /&gt;
&lt;br /&gt;
==YAML Fixtures==&lt;br /&gt;
&lt;br /&gt;
==CSV fixtures==&lt;br /&gt;
&lt;br /&gt;
==Single-file fixtures==&lt;br /&gt;
&lt;br /&gt;
=Factories=&lt;br /&gt;
&lt;br /&gt;
=References=&lt;br /&gt;
&lt;br /&gt;
=Also see=&lt;/div&gt;</summary>
		<author><name>Pgjalisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w33_pv&amp;diff=67905</id>
		<title>CSC/ECE 517 Fall 2012/ch2a 2w33 pv</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w33_pv&amp;diff=67905"/>
		<updated>2012-10-23T03:20:03Z</updated>

		<summary type="html">&lt;p&gt;Pgjalisa: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;big&amp;gt;'''SaaS - 5.5 - Fixtures and Factories'''&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Introduction to Testing=&lt;br /&gt;
&lt;br /&gt;
=Fixtures=&lt;br /&gt;
&lt;br /&gt;
=Factories=&lt;br /&gt;
&lt;br /&gt;
=References=&lt;br /&gt;
&lt;br /&gt;
=Also see=&lt;/div&gt;</summary>
		<author><name>Pgjalisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w33_pv&amp;diff=67904</id>
		<title>CSC/ECE 517 Fall 2012/ch2a 2w33 pv</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w33_pv&amp;diff=67904"/>
		<updated>2012-10-23T03:19:42Z</updated>

		<summary type="html">&lt;p&gt;Pgjalisa: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==&amp;lt;big&amp;gt;'''SaaS - 5.5 - Fixtures and Factories'''&amp;lt;/big&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
=Introduction to Testing=&lt;br /&gt;
&lt;br /&gt;
=Fixtures=&lt;br /&gt;
&lt;br /&gt;
=Factories=&lt;br /&gt;
&lt;br /&gt;
=References=&lt;br /&gt;
&lt;br /&gt;
=Also see=&lt;/div&gt;</summary>
		<author><name>Pgjalisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w33_pv&amp;diff=67903</id>
		<title>CSC/ECE 517 Fall 2012/ch2a 2w33 pv</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w33_pv&amp;diff=67903"/>
		<updated>2012-10-23T03:19:20Z</updated>

		<summary type="html">&lt;p&gt;Pgjalisa: /* SaaS - 5.5 - Fixtures and Factories */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Introduction to Testing=&lt;br /&gt;
&lt;br /&gt;
=Fixtures=&lt;br /&gt;
&lt;br /&gt;
=Factories=&lt;br /&gt;
&lt;br /&gt;
=References=&lt;br /&gt;
&lt;br /&gt;
=Also see=&lt;/div&gt;</summary>
		<author><name>Pgjalisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w33_pv&amp;diff=67902</id>
		<title>CSC/ECE 517 Fall 2012/ch2a 2w33 pv</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w33_pv&amp;diff=67902"/>
		<updated>2012-10-23T03:19:04Z</updated>

		<summary type="html">&lt;p&gt;Pgjalisa: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==&amp;lt;big&amp;gt;'''SaaS - 5.5 - Fixtures and Factories'''&amp;lt;/big&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
=Introduction to Testing=&lt;br /&gt;
&lt;br /&gt;
=Fixtures=&lt;br /&gt;
&lt;br /&gt;
=Factories=&lt;br /&gt;
&lt;br /&gt;
=References=&lt;br /&gt;
&lt;br /&gt;
=Also see=&lt;/div&gt;</summary>
		<author><name>Pgjalisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w33_pv&amp;diff=67900</id>
		<title>CSC/ECE 517 Fall 2012/ch2a 2w33 pv</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w33_pv&amp;diff=67900"/>
		<updated>2012-10-23T03:18:26Z</updated>

		<summary type="html">&lt;p&gt;Pgjalisa: /*  */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== &amp;lt;big&amp;gt;'''SaaS - 5.5 - Fixtures and Factories'''&amp;lt;/big&amp;gt;&amp;lt;br&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
=Introduction to Testing=&lt;br /&gt;
&lt;br /&gt;
=Fixtures=&lt;br /&gt;
&lt;br /&gt;
=Factories=&lt;br /&gt;
&lt;br /&gt;
=References=&lt;br /&gt;
&lt;br /&gt;
=Also see=&lt;/div&gt;</summary>
		<author><name>Pgjalisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w33_pv&amp;diff=67899</id>
		<title>CSC/ECE 517 Fall 2012/ch2a 2w33 pv</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w33_pv&amp;diff=67899"/>
		<updated>2012-10-23T03:18:05Z</updated>

		<summary type="html">&lt;p&gt;Pgjalisa: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==  ==&lt;br /&gt;
&amp;lt;big&amp;gt;'''SaaS - 5.5 - Fixtures and Factories'''&amp;lt;/big&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Introduction to Testing=&lt;br /&gt;
&lt;br /&gt;
=Fixtures=&lt;br /&gt;
&lt;br /&gt;
=Factories=&lt;br /&gt;
&lt;br /&gt;
=References=&lt;br /&gt;
&lt;br /&gt;
=Also see=&lt;/div&gt;</summary>
		<author><name>Pgjalisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w33_pv&amp;diff=67898</id>
		<title>CSC/ECE 517 Fall 2012/ch2a 2w33 pv</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w33_pv&amp;diff=67898"/>
		<updated>2012-10-23T03:16:23Z</updated>

		<summary type="html">&lt;p&gt;Pgjalisa: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Fixtures and factories ==&lt;/div&gt;</summary>
		<author><name>Pgjalisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012&amp;diff=67897</id>
		<title>CSC/ECE 517 Fall 2012</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012&amp;diff=67897"/>
		<updated>2012-10-23T03:15:03Z</updated>

		<summary type="html">&lt;p&gt;Pgjalisa: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;*[[CSC/ECE 517 Fall 2012/ch1 n xx]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1 1w1 rk]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1 1w20 pp]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1 1w5 su]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1 1w6 pp]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1 1w4 aj]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1 1w7 am]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1 1w8 aa]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1 1w9 av]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1 1w10 pk]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1 1w11 ap]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1a 1w12 mv]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1 1w14 gv]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1 1w17 ir]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1 1w18 as]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1 1w22 an]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1 1w21 aa]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1 1w21 wi]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1 1w31 sa]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1a 1w16 br]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1a 1w23 as]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1 1w24 nr]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1 1w15 rt]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1 1w3 pl]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1 1w32 cm]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch2a 2w5 dp]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1b 1w37 ss]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1b 1w67 ks]]&lt;br /&gt;
&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1 1w27 ms]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1 1w29 sa]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1 1w33 op]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1 1w19 sa]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1 1w34 vd]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1 1w35 sa]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1 1w30 rp]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1b 1w58 am]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1b 1w47 sk]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1b 1w69 mv]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1b 1w44 as]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1b 1w45 is]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1b 1w53 kc]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1b 1w40 ar]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1b 1w39 sn]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1b 1w54 go]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1b 1w56 ms]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1b 1w64 nn]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1b 1w66 as]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1b 1w40 as]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1b 1w42 js]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1b 1w46 sm]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1b 1w71 gs]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1b 1w63 dv]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1b 1w55 ms]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1b 1w57 mp]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1b 1w52 an]]&lt;br /&gt;
*[[CSC/ECE_517_Fall_2012/ch1b 1w38 nm]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1b 1w60 ac]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch1b 1w62 rb]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch2a 2w29 st]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch2a 2w30 an]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch2a 2w17 pt]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch2a 2w31 up]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch2a 2w9 ms]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch2a 2w19 is]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch2a 2w5 dp]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch2a 2w16 dp]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch2a 2w8 vp]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch2a 2w18 as]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch2a 2w3 jm]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch2a 2w23 sr]]&lt;br /&gt;
*[[CSC/ECE_517_Fall_2012/ch2a_2w11_aa]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch2a 2w15 rr]]&lt;br /&gt;
*[[CSC/ECE 517 Fall 2012/ch2a 2w33 pv]]&lt;/div&gt;</summary>
		<author><name>Pgjalisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w33_pv&amp;diff=67896</id>
		<title>CSC/ECE 517 Fall 2012/ch2a 2w33 pv</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch2a_2w33_pv&amp;diff=67896"/>
		<updated>2012-10-23T03:09:34Z</updated>

		<summary type="html">&lt;p&gt;Pgjalisa: Created page with &amp;quot;Fixtures and factories&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Fixtures and factories&lt;/div&gt;</summary>
		<author><name>Pgjalisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch1_1w11_ap&amp;diff=65138</id>
		<title>CSC/ECE 517 Fall 2012/ch1 1w11 ap</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch1_1w11_ap&amp;diff=65138"/>
		<updated>2012-09-15T03:27:27Z</updated>

		<summary type="html">&lt;p&gt;Pgjalisa: /* Software Development Process for Object Oriented Development */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&amp;lt;b&amp;gt; CRC Cards, &amp;lt;/b&amp;gt; also known as [http://en.wikipedia.org/wiki/Class-responsibility-collaboration_card &amp;lt;b&amp;gt; Class-Responsibility-Collaboration &amp;lt;sup&amp;gt;&amp;lt;/sup&amp;gt;&amp;lt;/b&amp;gt;] cards are a brainstorming tool to enable collaboration across different teams or individuals in contribution to design, usually used in Object Oriented Software development. This was  proposed by &amp;lt;b&amp;gt;Ward Cunningham&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;Kent Beck&amp;lt;/b&amp;gt;&amp;lt;sup&amp;gt;[http://c2.com/doc/oopsla89/paper.html]&amp;lt;/sup&amp;gt;. The CRC card can be viewed as an index card, with the following details:&lt;br /&gt;
[[Image:crc-card.gif|frame|right|CRC Card Structure]]&lt;br /&gt;
&lt;br /&gt;
:* The Top of the card usually bears the name of the class.&lt;br /&gt;
:* The Left side of the card has the responsibilities of the class.&lt;br /&gt;
:* The Right side of the card has the collaborating classes corresponding to each of the responsibilities listed in the left side.&lt;br /&gt;
&lt;br /&gt;
Thus in general, a CRC session can be viewed as the interaction between a set of collaborating classes for a particular [http://en.wikipedia.org/wiki/Use_case Use case]. &amp;lt;br&amp;gt; &amp;lt;br&amp;gt; According to &amp;lt;sup&amp;gt;[http://www.extremeprogramming.org/rules/crccards.html]&amp;lt;/sup&amp;gt;&amp;lt;i&amp;gt;A CRC session proceeds with someone simulating the system by talking about which objects send messages to other objects. By stepping through the process' weaknesses and problems are easily uncovered. Design alternatives can be explored quickly by simulating the design being proposed.&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===A CRC Example===&lt;br /&gt;
To better understand how the CRC cards work together, let us consider a simple student enrollment problem,where we are required to model the students enrolled in different courses. We can easily define the &amp;lt;b&amp;gt;Student CRC Card&amp;lt;/b&amp;gt; as having attributes such as student name, student id and responsibilities that enable a student to enroll in a course or drop the course. In this particular instance, the collaborating class would be the &amp;lt;b&amp;gt;Course&amp;lt;/b&amp;gt; class. The &amp;lt;b&amp;gt;Course CRC Card&amp;lt;/b&amp;gt; can in turn be visualized as having its own responsibilities, such as having attributes like Course id, course name and the collaborating class would be the &amp;lt;b&amp;gt;Instructor &lt;br /&gt;
class&amp;lt;/b&amp;gt;. The CRC cards for the Student class and the Course Class are shown below.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:Stud_enr_Crc.jpg|frame|center|Student and Course CRC Card]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
There are also several practical designs that use the CRC card model to design Object oriented software design. The  [http://www.extremeprogramming.org/example/crcsim.html Simulator for Coffee Maker] explores an [http://en.wikipedia.org/wiki/Extreme_Programming Extreme Programming] approach combined with CRC card technique to come up with a design for the coffee maker.&lt;br /&gt;
&lt;br /&gt;
Another interesting approach using CRC cards is the design for the [http://www.math-cs.gordon.edu/courses/cps211/ATMExample/CRCCards.html ATM Machine]&lt;br /&gt;
&lt;br /&gt;
===Advantages of CRC cards===&lt;br /&gt;
There are a few advantages of CRC cards that make it a preferable model in many designs. Some of the advantages of the CRC card design method are&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
:* CRC cards can allow designers to easily make audience understand a very complex system. In essence it allows for building more complex designs by slowly building the interactions between the collaborating classes, one by one.&lt;br /&gt;
:* CRC cards are a simple technique and it can be easily used by anyone with very little training and does not require any expensive computing resources(a board or a paper and a pen would suffice).&lt;br /&gt;
:* CRC is fundamentally a brainstorming tool, enabling different people in a team to come up with the design by collaborating, enabling everyone in the team to contribute&lt;br /&gt;
:* CRC can be used with other formal object oriented design methodologies such as [http://en.wikipedia.org/wiki/Extreme_Programming Extreme Programming] (an [http://en.wikipedia.org/wiki/Agile_Modeling Agile] development Technique) and can be used along with modeling languages such as [http://en.wikipedia.org/wiki/Unified_Modeling_Language Unified Modeling Language(UML)]&lt;br /&gt;
&lt;br /&gt;
==Software for CRC Cards==&lt;br /&gt;
CRC cards have limited scope. If we go about designing a huge project, the scope spans many classes and interactions between them. The tedious task here is to maintain the CRC cards and properly formulate interaction between them. &lt;br /&gt;
We need software for CRC Cards for the following reasons:&lt;br /&gt;
:* &amp;lt;b&amp;gt;Designing Scenario:&amp;lt;/b&amp;gt;  A scenario represents series of steps in which classes and objects communicate. There can be references to other cards or scenarios. &lt;br /&gt;
:* &amp;lt;b&amp;gt;Modeling :&amp;lt;/b&amp;gt;  Software provides an easy way to segregate cards and objects into different diagrams. Thus we can model our problem with different functionality very easily.&lt;br /&gt;
:* &amp;lt;b&amp;gt;Simulation :&amp;lt;/b&amp;gt; Software can provide simulation of the design. This might include single-stepping a scenario forwards/backwards or jumping to a specific location in the scenario stack of a multiple scenario simulation&lt;br /&gt;
:* &amp;lt;b&amp;gt;Synchronization and Dependencies:&amp;lt;/b&amp;gt; Software can maintain relationships between cards, scenarios as design changes take place. If a card references other cards or classes, those cards are generated automatically. Also any name changes and cross references between objects are instantly updated. &lt;br /&gt;
:* &amp;lt;b&amp;gt;Revision history and Version Control :&amp;lt;/b&amp;gt; Software for CRC cards supports changes to CRC cards. It is easy to model and keep track of all changes to a CRC card. This is extremely helpful in tracking the design changes in CRC cards.&lt;br /&gt;
&lt;br /&gt;
==Designing Software==&lt;br /&gt;
The steps to design software for CRC cards are:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Create CRC Cards&amp;lt;/b&amp;gt; : A CRC model is usually created by an individual or small group of designers during the early phase of an object-oriented development project.The figure shows the design of hierarchy of classes. These set of class used for drawing objects are shown. We can see TShape class has a superclass called TObject and two subclasses, TBox and TCircle. Lets assume we create new class TWindow derived from the superclass TObject.  [[Image:Design.png|thumb|Description]]&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Assign Responsibilities&amp;lt;/b&amp;gt; : Once a set of classes are defined, behaviors can be assigned that will provide the functions of the application. For example, the TShape card has responsibilities ''Initialize'' to create it and ''Draw'' to illustrate it on the diagram.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Add Attributes&amp;lt;/b&amp;gt; : Attributes of classes may also be identified in a CRC Card.The TShape class has attributes fPosition, fType and fSelected.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Define and simulate Scenario&amp;lt;/b&amp;gt; : A scenario describes a sequence of steps in the design using the responsibilities of a group of collaborating classes. Collaboration between classes refers to a client object that uses a responsibility performed by a server object. Often a class must call upon several collaborating classes to implement one of its responsibilities.A scenario describes what happens in the system from a high-level, user's point of view.&lt;br /&gt;
[[Image:Scenario.png|thumb|Description]]&lt;br /&gt;
&lt;br /&gt;
Consider situation to the right. We have defined two CRC cards with their responsibility. A scenario defines several steps. Each step in a scenario has a Client, Server and Responsibility field. For each step, a client class uses a responsibility of a server class&lt;br /&gt;
&lt;br /&gt;
The Open Document scenario in the picture references the Initialize Document sub-scenario by specifying its server class ''Document'' in the server field and its scenario name in the Responsibility field. The first step in the Initialize Document sub-scenario uses ''Document'' as the server class name. By single-stepping forwards, backwards or through each sub-scenario, bugs in the design can be identified and corrected early.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Partition the Design&amp;lt;/b&amp;gt; : As the number of CRC cards in the design grow, they can be grouped by function. By using Software for CRC cards,we can draw separate diagrams to partition the model into different subject areas. &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Inheritance Graph&amp;lt;/b&amp;gt; : An automated tool can generate an inheritance graph from information on CRC cards. This diagram can concisely illustrate the big picture of a large project that might contain hundreds of classes and dozens of diagrams.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Verify Your Work &amp;lt;/b&amp;gt; : Creating and simulating scenarios will help verify that a design is correct and complete. A CRC software can perform other error checks to locate design problems. For example, responsibilities that are not used in any scenarios may indicate that the design is incomplete or perhaps the responsibility isn't needed. Likewise, a card that is not used by any collaboration may not be needed.&lt;br /&gt;
&lt;br /&gt;
==Software Development Process for Object Oriented Development&amp;lt;sup&amp;gt;[6]&amp;lt;/sup&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
Software Development Life Cycles are different for a standard development process and for Object Oriented development. This difference needs to be understood in order to know how to meet the benchmarks set for the project. There are multiple processes that are used in software development, the most common ones in use being Waterfall model and Spiral model. The Waterfall model is progression based and the Spiral model is iterative.&lt;br /&gt;
&lt;br /&gt;
We need to understand that the uniqueness of Object Oriented SDLCs comes from the fact that it is more user centric as compared to standard SDLCs that are more system centric. We will now see which models work for Object Oriented SDLCs (OO SDLCs) and which don’t. CRC cards play a very important role in an Object Oriented SDLC. Thus, figuring out which models work well for OO SDLCs will result in understanding which models use CRC cards and why.&lt;br /&gt;
 &lt;br /&gt;
====The Waterfall Model====&lt;br /&gt;
&lt;br /&gt;
The Waterfall model is implemented in multiple phases with each phase having a clear demarcation in terms of its functionality and deliverable. It uses clear stepping stones to come up with deliverables for each deadline. In this case, there are multiple ways to measure progress and methods by which to audit internally and apply checkpoints.&lt;br /&gt;
&lt;br /&gt;
The downside of the Waterfall model lies in the fact that it is a very rigid model that does not offer much in terms of leeway when it comes to deliverables and what each phase in the cycle has to offer. The process is also overly mechanical and over time, just ends up being boring.&lt;br /&gt;
&lt;br /&gt;
Owing to the emphasis on checkpoints and deliverables with strict deadlines, in most cases the analysis and design phases are usually cut short and thus, the project may veer very far from reality. The users are involved only in the requirement gathering phase. This might result in mistranslation of the requirements of the user into what may be an amazing final product but something that the user did not even ask for.&lt;br /&gt;
 &lt;br /&gt;
====The Spiral Model====&lt;br /&gt;
This model iteratively goes through the phases of analysis, design, prototyping and testing after the initial requirements gathering phase. With each iteration, the product is improved based on the feedback from testing in the previous iteration. If required, the outcome of each phase is analyzed, revised and the next prototype is developed after the design is revised, if pertinent. The products from the first phase are not abandoned, they are revised. Evidently, this model is non-linear in nature.&lt;br /&gt;
&lt;br /&gt;
After the first pass through the checkpoint, we can conclude that the work so far is adequate, but not final. The model places emphasis on the iterative process and on the development of standard prototypes at the end of each iteration. At the end of every cycle, we notice the shortcomings from the previous cycle and might end up having to redo all the work in the previous cycle. This proves to be a complete waste of time and effort. All the effort now goes into developing the end point for an older cycle, which makes the model ineffective for the current cycle.&lt;br /&gt;
&lt;br /&gt;
One of the major drawbacks of such a non linear model is that the cost effectiveness and risk analysis cannot be analyzed thoroughly.&lt;br /&gt;
 &lt;br /&gt;
====Why CRC cards are not useful in Waterfall and Spiral Models====&lt;br /&gt;
&lt;br /&gt;
The strength of OO model depends on the idea that, here, design and deployment come together. In the case of a spiral model, this works to make the spiral tighter. Since the waterfall model places over importance on deliverables and user involvement is minimal, which is one of the key focuses of OO SLDCs using CRC cards, the model is considered ineffective. The Spiral model involves multiple revisions of the same idea. When a set of cards have been developed, it would make sense to refine the idea presented in the card but not to redefine them over and over, which may be the case. This does not serve the purpose of actually convening a CRC discussion among the team to draw up cards corresponding to the user requirement. Moreover, in the case of the Spiral model, we would need to convene multiple such meetings at each iteration, which would drastically bring down the overall productivity of the team.&lt;br /&gt;
&lt;br /&gt;
==CRC Cards in Software Development Process==&lt;br /&gt;
&lt;br /&gt;
===Agile Methodology and CRC Cards===&lt;br /&gt;
&lt;br /&gt;
Agile development is a model that has resurfaced and is gaining fame for its incremental cum iterative process. The iteration is carried over the processes of discovery, analysis, design and coding. In each iteration, the old model is worked on in each of the overlapping mini-cycles. The overlap of the cycles makes the process apparently iterative in nature. The model is considered incremental since every step acts as a value-add and this is emphasized by the capacity of classes for reuse. The idea that each phase is repeated ensures that the project is constantly working on a higher level of understanding. Moreover, the OOPS concept of reuse can be used to our advantage such that when we are continuously using OO development models in all our projects, the next implementation can be started  far ahead in the SDLC.&lt;br /&gt;
&lt;br /&gt;
The model focuses on analysis and design phase predominantly. Within each of these are mini phases of analysis-&amp;gt;prototype-&amp;gt;revision-&amp;gt; implementation cycles. The advantage of this model compared to other models described is that, being incremental, this also results in tightening of the spiral at the end of each iteration using concepts such as reusability and polymorphism. Thus, the progression from one point to another in the cycle is seamless from start to deployment.&lt;br /&gt;
&lt;br /&gt;
CRC cards can be very effectively and efficiently used in the Agile model of OO SDLC owing to the fact that it is incremental as well as iterative and not just a repetitive process. Thus, we would not have to redefine the cards from the scratch at any point. Being incremental, we would refine our current model and proceed to refine the entire system as a whole at the end of all iterations. We would essentially be adding value to the cards written out in the previous cycle and if perfected, would never have to discard cards from any of the precious cycles.&lt;br /&gt;
            &lt;br /&gt;
Agile also practices active customer involvement. In every phase, the user is involved. This is one of the key characteristics of the CRC card design method. This not only ensures that the final product is as per the customer's requirements, but also that the customer is thoroughly satisfied, since they are aware of the changes and increments at each level. Another key aspect of Agile methodology is that it is feature driven. A CRC card holds details as to the feature of each class and how it collaborates with the rest of the system. Since this information is readily available to the developer and is highly fine-tuned by the end of the SDLC process, the cards can guarantee focus on 80/20 principle (i.e. pay more attention to 20% of the features which will used 80% of the times). &lt;br /&gt;
&lt;br /&gt;
The power of CRC cards for OOP development is in the group session that employs them.  The use of CRC cards is an excellent way for people to begin to grasp the underlying idea of object oriented approach. CRC cards are used in a few steps of the software development process such as Analysis and Design.&lt;br /&gt;
&lt;br /&gt;
===CRC Cards for Analysis===&lt;br /&gt;
&lt;br /&gt;
CRC cards and CRC card sessions are good at organizing and spreading domain knowledge in the analysis phase.  When building an object–oriented application, the focus of the CRC card sessions is on analyzing and describing the problem.  In this phase, the group identifies the objects that are relevant to the application.  Before going to the CRC card session, the team must be aware of the domain classes and frameworks that exist to help them model the problem. During the session, they can decide if the existing ones can be used for the new application.&lt;br /&gt;
&lt;br /&gt;
'''Advantages of using CRC cards in Analysis phase:'''&lt;br /&gt;
&lt;br /&gt;
* People from all phases of the project are involved in the card sessions for problem modeling. The names of the classes and responsibilities are created, argued and agreed upon by the team members at the start itself in order to avoid conflicts later. This gives rise to common project and product vocabulary across different roles.&lt;br /&gt;
&lt;br /&gt;
* Domain knowledge already known is shared in the sessions. Also, missing domain knowledge is identified.&lt;br /&gt;
 &lt;br /&gt;
* Role plays are conducted during these sessions that help spread knowledge about OO concepts.&lt;br /&gt;
&lt;br /&gt;
* These sessions can be used to create a live prototype of what the application is supposed to do. This can be shown to clients as well so that the team receives feedback on their understanding of the requirements.&lt;br /&gt;
 &lt;br /&gt;
* A CRC card session will help the team walk through the requirements and identify any ambiguities.&lt;br /&gt;
&lt;br /&gt;
At the end of the analysis phase, the CRC elements that will be available are:&lt;br /&gt;
&lt;br /&gt;
* '''Classes:''' The classes identified in this phase directly reflect the concepts of the application that is being analyzed. It may not be modeled in terms of software system but it is useful in describing how the application works. However, at this stage the distinction between objects and classes may not be clear.&lt;br /&gt;
&lt;br /&gt;
* '''Responsibilities:'''  The responsibilities that are assigned to the classes in this phase are of relatively higher level.&lt;br /&gt;
&lt;br /&gt;
===CRC Cards for Design===&lt;br /&gt;
 &lt;br /&gt;
During the CRC cards design sessions, other relevant classes are added, if any. &amp;quot;While an analysis must reflect the real world of the user, the design must reflect the real world of the implementers.&amp;quot;[5] A CRC card tool may be helpful for saving, illustrating and documenting a design.&lt;br /&gt;
&lt;br /&gt;
'''Advantages of using CRC cards in Design phase:'''&lt;br /&gt;
&lt;br /&gt;
* These sessions help the team members concentrate on taking the design decisions for the application. These design decisions also include performance, efficiency and other constraints.&lt;br /&gt;
&lt;br /&gt;
* By walking through the scenarios that were seen during the analysis phase, the implementers can give the testers an overview of how the application should work.&lt;br /&gt;
&lt;br /&gt;
* Using CRC cards forces decision to be made up front in front of the team, thus any conflicts can be resolved right there.&lt;br /&gt;
&lt;br /&gt;
* Design constraints such as target environment, language, UI, performance etc., can be discussed during these sessions to check if the design can be implemented.&lt;br /&gt;
&lt;br /&gt;
==Summary==&lt;br /&gt;
Software for CRC cards are immensely helpful in designing and modeling software development using CRC cards.As the size of object-oriented system grow, it becomes increasingly difficult to model the problem with index based CRC cards. Thus an automated tool is required to maintain design and clear functionality.&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Unified_Modeling_Language Unified Modeling Language(UML)]&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Agile_Modeling Agile Modelling]&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Extreme_Programming Extreme Programming]&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
[1] [http://c2.com/doc/oopsla89/paper.html  A Laboratory For Teaching Object-Oriented Thinking]&lt;br /&gt;
&lt;br /&gt;
[2] [http://www.extremeprogramming.org/rules/crccards.html CRC Cards]&lt;br /&gt;
&lt;br /&gt;
[3] [http://www.extremeprogramming.org/example/crcsim.html A Simulator for Coffee Maker]&lt;br /&gt;
&lt;br /&gt;
[4] [http://www.math-cs.gordon.edu/courses/cps211/ATMExample/CRCCards.html CRC Card for ATM]&lt;br /&gt;
&lt;br /&gt;
[5] &amp;quot;Using CRC Cards: An Informal Approach to Object-Oriented Development&amp;quot; by Nancy M.Wilkinson&lt;br /&gt;
&lt;br /&gt;
[6] [http://books.google.com/books?id=SGOyQai2TboC&amp;amp;printsec=frontcover&amp;amp;dq=CRC+card+book&amp;amp;hl=en&amp;amp;ei=xSOaTKSaNISclgfRqtkK&amp;amp;sa=X&amp;amp;oi=book_result&amp;amp;ct=result&amp;amp;resnum=1&amp;amp;ved=0CDYQ6AEwAA#v=onepage&amp;amp;q&amp;amp;f=false The CRC card book] by David Bellin, Susan Suchman Simone&lt;br /&gt;
&lt;br /&gt;
==External Links==&lt;br /&gt;
* [http://c2.com/doc/oopsla89/paper.html A Laboratory For Teaching Object-Oriented Thinking] by Ward Cunningham and Kent Beck&lt;br /&gt;
* [http://www.agilemodeling.com/artifacts/crcModel.htm Modelling CRC Cards]&lt;br /&gt;
* [http://www.excelsoftware.com/quickcrcwin.html Quick CRC]&lt;br /&gt;
* [http://www.indicthreads.com/1439/quick-introduction-to-agile-software-development Quick Introduction to Agile Software Development]&lt;/div&gt;</summary>
		<author><name>Pgjalisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch1_1w11_ap&amp;diff=65137</id>
		<title>CSC/ECE 517 Fall 2012/ch1 1w11 ap</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch1_1w11_ap&amp;diff=65137"/>
		<updated>2012-09-15T03:26:13Z</updated>

		<summary type="html">&lt;p&gt;Pgjalisa: /* References */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&amp;lt;b&amp;gt; CRC Cards, &amp;lt;/b&amp;gt; also known as [http://en.wikipedia.org/wiki/Class-responsibility-collaboration_card &amp;lt;b&amp;gt; Class-Responsibility-Collaboration &amp;lt;sup&amp;gt;&amp;lt;/sup&amp;gt;&amp;lt;/b&amp;gt;] cards are a brainstorming tool to enable collaboration across different teams or individuals in contribution to design, usually used in Object Oriented Software development. This was  proposed by &amp;lt;b&amp;gt;Ward Cunningham&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;Kent Beck&amp;lt;/b&amp;gt;&amp;lt;sup&amp;gt;[http://c2.com/doc/oopsla89/paper.html]&amp;lt;/sup&amp;gt;. The CRC card can be viewed as an index card, with the following details:&lt;br /&gt;
[[Image:crc-card.gif|frame|right|CRC Card Structure]]&lt;br /&gt;
&lt;br /&gt;
:* The Top of the card usually bears the name of the class.&lt;br /&gt;
:* The Left side of the card has the responsibilities of the class.&lt;br /&gt;
:* The Right side of the card has the collaborating classes corresponding to each of the responsibilities listed in the left side.&lt;br /&gt;
&lt;br /&gt;
Thus in general, a CRC session can be viewed as the interaction between a set of collaborating classes for a particular [http://en.wikipedia.org/wiki/Use_case Use case]. &amp;lt;br&amp;gt; &amp;lt;br&amp;gt; According to &amp;lt;sup&amp;gt;[http://www.extremeprogramming.org/rules/crccards.html]&amp;lt;/sup&amp;gt;&amp;lt;i&amp;gt;A CRC session proceeds with someone simulating the system by talking about which objects send messages to other objects. By stepping through the process' weaknesses and problems are easily uncovered. Design alternatives can be explored quickly by simulating the design being proposed.&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===A CRC Example===&lt;br /&gt;
To better understand how the CRC cards work together, let us consider a simple student enrollment problem,where we are required to model the students enrolled in different courses. We can easily define the &amp;lt;b&amp;gt;Student CRC Card&amp;lt;/b&amp;gt; as having attributes such as student name, student id and responsibilities that enable a student to enroll in a course or drop the course. In this particular instance, the collaborating class would be the &amp;lt;b&amp;gt;Course&amp;lt;/b&amp;gt; class. The &amp;lt;b&amp;gt;Course CRC Card&amp;lt;/b&amp;gt; can in turn be visualized as having its own responsibilities, such as having attributes like Course id, course name and the collaborating class would be the &amp;lt;b&amp;gt;Instructor &lt;br /&gt;
class&amp;lt;/b&amp;gt;. The CRC cards for the Student class and the Course Class are shown below.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:Stud_enr_Crc.jpg|frame|center|Student and Course CRC Card]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
There are also several practical designs that use the CRC card model to design Object oriented software design. The  [http://www.extremeprogramming.org/example/crcsim.html Simulator for Coffee Maker] explores an [http://en.wikipedia.org/wiki/Extreme_Programming Extreme Programming] approach combined with CRC card technique to come up with a design for the coffee maker.&lt;br /&gt;
&lt;br /&gt;
Another interesting approach using CRC cards is the design for the [http://www.math-cs.gordon.edu/courses/cps211/ATMExample/CRCCards.html ATM Machine]&lt;br /&gt;
&lt;br /&gt;
===Advantages of CRC cards===&lt;br /&gt;
There are a few advantages of CRC cards that make it a preferable model in many designs. Some of the advantages of the CRC card design method are&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
:* CRC cards can allow designers to easily make audience understand a very complex system. In essence it allows for building more complex designs by slowly building the interactions between the collaborating classes, one by one.&lt;br /&gt;
:* CRC cards are a simple technique and it can be easily used by anyone with very little training and does not require any expensive computing resources(a board or a paper and a pen would suffice).&lt;br /&gt;
:* CRC is fundamentally a brainstorming tool, enabling different people in a team to come up with the design by collaborating, enabling everyone in the team to contribute&lt;br /&gt;
:* CRC can be used with other formal object oriented design methodologies such as [http://en.wikipedia.org/wiki/Extreme_Programming Extreme Programming] (an [http://en.wikipedia.org/wiki/Agile_Modeling Agile] development Technique) and can be used along with modeling languages such as [http://en.wikipedia.org/wiki/Unified_Modeling_Language Unified Modeling Language(UML)]&lt;br /&gt;
&lt;br /&gt;
==Software for CRC Cards==&lt;br /&gt;
CRC cards have limited scope. If we go about designing a huge project, the scope spans many classes and interactions between them. The tedious task here is to maintain the CRC cards and properly formulate interaction between them. &lt;br /&gt;
We need software for CRC Cards for the following reasons:&lt;br /&gt;
:* &amp;lt;b&amp;gt;Designing Scenario:&amp;lt;/b&amp;gt;  A scenario represents series of steps in which classes and objects communicate. There can be references to other cards or scenarios. &lt;br /&gt;
:* &amp;lt;b&amp;gt;Modeling :&amp;lt;/b&amp;gt;  Software provides an easy way to segregate cards and objects into different diagrams. Thus we can model our problem with different functionality very easily.&lt;br /&gt;
:* &amp;lt;b&amp;gt;Simulation :&amp;lt;/b&amp;gt; Software can provide simulation of the design. This might include single-stepping a scenario forwards/backwards or jumping to a specific location in the scenario stack of a multiple scenario simulation&lt;br /&gt;
:* &amp;lt;b&amp;gt;Synchronization and Dependencies:&amp;lt;/b&amp;gt; Software can maintain relationships between cards, scenarios as design changes take place. If a card references other cards or classes, those cards are generated automatically. Also any name changes and cross references between objects are instantly updated. &lt;br /&gt;
:* &amp;lt;b&amp;gt;Revision history and Version Control :&amp;lt;/b&amp;gt; Software for CRC cards supports changes to CRC cards. It is easy to model and keep track of all changes to a CRC card. This is extremely helpful in tracking the design changes in CRC cards.&lt;br /&gt;
&lt;br /&gt;
==Designing Software==&lt;br /&gt;
The steps to design software for CRC cards are:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Create CRC Cards&amp;lt;/b&amp;gt; : A CRC model is usually created by an individual or small group of designers during the early phase of an object-oriented development project.The figure shows the design of hierarchy of classes. These set of class used for drawing objects are shown. We can see TShape class has a superclass called TObject and two subclasses, TBox and TCircle. Lets assume we create new class TWindow derived from the superclass TObject.  [[Image:Design.png|thumb|Description]]&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Assign Responsibilities&amp;lt;/b&amp;gt; : Once a set of classes are defined, behaviors can be assigned that will provide the functions of the application. For example, the TShape card has responsibilities ''Initialize'' to create it and ''Draw'' to illustrate it on the diagram.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Add Attributes&amp;lt;/b&amp;gt; : Attributes of classes may also be identified in a CRC Card.The TShape class has attributes fPosition, fType and fSelected.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Define and simulate Scenario&amp;lt;/b&amp;gt; : A scenario describes a sequence of steps in the design using the responsibilities of a group of collaborating classes. Collaboration between classes refers to a client object that uses a responsibility performed by a server object. Often a class must call upon several collaborating classes to implement one of its responsibilities.A scenario describes what happens in the system from a high-level, user's point of view.&lt;br /&gt;
[[Image:Scenario.png|thumb|Description]]&lt;br /&gt;
&lt;br /&gt;
Consider situation to the right. We have defined two CRC cards with their responsibility. A scenario defines several steps. Each step in a scenario has a Client, Server and Responsibility field. For each step, a client class uses a responsibility of a server class&lt;br /&gt;
&lt;br /&gt;
The Open Document scenario in the picture references the Initialize Document sub-scenario by specifying its server class ''Document'' in the server field and its scenario name in the Responsibility field. The first step in the Initialize Document sub-scenario uses ''Document'' as the server class name. By single-stepping forwards, backwards or through each sub-scenario, bugs in the design can be identified and corrected early.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Partition the Design&amp;lt;/b&amp;gt; : As the number of CRC cards in the design grow, they can be grouped by function. By using Software for CRC cards,we can draw separate diagrams to partition the model into different subject areas. &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Inheritance Graph&amp;lt;/b&amp;gt; : An automated tool can generate an inheritance graph from information on CRC cards. This diagram can concisely illustrate the big picture of a large project that might contain hundreds of classes and dozens of diagrams.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Verify Your Work &amp;lt;/b&amp;gt; : Creating and simulating scenarios will help verify that a design is correct and complete. A CRC software can perform other error checks to locate design problems. For example, responsibilities that are not used in any scenarios may indicate that the design is incomplete or perhaps the responsibility isn't needed. Likewise, a card that is not used by any collaboration may not be needed.&lt;br /&gt;
&lt;br /&gt;
==Software Development Process for Object Oriented Development==&lt;br /&gt;
&lt;br /&gt;
Software Development Life Cycles are different for a standard development process and for Object Oriented development. This difference needs to be understood in order to know how to meet the benchmarks set for the project. There are multiple processes that are used in software development, the most common ones in use being Waterfall model and Spiral model. The Waterfall model is progression based and the Spiral model is iterative.&lt;br /&gt;
&lt;br /&gt;
We need to understand that the uniqueness of Object Oriented SDLCs comes from the fact that it is more user centric as compared to standard SDLCs that are more system centric. We will now see which models work for Object Oriented SDLCs (OO SDLCs) and which don’t. CRC cards play a very important role in an Object Oriented SDLC. Thus, figuring out which models work well for OO SDLCs will result in understanding which models use CRC cards and why.&lt;br /&gt;
 &lt;br /&gt;
====The Waterfall Model====&lt;br /&gt;
&lt;br /&gt;
The Waterfall model is implemented in multiple phases with each phase having a clear demarcation in terms of its functionality and deliverable. It uses clear stepping stones to come up with deliverables for each deadline. In this case, there are multiple ways to measure progress and methods by which to audit internally and apply checkpoints.&lt;br /&gt;
&lt;br /&gt;
The downside of the Waterfall model lies in the fact that it is a very rigid model that does not offer much in terms of leeway when it comes to deliverables and what each phase in the cycle has to offer. The process is also overly mechanical and over time, just ends up being boring.&lt;br /&gt;
&lt;br /&gt;
Owing to the emphasis on checkpoints and deliverables with strict deadlines, in most cases the analysis and design phases are usually cut short and thus, the project may veer very far from reality. The users are involved only in the requirement gathering phase. This might result in mistranslation of the requirements of the user into what may be an amazing final product but something that the user did not even ask for.&lt;br /&gt;
 &lt;br /&gt;
====The Spiral Model====&lt;br /&gt;
This model iteratively goes through the phases of analysis, design, prototyping and testing after the initial requirements gathering phase. With each iteration, the product is improved based on the feedback from testing in the previous iteration. If required, the outcome of each phase is analyzed, revised and the next prototype is developed after the design is revised, if pertinent. The products from the first phase are not abandoned, they are revised. Evidently, this model is non-linear in nature.&lt;br /&gt;
&lt;br /&gt;
After the first pass through the checkpoint, we can conclude that the work so far is adequate, but not final. The model places emphasis on the iterative process and on the development of standard prototypes at the end of each iteration. At the end of every cycle, we notice the shortcomings from the previous cycle and might end up having to redo all the work in the previous cycle. This proves to be a complete waste of time and effort. All the effort now goes into developing the end point for an older cycle, which makes the model ineffective for the current cycle.&lt;br /&gt;
&lt;br /&gt;
One of the major drawbacks of such a non linear model is that the cost effectiveness and risk analysis cannot be analyzed thoroughly.&lt;br /&gt;
 &lt;br /&gt;
====Why CRC cards are not useful in Waterfall and Spiral Models====&lt;br /&gt;
&lt;br /&gt;
The strength of OO model depends on the idea that, here, design and deployment come together. In the case of a spiral model, this works to make the spiral tighter. Since the waterfall model places over importance on deliverables and user involvement is minimal, which is one of the key focuses of OO SLDCs using CRC cards, the model is considered ineffective. The Spiral model involves multiple revisions of the same idea. When a set of cards have been developed, it would make sense to refine the idea presented in the card but not to redefine them over and over, which may be the case. This does not serve the purpose of actually convening a CRC discussion among the team to draw up cards corresponding to the user requirement. Moreover, in the case of the Spiral model, we would need to convene multiple such meetings at each iteration, which would drastically bring down the overall productivity of the team.&lt;br /&gt;
&lt;br /&gt;
==CRC Cards in Software Development Process==&lt;br /&gt;
&lt;br /&gt;
===Agile Methodology and CRC Cards===&lt;br /&gt;
&lt;br /&gt;
Agile development is a model that has resurfaced and is gaining fame for its incremental cum iterative process. The iteration is carried over the processes of discovery, analysis, design and coding. In each iteration, the old model is worked on in each of the overlapping mini-cycles. The overlap of the cycles makes the process apparently iterative in nature. The model is considered incremental since every step acts as a value-add and this is emphasized by the capacity of classes for reuse. The idea that each phase is repeated ensures that the project is constantly working on a higher level of understanding. Moreover, the OOPS concept of reuse can be used to our advantage such that when we are continuously using OO development models in all our projects, the next implementation can be started  far ahead in the SDLC.&lt;br /&gt;
&lt;br /&gt;
The model focuses on analysis and design phase predominantly. Within each of these are mini phases of analysis-&amp;gt;prototype-&amp;gt;revision-&amp;gt; implementation cycles. The advantage of this model compared to other models described is that, being incremental, this also results in tightening of the spiral at the end of each iteration using concepts such as reusability and polymorphism. Thus, the progression from one point to another in the cycle is seamless from start to deployment.&lt;br /&gt;
&lt;br /&gt;
CRC cards can be very effectively and efficiently used in the Agile model of OO SDLC owing to the fact that it is incremental as well as iterative and not just a repetitive process. Thus, we would not have to redefine the cards from the scratch at any point. Being incremental, we would refine our current model and proceed to refine the entire system as a whole at the end of all iterations. We would essentially be adding value to the cards written out in the previous cycle and if perfected, would never have to discard cards from any of the precious cycles.&lt;br /&gt;
            &lt;br /&gt;
Agile also practices active customer involvement. In every phase, the user is involved. This is one of the key characteristics of the CRC card design method. This not only ensures that the final product is as per the customer's requirements, but also that the customer is thoroughly satisfied, since they are aware of the changes and increments at each level. Another key aspect of Agile methodology is that it is feature driven. A CRC card holds details as to the feature of each class and how it collaborates with the rest of the system. Since this information is readily available to the developer and is highly fine-tuned by the end of the SDLC process, the cards can guarantee focus on 80/20 principle (i.e. pay more attention to 20% of the features which will used 80% of the times). &lt;br /&gt;
&lt;br /&gt;
The power of CRC cards for OOP development is in the group session that employs them.  The use of CRC cards is an excellent way for people to begin to grasp the underlying idea of object oriented approach. CRC cards are used in a few steps of the software development process such as Analysis and Design.&lt;br /&gt;
&lt;br /&gt;
===CRC Cards for Analysis===&lt;br /&gt;
&lt;br /&gt;
CRC cards and CRC card sessions are good at organizing and spreading domain knowledge in the analysis phase.  When building an object–oriented application, the focus of the CRC card sessions is on analyzing and describing the problem.  In this phase, the group identifies the objects that are relevant to the application.  Before going to the CRC card session, the team must be aware of the domain classes and frameworks that exist to help them model the problem. During the session, they can decide if the existing ones can be used for the new application.&lt;br /&gt;
&lt;br /&gt;
'''Advantages of using CRC cards in Analysis phase:'''&lt;br /&gt;
&lt;br /&gt;
* People from all phases of the project are involved in the card sessions for problem modeling. The names of the classes and responsibilities are created, argued and agreed upon by the team members at the start itself in order to avoid conflicts later. This gives rise to common project and product vocabulary across different roles.&lt;br /&gt;
&lt;br /&gt;
* Domain knowledge already known is shared in the sessions. Also, missing domain knowledge is identified.&lt;br /&gt;
 &lt;br /&gt;
* Role plays are conducted during these sessions that help spread knowledge about OO concepts.&lt;br /&gt;
&lt;br /&gt;
* These sessions can be used to create a live prototype of what the application is supposed to do. This can be shown to clients as well so that the team receives feedback on their understanding of the requirements.&lt;br /&gt;
 &lt;br /&gt;
* A CRC card session will help the team walk through the requirements and identify any ambiguities.&lt;br /&gt;
&lt;br /&gt;
At the end of the analysis phase, the CRC elements that will be available are:&lt;br /&gt;
&lt;br /&gt;
* '''Classes:''' The classes identified in this phase directly reflect the concepts of the application that is being analyzed. It may not be modeled in terms of software system but it is useful in describing how the application works. However, at this stage the distinction between objects and classes may not be clear.&lt;br /&gt;
&lt;br /&gt;
* '''Responsibilities:'''  The responsibilities that are assigned to the classes in this phase are of relatively higher level.&lt;br /&gt;
&lt;br /&gt;
===CRC Cards for Design===&lt;br /&gt;
 &lt;br /&gt;
During the CRC cards design sessions, other relevant classes are added, if any. &amp;quot;While an analysis must reflect the real world of the user, the design must reflect the real world of the implementers.&amp;quot;[5] A CRC card tool may be helpful for saving, illustrating and documenting a design.&lt;br /&gt;
&lt;br /&gt;
'''Advantages of using CRC cards in Design phase:'''&lt;br /&gt;
&lt;br /&gt;
* These sessions help the team members concentrate on taking the design decisions for the application. These design decisions also include performance, efficiency and other constraints.&lt;br /&gt;
&lt;br /&gt;
* By walking through the scenarios that were seen during the analysis phase, the implementers can give the testers an overview of how the application should work.&lt;br /&gt;
&lt;br /&gt;
* Using CRC cards forces decision to be made up front in front of the team, thus any conflicts can be resolved right there.&lt;br /&gt;
&lt;br /&gt;
* Design constraints such as target environment, language, UI, performance etc., can be discussed during these sessions to check if the design can be implemented.&lt;br /&gt;
&lt;br /&gt;
==Summary==&lt;br /&gt;
Software for CRC cards are immensely helpful in designing and modeling software development using CRC cards.As the size of object-oriented system grow, it becomes increasingly difficult to model the problem with index based CRC cards. Thus an automated tool is required to maintain design and clear functionality.&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Unified_Modeling_Language Unified Modeling Language(UML)]&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Agile_Modeling Agile Modelling]&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Extreme_Programming Extreme Programming]&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
[1] [http://c2.com/doc/oopsla89/paper.html  A Laboratory For Teaching Object-Oriented Thinking]&lt;br /&gt;
&lt;br /&gt;
[2] [http://www.extremeprogramming.org/rules/crccards.html CRC Cards]&lt;br /&gt;
&lt;br /&gt;
[3] [http://www.extremeprogramming.org/example/crcsim.html A Simulator for Coffee Maker]&lt;br /&gt;
&lt;br /&gt;
[4] [http://www.math-cs.gordon.edu/courses/cps211/ATMExample/CRCCards.html CRC Card for ATM]&lt;br /&gt;
&lt;br /&gt;
[5] &amp;quot;Using CRC Cards: An Informal Approach to Object-Oriented Development&amp;quot; by Nancy M.Wilkinson&lt;br /&gt;
&lt;br /&gt;
[6] [http://books.google.com/books?id=SGOyQai2TboC&amp;amp;printsec=frontcover&amp;amp;dq=CRC+card+book&amp;amp;hl=en&amp;amp;ei=xSOaTKSaNISclgfRqtkK&amp;amp;sa=X&amp;amp;oi=book_result&amp;amp;ct=result&amp;amp;resnum=1&amp;amp;ved=0CDYQ6AEwAA#v=onepage&amp;amp;q&amp;amp;f=false The CRC card book] by David Bellin, Susan Suchman Simone&lt;br /&gt;
&lt;br /&gt;
==External Links==&lt;br /&gt;
* [http://c2.com/doc/oopsla89/paper.html A Laboratory For Teaching Object-Oriented Thinking] by Ward Cunningham and Kent Beck&lt;br /&gt;
* [http://www.agilemodeling.com/artifacts/crcModel.htm Modelling CRC Cards]&lt;br /&gt;
* [http://www.excelsoftware.com/quickcrcwin.html Quick CRC]&lt;br /&gt;
* [http://www.indicthreads.com/1439/quick-introduction-to-agile-software-development Quick Introduction to Agile Software Development]&lt;/div&gt;</summary>
		<author><name>Pgjalisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch1_1w11_ap&amp;diff=65136</id>
		<title>CSC/ECE 517 Fall 2012/ch1 1w11 ap</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch1_1w11_ap&amp;diff=65136"/>
		<updated>2012-09-15T03:25:51Z</updated>

		<summary type="html">&lt;p&gt;Pgjalisa: /* External Links */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&amp;lt;b&amp;gt; CRC Cards, &amp;lt;/b&amp;gt; also known as [http://en.wikipedia.org/wiki/Class-responsibility-collaboration_card &amp;lt;b&amp;gt; Class-Responsibility-Collaboration &amp;lt;sup&amp;gt;&amp;lt;/sup&amp;gt;&amp;lt;/b&amp;gt;] cards are a brainstorming tool to enable collaboration across different teams or individuals in contribution to design, usually used in Object Oriented Software development. This was  proposed by &amp;lt;b&amp;gt;Ward Cunningham&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;Kent Beck&amp;lt;/b&amp;gt;&amp;lt;sup&amp;gt;[http://c2.com/doc/oopsla89/paper.html]&amp;lt;/sup&amp;gt;. The CRC card can be viewed as an index card, with the following details:&lt;br /&gt;
[[Image:crc-card.gif|frame|right|CRC Card Structure]]&lt;br /&gt;
&lt;br /&gt;
:* The Top of the card usually bears the name of the class.&lt;br /&gt;
:* The Left side of the card has the responsibilities of the class.&lt;br /&gt;
:* The Right side of the card has the collaborating classes corresponding to each of the responsibilities listed in the left side.&lt;br /&gt;
&lt;br /&gt;
Thus in general, a CRC session can be viewed as the interaction between a set of collaborating classes for a particular [http://en.wikipedia.org/wiki/Use_case Use case]. &amp;lt;br&amp;gt; &amp;lt;br&amp;gt; According to &amp;lt;sup&amp;gt;[http://www.extremeprogramming.org/rules/crccards.html]&amp;lt;/sup&amp;gt;&amp;lt;i&amp;gt;A CRC session proceeds with someone simulating the system by talking about which objects send messages to other objects. By stepping through the process' weaknesses and problems are easily uncovered. Design alternatives can be explored quickly by simulating the design being proposed.&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===A CRC Example===&lt;br /&gt;
To better understand how the CRC cards work together, let us consider a simple student enrollment problem,where we are required to model the students enrolled in different courses. We can easily define the &amp;lt;b&amp;gt;Student CRC Card&amp;lt;/b&amp;gt; as having attributes such as student name, student id and responsibilities that enable a student to enroll in a course or drop the course. In this particular instance, the collaborating class would be the &amp;lt;b&amp;gt;Course&amp;lt;/b&amp;gt; class. The &amp;lt;b&amp;gt;Course CRC Card&amp;lt;/b&amp;gt; can in turn be visualized as having its own responsibilities, such as having attributes like Course id, course name and the collaborating class would be the &amp;lt;b&amp;gt;Instructor &lt;br /&gt;
class&amp;lt;/b&amp;gt;. The CRC cards for the Student class and the Course Class are shown below.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:Stud_enr_Crc.jpg|frame|center|Student and Course CRC Card]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
There are also several practical designs that use the CRC card model to design Object oriented software design. The  [http://www.extremeprogramming.org/example/crcsim.html Simulator for Coffee Maker] explores an [http://en.wikipedia.org/wiki/Extreme_Programming Extreme Programming] approach combined with CRC card technique to come up with a design for the coffee maker.&lt;br /&gt;
&lt;br /&gt;
Another interesting approach using CRC cards is the design for the [http://www.math-cs.gordon.edu/courses/cps211/ATMExample/CRCCards.html ATM Machine]&lt;br /&gt;
&lt;br /&gt;
===Advantages of CRC cards===&lt;br /&gt;
There are a few advantages of CRC cards that make it a preferable model in many designs. Some of the advantages of the CRC card design method are&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
:* CRC cards can allow designers to easily make audience understand a very complex system. In essence it allows for building more complex designs by slowly building the interactions between the collaborating classes, one by one.&lt;br /&gt;
:* CRC cards are a simple technique and it can be easily used by anyone with very little training and does not require any expensive computing resources(a board or a paper and a pen would suffice).&lt;br /&gt;
:* CRC is fundamentally a brainstorming tool, enabling different people in a team to come up with the design by collaborating, enabling everyone in the team to contribute&lt;br /&gt;
:* CRC can be used with other formal object oriented design methodologies such as [http://en.wikipedia.org/wiki/Extreme_Programming Extreme Programming] (an [http://en.wikipedia.org/wiki/Agile_Modeling Agile] development Technique) and can be used along with modeling languages such as [http://en.wikipedia.org/wiki/Unified_Modeling_Language Unified Modeling Language(UML)]&lt;br /&gt;
&lt;br /&gt;
==Software for CRC Cards==&lt;br /&gt;
CRC cards have limited scope. If we go about designing a huge project, the scope spans many classes and interactions between them. The tedious task here is to maintain the CRC cards and properly formulate interaction between them. &lt;br /&gt;
We need software for CRC Cards for the following reasons:&lt;br /&gt;
:* &amp;lt;b&amp;gt;Designing Scenario:&amp;lt;/b&amp;gt;  A scenario represents series of steps in which classes and objects communicate. There can be references to other cards or scenarios. &lt;br /&gt;
:* &amp;lt;b&amp;gt;Modeling :&amp;lt;/b&amp;gt;  Software provides an easy way to segregate cards and objects into different diagrams. Thus we can model our problem with different functionality very easily.&lt;br /&gt;
:* &amp;lt;b&amp;gt;Simulation :&amp;lt;/b&amp;gt; Software can provide simulation of the design. This might include single-stepping a scenario forwards/backwards or jumping to a specific location in the scenario stack of a multiple scenario simulation&lt;br /&gt;
:* &amp;lt;b&amp;gt;Synchronization and Dependencies:&amp;lt;/b&amp;gt; Software can maintain relationships between cards, scenarios as design changes take place. If a card references other cards or classes, those cards are generated automatically. Also any name changes and cross references between objects are instantly updated. &lt;br /&gt;
:* &amp;lt;b&amp;gt;Revision history and Version Control :&amp;lt;/b&amp;gt; Software for CRC cards supports changes to CRC cards. It is easy to model and keep track of all changes to a CRC card. This is extremely helpful in tracking the design changes in CRC cards.&lt;br /&gt;
&lt;br /&gt;
==Designing Software==&lt;br /&gt;
The steps to design software for CRC cards are:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Create CRC Cards&amp;lt;/b&amp;gt; : A CRC model is usually created by an individual or small group of designers during the early phase of an object-oriented development project.The figure shows the design of hierarchy of classes. These set of class used for drawing objects are shown. We can see TShape class has a superclass called TObject and two subclasses, TBox and TCircle. Lets assume we create new class TWindow derived from the superclass TObject.  [[Image:Design.png|thumb|Description]]&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Assign Responsibilities&amp;lt;/b&amp;gt; : Once a set of classes are defined, behaviors can be assigned that will provide the functions of the application. For example, the TShape card has responsibilities ''Initialize'' to create it and ''Draw'' to illustrate it on the diagram.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Add Attributes&amp;lt;/b&amp;gt; : Attributes of classes may also be identified in a CRC Card.The TShape class has attributes fPosition, fType and fSelected.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Define and simulate Scenario&amp;lt;/b&amp;gt; : A scenario describes a sequence of steps in the design using the responsibilities of a group of collaborating classes. Collaboration between classes refers to a client object that uses a responsibility performed by a server object. Often a class must call upon several collaborating classes to implement one of its responsibilities.A scenario describes what happens in the system from a high-level, user's point of view.&lt;br /&gt;
[[Image:Scenario.png|thumb|Description]]&lt;br /&gt;
&lt;br /&gt;
Consider situation to the right. We have defined two CRC cards with their responsibility. A scenario defines several steps. Each step in a scenario has a Client, Server and Responsibility field. For each step, a client class uses a responsibility of a server class&lt;br /&gt;
&lt;br /&gt;
The Open Document scenario in the picture references the Initialize Document sub-scenario by specifying its server class ''Document'' in the server field and its scenario name in the Responsibility field. The first step in the Initialize Document sub-scenario uses ''Document'' as the server class name. By single-stepping forwards, backwards or through each sub-scenario, bugs in the design can be identified and corrected early.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Partition the Design&amp;lt;/b&amp;gt; : As the number of CRC cards in the design grow, they can be grouped by function. By using Software for CRC cards,we can draw separate diagrams to partition the model into different subject areas. &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Inheritance Graph&amp;lt;/b&amp;gt; : An automated tool can generate an inheritance graph from information on CRC cards. This diagram can concisely illustrate the big picture of a large project that might contain hundreds of classes and dozens of diagrams.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Verify Your Work &amp;lt;/b&amp;gt; : Creating and simulating scenarios will help verify that a design is correct and complete. A CRC software can perform other error checks to locate design problems. For example, responsibilities that are not used in any scenarios may indicate that the design is incomplete or perhaps the responsibility isn't needed. Likewise, a card that is not used by any collaboration may not be needed.&lt;br /&gt;
&lt;br /&gt;
==Software Development Process for Object Oriented Development==&lt;br /&gt;
&lt;br /&gt;
Software Development Life Cycles are different for a standard development process and for Object Oriented development. This difference needs to be understood in order to know how to meet the benchmarks set for the project. There are multiple processes that are used in software development, the most common ones in use being Waterfall model and Spiral model. The Waterfall model is progression based and the Spiral model is iterative.&lt;br /&gt;
&lt;br /&gt;
We need to understand that the uniqueness of Object Oriented SDLCs comes from the fact that it is more user centric as compared to standard SDLCs that are more system centric. We will now see which models work for Object Oriented SDLCs (OO SDLCs) and which don’t. CRC cards play a very important role in an Object Oriented SDLC. Thus, figuring out which models work well for OO SDLCs will result in understanding which models use CRC cards and why.&lt;br /&gt;
 &lt;br /&gt;
====The Waterfall Model====&lt;br /&gt;
&lt;br /&gt;
The Waterfall model is implemented in multiple phases with each phase having a clear demarcation in terms of its functionality and deliverable. It uses clear stepping stones to come up with deliverables for each deadline. In this case, there are multiple ways to measure progress and methods by which to audit internally and apply checkpoints.&lt;br /&gt;
&lt;br /&gt;
The downside of the Waterfall model lies in the fact that it is a very rigid model that does not offer much in terms of leeway when it comes to deliverables and what each phase in the cycle has to offer. The process is also overly mechanical and over time, just ends up being boring.&lt;br /&gt;
&lt;br /&gt;
Owing to the emphasis on checkpoints and deliverables with strict deadlines, in most cases the analysis and design phases are usually cut short and thus, the project may veer very far from reality. The users are involved only in the requirement gathering phase. This might result in mistranslation of the requirements of the user into what may be an amazing final product but something that the user did not even ask for.&lt;br /&gt;
 &lt;br /&gt;
====The Spiral Model====&lt;br /&gt;
This model iteratively goes through the phases of analysis, design, prototyping and testing after the initial requirements gathering phase. With each iteration, the product is improved based on the feedback from testing in the previous iteration. If required, the outcome of each phase is analyzed, revised and the next prototype is developed after the design is revised, if pertinent. The products from the first phase are not abandoned, they are revised. Evidently, this model is non-linear in nature.&lt;br /&gt;
&lt;br /&gt;
After the first pass through the checkpoint, we can conclude that the work so far is adequate, but not final. The model places emphasis on the iterative process and on the development of standard prototypes at the end of each iteration. At the end of every cycle, we notice the shortcomings from the previous cycle and might end up having to redo all the work in the previous cycle. This proves to be a complete waste of time and effort. All the effort now goes into developing the end point for an older cycle, which makes the model ineffective for the current cycle.&lt;br /&gt;
&lt;br /&gt;
One of the major drawbacks of such a non linear model is that the cost effectiveness and risk analysis cannot be analyzed thoroughly.&lt;br /&gt;
 &lt;br /&gt;
====Why CRC cards are not useful in Waterfall and Spiral Models====&lt;br /&gt;
&lt;br /&gt;
The strength of OO model depends on the idea that, here, design and deployment come together. In the case of a spiral model, this works to make the spiral tighter. Since the waterfall model places over importance on deliverables and user involvement is minimal, which is one of the key focuses of OO SLDCs using CRC cards, the model is considered ineffective. The Spiral model involves multiple revisions of the same idea. When a set of cards have been developed, it would make sense to refine the idea presented in the card but not to redefine them over and over, which may be the case. This does not serve the purpose of actually convening a CRC discussion among the team to draw up cards corresponding to the user requirement. Moreover, in the case of the Spiral model, we would need to convene multiple such meetings at each iteration, which would drastically bring down the overall productivity of the team.&lt;br /&gt;
&lt;br /&gt;
==CRC Cards in Software Development Process==&lt;br /&gt;
&lt;br /&gt;
===Agile Methodology and CRC Cards===&lt;br /&gt;
&lt;br /&gt;
Agile development is a model that has resurfaced and is gaining fame for its incremental cum iterative process. The iteration is carried over the processes of discovery, analysis, design and coding. In each iteration, the old model is worked on in each of the overlapping mini-cycles. The overlap of the cycles makes the process apparently iterative in nature. The model is considered incremental since every step acts as a value-add and this is emphasized by the capacity of classes for reuse. The idea that each phase is repeated ensures that the project is constantly working on a higher level of understanding. Moreover, the OOPS concept of reuse can be used to our advantage such that when we are continuously using OO development models in all our projects, the next implementation can be started  far ahead in the SDLC.&lt;br /&gt;
&lt;br /&gt;
The model focuses on analysis and design phase predominantly. Within each of these are mini phases of analysis-&amp;gt;prototype-&amp;gt;revision-&amp;gt; implementation cycles. The advantage of this model compared to other models described is that, being incremental, this also results in tightening of the spiral at the end of each iteration using concepts such as reusability and polymorphism. Thus, the progression from one point to another in the cycle is seamless from start to deployment.&lt;br /&gt;
&lt;br /&gt;
CRC cards can be very effectively and efficiently used in the Agile model of OO SDLC owing to the fact that it is incremental as well as iterative and not just a repetitive process. Thus, we would not have to redefine the cards from the scratch at any point. Being incremental, we would refine our current model and proceed to refine the entire system as a whole at the end of all iterations. We would essentially be adding value to the cards written out in the previous cycle and if perfected, would never have to discard cards from any of the precious cycles.&lt;br /&gt;
            &lt;br /&gt;
Agile also practices active customer involvement. In every phase, the user is involved. This is one of the key characteristics of the CRC card design method. This not only ensures that the final product is as per the customer's requirements, but also that the customer is thoroughly satisfied, since they are aware of the changes and increments at each level. Another key aspect of Agile methodology is that it is feature driven. A CRC card holds details as to the feature of each class and how it collaborates with the rest of the system. Since this information is readily available to the developer and is highly fine-tuned by the end of the SDLC process, the cards can guarantee focus on 80/20 principle (i.e. pay more attention to 20% of the features which will used 80% of the times). &lt;br /&gt;
&lt;br /&gt;
The power of CRC cards for OOP development is in the group session that employs them.  The use of CRC cards is an excellent way for people to begin to grasp the underlying idea of object oriented approach. CRC cards are used in a few steps of the software development process such as Analysis and Design.&lt;br /&gt;
&lt;br /&gt;
===CRC Cards for Analysis===&lt;br /&gt;
&lt;br /&gt;
CRC cards and CRC card sessions are good at organizing and spreading domain knowledge in the analysis phase.  When building an object–oriented application, the focus of the CRC card sessions is on analyzing and describing the problem.  In this phase, the group identifies the objects that are relevant to the application.  Before going to the CRC card session, the team must be aware of the domain classes and frameworks that exist to help them model the problem. During the session, they can decide if the existing ones can be used for the new application.&lt;br /&gt;
&lt;br /&gt;
'''Advantages of using CRC cards in Analysis phase:'''&lt;br /&gt;
&lt;br /&gt;
* People from all phases of the project are involved in the card sessions for problem modeling. The names of the classes and responsibilities are created, argued and agreed upon by the team members at the start itself in order to avoid conflicts later. This gives rise to common project and product vocabulary across different roles.&lt;br /&gt;
&lt;br /&gt;
* Domain knowledge already known is shared in the sessions. Also, missing domain knowledge is identified.&lt;br /&gt;
 &lt;br /&gt;
* Role plays are conducted during these sessions that help spread knowledge about OO concepts.&lt;br /&gt;
&lt;br /&gt;
* These sessions can be used to create a live prototype of what the application is supposed to do. This can be shown to clients as well so that the team receives feedback on their understanding of the requirements.&lt;br /&gt;
 &lt;br /&gt;
* A CRC card session will help the team walk through the requirements and identify any ambiguities.&lt;br /&gt;
&lt;br /&gt;
At the end of the analysis phase, the CRC elements that will be available are:&lt;br /&gt;
&lt;br /&gt;
* '''Classes:''' The classes identified in this phase directly reflect the concepts of the application that is being analyzed. It may not be modeled in terms of software system but it is useful in describing how the application works. However, at this stage the distinction between objects and classes may not be clear.&lt;br /&gt;
&lt;br /&gt;
* '''Responsibilities:'''  The responsibilities that are assigned to the classes in this phase are of relatively higher level.&lt;br /&gt;
&lt;br /&gt;
===CRC Cards for Design===&lt;br /&gt;
 &lt;br /&gt;
During the CRC cards design sessions, other relevant classes are added, if any. &amp;quot;While an analysis must reflect the real world of the user, the design must reflect the real world of the implementers.&amp;quot;[5] A CRC card tool may be helpful for saving, illustrating and documenting a design.&lt;br /&gt;
&lt;br /&gt;
'''Advantages of using CRC cards in Design phase:'''&lt;br /&gt;
&lt;br /&gt;
* These sessions help the team members concentrate on taking the design decisions for the application. These design decisions also include performance, efficiency and other constraints.&lt;br /&gt;
&lt;br /&gt;
* By walking through the scenarios that were seen during the analysis phase, the implementers can give the testers an overview of how the application should work.&lt;br /&gt;
&lt;br /&gt;
* Using CRC cards forces decision to be made up front in front of the team, thus any conflicts can be resolved right there.&lt;br /&gt;
&lt;br /&gt;
* Design constraints such as target environment, language, UI, performance etc., can be discussed during these sessions to check if the design can be implemented.&lt;br /&gt;
&lt;br /&gt;
==Summary==&lt;br /&gt;
Software for CRC cards are immensely helpful in designing and modeling software development using CRC cards.As the size of object-oriented system grow, it becomes increasingly difficult to model the problem with index based CRC cards. Thus an automated tool is required to maintain design and clear functionality.&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Unified_Modeling_Language Unified Modeling Language(UML)]&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Agile_Modeling Agile Modelling]&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Extreme_Programming Extreme Programming]&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
[1] [http://c2.com/doc/oopsla89/paper.html  A Laboratory For Teaching Object-Oriented Thinking]&lt;br /&gt;
&lt;br /&gt;
[2] [http://www.extremeprogramming.org/rules/crccards.html CRC Cards]&lt;br /&gt;
&lt;br /&gt;
[3] [http://www.extremeprogramming.org/example/crcsim.html A Simulator for Coffee Maker]&lt;br /&gt;
&lt;br /&gt;
[4] [http://www.math-cs.gordon.edu/courses/cps211/ATMExample/CRCCards.html CRC Card for ATM]&lt;br /&gt;
&lt;br /&gt;
[5] &amp;quot;Using CRC Cards: An Informal Approach to Object-Oriented Development&amp;quot; by Nancy M.Wilkinson&lt;br /&gt;
&lt;br /&gt;
==External Links==&lt;br /&gt;
* [http://c2.com/doc/oopsla89/paper.html A Laboratory For Teaching Object-Oriented Thinking] by Ward Cunningham and Kent Beck&lt;br /&gt;
* [http://www.agilemodeling.com/artifacts/crcModel.htm Modelling CRC Cards]&lt;br /&gt;
* [http://www.excelsoftware.com/quickcrcwin.html Quick CRC]&lt;br /&gt;
* [http://www.indicthreads.com/1439/quick-introduction-to-agile-software-development Quick Introduction to Agile Software Development]&lt;/div&gt;</summary>
		<author><name>Pgjalisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch1_1w11_ap&amp;diff=65134</id>
		<title>CSC/ECE 517 Fall 2012/ch1 1w11 ap</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch1_1w11_ap&amp;diff=65134"/>
		<updated>2012-09-15T03:25:18Z</updated>

		<summary type="html">&lt;p&gt;Pgjalisa: /* External Links */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&amp;lt;b&amp;gt; CRC Cards, &amp;lt;/b&amp;gt; also known as [http://en.wikipedia.org/wiki/Class-responsibility-collaboration_card &amp;lt;b&amp;gt; Class-Responsibility-Collaboration &amp;lt;sup&amp;gt;&amp;lt;/sup&amp;gt;&amp;lt;/b&amp;gt;] cards are a brainstorming tool to enable collaboration across different teams or individuals in contribution to design, usually used in Object Oriented Software development. This was  proposed by &amp;lt;b&amp;gt;Ward Cunningham&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;Kent Beck&amp;lt;/b&amp;gt;&amp;lt;sup&amp;gt;[http://c2.com/doc/oopsla89/paper.html]&amp;lt;/sup&amp;gt;. The CRC card can be viewed as an index card, with the following details:&lt;br /&gt;
[[Image:crc-card.gif|frame|right|CRC Card Structure]]&lt;br /&gt;
&lt;br /&gt;
:* The Top of the card usually bears the name of the class.&lt;br /&gt;
:* The Left side of the card has the responsibilities of the class.&lt;br /&gt;
:* The Right side of the card has the collaborating classes corresponding to each of the responsibilities listed in the left side.&lt;br /&gt;
&lt;br /&gt;
Thus in general, a CRC session can be viewed as the interaction between a set of collaborating classes for a particular [http://en.wikipedia.org/wiki/Use_case Use case]. &amp;lt;br&amp;gt; &amp;lt;br&amp;gt; According to &amp;lt;sup&amp;gt;[http://www.extremeprogramming.org/rules/crccards.html]&amp;lt;/sup&amp;gt;&amp;lt;i&amp;gt;A CRC session proceeds with someone simulating the system by talking about which objects send messages to other objects. By stepping through the process' weaknesses and problems are easily uncovered. Design alternatives can be explored quickly by simulating the design being proposed.&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===A CRC Example===&lt;br /&gt;
To better understand how the CRC cards work together, let us consider a simple student enrollment problem,where we are required to model the students enrolled in different courses. We can easily define the &amp;lt;b&amp;gt;Student CRC Card&amp;lt;/b&amp;gt; as having attributes such as student name, student id and responsibilities that enable a student to enroll in a course or drop the course. In this particular instance, the collaborating class would be the &amp;lt;b&amp;gt;Course&amp;lt;/b&amp;gt; class. The &amp;lt;b&amp;gt;Course CRC Card&amp;lt;/b&amp;gt; can in turn be visualized as having its own responsibilities, such as having attributes like Course id, course name and the collaborating class would be the &amp;lt;b&amp;gt;Instructor &lt;br /&gt;
class&amp;lt;/b&amp;gt;. The CRC cards for the Student class and the Course Class are shown below.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:Stud_enr_Crc.jpg|frame|center|Student and Course CRC Card]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
There are also several practical designs that use the CRC card model to design Object oriented software design. The  [http://www.extremeprogramming.org/example/crcsim.html Simulator for Coffee Maker] explores an [http://en.wikipedia.org/wiki/Extreme_Programming Extreme Programming] approach combined with CRC card technique to come up with a design for the coffee maker.&lt;br /&gt;
&lt;br /&gt;
Another interesting approach using CRC cards is the design for the [http://www.math-cs.gordon.edu/courses/cps211/ATMExample/CRCCards.html ATM Machine]&lt;br /&gt;
&lt;br /&gt;
===Advantages of CRC cards===&lt;br /&gt;
There are a few advantages of CRC cards that make it a preferable model in many designs. Some of the advantages of the CRC card design method are&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
:* CRC cards can allow designers to easily make audience understand a very complex system. In essence it allows for building more complex designs by slowly building the interactions between the collaborating classes, one by one.&lt;br /&gt;
:* CRC cards are a simple technique and it can be easily used by anyone with very little training and does not require any expensive computing resources(a board or a paper and a pen would suffice).&lt;br /&gt;
:* CRC is fundamentally a brainstorming tool, enabling different people in a team to come up with the design by collaborating, enabling everyone in the team to contribute&lt;br /&gt;
:* CRC can be used with other formal object oriented design methodologies such as [http://en.wikipedia.org/wiki/Extreme_Programming Extreme Programming] (an [http://en.wikipedia.org/wiki/Agile_Modeling Agile] development Technique) and can be used along with modeling languages such as [http://en.wikipedia.org/wiki/Unified_Modeling_Language Unified Modeling Language(UML)]&lt;br /&gt;
&lt;br /&gt;
==Software for CRC Cards==&lt;br /&gt;
CRC cards have limited scope. If we go about designing a huge project, the scope spans many classes and interactions between them. The tedious task here is to maintain the CRC cards and properly formulate interaction between them. &lt;br /&gt;
We need software for CRC Cards for the following reasons:&lt;br /&gt;
:* &amp;lt;b&amp;gt;Designing Scenario:&amp;lt;/b&amp;gt;  A scenario represents series of steps in which classes and objects communicate. There can be references to other cards or scenarios. &lt;br /&gt;
:* &amp;lt;b&amp;gt;Modeling :&amp;lt;/b&amp;gt;  Software provides an easy way to segregate cards and objects into different diagrams. Thus we can model our problem with different functionality very easily.&lt;br /&gt;
:* &amp;lt;b&amp;gt;Simulation :&amp;lt;/b&amp;gt; Software can provide simulation of the design. This might include single-stepping a scenario forwards/backwards or jumping to a specific location in the scenario stack of a multiple scenario simulation&lt;br /&gt;
:* &amp;lt;b&amp;gt;Synchronization and Dependencies:&amp;lt;/b&amp;gt; Software can maintain relationships between cards, scenarios as design changes take place. If a card references other cards or classes, those cards are generated automatically. Also any name changes and cross references between objects are instantly updated. &lt;br /&gt;
:* &amp;lt;b&amp;gt;Revision history and Version Control :&amp;lt;/b&amp;gt; Software for CRC cards supports changes to CRC cards. It is easy to model and keep track of all changes to a CRC card. This is extremely helpful in tracking the design changes in CRC cards.&lt;br /&gt;
&lt;br /&gt;
==Designing Software==&lt;br /&gt;
The steps to design software for CRC cards are:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Create CRC Cards&amp;lt;/b&amp;gt; : A CRC model is usually created by an individual or small group of designers during the early phase of an object-oriented development project.The figure shows the design of hierarchy of classes. These set of class used for drawing objects are shown. We can see TShape class has a superclass called TObject and two subclasses, TBox and TCircle. Lets assume we create new class TWindow derived from the superclass TObject.  [[Image:Design.png|thumb|Description]]&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Assign Responsibilities&amp;lt;/b&amp;gt; : Once a set of classes are defined, behaviors can be assigned that will provide the functions of the application. For example, the TShape card has responsibilities ''Initialize'' to create it and ''Draw'' to illustrate it on the diagram.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Add Attributes&amp;lt;/b&amp;gt; : Attributes of classes may also be identified in a CRC Card.The TShape class has attributes fPosition, fType and fSelected.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Define and simulate Scenario&amp;lt;/b&amp;gt; : A scenario describes a sequence of steps in the design using the responsibilities of a group of collaborating classes. Collaboration between classes refers to a client object that uses a responsibility performed by a server object. Often a class must call upon several collaborating classes to implement one of its responsibilities.A scenario describes what happens in the system from a high-level, user's point of view.&lt;br /&gt;
[[Image:Scenario.png|thumb|Description]]&lt;br /&gt;
&lt;br /&gt;
Consider situation to the right. We have defined two CRC cards with their responsibility. A scenario defines several steps. Each step in a scenario has a Client, Server and Responsibility field. For each step, a client class uses a responsibility of a server class&lt;br /&gt;
&lt;br /&gt;
The Open Document scenario in the picture references the Initialize Document sub-scenario by specifying its server class ''Document'' in the server field and its scenario name in the Responsibility field. The first step in the Initialize Document sub-scenario uses ''Document'' as the server class name. By single-stepping forwards, backwards or through each sub-scenario, bugs in the design can be identified and corrected early.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Partition the Design&amp;lt;/b&amp;gt; : As the number of CRC cards in the design grow, they can be grouped by function. By using Software for CRC cards,we can draw separate diagrams to partition the model into different subject areas. &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Inheritance Graph&amp;lt;/b&amp;gt; : An automated tool can generate an inheritance graph from information on CRC cards. This diagram can concisely illustrate the big picture of a large project that might contain hundreds of classes and dozens of diagrams.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Verify Your Work &amp;lt;/b&amp;gt; : Creating and simulating scenarios will help verify that a design is correct and complete. A CRC software can perform other error checks to locate design problems. For example, responsibilities that are not used in any scenarios may indicate that the design is incomplete or perhaps the responsibility isn't needed. Likewise, a card that is not used by any collaboration may not be needed.&lt;br /&gt;
&lt;br /&gt;
==Software Development Process for Object Oriented Development==&lt;br /&gt;
&lt;br /&gt;
Software Development Life Cycles are different for a standard development process and for Object Oriented development. This difference needs to be understood in order to know how to meet the benchmarks set for the project. There are multiple processes that are used in software development, the most common ones in use being Waterfall model and Spiral model. The Waterfall model is progression based and the Spiral model is iterative.&lt;br /&gt;
&lt;br /&gt;
We need to understand that the uniqueness of Object Oriented SDLCs comes from the fact that it is more user centric as compared to standard SDLCs that are more system centric. We will now see which models work for Object Oriented SDLCs (OO SDLCs) and which don’t. CRC cards play a very important role in an Object Oriented SDLC. Thus, figuring out which models work well for OO SDLCs will result in understanding which models use CRC cards and why.&lt;br /&gt;
 &lt;br /&gt;
====The Waterfall Model====&lt;br /&gt;
&lt;br /&gt;
The Waterfall model is implemented in multiple phases with each phase having a clear demarcation in terms of its functionality and deliverable. It uses clear stepping stones to come up with deliverables for each deadline. In this case, there are multiple ways to measure progress and methods by which to audit internally and apply checkpoints.&lt;br /&gt;
&lt;br /&gt;
The downside of the Waterfall model lies in the fact that it is a very rigid model that does not offer much in terms of leeway when it comes to deliverables and what each phase in the cycle has to offer. The process is also overly mechanical and over time, just ends up being boring.&lt;br /&gt;
&lt;br /&gt;
Owing to the emphasis on checkpoints and deliverables with strict deadlines, in most cases the analysis and design phases are usually cut short and thus, the project may veer very far from reality. The users are involved only in the requirement gathering phase. This might result in mistranslation of the requirements of the user into what may be an amazing final product but something that the user did not even ask for.&lt;br /&gt;
 &lt;br /&gt;
====The Spiral Model====&lt;br /&gt;
This model iteratively goes through the phases of analysis, design, prototyping and testing after the initial requirements gathering phase. With each iteration, the product is improved based on the feedback from testing in the previous iteration. If required, the outcome of each phase is analyzed, revised and the next prototype is developed after the design is revised, if pertinent. The products from the first phase are not abandoned, they are revised. Evidently, this model is non-linear in nature.&lt;br /&gt;
&lt;br /&gt;
After the first pass through the checkpoint, we can conclude that the work so far is adequate, but not final. The model places emphasis on the iterative process and on the development of standard prototypes at the end of each iteration. At the end of every cycle, we notice the shortcomings from the previous cycle and might end up having to redo all the work in the previous cycle. This proves to be a complete waste of time and effort. All the effort now goes into developing the end point for an older cycle, which makes the model ineffective for the current cycle.&lt;br /&gt;
&lt;br /&gt;
One of the major drawbacks of such a non linear model is that the cost effectiveness and risk analysis cannot be analyzed thoroughly.&lt;br /&gt;
 &lt;br /&gt;
====Why CRC cards are not useful in Waterfall and Spiral Models====&lt;br /&gt;
&lt;br /&gt;
The strength of OO model depends on the idea that, here, design and deployment come together. In the case of a spiral model, this works to make the spiral tighter. Since the waterfall model places over importance on deliverables and user involvement is minimal, which is one of the key focuses of OO SLDCs using CRC cards, the model is considered ineffective. The Spiral model involves multiple revisions of the same idea. When a set of cards have been developed, it would make sense to refine the idea presented in the card but not to redefine them over and over, which may be the case. This does not serve the purpose of actually convening a CRC discussion among the team to draw up cards corresponding to the user requirement. Moreover, in the case of the Spiral model, we would need to convene multiple such meetings at each iteration, which would drastically bring down the overall productivity of the team.&lt;br /&gt;
&lt;br /&gt;
==CRC Cards in Software Development Process==&lt;br /&gt;
&lt;br /&gt;
===Agile Methodology and CRC Cards===&lt;br /&gt;
&lt;br /&gt;
Agile development is a model that has resurfaced and is gaining fame for its incremental cum iterative process. The iteration is carried over the processes of discovery, analysis, design and coding. In each iteration, the old model is worked on in each of the overlapping mini-cycles. The overlap of the cycles makes the process apparently iterative in nature. The model is considered incremental since every step acts as a value-add and this is emphasized by the capacity of classes for reuse. The idea that each phase is repeated ensures that the project is constantly working on a higher level of understanding. Moreover, the OOPS concept of reuse can be used to our advantage such that when we are continuously using OO development models in all our projects, the next implementation can be started  far ahead in the SDLC.&lt;br /&gt;
&lt;br /&gt;
The model focuses on analysis and design phase predominantly. Within each of these are mini phases of analysis-&amp;gt;prototype-&amp;gt;revision-&amp;gt; implementation cycles. The advantage of this model compared to other models described is that, being incremental, this also results in tightening of the spiral at the end of each iteration using concepts such as reusability and polymorphism. Thus, the progression from one point to another in the cycle is seamless from start to deployment.&lt;br /&gt;
&lt;br /&gt;
CRC cards can be very effectively and efficiently used in the Agile model of OO SDLC owing to the fact that it is incremental as well as iterative and not just a repetitive process. Thus, we would not have to redefine the cards from the scratch at any point. Being incremental, we would refine our current model and proceed to refine the entire system as a whole at the end of all iterations. We would essentially be adding value to the cards written out in the previous cycle and if perfected, would never have to discard cards from any of the precious cycles.&lt;br /&gt;
            &lt;br /&gt;
Agile also practices active customer involvement. In every phase, the user is involved. This is one of the key characteristics of the CRC card design method. This not only ensures that the final product is as per the customer's requirements, but also that the customer is thoroughly satisfied, since they are aware of the changes and increments at each level. Another key aspect of Agile methodology is that it is feature driven. A CRC card holds details as to the feature of each class and how it collaborates with the rest of the system. Since this information is readily available to the developer and is highly fine-tuned by the end of the SDLC process, the cards can guarantee focus on 80/20 principle (i.e. pay more attention to 20% of the features which will used 80% of the times). &lt;br /&gt;
&lt;br /&gt;
The power of CRC cards for OOP development is in the group session that employs them.  The use of CRC cards is an excellent way for people to begin to grasp the underlying idea of object oriented approach. CRC cards are used in a few steps of the software development process such as Analysis and Design.&lt;br /&gt;
&lt;br /&gt;
===CRC Cards for Analysis===&lt;br /&gt;
&lt;br /&gt;
CRC cards and CRC card sessions are good at organizing and spreading domain knowledge in the analysis phase.  When building an object–oriented application, the focus of the CRC card sessions is on analyzing and describing the problem.  In this phase, the group identifies the objects that are relevant to the application.  Before going to the CRC card session, the team must be aware of the domain classes and frameworks that exist to help them model the problem. During the session, they can decide if the existing ones can be used for the new application.&lt;br /&gt;
&lt;br /&gt;
'''Advantages of using CRC cards in Analysis phase:'''&lt;br /&gt;
&lt;br /&gt;
* People from all phases of the project are involved in the card sessions for problem modeling. The names of the classes and responsibilities are created, argued and agreed upon by the team members at the start itself in order to avoid conflicts later. This gives rise to common project and product vocabulary across different roles.&lt;br /&gt;
&lt;br /&gt;
* Domain knowledge already known is shared in the sessions. Also, missing domain knowledge is identified.&lt;br /&gt;
 &lt;br /&gt;
* Role plays are conducted during these sessions that help spread knowledge about OO concepts.&lt;br /&gt;
&lt;br /&gt;
* These sessions can be used to create a live prototype of what the application is supposed to do. This can be shown to clients as well so that the team receives feedback on their understanding of the requirements.&lt;br /&gt;
 &lt;br /&gt;
* A CRC card session will help the team walk through the requirements and identify any ambiguities.&lt;br /&gt;
&lt;br /&gt;
At the end of the analysis phase, the CRC elements that will be available are:&lt;br /&gt;
&lt;br /&gt;
* '''Classes:''' The classes identified in this phase directly reflect the concepts of the application that is being analyzed. It may not be modeled in terms of software system but it is useful in describing how the application works. However, at this stage the distinction between objects and classes may not be clear.&lt;br /&gt;
&lt;br /&gt;
* '''Responsibilities:'''  The responsibilities that are assigned to the classes in this phase are of relatively higher level.&lt;br /&gt;
&lt;br /&gt;
===CRC Cards for Design===&lt;br /&gt;
 &lt;br /&gt;
During the CRC cards design sessions, other relevant classes are added, if any. &amp;quot;While an analysis must reflect the real world of the user, the design must reflect the real world of the implementers.&amp;quot;[5] A CRC card tool may be helpful for saving, illustrating and documenting a design.&lt;br /&gt;
&lt;br /&gt;
'''Advantages of using CRC cards in Design phase:'''&lt;br /&gt;
&lt;br /&gt;
* These sessions help the team members concentrate on taking the design decisions for the application. These design decisions also include performance, efficiency and other constraints.&lt;br /&gt;
&lt;br /&gt;
* By walking through the scenarios that were seen during the analysis phase, the implementers can give the testers an overview of how the application should work.&lt;br /&gt;
&lt;br /&gt;
* Using CRC cards forces decision to be made up front in front of the team, thus any conflicts can be resolved right there.&lt;br /&gt;
&lt;br /&gt;
* Design constraints such as target environment, language, UI, performance etc., can be discussed during these sessions to check if the design can be implemented.&lt;br /&gt;
&lt;br /&gt;
==Summary==&lt;br /&gt;
Software for CRC cards are immensely helpful in designing and modeling software development using CRC cards.As the size of object-oriented system grow, it becomes increasingly difficult to model the problem with index based CRC cards. Thus an automated tool is required to maintain design and clear functionality.&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Unified_Modeling_Language Unified Modeling Language(UML)]&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Agile_Modeling Agile Modelling]&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Extreme_Programming Extreme Programming]&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
[1] [http://c2.com/doc/oopsla89/paper.html  A Laboratory For Teaching Object-Oriented Thinking]&lt;br /&gt;
&lt;br /&gt;
[2] [http://www.extremeprogramming.org/rules/crccards.html CRC Cards]&lt;br /&gt;
&lt;br /&gt;
[3] [http://www.extremeprogramming.org/example/crcsim.html A Simulator for Coffee Maker]&lt;br /&gt;
&lt;br /&gt;
[4] [http://www.math-cs.gordon.edu/courses/cps211/ATMExample/CRCCards.html CRC Card for ATM]&lt;br /&gt;
&lt;br /&gt;
[5] &amp;quot;Using CRC Cards: An Informal Approach to Object-Oriented Development&amp;quot; by Nancy M.Wilkinson&lt;br /&gt;
&lt;br /&gt;
==External Links==&lt;br /&gt;
* [http://c2.com/doc/oopsla89/paper.html A Laboratory For Teaching Object-Oriented Thinking] by Ward Cunningham and Kent Beck&lt;br /&gt;
* [http://www.agilemodeling.com/artifacts/crcModel.htm Modelling CRC Cards]&lt;br /&gt;
* [http://www.excelsoftware.com/quickcrcwin.html Quick CRC]&lt;br /&gt;
* [http://www.indicthreads.com/1439/quick-introduction-to-agile-software-development]&lt;/div&gt;</summary>
		<author><name>Pgjalisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch1_1w11_ap&amp;diff=65133</id>
		<title>CSC/ECE 517 Fall 2012/ch1 1w11 ap</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch1_1w11_ap&amp;diff=65133"/>
		<updated>2012-09-15T03:25:04Z</updated>

		<summary type="html">&lt;p&gt;Pgjalisa: /* External Links */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&amp;lt;b&amp;gt; CRC Cards, &amp;lt;/b&amp;gt; also known as [http://en.wikipedia.org/wiki/Class-responsibility-collaboration_card &amp;lt;b&amp;gt; Class-Responsibility-Collaboration &amp;lt;sup&amp;gt;&amp;lt;/sup&amp;gt;&amp;lt;/b&amp;gt;] cards are a brainstorming tool to enable collaboration across different teams or individuals in contribution to design, usually used in Object Oriented Software development. This was  proposed by &amp;lt;b&amp;gt;Ward Cunningham&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;Kent Beck&amp;lt;/b&amp;gt;&amp;lt;sup&amp;gt;[http://c2.com/doc/oopsla89/paper.html]&amp;lt;/sup&amp;gt;. The CRC card can be viewed as an index card, with the following details:&lt;br /&gt;
[[Image:crc-card.gif|frame|right|CRC Card Structure]]&lt;br /&gt;
&lt;br /&gt;
:* The Top of the card usually bears the name of the class.&lt;br /&gt;
:* The Left side of the card has the responsibilities of the class.&lt;br /&gt;
:* The Right side of the card has the collaborating classes corresponding to each of the responsibilities listed in the left side.&lt;br /&gt;
&lt;br /&gt;
Thus in general, a CRC session can be viewed as the interaction between a set of collaborating classes for a particular [http://en.wikipedia.org/wiki/Use_case Use case]. &amp;lt;br&amp;gt; &amp;lt;br&amp;gt; According to &amp;lt;sup&amp;gt;[http://www.extremeprogramming.org/rules/crccards.html]&amp;lt;/sup&amp;gt;&amp;lt;i&amp;gt;A CRC session proceeds with someone simulating the system by talking about which objects send messages to other objects. By stepping through the process' weaknesses and problems are easily uncovered. Design alternatives can be explored quickly by simulating the design being proposed.&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===A CRC Example===&lt;br /&gt;
To better understand how the CRC cards work together, let us consider a simple student enrollment problem,where we are required to model the students enrolled in different courses. We can easily define the &amp;lt;b&amp;gt;Student CRC Card&amp;lt;/b&amp;gt; as having attributes such as student name, student id and responsibilities that enable a student to enroll in a course or drop the course. In this particular instance, the collaborating class would be the &amp;lt;b&amp;gt;Course&amp;lt;/b&amp;gt; class. The &amp;lt;b&amp;gt;Course CRC Card&amp;lt;/b&amp;gt; can in turn be visualized as having its own responsibilities, such as having attributes like Course id, course name and the collaborating class would be the &amp;lt;b&amp;gt;Instructor &lt;br /&gt;
class&amp;lt;/b&amp;gt;. The CRC cards for the Student class and the Course Class are shown below.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:Stud_enr_Crc.jpg|frame|center|Student and Course CRC Card]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
There are also several practical designs that use the CRC card model to design Object oriented software design. The  [http://www.extremeprogramming.org/example/crcsim.html Simulator for Coffee Maker] explores an [http://en.wikipedia.org/wiki/Extreme_Programming Extreme Programming] approach combined with CRC card technique to come up with a design for the coffee maker.&lt;br /&gt;
&lt;br /&gt;
Another interesting approach using CRC cards is the design for the [http://www.math-cs.gordon.edu/courses/cps211/ATMExample/CRCCards.html ATM Machine]&lt;br /&gt;
&lt;br /&gt;
===Advantages of CRC cards===&lt;br /&gt;
There are a few advantages of CRC cards that make it a preferable model in many designs. Some of the advantages of the CRC card design method are&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
:* CRC cards can allow designers to easily make audience understand a very complex system. In essence it allows for building more complex designs by slowly building the interactions between the collaborating classes, one by one.&lt;br /&gt;
:* CRC cards are a simple technique and it can be easily used by anyone with very little training and does not require any expensive computing resources(a board or a paper and a pen would suffice).&lt;br /&gt;
:* CRC is fundamentally a brainstorming tool, enabling different people in a team to come up with the design by collaborating, enabling everyone in the team to contribute&lt;br /&gt;
:* CRC can be used with other formal object oriented design methodologies such as [http://en.wikipedia.org/wiki/Extreme_Programming Extreme Programming] (an [http://en.wikipedia.org/wiki/Agile_Modeling Agile] development Technique) and can be used along with modeling languages such as [http://en.wikipedia.org/wiki/Unified_Modeling_Language Unified Modeling Language(UML)]&lt;br /&gt;
&lt;br /&gt;
==Software for CRC Cards==&lt;br /&gt;
CRC cards have limited scope. If we go about designing a huge project, the scope spans many classes and interactions between them. The tedious task here is to maintain the CRC cards and properly formulate interaction between them. &lt;br /&gt;
We need software for CRC Cards for the following reasons:&lt;br /&gt;
:* &amp;lt;b&amp;gt;Designing Scenario:&amp;lt;/b&amp;gt;  A scenario represents series of steps in which classes and objects communicate. There can be references to other cards or scenarios. &lt;br /&gt;
:* &amp;lt;b&amp;gt;Modeling :&amp;lt;/b&amp;gt;  Software provides an easy way to segregate cards and objects into different diagrams. Thus we can model our problem with different functionality very easily.&lt;br /&gt;
:* &amp;lt;b&amp;gt;Simulation :&amp;lt;/b&amp;gt; Software can provide simulation of the design. This might include single-stepping a scenario forwards/backwards or jumping to a specific location in the scenario stack of a multiple scenario simulation&lt;br /&gt;
:* &amp;lt;b&amp;gt;Synchronization and Dependencies:&amp;lt;/b&amp;gt; Software can maintain relationships between cards, scenarios as design changes take place. If a card references other cards or classes, those cards are generated automatically. Also any name changes and cross references between objects are instantly updated. &lt;br /&gt;
:* &amp;lt;b&amp;gt;Revision history and Version Control :&amp;lt;/b&amp;gt; Software for CRC cards supports changes to CRC cards. It is easy to model and keep track of all changes to a CRC card. This is extremely helpful in tracking the design changes in CRC cards.&lt;br /&gt;
&lt;br /&gt;
==Designing Software==&lt;br /&gt;
The steps to design software for CRC cards are:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Create CRC Cards&amp;lt;/b&amp;gt; : A CRC model is usually created by an individual or small group of designers during the early phase of an object-oriented development project.The figure shows the design of hierarchy of classes. These set of class used for drawing objects are shown. We can see TShape class has a superclass called TObject and two subclasses, TBox and TCircle. Lets assume we create new class TWindow derived from the superclass TObject.  [[Image:Design.png|thumb|Description]]&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Assign Responsibilities&amp;lt;/b&amp;gt; : Once a set of classes are defined, behaviors can be assigned that will provide the functions of the application. For example, the TShape card has responsibilities ''Initialize'' to create it and ''Draw'' to illustrate it on the diagram.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Add Attributes&amp;lt;/b&amp;gt; : Attributes of classes may also be identified in a CRC Card.The TShape class has attributes fPosition, fType and fSelected.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Define and simulate Scenario&amp;lt;/b&amp;gt; : A scenario describes a sequence of steps in the design using the responsibilities of a group of collaborating classes. Collaboration between classes refers to a client object that uses a responsibility performed by a server object. Often a class must call upon several collaborating classes to implement one of its responsibilities.A scenario describes what happens in the system from a high-level, user's point of view.&lt;br /&gt;
[[Image:Scenario.png|thumb|Description]]&lt;br /&gt;
&lt;br /&gt;
Consider situation to the right. We have defined two CRC cards with their responsibility. A scenario defines several steps. Each step in a scenario has a Client, Server and Responsibility field. For each step, a client class uses a responsibility of a server class&lt;br /&gt;
&lt;br /&gt;
The Open Document scenario in the picture references the Initialize Document sub-scenario by specifying its server class ''Document'' in the server field and its scenario name in the Responsibility field. The first step in the Initialize Document sub-scenario uses ''Document'' as the server class name. By single-stepping forwards, backwards or through each sub-scenario, bugs in the design can be identified and corrected early.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Partition the Design&amp;lt;/b&amp;gt; : As the number of CRC cards in the design grow, they can be grouped by function. By using Software for CRC cards,we can draw separate diagrams to partition the model into different subject areas. &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Inheritance Graph&amp;lt;/b&amp;gt; : An automated tool can generate an inheritance graph from information on CRC cards. This diagram can concisely illustrate the big picture of a large project that might contain hundreds of classes and dozens of diagrams.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Verify Your Work &amp;lt;/b&amp;gt; : Creating and simulating scenarios will help verify that a design is correct and complete. A CRC software can perform other error checks to locate design problems. For example, responsibilities that are not used in any scenarios may indicate that the design is incomplete or perhaps the responsibility isn't needed. Likewise, a card that is not used by any collaboration may not be needed.&lt;br /&gt;
&lt;br /&gt;
==Software Development Process for Object Oriented Development==&lt;br /&gt;
&lt;br /&gt;
Software Development Life Cycles are different for a standard development process and for Object Oriented development. This difference needs to be understood in order to know how to meet the benchmarks set for the project. There are multiple processes that are used in software development, the most common ones in use being Waterfall model and Spiral model. The Waterfall model is progression based and the Spiral model is iterative.&lt;br /&gt;
&lt;br /&gt;
We need to understand that the uniqueness of Object Oriented SDLCs comes from the fact that it is more user centric as compared to standard SDLCs that are more system centric. We will now see which models work for Object Oriented SDLCs (OO SDLCs) and which don’t. CRC cards play a very important role in an Object Oriented SDLC. Thus, figuring out which models work well for OO SDLCs will result in understanding which models use CRC cards and why.&lt;br /&gt;
 &lt;br /&gt;
====The Waterfall Model====&lt;br /&gt;
&lt;br /&gt;
The Waterfall model is implemented in multiple phases with each phase having a clear demarcation in terms of its functionality and deliverable. It uses clear stepping stones to come up with deliverables for each deadline. In this case, there are multiple ways to measure progress and methods by which to audit internally and apply checkpoints.&lt;br /&gt;
&lt;br /&gt;
The downside of the Waterfall model lies in the fact that it is a very rigid model that does not offer much in terms of leeway when it comes to deliverables and what each phase in the cycle has to offer. The process is also overly mechanical and over time, just ends up being boring.&lt;br /&gt;
&lt;br /&gt;
Owing to the emphasis on checkpoints and deliverables with strict deadlines, in most cases the analysis and design phases are usually cut short and thus, the project may veer very far from reality. The users are involved only in the requirement gathering phase. This might result in mistranslation of the requirements of the user into what may be an amazing final product but something that the user did not even ask for.&lt;br /&gt;
 &lt;br /&gt;
====The Spiral Model====&lt;br /&gt;
This model iteratively goes through the phases of analysis, design, prototyping and testing after the initial requirements gathering phase. With each iteration, the product is improved based on the feedback from testing in the previous iteration. If required, the outcome of each phase is analyzed, revised and the next prototype is developed after the design is revised, if pertinent. The products from the first phase are not abandoned, they are revised. Evidently, this model is non-linear in nature.&lt;br /&gt;
&lt;br /&gt;
After the first pass through the checkpoint, we can conclude that the work so far is adequate, but not final. The model places emphasis on the iterative process and on the development of standard prototypes at the end of each iteration. At the end of every cycle, we notice the shortcomings from the previous cycle and might end up having to redo all the work in the previous cycle. This proves to be a complete waste of time and effort. All the effort now goes into developing the end point for an older cycle, which makes the model ineffective for the current cycle.&lt;br /&gt;
&lt;br /&gt;
One of the major drawbacks of such a non linear model is that the cost effectiveness and risk analysis cannot be analyzed thoroughly.&lt;br /&gt;
 &lt;br /&gt;
====Why CRC cards are not useful in Waterfall and Spiral Models====&lt;br /&gt;
&lt;br /&gt;
The strength of OO model depends on the idea that, here, design and deployment come together. In the case of a spiral model, this works to make the spiral tighter. Since the waterfall model places over importance on deliverables and user involvement is minimal, which is one of the key focuses of OO SLDCs using CRC cards, the model is considered ineffective. The Spiral model involves multiple revisions of the same idea. When a set of cards have been developed, it would make sense to refine the idea presented in the card but not to redefine them over and over, which may be the case. This does not serve the purpose of actually convening a CRC discussion among the team to draw up cards corresponding to the user requirement. Moreover, in the case of the Spiral model, we would need to convene multiple such meetings at each iteration, which would drastically bring down the overall productivity of the team.&lt;br /&gt;
&lt;br /&gt;
==CRC Cards in Software Development Process==&lt;br /&gt;
&lt;br /&gt;
===Agile Methodology and CRC Cards===&lt;br /&gt;
&lt;br /&gt;
Agile development is a model that has resurfaced and is gaining fame for its incremental cum iterative process. The iteration is carried over the processes of discovery, analysis, design and coding. In each iteration, the old model is worked on in each of the overlapping mini-cycles. The overlap of the cycles makes the process apparently iterative in nature. The model is considered incremental since every step acts as a value-add and this is emphasized by the capacity of classes for reuse. The idea that each phase is repeated ensures that the project is constantly working on a higher level of understanding. Moreover, the OOPS concept of reuse can be used to our advantage such that when we are continuously using OO development models in all our projects, the next implementation can be started  far ahead in the SDLC.&lt;br /&gt;
&lt;br /&gt;
The model focuses on analysis and design phase predominantly. Within each of these are mini phases of analysis-&amp;gt;prototype-&amp;gt;revision-&amp;gt; implementation cycles. The advantage of this model compared to other models described is that, being incremental, this also results in tightening of the spiral at the end of each iteration using concepts such as reusability and polymorphism. Thus, the progression from one point to another in the cycle is seamless from start to deployment.&lt;br /&gt;
&lt;br /&gt;
CRC cards can be very effectively and efficiently used in the Agile model of OO SDLC owing to the fact that it is incremental as well as iterative and not just a repetitive process. Thus, we would not have to redefine the cards from the scratch at any point. Being incremental, we would refine our current model and proceed to refine the entire system as a whole at the end of all iterations. We would essentially be adding value to the cards written out in the previous cycle and if perfected, would never have to discard cards from any of the precious cycles.&lt;br /&gt;
            &lt;br /&gt;
Agile also practices active customer involvement. In every phase, the user is involved. This is one of the key characteristics of the CRC card design method. This not only ensures that the final product is as per the customer's requirements, but also that the customer is thoroughly satisfied, since they are aware of the changes and increments at each level. Another key aspect of Agile methodology is that it is feature driven. A CRC card holds details as to the feature of each class and how it collaborates with the rest of the system. Since this information is readily available to the developer and is highly fine-tuned by the end of the SDLC process, the cards can guarantee focus on 80/20 principle (i.e. pay more attention to 20% of the features which will used 80% of the times). &lt;br /&gt;
&lt;br /&gt;
The power of CRC cards for OOP development is in the group session that employs them.  The use of CRC cards is an excellent way for people to begin to grasp the underlying idea of object oriented approach. CRC cards are used in a few steps of the software development process such as Analysis and Design.&lt;br /&gt;
&lt;br /&gt;
===CRC Cards for Analysis===&lt;br /&gt;
&lt;br /&gt;
CRC cards and CRC card sessions are good at organizing and spreading domain knowledge in the analysis phase.  When building an object–oriented application, the focus of the CRC card sessions is on analyzing and describing the problem.  In this phase, the group identifies the objects that are relevant to the application.  Before going to the CRC card session, the team must be aware of the domain classes and frameworks that exist to help them model the problem. During the session, they can decide if the existing ones can be used for the new application.&lt;br /&gt;
&lt;br /&gt;
'''Advantages of using CRC cards in Analysis phase:'''&lt;br /&gt;
&lt;br /&gt;
* People from all phases of the project are involved in the card sessions for problem modeling. The names of the classes and responsibilities are created, argued and agreed upon by the team members at the start itself in order to avoid conflicts later. This gives rise to common project and product vocabulary across different roles.&lt;br /&gt;
&lt;br /&gt;
* Domain knowledge already known is shared in the sessions. Also, missing domain knowledge is identified.&lt;br /&gt;
 &lt;br /&gt;
* Role plays are conducted during these sessions that help spread knowledge about OO concepts.&lt;br /&gt;
&lt;br /&gt;
* These sessions can be used to create a live prototype of what the application is supposed to do. This can be shown to clients as well so that the team receives feedback on their understanding of the requirements.&lt;br /&gt;
 &lt;br /&gt;
* A CRC card session will help the team walk through the requirements and identify any ambiguities.&lt;br /&gt;
&lt;br /&gt;
At the end of the analysis phase, the CRC elements that will be available are:&lt;br /&gt;
&lt;br /&gt;
* '''Classes:''' The classes identified in this phase directly reflect the concepts of the application that is being analyzed. It may not be modeled in terms of software system but it is useful in describing how the application works. However, at this stage the distinction between objects and classes may not be clear.&lt;br /&gt;
&lt;br /&gt;
* '''Responsibilities:'''  The responsibilities that are assigned to the classes in this phase are of relatively higher level.&lt;br /&gt;
&lt;br /&gt;
===CRC Cards for Design===&lt;br /&gt;
 &lt;br /&gt;
During the CRC cards design sessions, other relevant classes are added, if any. &amp;quot;While an analysis must reflect the real world of the user, the design must reflect the real world of the implementers.&amp;quot;[5] A CRC card tool may be helpful for saving, illustrating and documenting a design.&lt;br /&gt;
&lt;br /&gt;
'''Advantages of using CRC cards in Design phase:'''&lt;br /&gt;
&lt;br /&gt;
* These sessions help the team members concentrate on taking the design decisions for the application. These design decisions also include performance, efficiency and other constraints.&lt;br /&gt;
&lt;br /&gt;
* By walking through the scenarios that were seen during the analysis phase, the implementers can give the testers an overview of how the application should work.&lt;br /&gt;
&lt;br /&gt;
* Using CRC cards forces decision to be made up front in front of the team, thus any conflicts can be resolved right there.&lt;br /&gt;
&lt;br /&gt;
* Design constraints such as target environment, language, UI, performance etc., can be discussed during these sessions to check if the design can be implemented.&lt;br /&gt;
&lt;br /&gt;
==Summary==&lt;br /&gt;
Software for CRC cards are immensely helpful in designing and modeling software development using CRC cards.As the size of object-oriented system grow, it becomes increasingly difficult to model the problem with index based CRC cards. Thus an automated tool is required to maintain design and clear functionality.&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Unified_Modeling_Language Unified Modeling Language(UML)]&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Agile_Modeling Agile Modelling]&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Extreme_Programming Extreme Programming]&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
[1] [http://c2.com/doc/oopsla89/paper.html  A Laboratory For Teaching Object-Oriented Thinking]&lt;br /&gt;
&lt;br /&gt;
[2] [http://www.extremeprogramming.org/rules/crccards.html CRC Cards]&lt;br /&gt;
&lt;br /&gt;
[3] [http://www.extremeprogramming.org/example/crcsim.html A Simulator for Coffee Maker]&lt;br /&gt;
&lt;br /&gt;
[4] [http://www.math-cs.gordon.edu/courses/cps211/ATMExample/CRCCards.html CRC Card for ATM]&lt;br /&gt;
&lt;br /&gt;
[5] &amp;quot;Using CRC Cards: An Informal Approach to Object-Oriented Development&amp;quot; by Nancy M.Wilkinson&lt;br /&gt;
&lt;br /&gt;
==External Links==&lt;br /&gt;
* [http://c2.com/doc/oopsla89/paper.html A Laboratory For Teaching Object-Oriented Thinking] by Ward Cunningham and Kent Beck&lt;br /&gt;
* [http://www.agilemodeling.com/artifacts/crcModel.htm Modelling CRC Cards]&lt;br /&gt;
* [http://www.excelsoftware.com/quickcrcwin.html Quick CRC]&lt;br /&gt;
* [http://www.indicthreads.com/1439/quick-introduction-to-agile-software-development/]&lt;/div&gt;</summary>
		<author><name>Pgjalisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch1_1w11_ap&amp;diff=65131</id>
		<title>CSC/ECE 517 Fall 2012/ch1 1w11 ap</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch1_1w11_ap&amp;diff=65131"/>
		<updated>2012-09-15T03:18:44Z</updated>

		<summary type="html">&lt;p&gt;Pgjalisa: /* Agile Methodology and CRC Cards */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&amp;lt;b&amp;gt; CRC Cards, &amp;lt;/b&amp;gt; also known as [http://en.wikipedia.org/wiki/Class-responsibility-collaboration_card &amp;lt;b&amp;gt; Class-Responsibility-Collaboration &amp;lt;sup&amp;gt;&amp;lt;/sup&amp;gt;&amp;lt;/b&amp;gt;] cards are a brainstorming tool to enable collaboration across different teams or individuals in contribution to design, usually used in Object Oriented Software development. This was  proposed by &amp;lt;b&amp;gt;Ward Cunningham&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;Kent Beck&amp;lt;/b&amp;gt;&amp;lt;sup&amp;gt;[http://c2.com/doc/oopsla89/paper.html]&amp;lt;/sup&amp;gt;. The CRC card can be viewed as an index card, with the following details:&lt;br /&gt;
[[Image:crc-card.gif|frame|right|CRC Card Structure]]&lt;br /&gt;
&lt;br /&gt;
:* The Top of the card usually bears the name of the class.&lt;br /&gt;
:* The Left side of the card has the responsibilities of the class.&lt;br /&gt;
:* The Right side of the card has the collaborating classes corresponding to each of the responsibilities listed in the left side.&lt;br /&gt;
&lt;br /&gt;
Thus in general, a CRC session can be viewed as the interaction between a set of collaborating classes for a particular [http://en.wikipedia.org/wiki/Use_case Use case]. &amp;lt;br&amp;gt; &amp;lt;br&amp;gt; According to &amp;lt;sup&amp;gt;[http://www.extremeprogramming.org/rules/crccards.html]&amp;lt;/sup&amp;gt;&amp;lt;i&amp;gt;A CRC session proceeds with someone simulating the system by talking about which objects send messages to other objects. By stepping through the process' weaknesses and problems are easily uncovered. Design alternatives can be explored quickly by simulating the design being proposed.&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===A CRC Example===&lt;br /&gt;
To better understand how the CRC cards work together, let us consider a simple student enrollment problem,where we are required to model the students enrolled in different courses. We can easily define the &amp;lt;b&amp;gt;Student CRC Card&amp;lt;/b&amp;gt; as having attributes such as student name, student id and responsibilities that enable a student to enroll in a course or drop the course. In this particular instance, the collaborating class would be the &amp;lt;b&amp;gt;Course&amp;lt;/b&amp;gt; class. The &amp;lt;b&amp;gt;Course CRC Card&amp;lt;/b&amp;gt; can in turn be visualized as having its own responsibilities, such as having attributes like Course id, course name and the collaborating class would be the &amp;lt;b&amp;gt;Instructor &lt;br /&gt;
class&amp;lt;/b&amp;gt;. The CRC cards for the Student class and the Course Class are shown below.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:Stud_enr_Crc.jpg|frame|center|Student and Course CRC Card]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
There are also several practical designs that use the CRC card model to design Object oriented software design. The  [http://www.extremeprogramming.org/example/crcsim.html Simulator for Coffee Maker] explores an [http://en.wikipedia.org/wiki/Extreme_Programming Extreme Programming] approach combined with CRC card technique to come up with a design for the coffee maker.&lt;br /&gt;
&lt;br /&gt;
Another interesting approach using CRC cards is the design for the [http://www.math-cs.gordon.edu/courses/cps211/ATMExample/CRCCards.html ATM Machine]&lt;br /&gt;
&lt;br /&gt;
===Advantages of CRC cards===&lt;br /&gt;
There are a few advantages of CRC cards that make it a preferable model in many designs. Some of the advantages of the CRC card design method are&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
:* CRC cards can allow designers to easily make audience understand a very complex system. In essence it allows for building more complex designs by slowly building the interactions between the collaborating classes, one by one.&lt;br /&gt;
:* CRC cards are a simple technique and it can be easily used by anyone with very little training and does not require any expensive computing resources(a board or a paper and a pen would suffice).&lt;br /&gt;
:* CRC is fundamentally a brainstorming tool, enabling different people in a team to come up with the design by collaborating, enabling everyone in the team to contribute&lt;br /&gt;
:* CRC can be used with other formal object oriented design methodologies such as [http://en.wikipedia.org/wiki/Extreme_Programming Extreme Programming] (an [http://en.wikipedia.org/wiki/Agile_Modeling Agile] development Technique) and can be used along with modeling languages such as [http://en.wikipedia.org/wiki/Unified_Modeling_Language Unified Modeling Language(UML)]&lt;br /&gt;
&lt;br /&gt;
==Software for CRC Cards==&lt;br /&gt;
CRC cards have limited scope. If we go about designing a huge project, the scope spans many classes and interactions between them. The tedious task here is to maintain the CRC cards and properly formulate interaction between them. &lt;br /&gt;
We need software for CRC Cards for the following reasons:&lt;br /&gt;
:* &amp;lt;b&amp;gt;Designing Scenario:&amp;lt;/b&amp;gt;  A scenario represents series of steps in which classes and objects communicate. There can be references to other cards or scenarios. &lt;br /&gt;
:* &amp;lt;b&amp;gt;Modeling :&amp;lt;/b&amp;gt;  Software provides an easy way to segregate cards and objects into different diagrams. Thus we can model our problem with different functionality very easily.&lt;br /&gt;
:* &amp;lt;b&amp;gt;Simulation :&amp;lt;/b&amp;gt; Software can provide simulation of the design. This might include single-stepping a scenario forwards/backwards or jumping to a specific location in the scenario stack of a multiple scenario simulation&lt;br /&gt;
:* &amp;lt;b&amp;gt;Synchronization and Dependencies:&amp;lt;/b&amp;gt; Software can maintain relationships between cards, scenarios as design changes take place. If a card references other cards or classes, those cards are generated automatically. Also any name changes and cross references between objects are instantly updated. &lt;br /&gt;
:* &amp;lt;b&amp;gt;Revision history and Version Control :&amp;lt;/b&amp;gt; Software for CRC cards supports changes to CRC cards. It is easy to model and keep track of all changes to a CRC card. This is extremely helpful in tracking the design changes in CRC cards.&lt;br /&gt;
&lt;br /&gt;
==Designing Software==&lt;br /&gt;
The steps to design software for CRC cards are:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Create CRC Cards&amp;lt;/b&amp;gt; : A CRC model is usually created by an individual or small group of designers during the early phase of an object-oriented development project.The figure shows the design of hierarchy of classes. These set of class used for drawing objects are shown. We can see TShape class has a superclass called TObject and two subclasses, TBox and TCircle. Lets assume we create new class TWindow derived from the superclass TObject.  [[Image:Design.png|thumb|Description]]&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Assign Responsibilities&amp;lt;/b&amp;gt; : Once a set of classes are defined, behaviors can be assigned that will provide the functions of the application. For example, the TShape card has responsibilities ''Initialize'' to create it and ''Draw'' to illustrate it on the diagram.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Add Attributes&amp;lt;/b&amp;gt; : Attributes of classes may also be identified in a CRC Card.The TShape class has attributes fPosition, fType and fSelected.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Define and simulate Scenario&amp;lt;/b&amp;gt; : A scenario describes a sequence of steps in the design using the responsibilities of a group of collaborating classes. Collaboration between classes refers to a client object that uses a responsibility performed by a server object. Often a class must call upon several collaborating classes to implement one of its responsibilities.A scenario describes what happens in the system from a high-level, user's point of view.&lt;br /&gt;
[[Image:Scenario.png|thumb|Description]]&lt;br /&gt;
&lt;br /&gt;
Consider situation to the right. We have defined two CRC cards with their responsibility. A scenario defines several steps. Each step in a scenario has a Client, Server and Responsibility field. For each step, a client class uses a responsibility of a server class&lt;br /&gt;
&lt;br /&gt;
The Open Document scenario in the picture references the Initialize Document sub-scenario by specifying its server class ''Document'' in the server field and its scenario name in the Responsibility field. The first step in the Initialize Document sub-scenario uses ''Document'' as the server class name. By single-stepping forwards, backwards or through each sub-scenario, bugs in the design can be identified and corrected early.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Partition the Design&amp;lt;/b&amp;gt; : As the number of CRC cards in the design grow, they can be grouped by function. By using Software for CRC cards,we can draw separate diagrams to partition the model into different subject areas. &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Inheritance Graph&amp;lt;/b&amp;gt; : An automated tool can generate an inheritance graph from information on CRC cards. This diagram can concisely illustrate the big picture of a large project that might contain hundreds of classes and dozens of diagrams.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Verify Your Work &amp;lt;/b&amp;gt; : Creating and simulating scenarios will help verify that a design is correct and complete. A CRC software can perform other error checks to locate design problems. For example, responsibilities that are not used in any scenarios may indicate that the design is incomplete or perhaps the responsibility isn't needed. Likewise, a card that is not used by any collaboration may not be needed.&lt;br /&gt;
&lt;br /&gt;
==Software Development Process for Object Oriented Development==&lt;br /&gt;
&lt;br /&gt;
Software Development Life Cycles are different for a standard development process and for Object Oriented development. This difference needs to be understood in order to know how to meet the benchmarks set for the project. There are multiple processes that are used in software development, the most common ones in use being Waterfall model and Spiral model. The Waterfall model is progression based and the Spiral model is iterative.&lt;br /&gt;
&lt;br /&gt;
We need to understand that the uniqueness of Object Oriented SDLCs comes from the fact that it is more user centric as compared to standard SDLCs that are more system centric. We will now see which models work for Object Oriented SDLCs (OO SDLCs) and which don’t. CRC cards play a very important role in an Object Oriented SDLC. Thus, figuring out which models work well for OO SDLCs will result in understanding which models use CRC cards and why.&lt;br /&gt;
 &lt;br /&gt;
====The Waterfall Model====&lt;br /&gt;
&lt;br /&gt;
The Waterfall model is implemented in multiple phases with each phase having a clear demarcation in terms of its functionality and deliverable. It uses clear stepping stones to come up with deliverables for each deadline. In this case, there are multiple ways to measure progress and methods by which to audit internally and apply checkpoints.&lt;br /&gt;
&lt;br /&gt;
The downside of the Waterfall model lies in the fact that it is a very rigid model that does not offer much in terms of leeway when it comes to deliverables and what each phase in the cycle has to offer. The process is also overly mechanical and over time, just ends up being boring.&lt;br /&gt;
&lt;br /&gt;
Owing to the emphasis on checkpoints and deliverables with strict deadlines, in most cases the analysis and design phases are usually cut short and thus, the project may veer very far from reality. The users are involved only in the requirement gathering phase. This might result in mistranslation of the requirements of the user into what may be an amazing final product but something that the user did not even ask for.&lt;br /&gt;
 &lt;br /&gt;
====The Spiral Model====&lt;br /&gt;
This model iteratively goes through the phases of analysis, design, prototyping and testing after the initial requirements gathering phase. With each iteration, the product is improved based on the feedback from testing in the previous iteration. If required, the outcome of each phase is analyzed, revised and the next prototype is developed after the design is revised, if pertinent. The products from the first phase are not abandoned, they are revised. Evidently, this model is non-linear in nature.&lt;br /&gt;
&lt;br /&gt;
After the first pass through the checkpoint, we can conclude that the work so far is adequate, but not final. The model places emphasis on the iterative process and on the development of standard prototypes at the end of each iteration. At the end of every cycle, we notice the shortcomings from the previous cycle and might end up having to redo all the work in the previous cycle. This proves to be a complete waste of time and effort. All the effort now goes into developing the end point for an older cycle, which makes the model ineffective for the current cycle.&lt;br /&gt;
&lt;br /&gt;
One of the major drawbacks of such a non linear model is that the cost effectiveness and risk analysis cannot be analyzed thoroughly.&lt;br /&gt;
 &lt;br /&gt;
====Why CRC cards are not useful in Waterfall and Spiral Models====&lt;br /&gt;
&lt;br /&gt;
The strength of OO model depends on the idea that design and deployment come together. In the case of a spiral model, this works to make the spiral tighter. Since the waterfall model places over importance on deliverables and user involvement is minimal, which is one of the key focuses of OO SLDCs using CRC cards, the model is considered ineffective. The Spiral model involves multiple revisions of the same idea. When a set of cards have been developed, it would make sense to refine the idea presented in the card but not to redefine them over and over, which may be the case. This does not serve the purpose of actually convening a CRC discussion among the team to draw up cards corresponding to the user requirement. Moreover, in the case of the Spiral model, we would need to convene multiple such meetings at each iteration, which would drastically bring down the overall productivity of the team.&lt;br /&gt;
&lt;br /&gt;
==CRC Cards in Software Development Process==&lt;br /&gt;
&lt;br /&gt;
===Agile Methodology and CRC Cards===&lt;br /&gt;
&lt;br /&gt;
Agile development is a model that has resurfaced and is gaining fame for its incremental cum iterative process. The iteration is carried over the processes of discovery, analysis, design and coding. In each iteration, the old model is worked on in each of the overlapping mini-cycles. The overlap of the cycles makes the process apparently iterative in nature. The model is considered incremental since every step acts as a value-add and this is emphasized by the capacity of classes for reuse. The idea that each phase is repeated ensures that the project is constantly working on a higher level of understanding. Moreover, the OOPS concept of reuse can be used to our advantage such that when we are continuously using OO development models in all our projects, the next implementation can be started  far ahead in the SDLC.&lt;br /&gt;
&lt;br /&gt;
The model focuses on analysis and design phase predominantly. Within each of these are mini phases of analysis-&amp;gt;prototype-&amp;gt;revision-&amp;gt; implementation cycles. The advantage of this model compared to other models described is that, being incremental, this also results in tightening of the spiral at the end of each iteration using concepts such as reusability and polymorphism. Thus, the progression from one point to another in the cycle is seamless from start to deployment.&lt;br /&gt;
&lt;br /&gt;
CRC cards can be very effectively and efficiently used in the Agile model of OO SDLC owing to the fact that it is incremental as well as iterative and not just a repetitive process. Thus, we would not have to redefine the cards from the scratch at any point. Being incremental, we would refine our current model and proceed to refine the entire system as a whole at the end of all iterations. We would essentially be adding value to the cards written out in the previous cycle and if perfected, would never have to discard cards from any of the precious cycles.&lt;br /&gt;
            &lt;br /&gt;
Agile also practices active customer involvement. In every phase, the user is involved. This is one of the key characteristics of the CRC card design method. This not only ensures that the final product is as per the customer's requirements, but also that the customer is thoroughly satisfied, since they are aware of the changes and increments at each level. Another key aspect of Agile methodology is that it is feature driven. A CRC card holds details as to the feature of each class and how it collaborates with the rest of the system. Since this information is readily available to the developer and is highly fine-tuned by the end of the SDLC process, the cards can guarantee focus on 80/20 principle (i.e. pay more attention to 20% of the features which will used 80% of the times). &lt;br /&gt;
&lt;br /&gt;
The power of CRC cards for OOP development is in the group session that employs them.  The use of CRC cards is an excellent way for people to begin to grasp the underlying idea of object oriented approach. CRC cards are used in a few steps of the software development process such as Analysis and Design.&lt;br /&gt;
&lt;br /&gt;
===CRC Cards for Analysis===&lt;br /&gt;
&lt;br /&gt;
CRC cards and CRC card sessions are good at organizing and spreading domain knowledge in the analysis phase.  When building an object–oriented application, the focus of the CRC card sessions is on analyzing and describing the problem.  In this phase, the group identifies the objects that are relevant to the application.  Before going to the CRC card session, the team must be aware of the domain classes and frameworks that exist to help them model the problem. During the session, they can decide if the existing ones can be used for the new application.&lt;br /&gt;
&lt;br /&gt;
'''Advantages of using CRC cards in Analysis phase:'''&lt;br /&gt;
&lt;br /&gt;
* People from all phases of the project are involved in the card sessions for problem modeling. The names of the classes and responsibilities are created, argued and agreed upon by the team members at the start itself in order to avoid conflicts later. This gives rise to common project and product vocabulary across different roles.&lt;br /&gt;
&lt;br /&gt;
* Domain knowledge already known is shared in the sessions. Also, missing domain knowledge is identified.&lt;br /&gt;
 &lt;br /&gt;
* Role plays are conducted during these sessions that help spread knowledge about OO concepts.&lt;br /&gt;
&lt;br /&gt;
* These sessions can be used to create a live prototype of what the application is supposed to do. This can be shown to clients as well so that the team receives feedback on their understanding of the requirements.&lt;br /&gt;
 &lt;br /&gt;
* A CRC card session will help the team walk through the requirements and identify any ambiguities.&lt;br /&gt;
&lt;br /&gt;
At the end of the analysis phase, the CRC elements that will be available are:&lt;br /&gt;
&lt;br /&gt;
* '''Classes:''' The classes identified in this phase directly reflect the concepts of the application that is being analyzed. It may not be modeled in terms of software system but it is useful in describing how the application works. However, at this stage the distinction between objects and classes may not be clear.&lt;br /&gt;
&lt;br /&gt;
* '''Responsibilities:'''  The responsibilities that are assigned to the classes in this phase are of relatively higher level.&lt;br /&gt;
&lt;br /&gt;
===CRC Cards for Design===&lt;br /&gt;
 &lt;br /&gt;
During the CRC cards design sessions, other relevant classes are added, if any. &amp;quot;While an analysis must reflect the real world of the user, the design must reflect the real world of the implementers.&amp;quot;[5] A CRC card tool may be helpful for saving, illustrating and documenting a design.&lt;br /&gt;
&lt;br /&gt;
'''Advantages of using CRC cards in Design phase:'''&lt;br /&gt;
&lt;br /&gt;
* These sessions help the team members concentrate on taking the design decisions for the application. These design decisions also include performance, efficiency and other constraints.&lt;br /&gt;
&lt;br /&gt;
* By walking through the scenarios that were seen during the analysis phase, the implementers can give the testers an overview of how the application should work.&lt;br /&gt;
&lt;br /&gt;
* Using CRC cards forces decision to be made up front in front of the team, thus any conflicts can be resolved right there.&lt;br /&gt;
&lt;br /&gt;
* Design constraints such as target environment, language, UI, performance etc., can be discussed during these sessions to check if the design can be implemented.&lt;br /&gt;
&lt;br /&gt;
==Summary==&lt;br /&gt;
Software for CRC cards are immensely helpful in designing and modeling software development using CRC cards.As the size of object-oriented system grow, it becomes increasingly difficult to model the problem with index based CRC cards. Thus an automated tool is required to maintain design and clear functionality.&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Unified_Modeling_Language Unified Modeling Language(UML)]&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Agile_Modeling Agile Modelling]&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Extreme_Programming Extreme Programming]&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
[1] [http://c2.com/doc/oopsla89/paper.html  A Laboratory For Teaching Object-Oriented Thinking]&lt;br /&gt;
&lt;br /&gt;
[2] [http://www.extremeprogramming.org/rules/crccards.html CRC Cards]&lt;br /&gt;
&lt;br /&gt;
[3] [http://www.extremeprogramming.org/example/crcsim.html A Simulator for Coffee Maker]&lt;br /&gt;
&lt;br /&gt;
[4] [http://www.math-cs.gordon.edu/courses/cps211/ATMExample/CRCCards.html CRC Card for ATM]&lt;br /&gt;
&lt;br /&gt;
[5] &amp;quot;Using CRC Cards: An Informal Approach to Object-Oriented Development&amp;quot; by Nancy M.Wilkinson&lt;br /&gt;
&lt;br /&gt;
==External Links==&lt;br /&gt;
* [http://c2.com/doc/oopsla89/paper.html A Laboratory For Teaching Object-Oriented Thinking] by Ward Cunningham and Kent Beck&lt;br /&gt;
* [http://books.google.com/books?id=SGOyQai2TboC&amp;amp;printsec=frontcover&amp;amp;dq=CRC+card+book&amp;amp;hl=en&amp;amp;ei=xSOaTKSaNISclgfRqtkK&amp;amp;sa=X&amp;amp;oi=book_result&amp;amp;ct=result&amp;amp;resnum=1&amp;amp;ved=0CDYQ6AEwAA#v=onepage&amp;amp;q&amp;amp;f=false The CRC card book] by David Bellin, Susan Suchman Simone&lt;br /&gt;
&lt;br /&gt;
* [http://www.agilemodeling.com/artifacts/crcModel.htm Modelling CRC Cards]&lt;br /&gt;
* [http://www.excelsoftware.com/quickcrcwin.html Quick CRC]&lt;/div&gt;</summary>
		<author><name>Pgjalisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch1_1w11_ap&amp;diff=65130</id>
		<title>CSC/ECE 517 Fall 2012/ch1 1w11 ap</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch1_1w11_ap&amp;diff=65130"/>
		<updated>2012-09-15T03:17:55Z</updated>

		<summary type="html">&lt;p&gt;Pgjalisa: /* Why Waterfall and Spiral Models are not useful */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&amp;lt;b&amp;gt; CRC Cards, &amp;lt;/b&amp;gt; also known as [http://en.wikipedia.org/wiki/Class-responsibility-collaboration_card &amp;lt;b&amp;gt; Class-Responsibility-Collaboration &amp;lt;sup&amp;gt;&amp;lt;/sup&amp;gt;&amp;lt;/b&amp;gt;] cards are a brainstorming tool to enable collaboration across different teams or individuals in contribution to design, usually used in Object Oriented Software development. This was  proposed by &amp;lt;b&amp;gt;Ward Cunningham&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;Kent Beck&amp;lt;/b&amp;gt;&amp;lt;sup&amp;gt;[http://c2.com/doc/oopsla89/paper.html]&amp;lt;/sup&amp;gt;. The CRC card can be viewed as an index card, with the following details:&lt;br /&gt;
[[Image:crc-card.gif|frame|right|CRC Card Structure]]&lt;br /&gt;
&lt;br /&gt;
:* The Top of the card usually bears the name of the class.&lt;br /&gt;
:* The Left side of the card has the responsibilities of the class.&lt;br /&gt;
:* The Right side of the card has the collaborating classes corresponding to each of the responsibilities listed in the left side.&lt;br /&gt;
&lt;br /&gt;
Thus in general, a CRC session can be viewed as the interaction between a set of collaborating classes for a particular [http://en.wikipedia.org/wiki/Use_case Use case]. &amp;lt;br&amp;gt; &amp;lt;br&amp;gt; According to &amp;lt;sup&amp;gt;[http://www.extremeprogramming.org/rules/crccards.html]&amp;lt;/sup&amp;gt;&amp;lt;i&amp;gt;A CRC session proceeds with someone simulating the system by talking about which objects send messages to other objects. By stepping through the process' weaknesses and problems are easily uncovered. Design alternatives can be explored quickly by simulating the design being proposed.&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===A CRC Example===&lt;br /&gt;
To better understand how the CRC cards work together, let us consider a simple student enrollment problem,where we are required to model the students enrolled in different courses. We can easily define the &amp;lt;b&amp;gt;Student CRC Card&amp;lt;/b&amp;gt; as having attributes such as student name, student id and responsibilities that enable a student to enroll in a course or drop the course. In this particular instance, the collaborating class would be the &amp;lt;b&amp;gt;Course&amp;lt;/b&amp;gt; class. The &amp;lt;b&amp;gt;Course CRC Card&amp;lt;/b&amp;gt; can in turn be visualized as having its own responsibilities, such as having attributes like Course id, course name and the collaborating class would be the &amp;lt;b&amp;gt;Instructor &lt;br /&gt;
class&amp;lt;/b&amp;gt;. The CRC cards for the Student class and the Course Class are shown below.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:Stud_enr_Crc.jpg|frame|center|Student and Course CRC Card]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
There are also several practical designs that use the CRC card model to design Object oriented software design. The  [http://www.extremeprogramming.org/example/crcsim.html Simulator for Coffee Maker] explores an [http://en.wikipedia.org/wiki/Extreme_Programming Extreme Programming] approach combined with CRC card technique to come up with a design for the coffee maker.&lt;br /&gt;
&lt;br /&gt;
Another interesting approach using CRC cards is the design for the [http://www.math-cs.gordon.edu/courses/cps211/ATMExample/CRCCards.html ATM Machine]&lt;br /&gt;
&lt;br /&gt;
===Advantages of CRC cards===&lt;br /&gt;
There are a few advantages of CRC cards that make it a preferable model in many designs. Some of the advantages of the CRC card design method are&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
:* CRC cards can allow designers to easily make audience understand a very complex system. In essence it allows for building more complex designs by slowly building the interactions between the collaborating classes, one by one.&lt;br /&gt;
:* CRC cards are a simple technique and it can be easily used by anyone with very little training and does not require any expensive computing resources(a board or a paper and a pen would suffice).&lt;br /&gt;
:* CRC is fundamentally a brainstorming tool, enabling different people in a team to come up with the design by collaborating, enabling everyone in the team to contribute&lt;br /&gt;
:* CRC can be used with other formal object oriented design methodologies such as [http://en.wikipedia.org/wiki/Extreme_Programming Extreme Programming] (an [http://en.wikipedia.org/wiki/Agile_Modeling Agile] development Technique) and can be used along with modeling languages such as [http://en.wikipedia.org/wiki/Unified_Modeling_Language Unified Modeling Language(UML)]&lt;br /&gt;
&lt;br /&gt;
==Software for CRC Cards==&lt;br /&gt;
CRC cards have limited scope. If we go about designing a huge project, the scope spans many classes and interactions between them. The tedious task here is to maintain the CRC cards and properly formulate interaction between them. &lt;br /&gt;
We need software for CRC Cards for the following reasons:&lt;br /&gt;
:* &amp;lt;b&amp;gt;Designing Scenario:&amp;lt;/b&amp;gt;  A scenario represents series of steps in which classes and objects communicate. There can be references to other cards or scenarios. &lt;br /&gt;
:* &amp;lt;b&amp;gt;Modeling :&amp;lt;/b&amp;gt;  Software provides an easy way to segregate cards and objects into different diagrams. Thus we can model our problem with different functionality very easily.&lt;br /&gt;
:* &amp;lt;b&amp;gt;Simulation :&amp;lt;/b&amp;gt; Software can provide simulation of the design. This might include single-stepping a scenario forwards/backwards or jumping to a specific location in the scenario stack of a multiple scenario simulation&lt;br /&gt;
:* &amp;lt;b&amp;gt;Synchronization and Dependencies:&amp;lt;/b&amp;gt; Software can maintain relationships between cards, scenarios as design changes take place. If a card references other cards or classes, those cards are generated automatically. Also any name changes and cross references between objects are instantly updated. &lt;br /&gt;
:* &amp;lt;b&amp;gt;Revision history and Version Control :&amp;lt;/b&amp;gt; Software for CRC cards supports changes to CRC cards. It is easy to model and keep track of all changes to a CRC card. This is extremely helpful in tracking the design changes in CRC cards.&lt;br /&gt;
&lt;br /&gt;
==Designing Software==&lt;br /&gt;
The steps to design software for CRC cards are:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Create CRC Cards&amp;lt;/b&amp;gt; : A CRC model is usually created by an individual or small group of designers during the early phase of an object-oriented development project.The figure shows the design of hierarchy of classes. These set of class used for drawing objects are shown. We can see TShape class has a superclass called TObject and two subclasses, TBox and TCircle. Lets assume we create new class TWindow derived from the superclass TObject.  [[Image:Design.png|thumb|Description]]&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Assign Responsibilities&amp;lt;/b&amp;gt; : Once a set of classes are defined, behaviors can be assigned that will provide the functions of the application. For example, the TShape card has responsibilities ''Initialize'' to create it and ''Draw'' to illustrate it on the diagram.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Add Attributes&amp;lt;/b&amp;gt; : Attributes of classes may also be identified in a CRC Card.The TShape class has attributes fPosition, fType and fSelected.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Define and simulate Scenario&amp;lt;/b&amp;gt; : A scenario describes a sequence of steps in the design using the responsibilities of a group of collaborating classes. Collaboration between classes refers to a client object that uses a responsibility performed by a server object. Often a class must call upon several collaborating classes to implement one of its responsibilities.A scenario describes what happens in the system from a high-level, user's point of view.&lt;br /&gt;
[[Image:Scenario.png|thumb|Description]]&lt;br /&gt;
&lt;br /&gt;
Consider situation to the right. We have defined two CRC cards with their responsibility. A scenario defines several steps. Each step in a scenario has a Client, Server and Responsibility field. For each step, a client class uses a responsibility of a server class&lt;br /&gt;
&lt;br /&gt;
The Open Document scenario in the picture references the Initialize Document sub-scenario by specifying its server class ''Document'' in the server field and its scenario name in the Responsibility field. The first step in the Initialize Document sub-scenario uses ''Document'' as the server class name. By single-stepping forwards, backwards or through each sub-scenario, bugs in the design can be identified and corrected early.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Partition the Design&amp;lt;/b&amp;gt; : As the number of CRC cards in the design grow, they can be grouped by function. By using Software for CRC cards,we can draw separate diagrams to partition the model into different subject areas. &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Inheritance Graph&amp;lt;/b&amp;gt; : An automated tool can generate an inheritance graph from information on CRC cards. This diagram can concisely illustrate the big picture of a large project that might contain hundreds of classes and dozens of diagrams.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Verify Your Work &amp;lt;/b&amp;gt; : Creating and simulating scenarios will help verify that a design is correct and complete. A CRC software can perform other error checks to locate design problems. For example, responsibilities that are not used in any scenarios may indicate that the design is incomplete or perhaps the responsibility isn't needed. Likewise, a card that is not used by any collaboration may not be needed.&lt;br /&gt;
&lt;br /&gt;
==Software Development Process for Object Oriented Development==&lt;br /&gt;
&lt;br /&gt;
Software Development Life Cycles are different for a standard development process and for Object Oriented development. This difference needs to be understood in order to know how to meet the benchmarks set for the project. There are multiple processes that are used in software development, the most common ones in use being Waterfall model and Spiral model. The Waterfall model is progression based and the Spiral model is iterative.&lt;br /&gt;
&lt;br /&gt;
We need to understand that the uniqueness of Object Oriented SDLCs comes from the fact that it is more user centric as compared to standard SDLCs that are more system centric. We will now see which models work for Object Oriented SDLCs (OO SDLCs) and which don’t. CRC cards play a very important role in an Object Oriented SDLC. Thus, figuring out which models work well for OO SDLCs will result in understanding which models use CRC cards and why.&lt;br /&gt;
 &lt;br /&gt;
====The Waterfall Model====&lt;br /&gt;
&lt;br /&gt;
The Waterfall model is implemented in multiple phases with each phase having a clear demarcation in terms of its functionality and deliverable. It uses clear stepping stones to come up with deliverables for each deadline. In this case, there are multiple ways to measure progress and methods by which to audit internally and apply checkpoints.&lt;br /&gt;
&lt;br /&gt;
The downside of the Waterfall model lies in the fact that it is a very rigid model that does not offer much in terms of leeway when it comes to deliverables and what each phase in the cycle has to offer. The process is also overly mechanical and over time, just ends up being boring.&lt;br /&gt;
&lt;br /&gt;
Owing to the emphasis on checkpoints and deliverables with strict deadlines, in most cases the analysis and design phases are usually cut short and thus, the project may veer very far from reality. The users are involved only in the requirement gathering phase. This might result in mistranslation of the requirements of the user into what may be an amazing final product but something that the user did not even ask for.&lt;br /&gt;
 &lt;br /&gt;
====The Spiral Model====&lt;br /&gt;
This model iteratively goes through the phases of analysis, design, prototyping and testing after the initial requirements gathering phase. With each iteration, the product is improved based on the feedback from testing in the previous iteration. If required, the outcome of each phase is analyzed, revised and the next prototype is developed after the design is revised, if pertinent. The products from the first phase are not abandoned, they are revised. Evidently, this model is non-linear in nature.&lt;br /&gt;
&lt;br /&gt;
After the first pass through the checkpoint, we can conclude that the work so far is adequate, but not final. The model places emphasis on the iterative process and on the development of standard prototypes at the end of each iteration. At the end of every cycle, we notice the shortcomings from the previous cycle and might end up having to redo all the work in the previous cycle. This proves to be a complete waste of time and effort. All the effort now goes into developing the end point for an older cycle, which makes the model ineffective for the current cycle.&lt;br /&gt;
&lt;br /&gt;
One of the major drawbacks of such a non linear model is that the cost effectiveness and risk analysis cannot be analyzed thoroughly.&lt;br /&gt;
 &lt;br /&gt;
====Why CRC cards are not useful in Waterfall and Spiral Models====&lt;br /&gt;
&lt;br /&gt;
The strength of OO model depends on the idea that design and deployment come together. In the case of a spiral model, this works to make the spiral tighter. Since the waterfall model places over importance on deliverables and user involvement is minimal, which is one of the key focuses of OO SLDCs using CRC cards, the model is considered ineffective. The Spiral model involves multiple revisions of the same idea. When a set of cards have been developed, it would make sense to refine the idea presented in the card but not to redefine them over and over, which may be the case. This does not serve the purpose of actually convening a CRC discussion among the team to draw up cards corresponding to the user requirement. Moreover, in the case of the Spiral model, we would need to convene multiple such meetings at each iteration, which would drastically bring down the overall productivity of the team.&lt;br /&gt;
&lt;br /&gt;
==CRC Cards in Software Development Process==&lt;br /&gt;
&lt;br /&gt;
===Agile Methodology and CRC Cards===&lt;br /&gt;
&lt;br /&gt;
Agile development is a model that has resurfaced and is gaining fame for its incremental cum iterative process. The iteration is carried over the processes of discovery, analysis, design and coding. In each iteration, the old model is worked on in each of the overlapping mini-cycles. The overlap of the cycles makes the process apparently iterative in nature. The model is considered incremental since every step acts as a value-add and this is emphasized by the capacity of classes for reuse. The idea that each phase is repeated ensures that the project is constantly working on a higher level of understanding. Moreover, the OOPS concept of reuse can be used to our advantage such that when we are continuously using OO development models in all our projects, the next implementation can be started  far ahead in the SDLC.&lt;br /&gt;
&lt;br /&gt;
The power of CRC cards for OOP development is in the group session that employs them.  The use of CRC cards is an excellent way for people to begin to grasp the underlying idea of object oriented approach. CRC cards are used in a few steps of the software development process such as Analysis and Design.&lt;br /&gt;
&lt;br /&gt;
===CRC Cards for Analysis===&lt;br /&gt;
&lt;br /&gt;
CRC cards and CRC card sessions are good at organizing and spreading domain knowledge in the analysis phase.  When building an object–oriented application, the focus of the CRC card sessions is on analyzing and describing the problem.  In this phase, the group identifies the objects that are relevant to the application.  Before going to the CRC card session, the team must be aware of the domain classes and frameworks that exist to help them model the problem. During the session, they can decide if the existing ones can be used for the new application.&lt;br /&gt;
&lt;br /&gt;
'''Advantages of using CRC cards in Analysis phase:'''&lt;br /&gt;
&lt;br /&gt;
* People from all phases of the project are involved in the card sessions for problem modeling. The names of the classes and responsibilities are created, argued and agreed upon by the team members at the start itself in order to avoid conflicts later. This gives rise to common project and product vocabulary across different roles.&lt;br /&gt;
&lt;br /&gt;
* Domain knowledge already known is shared in the sessions. Also, missing domain knowledge is identified.&lt;br /&gt;
 &lt;br /&gt;
* Role plays are conducted during these sessions that help spread knowledge about OO concepts.&lt;br /&gt;
&lt;br /&gt;
* These sessions can be used to create a live prototype of what the application is supposed to do. This can be shown to clients as well so that the team receives feedback on their understanding of the requirements.&lt;br /&gt;
 &lt;br /&gt;
* A CRC card session will help the team walk through the requirements and identify any ambiguities.&lt;br /&gt;
&lt;br /&gt;
At the end of the analysis phase, the CRC elements that will be available are:&lt;br /&gt;
&lt;br /&gt;
* '''Classes:''' The classes identified in this phase directly reflect the concepts of the application that is being analyzed. It may not be modeled in terms of software system but it is useful in describing how the application works. However, at this stage the distinction between objects and classes may not be clear.&lt;br /&gt;
&lt;br /&gt;
* '''Responsibilities:'''  The responsibilities that are assigned to the classes in this phase are of relatively higher level.&lt;br /&gt;
&lt;br /&gt;
===CRC Cards for Design===&lt;br /&gt;
 &lt;br /&gt;
During the CRC cards design sessions, other relevant classes are added, if any. &amp;quot;While an analysis must reflect the real world of the user, the design must reflect the real world of the implementers.&amp;quot;[5] A CRC card tool may be helpful for saving, illustrating and documenting a design.&lt;br /&gt;
&lt;br /&gt;
'''Advantages of using CRC cards in Design phase:'''&lt;br /&gt;
&lt;br /&gt;
* These sessions help the team members concentrate on taking the design decisions for the application. These design decisions also include performance, efficiency and other constraints.&lt;br /&gt;
&lt;br /&gt;
* By walking through the scenarios that were seen during the analysis phase, the implementers can give the testers an overview of how the application should work.&lt;br /&gt;
&lt;br /&gt;
* Using CRC cards forces decision to be made up front in front of the team, thus any conflicts can be resolved right there.&lt;br /&gt;
&lt;br /&gt;
* Design constraints such as target environment, language, UI, performance etc., can be discussed during these sessions to check if the design can be implemented.&lt;br /&gt;
&lt;br /&gt;
==Summary==&lt;br /&gt;
Software for CRC cards are immensely helpful in designing and modeling software development using CRC cards.As the size of object-oriented system grow, it becomes increasingly difficult to model the problem with index based CRC cards. Thus an automated tool is required to maintain design and clear functionality.&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Unified_Modeling_Language Unified Modeling Language(UML)]&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Agile_Modeling Agile Modelling]&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Extreme_Programming Extreme Programming]&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
[1] [http://c2.com/doc/oopsla89/paper.html  A Laboratory For Teaching Object-Oriented Thinking]&lt;br /&gt;
&lt;br /&gt;
[2] [http://www.extremeprogramming.org/rules/crccards.html CRC Cards]&lt;br /&gt;
&lt;br /&gt;
[3] [http://www.extremeprogramming.org/example/crcsim.html A Simulator for Coffee Maker]&lt;br /&gt;
&lt;br /&gt;
[4] [http://www.math-cs.gordon.edu/courses/cps211/ATMExample/CRCCards.html CRC Card for ATM]&lt;br /&gt;
&lt;br /&gt;
[5] &amp;quot;Using CRC Cards: An Informal Approach to Object-Oriented Development&amp;quot; by Nancy M.Wilkinson&lt;br /&gt;
&lt;br /&gt;
==External Links==&lt;br /&gt;
* [http://c2.com/doc/oopsla89/paper.html A Laboratory For Teaching Object-Oriented Thinking] by Ward Cunningham and Kent Beck&lt;br /&gt;
* [http://books.google.com/books?id=SGOyQai2TboC&amp;amp;printsec=frontcover&amp;amp;dq=CRC+card+book&amp;amp;hl=en&amp;amp;ei=xSOaTKSaNISclgfRqtkK&amp;amp;sa=X&amp;amp;oi=book_result&amp;amp;ct=result&amp;amp;resnum=1&amp;amp;ved=0CDYQ6AEwAA#v=onepage&amp;amp;q&amp;amp;f=false The CRC card book] by David Bellin, Susan Suchman Simone&lt;br /&gt;
&lt;br /&gt;
* [http://www.agilemodeling.com/artifacts/crcModel.htm Modelling CRC Cards]&lt;br /&gt;
* [http://www.excelsoftware.com/quickcrcwin.html Quick CRC]&lt;/div&gt;</summary>
		<author><name>Pgjalisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch1_1w11_ap&amp;diff=65127</id>
		<title>CSC/ECE 517 Fall 2012/ch1 1w11 ap</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch1_1w11_ap&amp;diff=65127"/>
		<updated>2012-09-15T03:03:47Z</updated>

		<summary type="html">&lt;p&gt;Pgjalisa: /* Why Waterfall and Spiral Models are not useful */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&amp;lt;b&amp;gt; CRC Cards, &amp;lt;/b&amp;gt; also known as [http://en.wikipedia.org/wiki/Class-responsibility-collaboration_card &amp;lt;b&amp;gt; Class-Responsibility-Collaboration &amp;lt;sup&amp;gt;&amp;lt;/sup&amp;gt;&amp;lt;/b&amp;gt;] cards are a brainstorming tool to enable collaboration across different teams or individuals in contribution to design, usually used in Object Oriented Software development. This was  proposed by &amp;lt;b&amp;gt;Ward Cunningham&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;Kent Beck&amp;lt;/b&amp;gt;&amp;lt;sup&amp;gt;[http://c2.com/doc/oopsla89/paper.html]&amp;lt;/sup&amp;gt;. The CRC card can be viewed as an index card, with the following details:&lt;br /&gt;
[[Image:crc-card.gif|frame|right|CRC Card Structure]]&lt;br /&gt;
&lt;br /&gt;
:* The Top of the card usually bears the name of the class.&lt;br /&gt;
:* The Left side of the card has the responsibilities of the class.&lt;br /&gt;
:* The Right side of the card has the collaborating classes corresponding to each of the responsibilities listed in the left side.&lt;br /&gt;
&lt;br /&gt;
Thus in general, a CRC session can be viewed as the interaction between a set of collaborating classes for a particular [http://en.wikipedia.org/wiki/Use_case Use case]. &amp;lt;br&amp;gt; &amp;lt;br&amp;gt; According to &amp;lt;sup&amp;gt;[http://www.extremeprogramming.org/rules/crccards.html]&amp;lt;/sup&amp;gt;&amp;lt;i&amp;gt;A CRC session proceeds with someone simulating the system by talking about which objects send messages to other objects. By stepping through the process' weaknesses and problems are easily uncovered. Design alternatives can be explored quickly by simulating the design being proposed.&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===A CRC Example===&lt;br /&gt;
To better understand how the CRC cards work together, let us consider a simple student enrollment problem,where we are required to model the students enrolled in different courses. We can easily define the &amp;lt;b&amp;gt;Student CRC Card&amp;lt;/b&amp;gt; as having attributes such as student name, student id and responsibilities that enable a student to enroll in a course or drop the course. In this particular instance, the collaborating class would be the &amp;lt;b&amp;gt;Course&amp;lt;/b&amp;gt; class. The &amp;lt;b&amp;gt;Course CRC Card&amp;lt;/b&amp;gt; can in turn be visualized as having its own responsibilities, such as having attributes like Course id, course name and the collaborating class would be the &amp;lt;b&amp;gt;Instructor &lt;br /&gt;
class&amp;lt;/b&amp;gt;. The CRC cards for the Student class and the Course Class are shown below.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:Stud_enr_Crc.jpg|frame|center|Student and Course CRC Card]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
There are also several practical designs that use the CRC card model to design Object oriented software design. The  [http://www.extremeprogramming.org/example/crcsim.html Simulator for Coffee Maker] explores an [http://en.wikipedia.org/wiki/Extreme_Programming Extreme Programming] approach combined with CRC card technique to come up with a design for the coffee maker.&lt;br /&gt;
&lt;br /&gt;
Another interesting approach using CRC cards is the design for the [http://www.math-cs.gordon.edu/courses/cps211/ATMExample/CRCCards.html ATM Machine]&lt;br /&gt;
&lt;br /&gt;
===Advantages of CRC cards===&lt;br /&gt;
There are a few advantages of CRC cards that make it a preferable model in many designs. Some of the advantages of the CRC card design method are&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
:* CRC cards can allow designers to easily make audience understand a very complex system. In essence it allows for building more complex designs by slowly building the interactions between the collaborating classes, one by one.&lt;br /&gt;
:* CRC cards are a simple technique and it can be easily used by anyone with very little training and does not require any expensive computing resources(a board or a paper and a pen would suffice).&lt;br /&gt;
:* CRC is fundamentally a brainstorming tool, enabling different people in a team to come up with the design by collaborating, enabling everyone in the team to contribute&lt;br /&gt;
:* CRC can be used with other formal object oriented design methodologies such as [http://en.wikipedia.org/wiki/Extreme_Programming Extreme Programming] (an [http://en.wikipedia.org/wiki/Agile_Modeling Agile] development Technique) and can be used along with modeling languages such as [http://en.wikipedia.org/wiki/Unified_Modeling_Language Unified Modeling Language(UML)]&lt;br /&gt;
&lt;br /&gt;
==Software for CRC Cards==&lt;br /&gt;
CRC cards have limited scope. If we go about designing a huge project, the scope spans many classes and interactions between them. The tedious task here is to maintain the CRC cards and properly formulate interaction between them. &lt;br /&gt;
We need software for CRC Cards for the following reasons:&lt;br /&gt;
:* &amp;lt;b&amp;gt;Designing Scenario:&amp;lt;/b&amp;gt;  A scenario represents series of steps in which classes and objects communicate. There can be references to other cards or scenarios. &lt;br /&gt;
:* &amp;lt;b&amp;gt;Modeling :&amp;lt;/b&amp;gt;  Software provides an easy way to segregate cards and objects into different diagrams. Thus we can model our problem with different functionality very easily.&lt;br /&gt;
:* &amp;lt;b&amp;gt;Simulation :&amp;lt;/b&amp;gt; Software can provide simulation of the design. This might include single-stepping a scenario forwards/backwards or jumping to a specific location in the scenario stack of a multiple scenario simulation&lt;br /&gt;
:* &amp;lt;b&amp;gt;Synchronization and Dependencies:&amp;lt;/b&amp;gt; Software can maintain relationships between cards, scenarios as design changes take place. If a card references other cards or classes, those cards are generated automatically. Also any name changes and cross references between objects are instantly updated. &lt;br /&gt;
:* &amp;lt;b&amp;gt;Revision history and Version Control :&amp;lt;/b&amp;gt; Software for CRC cards supports changes to CRC cards. It is easy to model and keep track of all changes to a CRC card. This is extremely helpful in tracking the design changes in CRC cards.&lt;br /&gt;
&lt;br /&gt;
==Designing Software==&lt;br /&gt;
The steps to design software for CRC cards are:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Create CRC Cards&amp;lt;/b&amp;gt; : A CRC model is usually created by an individual or small group of designers during the early phase of an object-oriented development project.The figure shows the design of hierarchy of classes. These set of class used for drawing objects are shown. We can see TShape class has a superclass called TObject and two subclasses, TBox and TCircle. Lets assume we create new class TWindow derived from the superclass TObject.  [[Image:Design.png|thumb|Description]]&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Assign Responsibilities&amp;lt;/b&amp;gt; : Once a set of classes are defined, behaviors can be assigned that will provide the functions of the application. For example, the TShape card has responsibilities ''Initialize'' to create it and ''Draw'' to illustrate it on the diagram.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Add Attributes&amp;lt;/b&amp;gt; : Attributes of classes may also be identified in a CRC Card.The TShape class has attributes fPosition, fType and fSelected.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Define and simulate Scenario&amp;lt;/b&amp;gt; : A scenario describes a sequence of steps in the design using the responsibilities of a group of collaborating classes. Collaboration between classes refers to a client object that uses a responsibility performed by a server object. Often a class must call upon several collaborating classes to implement one of its responsibilities.A scenario describes what happens in the system from a high-level, user's point of view.&lt;br /&gt;
[[Image:Scenario.png|thumb|Description]]&lt;br /&gt;
&lt;br /&gt;
Consider situation to the right. We have defined two CRC cards with their responsibility. A scenario defines several steps. Each step in a scenario has a Client, Server and Responsibility field. For each step, a client class uses a responsibility of a server class&lt;br /&gt;
&lt;br /&gt;
The Open Document scenario in the picture references the Initialize Document sub-scenario by specifying its server class ''Document'' in the server field and its scenario name in the Responsibility field. The first step in the Initialize Document sub-scenario uses ''Document'' as the server class name. By single-stepping forwards, backwards or through each sub-scenario, bugs in the design can be identified and corrected early.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Partition the Design&amp;lt;/b&amp;gt; : As the number of CRC cards in the design grow, they can be grouped by function. By using Software for CRC cards,we can draw separate diagrams to partition the model into different subject areas. &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Inheritance Graph&amp;lt;/b&amp;gt; : An automated tool can generate an inheritance graph from information on CRC cards. This diagram can concisely illustrate the big picture of a large project that might contain hundreds of classes and dozens of diagrams.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Verify Your Work &amp;lt;/b&amp;gt; : Creating and simulating scenarios will help verify that a design is correct and complete. A CRC software can perform other error checks to locate design problems. For example, responsibilities that are not used in any scenarios may indicate that the design is incomplete or perhaps the responsibility isn't needed. Likewise, a card that is not used by any collaboration may not be needed.&lt;br /&gt;
&lt;br /&gt;
==Software Development Process for Object Oriented Development==&lt;br /&gt;
&lt;br /&gt;
Software Development Life Cycles are different for a standard development process and for Object Oriented development. This difference needs to be understood in order to know how to meet the benchmarks set for the project. There are multiple processes that are used in software development, the most common ones in use being Waterfall model and Spiral model. The Waterfall model is progression based and the Spiral model is iterative.&lt;br /&gt;
&lt;br /&gt;
We need to understand that the uniqueness of Object Oriented SDLCs comes from the fact that it is more user centric as compared to standard SDLCs that are more system centric. We will now see which models work for Object Oriented SDLCs (OO SDLCs) and which don’t. CRC cards play a very important role in an Object Oriented SDLC. Thus, figuring out which models work well for OO SDLCs will result in understanding which models use CRC cards and why.&lt;br /&gt;
 &lt;br /&gt;
====The Waterfall Model====&lt;br /&gt;
&lt;br /&gt;
The Waterfall model is implemented in multiple phases with each phase having a clear demarcation in terms of its functionality and deliverable. It uses clear stepping stones to come up with deliverables for each deadline. In this case, there are multiple ways to measure progress and methods by which to audit internally and apply checkpoints.&lt;br /&gt;
&lt;br /&gt;
The downside of the Waterfall model lies in the fact that it is a very rigid model that does not offer much in terms of leeway when it comes to deliverables and what each phase in the cycle has to offer. The process is also overly mechanical and over time, just ends up being boring.&lt;br /&gt;
&lt;br /&gt;
Owing to the emphasis on checkpoints and deliverables with strict deadlines, in most cases the analysis and design phases are usually cut short and thus, the project may veer very far from reality. The users are involved only in the requirement gathering phase. This might result in mistranslation of the requirements of the user into what may be an amazing final product but something that the user did not even ask for.&lt;br /&gt;
 &lt;br /&gt;
====The Spiral Model====&lt;br /&gt;
This model iteratively goes through the phases of analysis, design, prototyping and testing after the initial requirements gathering phase. With each iteration, the product is improved based on the feedback from testing in the previous iteration. If required, the outcome of each phase is analyzed, revised and the next prototype is developed after the design is revised, if pertinent. The products from the first phase are not abandoned, they are revised. Evidently, this model is non-linear in nature.&lt;br /&gt;
&lt;br /&gt;
After the first pass through the checkpoint, we can conclude that the work so far is adequate, but not final. The model places emphasis on the iterative process and on the development of standard prototypes at the end of each iteration. At the end of every cycle, we notice the shortcomings from the previous cycle and might end up having to redo all the work in the previous cycle. This proves to be a complete waste of time and effort. All the effort now goes into developing the end point for an older cycle, which makes the model ineffective for the current cycle.&lt;br /&gt;
&lt;br /&gt;
One of the major drawbacks of such a non linear model is that the cost effectiveness and risk analysis cannot be analyzed thoroughly.&lt;br /&gt;
 &lt;br /&gt;
====Why Waterfall and Spiral Models are not useful====&lt;br /&gt;
&lt;br /&gt;
The strength of OO model depends on the idea that design and deployment come together. In the case of a spiral model, this works to make the spiral tighter. Since the waterfall model places over importance on deliverables and user involvement is minimal, which is one of the key focuses of OO SLDCs using CRC cards, the model is considered ineffective. The Spiral model involves multiple revisions of the same idea. When a set of cards have been developed, it would make sense to refine the idea presented in the card but not to redefine them over and over, which may be the case. This does not serve the purpose of actually convening a CRC discussion among the team to draw up cards corresponding to the user requirement. Moreover, in the case of the Spiral model, we would need to convene multiple such meetings at each iteration, which would drastically bring down the overall productivity of the team.&lt;br /&gt;
&lt;br /&gt;
==CRC Cards in Software Development Process==&lt;br /&gt;
&lt;br /&gt;
===Agile Methodology and CRC Cards===&lt;br /&gt;
&lt;br /&gt;
Agile development is a model that has resurfaced and is gaining fame for its incremental cum iterative process. The iteration is carried over the processes of discovery, analysis, design and coding. In each iteration, the old model is worked on in each of the overlapping mini-cycles. The overlap of the cycles makes the process apparently iterative in nature. The model is considered incremental since every step acts as a value-add and this is emphasized by the capacity of classes for reuse. The idea that each phase is repeated ensures that the project is constantly working on a higher level of understanding. Moreover, the OOPS concept of reuse can be used to our advantage such that when we are continuously using OO development models in all our projects, the next implementation can be started  far ahead in the SDLC.&lt;br /&gt;
&lt;br /&gt;
The power of CRC cards for OOP development is in the group session that employs them.  The use of CRC cards is an excellent way for people to begin to grasp the underlying idea of object oriented approach. CRC cards are used in a few steps of the software development process such as Analysis and Design.&lt;br /&gt;
&lt;br /&gt;
===CRC Cards for Analysis===&lt;br /&gt;
&lt;br /&gt;
CRC cards and CRC card sessions are good at organizing and spreading domain knowledge in the analysis phase.  When building an object–oriented application, the focus of the CRC card sessions is on analyzing and describing the problem.  In this phase, the group identifies the objects that are relevant to the application.  Before going to the CRC card session, the team must be aware of the domain classes and frameworks that exist to help them model the problem. During the session, they can decide if the existing ones can be used for the new application.&lt;br /&gt;
&lt;br /&gt;
'''Advantages of using CRC cards in Analysis phase:'''&lt;br /&gt;
&lt;br /&gt;
* People from all phases of the project are involved in the card sessions for problem modeling. The names of the classes and responsibilities are created, argued and agreed upon by the team members at the start itself in order to avoid conflicts later. This gives rise to common project and product vocabulary across different roles.&lt;br /&gt;
&lt;br /&gt;
* Domain knowledge already known is shared in the sessions. Also, missing domain knowledge is identified.&lt;br /&gt;
 &lt;br /&gt;
* Role plays are conducted during these sessions that help spread knowledge about OO concepts.&lt;br /&gt;
&lt;br /&gt;
* These sessions can be used to create a live prototype of what the application is supposed to do. This can be shown to clients as well so that the team receives feedback on their understanding of the requirements.&lt;br /&gt;
 &lt;br /&gt;
* A CRC card session will help the team walk through the requirements and identify any ambiguities.&lt;br /&gt;
&lt;br /&gt;
At the end of the analysis phase, the CRC elements that will be available are:&lt;br /&gt;
&lt;br /&gt;
* '''Classes:''' The classes identified in this phase directly reflect the concepts of the application that is being analyzed. It may not be modeled in terms of software system but it is useful in describing how the application works. However, at this stage the distinction between objects and classes may not be clear.&lt;br /&gt;
&lt;br /&gt;
* '''Responsibilities:'''  The responsibilities that are assigned to the classes in this phase are of relatively higher level.&lt;br /&gt;
&lt;br /&gt;
===CRC Cards for Design===&lt;br /&gt;
 &lt;br /&gt;
During the CRC cards design sessions, other relevant classes are added, if any. &amp;quot;While an analysis must reflect the real world of the user, the design must reflect the real world of the implementers.&amp;quot;[5] A CRC card tool may be helpful for saving, illustrating and documenting a design.&lt;br /&gt;
&lt;br /&gt;
'''Advantages of using CRC cards in Design phase:'''&lt;br /&gt;
&lt;br /&gt;
* These sessions help the team members concentrate on taking the design decisions for the application. These design decisions also include performance, efficiency and other constraints.&lt;br /&gt;
&lt;br /&gt;
* By walking through the scenarios that were seen during the analysis phase, the implementers can give the testers an overview of how the application should work.&lt;br /&gt;
&lt;br /&gt;
* Using CRC cards forces decision to be made up front in front of the team, thus any conflicts can be resolved right there.&lt;br /&gt;
&lt;br /&gt;
* Design constraints such as target environment, language, UI, performance etc., can be discussed during these sessions to check if the design can be implemented.&lt;br /&gt;
&lt;br /&gt;
==Summary==&lt;br /&gt;
Software for CRC cards are immensely helpful in designing and modeling software development using CRC cards.As the size of object-oriented system grow, it becomes increasingly difficult to model the problem with index based CRC cards. Thus an automated tool is required to maintain design and clear functionality.&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Unified_Modeling_Language Unified Modeling Language(UML)]&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Agile_Modeling Agile Modelling]&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Extreme_Programming Extreme Programming]&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
[1] [http://c2.com/doc/oopsla89/paper.html  A Laboratory For Teaching Object-Oriented Thinking]&lt;br /&gt;
&lt;br /&gt;
[2] [http://www.extremeprogramming.org/rules/crccards.html CRC Cards]&lt;br /&gt;
&lt;br /&gt;
[3] [http://www.extremeprogramming.org/example/crcsim.html A Simulator for Coffee Maker]&lt;br /&gt;
&lt;br /&gt;
[4] [http://www.math-cs.gordon.edu/courses/cps211/ATMExample/CRCCards.html CRC Card for ATM]&lt;br /&gt;
&lt;br /&gt;
[5] &amp;quot;Using CRC Cards: An Informal Approach to Object-Oriented Development&amp;quot; by Nancy M.Wilkinson&lt;br /&gt;
&lt;br /&gt;
==External Links==&lt;br /&gt;
* [http://c2.com/doc/oopsla89/paper.html A Laboratory For Teaching Object-Oriented Thinking] by Ward Cunningham and Kent Beck&lt;br /&gt;
* [http://books.google.com/books?id=SGOyQai2TboC&amp;amp;printsec=frontcover&amp;amp;dq=CRC+card+book&amp;amp;hl=en&amp;amp;ei=xSOaTKSaNISclgfRqtkK&amp;amp;sa=X&amp;amp;oi=book_result&amp;amp;ct=result&amp;amp;resnum=1&amp;amp;ved=0CDYQ6AEwAA#v=onepage&amp;amp;q&amp;amp;f=false The CRC card book] by David Bellin, Susan Suchman Simone&lt;br /&gt;
&lt;br /&gt;
* [http://www.agilemodeling.com/artifacts/crcModel.htm Modelling CRC Cards]&lt;br /&gt;
* [http://www.excelsoftware.com/quickcrcwin.html Quick CRC]&lt;/div&gt;</summary>
		<author><name>Pgjalisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch1_1w11_ap&amp;diff=65126</id>
		<title>CSC/ECE 517 Fall 2012/ch1 1w11 ap</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch1_1w11_ap&amp;diff=65126"/>
		<updated>2012-09-15T03:03:32Z</updated>

		<summary type="html">&lt;p&gt;Pgjalisa: /* CRC Cards in Software Development Process */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&amp;lt;b&amp;gt; CRC Cards, &amp;lt;/b&amp;gt; also known as [http://en.wikipedia.org/wiki/Class-responsibility-collaboration_card &amp;lt;b&amp;gt; Class-Responsibility-Collaboration &amp;lt;sup&amp;gt;&amp;lt;/sup&amp;gt;&amp;lt;/b&amp;gt;] cards are a brainstorming tool to enable collaboration across different teams or individuals in contribution to design, usually used in Object Oriented Software development. This was  proposed by &amp;lt;b&amp;gt;Ward Cunningham&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;Kent Beck&amp;lt;/b&amp;gt;&amp;lt;sup&amp;gt;[http://c2.com/doc/oopsla89/paper.html]&amp;lt;/sup&amp;gt;. The CRC card can be viewed as an index card, with the following details:&lt;br /&gt;
[[Image:crc-card.gif|frame|right|CRC Card Structure]]&lt;br /&gt;
&lt;br /&gt;
:* The Top of the card usually bears the name of the class.&lt;br /&gt;
:* The Left side of the card has the responsibilities of the class.&lt;br /&gt;
:* The Right side of the card has the collaborating classes corresponding to each of the responsibilities listed in the left side.&lt;br /&gt;
&lt;br /&gt;
Thus in general, a CRC session can be viewed as the interaction between a set of collaborating classes for a particular [http://en.wikipedia.org/wiki/Use_case Use case]. &amp;lt;br&amp;gt; &amp;lt;br&amp;gt; According to &amp;lt;sup&amp;gt;[http://www.extremeprogramming.org/rules/crccards.html]&amp;lt;/sup&amp;gt;&amp;lt;i&amp;gt;A CRC session proceeds with someone simulating the system by talking about which objects send messages to other objects. By stepping through the process' weaknesses and problems are easily uncovered. Design alternatives can be explored quickly by simulating the design being proposed.&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===A CRC Example===&lt;br /&gt;
To better understand how the CRC cards work together, let us consider a simple student enrollment problem,where we are required to model the students enrolled in different courses. We can easily define the &amp;lt;b&amp;gt;Student CRC Card&amp;lt;/b&amp;gt; as having attributes such as student name, student id and responsibilities that enable a student to enroll in a course or drop the course. In this particular instance, the collaborating class would be the &amp;lt;b&amp;gt;Course&amp;lt;/b&amp;gt; class. The &amp;lt;b&amp;gt;Course CRC Card&amp;lt;/b&amp;gt; can in turn be visualized as having its own responsibilities, such as having attributes like Course id, course name and the collaborating class would be the &amp;lt;b&amp;gt;Instructor &lt;br /&gt;
class&amp;lt;/b&amp;gt;. The CRC cards for the Student class and the Course Class are shown below.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:Stud_enr_Crc.jpg|frame|center|Student and Course CRC Card]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
There are also several practical designs that use the CRC card model to design Object oriented software design. The  [http://www.extremeprogramming.org/example/crcsim.html Simulator for Coffee Maker] explores an [http://en.wikipedia.org/wiki/Extreme_Programming Extreme Programming] approach combined with CRC card technique to come up with a design for the coffee maker.&lt;br /&gt;
&lt;br /&gt;
Another interesting approach using CRC cards is the design for the [http://www.math-cs.gordon.edu/courses/cps211/ATMExample/CRCCards.html ATM Machine]&lt;br /&gt;
&lt;br /&gt;
===Advantages of CRC cards===&lt;br /&gt;
There are a few advantages of CRC cards that make it a preferable model in many designs. Some of the advantages of the CRC card design method are&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
:* CRC cards can allow designers to easily make audience understand a very complex system. In essence it allows for building more complex designs by slowly building the interactions between the collaborating classes, one by one.&lt;br /&gt;
:* CRC cards are a simple technique and it can be easily used by anyone with very little training and does not require any expensive computing resources(a board or a paper and a pen would suffice).&lt;br /&gt;
:* CRC is fundamentally a brainstorming tool, enabling different people in a team to come up with the design by collaborating, enabling everyone in the team to contribute&lt;br /&gt;
:* CRC can be used with other formal object oriented design methodologies such as [http://en.wikipedia.org/wiki/Extreme_Programming Extreme Programming] (an [http://en.wikipedia.org/wiki/Agile_Modeling Agile] development Technique) and can be used along with modeling languages such as [http://en.wikipedia.org/wiki/Unified_Modeling_Language Unified Modeling Language(UML)]&lt;br /&gt;
&lt;br /&gt;
==Software for CRC Cards==&lt;br /&gt;
CRC cards have limited scope. If we go about designing a huge project, the scope spans many classes and interactions between them. The tedious task here is to maintain the CRC cards and properly formulate interaction between them. &lt;br /&gt;
We need software for CRC Cards for the following reasons:&lt;br /&gt;
:* &amp;lt;b&amp;gt;Designing Scenario:&amp;lt;/b&amp;gt;  A scenario represents series of steps in which classes and objects communicate. There can be references to other cards or scenarios. &lt;br /&gt;
:* &amp;lt;b&amp;gt;Modeling :&amp;lt;/b&amp;gt;  Software provides an easy way to segregate cards and objects into different diagrams. Thus we can model our problem with different functionality very easily.&lt;br /&gt;
:* &amp;lt;b&amp;gt;Simulation :&amp;lt;/b&amp;gt; Software can provide simulation of the design. This might include single-stepping a scenario forwards/backwards or jumping to a specific location in the scenario stack of a multiple scenario simulation&lt;br /&gt;
:* &amp;lt;b&amp;gt;Synchronization and Dependencies:&amp;lt;/b&amp;gt; Software can maintain relationships between cards, scenarios as design changes take place. If a card references other cards or classes, those cards are generated automatically. Also any name changes and cross references between objects are instantly updated. &lt;br /&gt;
:* &amp;lt;b&amp;gt;Revision history and Version Control :&amp;lt;/b&amp;gt; Software for CRC cards supports changes to CRC cards. It is easy to model and keep track of all changes to a CRC card. This is extremely helpful in tracking the design changes in CRC cards.&lt;br /&gt;
&lt;br /&gt;
==Designing Software==&lt;br /&gt;
The steps to design software for CRC cards are:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Create CRC Cards&amp;lt;/b&amp;gt; : A CRC model is usually created by an individual or small group of designers during the early phase of an object-oriented development project.The figure shows the design of hierarchy of classes. These set of class used for drawing objects are shown. We can see TShape class has a superclass called TObject and two subclasses, TBox and TCircle. Lets assume we create new class TWindow derived from the superclass TObject.  [[Image:Design.png|thumb|Description]]&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Assign Responsibilities&amp;lt;/b&amp;gt; : Once a set of classes are defined, behaviors can be assigned that will provide the functions of the application. For example, the TShape card has responsibilities ''Initialize'' to create it and ''Draw'' to illustrate it on the diagram.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Add Attributes&amp;lt;/b&amp;gt; : Attributes of classes may also be identified in a CRC Card.The TShape class has attributes fPosition, fType and fSelected.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Define and simulate Scenario&amp;lt;/b&amp;gt; : A scenario describes a sequence of steps in the design using the responsibilities of a group of collaborating classes. Collaboration between classes refers to a client object that uses a responsibility performed by a server object. Often a class must call upon several collaborating classes to implement one of its responsibilities.A scenario describes what happens in the system from a high-level, user's point of view.&lt;br /&gt;
[[Image:Scenario.png|thumb|Description]]&lt;br /&gt;
&lt;br /&gt;
Consider situation to the right. We have defined two CRC cards with their responsibility. A scenario defines several steps. Each step in a scenario has a Client, Server and Responsibility field. For each step, a client class uses a responsibility of a server class&lt;br /&gt;
&lt;br /&gt;
The Open Document scenario in the picture references the Initialize Document sub-scenario by specifying its server class ''Document'' in the server field and its scenario name in the Responsibility field. The first step in the Initialize Document sub-scenario uses ''Document'' as the server class name. By single-stepping forwards, backwards or through each sub-scenario, bugs in the design can be identified and corrected early.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Partition the Design&amp;lt;/b&amp;gt; : As the number of CRC cards in the design grow, they can be grouped by function. By using Software for CRC cards,we can draw separate diagrams to partition the model into different subject areas. &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Inheritance Graph&amp;lt;/b&amp;gt; : An automated tool can generate an inheritance graph from information on CRC cards. This diagram can concisely illustrate the big picture of a large project that might contain hundreds of classes and dozens of diagrams.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Verify Your Work &amp;lt;/b&amp;gt; : Creating and simulating scenarios will help verify that a design is correct and complete. A CRC software can perform other error checks to locate design problems. For example, responsibilities that are not used in any scenarios may indicate that the design is incomplete or perhaps the responsibility isn't needed. Likewise, a card that is not used by any collaboration may not be needed.&lt;br /&gt;
&lt;br /&gt;
==Software Development Process for Object Oriented Development==&lt;br /&gt;
&lt;br /&gt;
Software Development Life Cycles are different for a standard development process and for Object Oriented development. This difference needs to be understood in order to know how to meet the benchmarks set for the project. There are multiple processes that are used in software development, the most common ones in use being Waterfall model and Spiral model. The Waterfall model is progression based and the Spiral model is iterative.&lt;br /&gt;
&lt;br /&gt;
We need to understand that the uniqueness of Object Oriented SDLCs comes from the fact that it is more user centric as compared to standard SDLCs that are more system centric. We will now see which models work for Object Oriented SDLCs (OO SDLCs) and which don’t. CRC cards play a very important role in an Object Oriented SDLC. Thus, figuring out which models work well for OO SDLCs will result in understanding which models use CRC cards and why.&lt;br /&gt;
 &lt;br /&gt;
====The Waterfall Model====&lt;br /&gt;
&lt;br /&gt;
The Waterfall model is implemented in multiple phases with each phase having a clear demarcation in terms of its functionality and deliverable. It uses clear stepping stones to come up with deliverables for each deadline. In this case, there are multiple ways to measure progress and methods by which to audit internally and apply checkpoints.&lt;br /&gt;
&lt;br /&gt;
The downside of the Waterfall model lies in the fact that it is a very rigid model that does not offer much in terms of leeway when it comes to deliverables and what each phase in the cycle has to offer. The process is also overly mechanical and over time, just ends up being boring.&lt;br /&gt;
&lt;br /&gt;
Owing to the emphasis on checkpoints and deliverables with strict deadlines, in most cases the analysis and design phases are usually cut short and thus, the project may veer very far from reality. The users are involved only in the requirement gathering phase. This might result in mistranslation of the requirements of the user into what may be an amazing final product but something that the user did not even ask for.&lt;br /&gt;
 &lt;br /&gt;
====The Spiral Model====&lt;br /&gt;
This model iteratively goes through the phases of analysis, design, prototyping and testing after the initial requirements gathering phase. With each iteration, the product is improved based on the feedback from testing in the previous iteration. If required, the outcome of each phase is analyzed, revised and the next prototype is developed after the design is revised, if pertinent. The products from the first phase are not abandoned, they are revised. Evidently, this model is non-linear in nature.&lt;br /&gt;
&lt;br /&gt;
After the first pass through the checkpoint, we can conclude that the work so far is adequate, but not final. The model places emphasis on the iterative process and on the development of standard prototypes at the end of each iteration. At the end of every cycle, we notice the shortcomings from the previous cycle and might end up having to redo all the work in the previous cycle. This proves to be a complete waste of time and effort. All the effort now goes into developing the end point for an older cycle, which makes the model ineffective for the current cycle.&lt;br /&gt;
&lt;br /&gt;
One of the major drawbacks of such a non linear model is that the cost effectiveness and risk analysis cannot be analyzed thoroughly.&lt;br /&gt;
 &lt;br /&gt;
====Why Waterfall and Spiral Models are not useful====&lt;br /&gt;
&lt;br /&gt;
The strength of OO model depends on the idea that design and deployment come together. In the case of a spiral model, this works to make the spiral tighter. Since the waterfall model places over importance on deliverables and user involvement is minimal, which is one of the key focuses of OO SLDCs using CRC cards, the model is considered ineffective. The Spiral model involves multiple revisions of the same idea. When a set of cards have been developed, it would make sense to refine the idea presented in the card but not to redefine them over and over, which may be the case. This does not serve the purpose of actually convening a CRC discussion among the team to draw up cards corresponding to the user requirement. Moreover, in the case of the Spiral model, we would need to convene multiple such meetings at each iteration, which would drastically bring down the overall productivity of the team. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==CRC Cards in Software Development Process==&lt;br /&gt;
&lt;br /&gt;
===Agile Methodology and CRC Cards===&lt;br /&gt;
&lt;br /&gt;
Agile development is a model that has resurfaced and is gaining fame for its incremental cum iterative process. The iteration is carried over the processes of discovery, analysis, design and coding. In each iteration, the old model is worked on in each of the overlapping mini-cycles. The overlap of the cycles makes the process apparently iterative in nature. The model is considered incremental since every step acts as a value-add and this is emphasized by the capacity of classes for reuse. The idea that each phase is repeated ensures that the project is constantly working on a higher level of understanding. Moreover, the OOPS concept of reuse can be used to our advantage such that when we are continuously using OO development models in all our projects, the next implementation can be started  far ahead in the SDLC.&lt;br /&gt;
&lt;br /&gt;
The power of CRC cards for OOP development is in the group session that employs them.  The use of CRC cards is an excellent way for people to begin to grasp the underlying idea of object oriented approach. CRC cards are used in a few steps of the software development process such as Analysis and Design.&lt;br /&gt;
&lt;br /&gt;
===CRC Cards for Analysis===&lt;br /&gt;
&lt;br /&gt;
CRC cards and CRC card sessions are good at organizing and spreading domain knowledge in the analysis phase.  When building an object–oriented application, the focus of the CRC card sessions is on analyzing and describing the problem.  In this phase, the group identifies the objects that are relevant to the application.  Before going to the CRC card session, the team must be aware of the domain classes and frameworks that exist to help them model the problem. During the session, they can decide if the existing ones can be used for the new application.&lt;br /&gt;
&lt;br /&gt;
'''Advantages of using CRC cards in Analysis phase:'''&lt;br /&gt;
&lt;br /&gt;
* People from all phases of the project are involved in the card sessions for problem modeling. The names of the classes and responsibilities are created, argued and agreed upon by the team members at the start itself in order to avoid conflicts later. This gives rise to common project and product vocabulary across different roles.&lt;br /&gt;
&lt;br /&gt;
* Domain knowledge already known is shared in the sessions. Also, missing domain knowledge is identified.&lt;br /&gt;
 &lt;br /&gt;
* Role plays are conducted during these sessions that help spread knowledge about OO concepts.&lt;br /&gt;
&lt;br /&gt;
* These sessions can be used to create a live prototype of what the application is supposed to do. This can be shown to clients as well so that the team receives feedback on their understanding of the requirements.&lt;br /&gt;
 &lt;br /&gt;
* A CRC card session will help the team walk through the requirements and identify any ambiguities.&lt;br /&gt;
&lt;br /&gt;
At the end of the analysis phase, the CRC elements that will be available are:&lt;br /&gt;
&lt;br /&gt;
* '''Classes:''' The classes identified in this phase directly reflect the concepts of the application that is being analyzed. It may not be modeled in terms of software system but it is useful in describing how the application works. However, at this stage the distinction between objects and classes may not be clear.&lt;br /&gt;
&lt;br /&gt;
* '''Responsibilities:'''  The responsibilities that are assigned to the classes in this phase are of relatively higher level.&lt;br /&gt;
&lt;br /&gt;
===CRC Cards for Design===&lt;br /&gt;
 &lt;br /&gt;
During the CRC cards design sessions, other relevant classes are added, if any. &amp;quot;While an analysis must reflect the real world of the user, the design must reflect the real world of the implementers.&amp;quot;[5] A CRC card tool may be helpful for saving, illustrating and documenting a design.&lt;br /&gt;
&lt;br /&gt;
'''Advantages of using CRC cards in Design phase:'''&lt;br /&gt;
&lt;br /&gt;
* These sessions help the team members concentrate on taking the design decisions for the application. These design decisions also include performance, efficiency and other constraints.&lt;br /&gt;
&lt;br /&gt;
* By walking through the scenarios that were seen during the analysis phase, the implementers can give the testers an overview of how the application should work.&lt;br /&gt;
&lt;br /&gt;
* Using CRC cards forces decision to be made up front in front of the team, thus any conflicts can be resolved right there.&lt;br /&gt;
&lt;br /&gt;
* Design constraints such as target environment, language, UI, performance etc., can be discussed during these sessions to check if the design can be implemented.&lt;br /&gt;
&lt;br /&gt;
==Summary==&lt;br /&gt;
Software for CRC cards are immensely helpful in designing and modeling software development using CRC cards.As the size of object-oriented system grow, it becomes increasingly difficult to model the problem with index based CRC cards. Thus an automated tool is required to maintain design and clear functionality.&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Unified_Modeling_Language Unified Modeling Language(UML)]&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Agile_Modeling Agile Modelling]&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Extreme_Programming Extreme Programming]&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
[1] [http://c2.com/doc/oopsla89/paper.html  A Laboratory For Teaching Object-Oriented Thinking]&lt;br /&gt;
&lt;br /&gt;
[2] [http://www.extremeprogramming.org/rules/crccards.html CRC Cards]&lt;br /&gt;
&lt;br /&gt;
[3] [http://www.extremeprogramming.org/example/crcsim.html A Simulator for Coffee Maker]&lt;br /&gt;
&lt;br /&gt;
[4] [http://www.math-cs.gordon.edu/courses/cps211/ATMExample/CRCCards.html CRC Card for ATM]&lt;br /&gt;
&lt;br /&gt;
[5] &amp;quot;Using CRC Cards: An Informal Approach to Object-Oriented Development&amp;quot; by Nancy M.Wilkinson&lt;br /&gt;
&lt;br /&gt;
==External Links==&lt;br /&gt;
* [http://c2.com/doc/oopsla89/paper.html A Laboratory For Teaching Object-Oriented Thinking] by Ward Cunningham and Kent Beck&lt;br /&gt;
* [http://books.google.com/books?id=SGOyQai2TboC&amp;amp;printsec=frontcover&amp;amp;dq=CRC+card+book&amp;amp;hl=en&amp;amp;ei=xSOaTKSaNISclgfRqtkK&amp;amp;sa=X&amp;amp;oi=book_result&amp;amp;ct=result&amp;amp;resnum=1&amp;amp;ved=0CDYQ6AEwAA#v=onepage&amp;amp;q&amp;amp;f=false The CRC card book] by David Bellin, Susan Suchman Simone&lt;br /&gt;
&lt;br /&gt;
* [http://www.agilemodeling.com/artifacts/crcModel.htm Modelling CRC Cards]&lt;br /&gt;
* [http://www.excelsoftware.com/quickcrcwin.html Quick CRC]&lt;/div&gt;</summary>
		<author><name>Pgjalisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch1_1w11_ap&amp;diff=65125</id>
		<title>CSC/ECE 517 Fall 2012/ch1 1w11 ap</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch1_1w11_ap&amp;diff=65125"/>
		<updated>2012-09-15T03:00:53Z</updated>

		<summary type="html">&lt;p&gt;Pgjalisa: /* Why Waterfall and Spiral Models are not useful */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&amp;lt;b&amp;gt; CRC Cards, &amp;lt;/b&amp;gt; also known as [http://en.wikipedia.org/wiki/Class-responsibility-collaboration_card &amp;lt;b&amp;gt; Class-Responsibility-Collaboration &amp;lt;sup&amp;gt;&amp;lt;/sup&amp;gt;&amp;lt;/b&amp;gt;] cards are a brainstorming tool to enable collaboration across different teams or individuals in contribution to design, usually used in Object Oriented Software development. This was  proposed by &amp;lt;b&amp;gt;Ward Cunningham&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;Kent Beck&amp;lt;/b&amp;gt;&amp;lt;sup&amp;gt;[http://c2.com/doc/oopsla89/paper.html]&amp;lt;/sup&amp;gt;. The CRC card can be viewed as an index card, with the following details:&lt;br /&gt;
[[Image:crc-card.gif|frame|right|CRC Card Structure]]&lt;br /&gt;
&lt;br /&gt;
:* The Top of the card usually bears the name of the class.&lt;br /&gt;
:* The Left side of the card has the responsibilities of the class.&lt;br /&gt;
:* The Right side of the card has the collaborating classes corresponding to each of the responsibilities listed in the left side.&lt;br /&gt;
&lt;br /&gt;
Thus in general, a CRC session can be viewed as the interaction between a set of collaborating classes for a particular [http://en.wikipedia.org/wiki/Use_case Use case]. &amp;lt;br&amp;gt; &amp;lt;br&amp;gt; According to &amp;lt;sup&amp;gt;[http://www.extremeprogramming.org/rules/crccards.html]&amp;lt;/sup&amp;gt;&amp;lt;i&amp;gt;A CRC session proceeds with someone simulating the system by talking about which objects send messages to other objects. By stepping through the process' weaknesses and problems are easily uncovered. Design alternatives can be explored quickly by simulating the design being proposed.&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===A CRC Example===&lt;br /&gt;
To better understand how the CRC cards work together, let us consider a simple student enrollment problem,where we are required to model the students enrolled in different courses. We can easily define the &amp;lt;b&amp;gt;Student CRC Card&amp;lt;/b&amp;gt; as having attributes such as student name, student id and responsibilities that enable a student to enroll in a course or drop the course. In this particular instance, the collaborating class would be the &amp;lt;b&amp;gt;Course&amp;lt;/b&amp;gt; class. The &amp;lt;b&amp;gt;Course CRC Card&amp;lt;/b&amp;gt; can in turn be visualized as having its own responsibilities, such as having attributes like Course id, course name and the collaborating class would be the &amp;lt;b&amp;gt;Instructor &lt;br /&gt;
class&amp;lt;/b&amp;gt;. The CRC cards for the Student class and the Course Class are shown below.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:Stud_enr_Crc.jpg|frame|center|Student and Course CRC Card]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
There are also several practical designs that use the CRC card model to design Object oriented software design. The  [http://www.extremeprogramming.org/example/crcsim.html Simulator for Coffee Maker] explores an [http://en.wikipedia.org/wiki/Extreme_Programming Extreme Programming] approach combined with CRC card technique to come up with a design for the coffee maker.&lt;br /&gt;
&lt;br /&gt;
Another interesting approach using CRC cards is the design for the [http://www.math-cs.gordon.edu/courses/cps211/ATMExample/CRCCards.html ATM Machine]&lt;br /&gt;
&lt;br /&gt;
===Advantages of CRC cards===&lt;br /&gt;
There are a few advantages of CRC cards that make it a preferable model in many designs. Some of the advantages of the CRC card design method are&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
:* CRC cards can allow designers to easily make audience understand a very complex system. In essence it allows for building more complex designs by slowly building the interactions between the collaborating classes, one by one.&lt;br /&gt;
:* CRC cards are a simple technique and it can be easily used by anyone with very little training and does not require any expensive computing resources(a board or a paper and a pen would suffice).&lt;br /&gt;
:* CRC is fundamentally a brainstorming tool, enabling different people in a team to come up with the design by collaborating, enabling everyone in the team to contribute&lt;br /&gt;
:* CRC can be used with other formal object oriented design methodologies such as [http://en.wikipedia.org/wiki/Extreme_Programming Extreme Programming] (an [http://en.wikipedia.org/wiki/Agile_Modeling Agile] development Technique) and can be used along with modeling languages such as [http://en.wikipedia.org/wiki/Unified_Modeling_Language Unified Modeling Language(UML)]&lt;br /&gt;
&lt;br /&gt;
==Software for CRC Cards==&lt;br /&gt;
CRC cards have limited scope. If we go about designing a huge project, the scope spans many classes and interactions between them. The tedious task here is to maintain the CRC cards and properly formulate interaction between them. &lt;br /&gt;
We need software for CRC Cards for the following reasons:&lt;br /&gt;
:* &amp;lt;b&amp;gt;Designing Scenario:&amp;lt;/b&amp;gt;  A scenario represents series of steps in which classes and objects communicate. There can be references to other cards or scenarios. &lt;br /&gt;
:* &amp;lt;b&amp;gt;Modeling :&amp;lt;/b&amp;gt;  Software provides an easy way to segregate cards and objects into different diagrams. Thus we can model our problem with different functionality very easily.&lt;br /&gt;
:* &amp;lt;b&amp;gt;Simulation :&amp;lt;/b&amp;gt; Software can provide simulation of the design. This might include single-stepping a scenario forwards/backwards or jumping to a specific location in the scenario stack of a multiple scenario simulation&lt;br /&gt;
:* &amp;lt;b&amp;gt;Synchronization and Dependencies:&amp;lt;/b&amp;gt; Software can maintain relationships between cards, scenarios as design changes take place. If a card references other cards or classes, those cards are generated automatically. Also any name changes and cross references between objects are instantly updated. &lt;br /&gt;
:* &amp;lt;b&amp;gt;Revision history and Version Control :&amp;lt;/b&amp;gt; Software for CRC cards supports changes to CRC cards. It is easy to model and keep track of all changes to a CRC card. This is extremely helpful in tracking the design changes in CRC cards.&lt;br /&gt;
&lt;br /&gt;
==Designing Software==&lt;br /&gt;
The steps to design software for CRC cards are:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Create CRC Cards&amp;lt;/b&amp;gt; : A CRC model is usually created by an individual or small group of designers during the early phase of an object-oriented development project.The figure shows the design of hierarchy of classes. These set of class used for drawing objects are shown. We can see TShape class has a superclass called TObject and two subclasses, TBox and TCircle. Lets assume we create new class TWindow derived from the superclass TObject.  [[Image:Design.png|thumb|Description]]&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Assign Responsibilities&amp;lt;/b&amp;gt; : Once a set of classes are defined, behaviors can be assigned that will provide the functions of the application. For example, the TShape card has responsibilities ''Initialize'' to create it and ''Draw'' to illustrate it on the diagram.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Add Attributes&amp;lt;/b&amp;gt; : Attributes of classes may also be identified in a CRC Card.The TShape class has attributes fPosition, fType and fSelected.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Define and simulate Scenario&amp;lt;/b&amp;gt; : A scenario describes a sequence of steps in the design using the responsibilities of a group of collaborating classes. Collaboration between classes refers to a client object that uses a responsibility performed by a server object. Often a class must call upon several collaborating classes to implement one of its responsibilities.A scenario describes what happens in the system from a high-level, user's point of view.&lt;br /&gt;
[[Image:Scenario.png|thumb|Description]]&lt;br /&gt;
&lt;br /&gt;
Consider situation to the right. We have defined two CRC cards with their responsibility. A scenario defines several steps. Each step in a scenario has a Client, Server and Responsibility field. For each step, a client class uses a responsibility of a server class&lt;br /&gt;
&lt;br /&gt;
The Open Document scenario in the picture references the Initialize Document sub-scenario by specifying its server class ''Document'' in the server field and its scenario name in the Responsibility field. The first step in the Initialize Document sub-scenario uses ''Document'' as the server class name. By single-stepping forwards, backwards or through each sub-scenario, bugs in the design can be identified and corrected early.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Partition the Design&amp;lt;/b&amp;gt; : As the number of CRC cards in the design grow, they can be grouped by function. By using Software for CRC cards,we can draw separate diagrams to partition the model into different subject areas. &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Inheritance Graph&amp;lt;/b&amp;gt; : An automated tool can generate an inheritance graph from information on CRC cards. This diagram can concisely illustrate the big picture of a large project that might contain hundreds of classes and dozens of diagrams.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Verify Your Work &amp;lt;/b&amp;gt; : Creating and simulating scenarios will help verify that a design is correct and complete. A CRC software can perform other error checks to locate design problems. For example, responsibilities that are not used in any scenarios may indicate that the design is incomplete or perhaps the responsibility isn't needed. Likewise, a card that is not used by any collaboration may not be needed.&lt;br /&gt;
&lt;br /&gt;
==Software Development Process for Object Oriented Development==&lt;br /&gt;
&lt;br /&gt;
Software Development Life Cycles are different for a standard development process and for Object Oriented development. This difference needs to be understood in order to know how to meet the benchmarks set for the project. There are multiple processes that are used in software development, the most common ones in use being Waterfall model and Spiral model. The Waterfall model is progression based and the Spiral model is iterative.&lt;br /&gt;
&lt;br /&gt;
We need to understand that the uniqueness of Object Oriented SDLCs comes from the fact that it is more user centric as compared to standard SDLCs that are more system centric. We will now see which models work for Object Oriented SDLCs (OO SDLCs) and which don’t. CRC cards play a very important role in an Object Oriented SDLC. Thus, figuring out which models work well for OO SDLCs will result in understanding which models use CRC cards and why.&lt;br /&gt;
 &lt;br /&gt;
====The Waterfall Model====&lt;br /&gt;
&lt;br /&gt;
The Waterfall model is implemented in multiple phases with each phase having a clear demarcation in terms of its functionality and deliverable. It uses clear stepping stones to come up with deliverables for each deadline. In this case, there are multiple ways to measure progress and methods by which to audit internally and apply checkpoints.&lt;br /&gt;
&lt;br /&gt;
The downside of the Waterfall model lies in the fact that it is a very rigid model that does not offer much in terms of leeway when it comes to deliverables and what each phase in the cycle has to offer. The process is also overly mechanical and over time, just ends up being boring.&lt;br /&gt;
&lt;br /&gt;
Owing to the emphasis on checkpoints and deliverables with strict deadlines, in most cases the analysis and design phases are usually cut short and thus, the project may veer very far from reality. The users are involved only in the requirement gathering phase. This might result in mistranslation of the requirements of the user into what may be an amazing final product but something that the user did not even ask for.&lt;br /&gt;
 &lt;br /&gt;
====The Spiral Model====&lt;br /&gt;
This model iteratively goes through the phases of analysis, design, prototyping and testing after the initial requirements gathering phase. With each iteration, the product is improved based on the feedback from testing in the previous iteration. If required, the outcome of each phase is analyzed, revised and the next prototype is developed after the design is revised, if pertinent. The products from the first phase are not abandoned, they are revised. Evidently, this model is non-linear in nature.&lt;br /&gt;
&lt;br /&gt;
After the first pass through the checkpoint, we can conclude that the work so far is adequate, but not final. The model places emphasis on the iterative process and on the development of standard prototypes at the end of each iteration. At the end of every cycle, we notice the shortcomings from the previous cycle and might end up having to redo all the work in the previous cycle. This proves to be a complete waste of time and effort. All the effort now goes into developing the end point for an older cycle, which makes the model ineffective for the current cycle.&lt;br /&gt;
&lt;br /&gt;
One of the major drawbacks of such a non linear model is that the cost effectiveness and risk analysis cannot be analyzed thoroughly.&lt;br /&gt;
 &lt;br /&gt;
====Why Waterfall and Spiral Models are not useful====&lt;br /&gt;
&lt;br /&gt;
The strength of OO model depends on the idea that design and deployment come together. In the case of a spiral model, this works to make the spiral tighter. Since the waterfall model places over importance on deliverables and user involvement is minimal, which is one of the key focuses of OO SLDCs using CRC cards, the model is considered ineffective. The Spiral model involves multiple revisions of the same idea. When a set of cards have been developed, it would make sense to refine the idea presented in the card but not to redefine them over and over, which may be the case. This does not serve the purpose of actually convening a CRC discussion among the team to draw up cards corresponding to the user requirement. Moreover, in the case of the Spiral model, we would need to convene multiple such meetings at each iteration, which would drastically bring down the overall productivity of the team. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==CRC Cards in Software Development Process==&lt;br /&gt;
&lt;br /&gt;
The power of CRC cards for OOP development is in the group session that employs them.  The use of CRC cards is an excellent way for people to begin to grasp the underlying idea of object oriented approach. CRC cards are used in a few steps of the software development process such as Analysis and Design.&lt;br /&gt;
&lt;br /&gt;
===CRC Cards for Analysis===&lt;br /&gt;
&lt;br /&gt;
CRC cards and CRC card sessions are good at organizing and spreading domain knowledge in the analysis phase.  When building an object–oriented application, the focus of the CRC card sessions is on analyzing and describing the problem.  In this phase, the group identifies the objects that are relevant to the application.  Before going to the CRC card session, the team must be aware of the domain classes and frameworks that exist to help them model the problem. During the session, they can decide if the existing ones can be used for the new application.&lt;br /&gt;
&lt;br /&gt;
'''Advantages of using CRC cards in Analysis phase:'''&lt;br /&gt;
&lt;br /&gt;
* People from all phases of the project are involved in the card sessions for problem modeling. The names of the classes and responsibilities are created, argued and agreed upon by the team members at the start itself in order to avoid conflicts later. This gives rise to common project and product vocabulary across different roles.&lt;br /&gt;
&lt;br /&gt;
* Domain knowledge already known is shared in the sessions. Also, missing domain knowledge is identified.&lt;br /&gt;
 &lt;br /&gt;
* Role plays are conducted during these sessions that help spread knowledge about OO concepts.&lt;br /&gt;
&lt;br /&gt;
* These sessions can be used to create a live prototype of what the application is supposed to do. This can be shown to clients as well so that the team receives feedback on their understanding of the requirements.&lt;br /&gt;
 &lt;br /&gt;
* A CRC card session will help the team walk through the requirements and identify any ambiguities.&lt;br /&gt;
&lt;br /&gt;
At the end of the analysis phase, the CRC elements that will be available are:&lt;br /&gt;
&lt;br /&gt;
* '''Classes:''' The classes identified in this phase directly reflect the concepts of the application that is being analyzed. It may not be modeled in terms of software system but it is useful in describing how the application works. However, at this stage the distinction between objects and classes may not be clear.&lt;br /&gt;
&lt;br /&gt;
* '''Responsibilities:'''  The responsibilities that are assigned to the classes in this phase are of relatively higher level.&lt;br /&gt;
&lt;br /&gt;
===CRC Cards for Design===&lt;br /&gt;
 &lt;br /&gt;
During the CRC cards design sessions, other relevant classes are added, if any. &amp;quot;While an analysis must reflect the real world of the user, the design must reflect the real world of the implementers.&amp;quot;[5] A CRC card tool may be helpful for saving, illustrating and documenting a design.&lt;br /&gt;
&lt;br /&gt;
'''Advantages of using CRC cards in Design phase:'''&lt;br /&gt;
&lt;br /&gt;
* These sessions help the team members concentrate on taking the design decisions for the application. These design decisions also include performance, efficiency and other constraints.&lt;br /&gt;
&lt;br /&gt;
* By walking through the scenarios that were seen during the analysis phase, the implementers can give the testers an overview of how the application should work.&lt;br /&gt;
&lt;br /&gt;
* Using CRC cards forces decision to be made up front in front of the team, thus any conflicts can be resolved right there.&lt;br /&gt;
&lt;br /&gt;
* Design constraints such as target environment, language, UI, performance etc., can be discussed during these sessions to check if the design can be implemented.&lt;br /&gt;
&lt;br /&gt;
==Summary==&lt;br /&gt;
Software for CRC cards are immensely helpful in designing and modeling software development using CRC cards.As the size of object-oriented system grow, it becomes increasingly difficult to model the problem with index based CRC cards. Thus an automated tool is required to maintain design and clear functionality.&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Unified_Modeling_Language Unified Modeling Language(UML)]&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Agile_Modeling Agile Modelling]&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Extreme_Programming Extreme Programming]&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
[1] [http://c2.com/doc/oopsla89/paper.html  A Laboratory For Teaching Object-Oriented Thinking]&lt;br /&gt;
&lt;br /&gt;
[2] [http://www.extremeprogramming.org/rules/crccards.html CRC Cards]&lt;br /&gt;
&lt;br /&gt;
[3] [http://www.extremeprogramming.org/example/crcsim.html A Simulator for Coffee Maker]&lt;br /&gt;
&lt;br /&gt;
[4] [http://www.math-cs.gordon.edu/courses/cps211/ATMExample/CRCCards.html CRC Card for ATM]&lt;br /&gt;
&lt;br /&gt;
[5] &amp;quot;Using CRC Cards: An Informal Approach to Object-Oriented Development&amp;quot; by Nancy M.Wilkinson&lt;br /&gt;
&lt;br /&gt;
==External Links==&lt;br /&gt;
* [http://c2.com/doc/oopsla89/paper.html A Laboratory For Teaching Object-Oriented Thinking] by Ward Cunningham and Kent Beck&lt;br /&gt;
* [http://books.google.com/books?id=SGOyQai2TboC&amp;amp;printsec=frontcover&amp;amp;dq=CRC+card+book&amp;amp;hl=en&amp;amp;ei=xSOaTKSaNISclgfRqtkK&amp;amp;sa=X&amp;amp;oi=book_result&amp;amp;ct=result&amp;amp;resnum=1&amp;amp;ved=0CDYQ6AEwAA#v=onepage&amp;amp;q&amp;amp;f=false The CRC card book] by David Bellin, Susan Suchman Simone&lt;br /&gt;
&lt;br /&gt;
* [http://www.agilemodeling.com/artifacts/crcModel.htm Modelling CRC Cards]&lt;br /&gt;
* [http://www.excelsoftware.com/quickcrcwin.html Quick CRC]&lt;/div&gt;</summary>
		<author><name>Pgjalisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch1_1w11_ap&amp;diff=65124</id>
		<title>CSC/ECE 517 Fall 2012/ch1 1w11 ap</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch1_1w11_ap&amp;diff=65124"/>
		<updated>2012-09-15T03:00:26Z</updated>

		<summary type="html">&lt;p&gt;Pgjalisa: /* CRC Cards in Software Development Process */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&amp;lt;b&amp;gt; CRC Cards, &amp;lt;/b&amp;gt; also known as [http://en.wikipedia.org/wiki/Class-responsibility-collaboration_card &amp;lt;b&amp;gt; Class-Responsibility-Collaboration &amp;lt;sup&amp;gt;&amp;lt;/sup&amp;gt;&amp;lt;/b&amp;gt;] cards are a brainstorming tool to enable collaboration across different teams or individuals in contribution to design, usually used in Object Oriented Software development. This was  proposed by &amp;lt;b&amp;gt;Ward Cunningham&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;Kent Beck&amp;lt;/b&amp;gt;&amp;lt;sup&amp;gt;[http://c2.com/doc/oopsla89/paper.html]&amp;lt;/sup&amp;gt;. The CRC card can be viewed as an index card, with the following details:&lt;br /&gt;
[[Image:crc-card.gif|frame|right|CRC Card Structure]]&lt;br /&gt;
&lt;br /&gt;
:* The Top of the card usually bears the name of the class.&lt;br /&gt;
:* The Left side of the card has the responsibilities of the class.&lt;br /&gt;
:* The Right side of the card has the collaborating classes corresponding to each of the responsibilities listed in the left side.&lt;br /&gt;
&lt;br /&gt;
Thus in general, a CRC session can be viewed as the interaction between a set of collaborating classes for a particular [http://en.wikipedia.org/wiki/Use_case Use case]. &amp;lt;br&amp;gt; &amp;lt;br&amp;gt; According to &amp;lt;sup&amp;gt;[http://www.extremeprogramming.org/rules/crccards.html]&amp;lt;/sup&amp;gt;&amp;lt;i&amp;gt;A CRC session proceeds with someone simulating the system by talking about which objects send messages to other objects. By stepping through the process' weaknesses and problems are easily uncovered. Design alternatives can be explored quickly by simulating the design being proposed.&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===A CRC Example===&lt;br /&gt;
To better understand how the CRC cards work together, let us consider a simple student enrollment problem,where we are required to model the students enrolled in different courses. We can easily define the &amp;lt;b&amp;gt;Student CRC Card&amp;lt;/b&amp;gt; as having attributes such as student name, student id and responsibilities that enable a student to enroll in a course or drop the course. In this particular instance, the collaborating class would be the &amp;lt;b&amp;gt;Course&amp;lt;/b&amp;gt; class. The &amp;lt;b&amp;gt;Course CRC Card&amp;lt;/b&amp;gt; can in turn be visualized as having its own responsibilities, such as having attributes like Course id, course name and the collaborating class would be the &amp;lt;b&amp;gt;Instructor &lt;br /&gt;
class&amp;lt;/b&amp;gt;. The CRC cards for the Student class and the Course Class are shown below.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:Stud_enr_Crc.jpg|frame|center|Student and Course CRC Card]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
There are also several practical designs that use the CRC card model to design Object oriented software design. The  [http://www.extremeprogramming.org/example/crcsim.html Simulator for Coffee Maker] explores an [http://en.wikipedia.org/wiki/Extreme_Programming Extreme Programming] approach combined with CRC card technique to come up with a design for the coffee maker.&lt;br /&gt;
&lt;br /&gt;
Another interesting approach using CRC cards is the design for the [http://www.math-cs.gordon.edu/courses/cps211/ATMExample/CRCCards.html ATM Machine]&lt;br /&gt;
&lt;br /&gt;
===Advantages of CRC cards===&lt;br /&gt;
There are a few advantages of CRC cards that make it a preferable model in many designs. Some of the advantages of the CRC card design method are&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
:* CRC cards can allow designers to easily make audience understand a very complex system. In essence it allows for building more complex designs by slowly building the interactions between the collaborating classes, one by one.&lt;br /&gt;
:* CRC cards are a simple technique and it can be easily used by anyone with very little training and does not require any expensive computing resources(a board or a paper and a pen would suffice).&lt;br /&gt;
:* CRC is fundamentally a brainstorming tool, enabling different people in a team to come up with the design by collaborating, enabling everyone in the team to contribute&lt;br /&gt;
:* CRC can be used with other formal object oriented design methodologies such as [http://en.wikipedia.org/wiki/Extreme_Programming Extreme Programming] (an [http://en.wikipedia.org/wiki/Agile_Modeling Agile] development Technique) and can be used along with modeling languages such as [http://en.wikipedia.org/wiki/Unified_Modeling_Language Unified Modeling Language(UML)]&lt;br /&gt;
&lt;br /&gt;
==Software for CRC Cards==&lt;br /&gt;
CRC cards have limited scope. If we go about designing a huge project, the scope spans many classes and interactions between them. The tedious task here is to maintain the CRC cards and properly formulate interaction between them. &lt;br /&gt;
We need software for CRC Cards for the following reasons:&lt;br /&gt;
:* &amp;lt;b&amp;gt;Designing Scenario:&amp;lt;/b&amp;gt;  A scenario represents series of steps in which classes and objects communicate. There can be references to other cards or scenarios. &lt;br /&gt;
:* &amp;lt;b&amp;gt;Modeling :&amp;lt;/b&amp;gt;  Software provides an easy way to segregate cards and objects into different diagrams. Thus we can model our problem with different functionality very easily.&lt;br /&gt;
:* &amp;lt;b&amp;gt;Simulation :&amp;lt;/b&amp;gt; Software can provide simulation of the design. This might include single-stepping a scenario forwards/backwards or jumping to a specific location in the scenario stack of a multiple scenario simulation&lt;br /&gt;
:* &amp;lt;b&amp;gt;Synchronization and Dependencies:&amp;lt;/b&amp;gt; Software can maintain relationships between cards, scenarios as design changes take place. If a card references other cards or classes, those cards are generated automatically. Also any name changes and cross references between objects are instantly updated. &lt;br /&gt;
:* &amp;lt;b&amp;gt;Revision history and Version Control :&amp;lt;/b&amp;gt; Software for CRC cards supports changes to CRC cards. It is easy to model and keep track of all changes to a CRC card. This is extremely helpful in tracking the design changes in CRC cards.&lt;br /&gt;
&lt;br /&gt;
==Designing Software==&lt;br /&gt;
The steps to design software for CRC cards are:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Create CRC Cards&amp;lt;/b&amp;gt; : A CRC model is usually created by an individual or small group of designers during the early phase of an object-oriented development project.The figure shows the design of hierarchy of classes. These set of class used for drawing objects are shown. We can see TShape class has a superclass called TObject and two subclasses, TBox and TCircle. Lets assume we create new class TWindow derived from the superclass TObject.  [[Image:Design.png|thumb|Description]]&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Assign Responsibilities&amp;lt;/b&amp;gt; : Once a set of classes are defined, behaviors can be assigned that will provide the functions of the application. For example, the TShape card has responsibilities ''Initialize'' to create it and ''Draw'' to illustrate it on the diagram.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Add Attributes&amp;lt;/b&amp;gt; : Attributes of classes may also be identified in a CRC Card.The TShape class has attributes fPosition, fType and fSelected.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Define and simulate Scenario&amp;lt;/b&amp;gt; : A scenario describes a sequence of steps in the design using the responsibilities of a group of collaborating classes. Collaboration between classes refers to a client object that uses a responsibility performed by a server object. Often a class must call upon several collaborating classes to implement one of its responsibilities.A scenario describes what happens in the system from a high-level, user's point of view.&lt;br /&gt;
[[Image:Scenario.png|thumb|Description]]&lt;br /&gt;
&lt;br /&gt;
Consider situation to the right. We have defined two CRC cards with their responsibility. A scenario defines several steps. Each step in a scenario has a Client, Server and Responsibility field. For each step, a client class uses a responsibility of a server class&lt;br /&gt;
&lt;br /&gt;
The Open Document scenario in the picture references the Initialize Document sub-scenario by specifying its server class ''Document'' in the server field and its scenario name in the Responsibility field. The first step in the Initialize Document sub-scenario uses ''Document'' as the server class name. By single-stepping forwards, backwards or through each sub-scenario, bugs in the design can be identified and corrected early.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Partition the Design&amp;lt;/b&amp;gt; : As the number of CRC cards in the design grow, they can be grouped by function. By using Software for CRC cards,we can draw separate diagrams to partition the model into different subject areas. &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Inheritance Graph&amp;lt;/b&amp;gt; : An automated tool can generate an inheritance graph from information on CRC cards. This diagram can concisely illustrate the big picture of a large project that might contain hundreds of classes and dozens of diagrams.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Verify Your Work &amp;lt;/b&amp;gt; : Creating and simulating scenarios will help verify that a design is correct and complete. A CRC software can perform other error checks to locate design problems. For example, responsibilities that are not used in any scenarios may indicate that the design is incomplete or perhaps the responsibility isn't needed. Likewise, a card that is not used by any collaboration may not be needed.&lt;br /&gt;
&lt;br /&gt;
==Software Development Process for Object Oriented Development==&lt;br /&gt;
&lt;br /&gt;
Software Development Life Cycles are different for a standard development process and for Object Oriented development. This difference needs to be understood in order to know how to meet the benchmarks set for the project. There are multiple processes that are used in software development, the most common ones in use being Waterfall model and Spiral model. The Waterfall model is progression based and the Spiral model is iterative.&lt;br /&gt;
&lt;br /&gt;
We need to understand that the uniqueness of Object Oriented SDLCs comes from the fact that it is more user centric as compared to standard SDLCs that are more system centric. We will now see which models work for Object Oriented SDLCs (OO SDLCs) and which don’t. CRC cards play a very important role in an Object Oriented SDLC. Thus, figuring out which models work well for OO SDLCs will result in understanding which models use CRC cards and why.&lt;br /&gt;
 &lt;br /&gt;
====The Waterfall Model====&lt;br /&gt;
&lt;br /&gt;
The Waterfall model is implemented in multiple phases with each phase having a clear demarcation in terms of its functionality and deliverable. It uses clear stepping stones to come up with deliverables for each deadline. In this case, there are multiple ways to measure progress and methods by which to audit internally and apply checkpoints.&lt;br /&gt;
&lt;br /&gt;
The downside of the Waterfall model lies in the fact that it is a very rigid model that does not offer much in terms of leeway when it comes to deliverables and what each phase in the cycle has to offer. The process is also overly mechanical and over time, just ends up being boring.&lt;br /&gt;
&lt;br /&gt;
Owing to the emphasis on checkpoints and deliverables with strict deadlines, in most cases the analysis and design phases are usually cut short and thus, the project may veer very far from reality. The users are involved only in the requirement gathering phase. This might result in mistranslation of the requirements of the user into what may be an amazing final product but something that the user did not even ask for.&lt;br /&gt;
 &lt;br /&gt;
====The Spiral Model====&lt;br /&gt;
This model iteratively goes through the phases of analysis, design, prototyping and testing after the initial requirements gathering phase. With each iteration, the product is improved based on the feedback from testing in the previous iteration. If required, the outcome of each phase is analyzed, revised and the next prototype is developed after the design is revised, if pertinent. The products from the first phase are not abandoned, they are revised. Evidently, this model is non-linear in nature.&lt;br /&gt;
&lt;br /&gt;
After the first pass through the checkpoint, we can conclude that the work so far is adequate, but not final. The model places emphasis on the iterative process and on the development of standard prototypes at the end of each iteration. At the end of every cycle, we notice the shortcomings from the previous cycle and might end up having to redo all the work in the previous cycle. This proves to be a complete waste of time and effort. All the effort now goes into developing the end point for an older cycle, which makes the model ineffective for the current cycle.&lt;br /&gt;
&lt;br /&gt;
One of the major drawbacks of such a non linear model is that the cost effectiveness and risk analysis cannot be analyzed thoroughly.&lt;br /&gt;
 &lt;br /&gt;
====Why Waterfall and Spiral Models are not useful====&lt;br /&gt;
&lt;br /&gt;
The strength of OO model depends on the idea that design and deployment come together. In the case of a spiral model, this works to make the spiral tighter. Since the waterfall model places over importance on deliverables and user involvement is minimal, which is one of the key focuses of OO SLDCs using CRC cards, the model is considered ineffective. The Spiral model involves multiple revisions of the same idea. When a set of cards have been developed, it would make sense to refine the idea presented in the card but not to redefine them over and over, which may be the case. This does not serve the purpose of actually convening a CRC discussion among the team to draw up cards corresponding to the user requirement. Moreover, in the case of the Spiral model, we would need to convene multiple such meetings at each iteration, which would drastically bring down the overall productivity of the team. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The power of CRC cards for OOP development is in the group session that employs them.  The use of CRC cards is an excellent way for people to begin to grasp the underlying idea of object oriented approach. CRC cards are used in a few steps of the software development process such as Analysis and Design.&lt;br /&gt;
&lt;br /&gt;
===CRC Cards for Analysis===&lt;br /&gt;
&lt;br /&gt;
CRC cards and CRC card sessions are good at organizing and spreading domain knowledge in the analysis phase.  When building an object–oriented application, the focus of the CRC card sessions is on analyzing and describing the problem.  In this phase, the group identifies the objects that are relevant to the application.  Before going to the CRC card session, the team must be aware of the domain classes and frameworks that exist to help them model the problem. During the session, they can decide if the existing ones can be used for the new application.&lt;br /&gt;
&lt;br /&gt;
'''Advantages of using CRC cards in Analysis phase:'''&lt;br /&gt;
&lt;br /&gt;
* People from all phases of the project are involved in the card sessions for problem modeling. The names of the classes and responsibilities are created, argued and agreed upon by the team members at the start itself in order to avoid conflicts later. This gives rise to common project and product vocabulary across different roles.&lt;br /&gt;
&lt;br /&gt;
* Domain knowledge already known is shared in the sessions. Also, missing domain knowledge is identified.&lt;br /&gt;
 &lt;br /&gt;
* Role plays are conducted during these sessions that help spread knowledge about OO concepts.&lt;br /&gt;
&lt;br /&gt;
* These sessions can be used to create a live prototype of what the application is supposed to do. This can be shown to clients as well so that the team receives feedback on their understanding of the requirements.&lt;br /&gt;
 &lt;br /&gt;
* A CRC card session will help the team walk through the requirements and identify any ambiguities.&lt;br /&gt;
&lt;br /&gt;
At the end of the analysis phase, the CRC elements that will be available are:&lt;br /&gt;
&lt;br /&gt;
* '''Classes:''' The classes identified in this phase directly reflect the concepts of the application that is being analyzed. It may not be modeled in terms of software system but it is useful in describing how the application works. However, at this stage the distinction between objects and classes may not be clear.&lt;br /&gt;
&lt;br /&gt;
* '''Responsibilities:'''  The responsibilities that are assigned to the classes in this phase are of relatively higher level.&lt;br /&gt;
&lt;br /&gt;
===CRC Cards for Design===&lt;br /&gt;
 &lt;br /&gt;
During the CRC cards design sessions, other relevant classes are added, if any. &amp;quot;While an analysis must reflect the real world of the user, the design must reflect the real world of the implementers.&amp;quot;[5] A CRC card tool may be helpful for saving, illustrating and documenting a design.&lt;br /&gt;
&lt;br /&gt;
'''Advantages of using CRC cards in Design phase:'''&lt;br /&gt;
&lt;br /&gt;
* These sessions help the team members concentrate on taking the design decisions for the application. These design decisions also include performance, efficiency and other constraints.&lt;br /&gt;
&lt;br /&gt;
* By walking through the scenarios that were seen during the analysis phase, the implementers can give the testers an overview of how the application should work.&lt;br /&gt;
&lt;br /&gt;
* Using CRC cards forces decision to be made up front in front of the team, thus any conflicts can be resolved right there.&lt;br /&gt;
&lt;br /&gt;
* Design constraints such as target environment, language, UI, performance etc., can be discussed during these sessions to check if the design can be implemented.&lt;br /&gt;
&lt;br /&gt;
==Summary==&lt;br /&gt;
Software for CRC cards are immensely helpful in designing and modeling software development using CRC cards.As the size of object-oriented system grow, it becomes increasingly difficult to model the problem with index based CRC cards. Thus an automated tool is required to maintain design and clear functionality.&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Unified_Modeling_Language Unified Modeling Language(UML)]&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Agile_Modeling Agile Modelling]&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Extreme_Programming Extreme Programming]&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
[1] [http://c2.com/doc/oopsla89/paper.html  A Laboratory For Teaching Object-Oriented Thinking]&lt;br /&gt;
&lt;br /&gt;
[2] [http://www.extremeprogramming.org/rules/crccards.html CRC Cards]&lt;br /&gt;
&lt;br /&gt;
[3] [http://www.extremeprogramming.org/example/crcsim.html A Simulator for Coffee Maker]&lt;br /&gt;
&lt;br /&gt;
[4] [http://www.math-cs.gordon.edu/courses/cps211/ATMExample/CRCCards.html CRC Card for ATM]&lt;br /&gt;
&lt;br /&gt;
[5] &amp;quot;Using CRC Cards: An Informal Approach to Object-Oriented Development&amp;quot; by Nancy M.Wilkinson&lt;br /&gt;
&lt;br /&gt;
==External Links==&lt;br /&gt;
* [http://c2.com/doc/oopsla89/paper.html A Laboratory For Teaching Object-Oriented Thinking] by Ward Cunningham and Kent Beck&lt;br /&gt;
* [http://books.google.com/books?id=SGOyQai2TboC&amp;amp;printsec=frontcover&amp;amp;dq=CRC+card+book&amp;amp;hl=en&amp;amp;ei=xSOaTKSaNISclgfRqtkK&amp;amp;sa=X&amp;amp;oi=book_result&amp;amp;ct=result&amp;amp;resnum=1&amp;amp;ved=0CDYQ6AEwAA#v=onepage&amp;amp;q&amp;amp;f=false The CRC card book] by David Bellin, Susan Suchman Simone&lt;br /&gt;
&lt;br /&gt;
* [http://www.agilemodeling.com/artifacts/crcModel.htm Modelling CRC Cards]&lt;br /&gt;
* [http://www.excelsoftware.com/quickcrcwin.html Quick CRC]&lt;/div&gt;</summary>
		<author><name>Pgjalisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch1_1w11_ap&amp;diff=65123</id>
		<title>CSC/ECE 517 Fall 2012/ch1 1w11 ap</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch1_1w11_ap&amp;diff=65123"/>
		<updated>2012-09-15T03:00:11Z</updated>

		<summary type="html">&lt;p&gt;Pgjalisa: /* CRC Cards in Software Development Process */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&amp;lt;b&amp;gt; CRC Cards, &amp;lt;/b&amp;gt; also known as [http://en.wikipedia.org/wiki/Class-responsibility-collaboration_card &amp;lt;b&amp;gt; Class-Responsibility-Collaboration &amp;lt;sup&amp;gt;&amp;lt;/sup&amp;gt;&amp;lt;/b&amp;gt;] cards are a brainstorming tool to enable collaboration across different teams or individuals in contribution to design, usually used in Object Oriented Software development. This was  proposed by &amp;lt;b&amp;gt;Ward Cunningham&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;Kent Beck&amp;lt;/b&amp;gt;&amp;lt;sup&amp;gt;[http://c2.com/doc/oopsla89/paper.html]&amp;lt;/sup&amp;gt;. The CRC card can be viewed as an index card, with the following details:&lt;br /&gt;
[[Image:crc-card.gif|frame|right|CRC Card Structure]]&lt;br /&gt;
&lt;br /&gt;
:* The Top of the card usually bears the name of the class.&lt;br /&gt;
:* The Left side of the card has the responsibilities of the class.&lt;br /&gt;
:* The Right side of the card has the collaborating classes corresponding to each of the responsibilities listed in the left side.&lt;br /&gt;
&lt;br /&gt;
Thus in general, a CRC session can be viewed as the interaction between a set of collaborating classes for a particular [http://en.wikipedia.org/wiki/Use_case Use case]. &amp;lt;br&amp;gt; &amp;lt;br&amp;gt; According to &amp;lt;sup&amp;gt;[http://www.extremeprogramming.org/rules/crccards.html]&amp;lt;/sup&amp;gt;&amp;lt;i&amp;gt;A CRC session proceeds with someone simulating the system by talking about which objects send messages to other objects. By stepping through the process' weaknesses and problems are easily uncovered. Design alternatives can be explored quickly by simulating the design being proposed.&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===A CRC Example===&lt;br /&gt;
To better understand how the CRC cards work together, let us consider a simple student enrollment problem,where we are required to model the students enrolled in different courses. We can easily define the &amp;lt;b&amp;gt;Student CRC Card&amp;lt;/b&amp;gt; as having attributes such as student name, student id and responsibilities that enable a student to enroll in a course or drop the course. In this particular instance, the collaborating class would be the &amp;lt;b&amp;gt;Course&amp;lt;/b&amp;gt; class. The &amp;lt;b&amp;gt;Course CRC Card&amp;lt;/b&amp;gt; can in turn be visualized as having its own responsibilities, such as having attributes like Course id, course name and the collaborating class would be the &amp;lt;b&amp;gt;Instructor &lt;br /&gt;
class&amp;lt;/b&amp;gt;. The CRC cards for the Student class and the Course Class are shown below.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:Stud_enr_Crc.jpg|frame|center|Student and Course CRC Card]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
There are also several practical designs that use the CRC card model to design Object oriented software design. The  [http://www.extremeprogramming.org/example/crcsim.html Simulator for Coffee Maker] explores an [http://en.wikipedia.org/wiki/Extreme_Programming Extreme Programming] approach combined with CRC card technique to come up with a design for the coffee maker.&lt;br /&gt;
&lt;br /&gt;
Another interesting approach using CRC cards is the design for the [http://www.math-cs.gordon.edu/courses/cps211/ATMExample/CRCCards.html ATM Machine]&lt;br /&gt;
&lt;br /&gt;
===Advantages of CRC cards===&lt;br /&gt;
There are a few advantages of CRC cards that make it a preferable model in many designs. Some of the advantages of the CRC card design method are&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
:* CRC cards can allow designers to easily make audience understand a very complex system. In essence it allows for building more complex designs by slowly building the interactions between the collaborating classes, one by one.&lt;br /&gt;
:* CRC cards are a simple technique and it can be easily used by anyone with very little training and does not require any expensive computing resources(a board or a paper and a pen would suffice).&lt;br /&gt;
:* CRC is fundamentally a brainstorming tool, enabling different people in a team to come up with the design by collaborating, enabling everyone in the team to contribute&lt;br /&gt;
:* CRC can be used with other formal object oriented design methodologies such as [http://en.wikipedia.org/wiki/Extreme_Programming Extreme Programming] (an [http://en.wikipedia.org/wiki/Agile_Modeling Agile] development Technique) and can be used along with modeling languages such as [http://en.wikipedia.org/wiki/Unified_Modeling_Language Unified Modeling Language(UML)]&lt;br /&gt;
&lt;br /&gt;
==Software for CRC Cards==&lt;br /&gt;
CRC cards have limited scope. If we go about designing a huge project, the scope spans many classes and interactions between them. The tedious task here is to maintain the CRC cards and properly formulate interaction between them. &lt;br /&gt;
We need software for CRC Cards for the following reasons:&lt;br /&gt;
:* &amp;lt;b&amp;gt;Designing Scenario:&amp;lt;/b&amp;gt;  A scenario represents series of steps in which classes and objects communicate. There can be references to other cards or scenarios. &lt;br /&gt;
:* &amp;lt;b&amp;gt;Modeling :&amp;lt;/b&amp;gt;  Software provides an easy way to segregate cards and objects into different diagrams. Thus we can model our problem with different functionality very easily.&lt;br /&gt;
:* &amp;lt;b&amp;gt;Simulation :&amp;lt;/b&amp;gt; Software can provide simulation of the design. This might include single-stepping a scenario forwards/backwards or jumping to a specific location in the scenario stack of a multiple scenario simulation&lt;br /&gt;
:* &amp;lt;b&amp;gt;Synchronization and Dependencies:&amp;lt;/b&amp;gt; Software can maintain relationships between cards, scenarios as design changes take place. If a card references other cards or classes, those cards are generated automatically. Also any name changes and cross references between objects are instantly updated. &lt;br /&gt;
:* &amp;lt;b&amp;gt;Revision history and Version Control :&amp;lt;/b&amp;gt; Software for CRC cards supports changes to CRC cards. It is easy to model and keep track of all changes to a CRC card. This is extremely helpful in tracking the design changes in CRC cards.&lt;br /&gt;
&lt;br /&gt;
==Designing Software==&lt;br /&gt;
The steps to design software for CRC cards are:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Create CRC Cards&amp;lt;/b&amp;gt; : A CRC model is usually created by an individual or small group of designers during the early phase of an object-oriented development project.The figure shows the design of hierarchy of classes. These set of class used for drawing objects are shown. We can see TShape class has a superclass called TObject and two subclasses, TBox and TCircle. Lets assume we create new class TWindow derived from the superclass TObject.  [[Image:Design.png|thumb|Description]]&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Assign Responsibilities&amp;lt;/b&amp;gt; : Once a set of classes are defined, behaviors can be assigned that will provide the functions of the application. For example, the TShape card has responsibilities ''Initialize'' to create it and ''Draw'' to illustrate it on the diagram.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Add Attributes&amp;lt;/b&amp;gt; : Attributes of classes may also be identified in a CRC Card.The TShape class has attributes fPosition, fType and fSelected.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Define and simulate Scenario&amp;lt;/b&amp;gt; : A scenario describes a sequence of steps in the design using the responsibilities of a group of collaborating classes. Collaboration between classes refers to a client object that uses a responsibility performed by a server object. Often a class must call upon several collaborating classes to implement one of its responsibilities.A scenario describes what happens in the system from a high-level, user's point of view.&lt;br /&gt;
[[Image:Scenario.png|thumb|Description]]&lt;br /&gt;
&lt;br /&gt;
Consider situation to the right. We have defined two CRC cards with their responsibility. A scenario defines several steps. Each step in a scenario has a Client, Server and Responsibility field. For each step, a client class uses a responsibility of a server class&lt;br /&gt;
&lt;br /&gt;
The Open Document scenario in the picture references the Initialize Document sub-scenario by specifying its server class ''Document'' in the server field and its scenario name in the Responsibility field. The first step in the Initialize Document sub-scenario uses ''Document'' as the server class name. By single-stepping forwards, backwards or through each sub-scenario, bugs in the design can be identified and corrected early.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Partition the Design&amp;lt;/b&amp;gt; : As the number of CRC cards in the design grow, they can be grouped by function. By using Software for CRC cards,we can draw separate diagrams to partition the model into different subject areas. &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Inheritance Graph&amp;lt;/b&amp;gt; : An automated tool can generate an inheritance graph from information on CRC cards. This diagram can concisely illustrate the big picture of a large project that might contain hundreds of classes and dozens of diagrams.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Verify Your Work &amp;lt;/b&amp;gt; : Creating and simulating scenarios will help verify that a design is correct and complete. A CRC software can perform other error checks to locate design problems. For example, responsibilities that are not used in any scenarios may indicate that the design is incomplete or perhaps the responsibility isn't needed. Likewise, a card that is not used by any collaboration may not be needed.&lt;br /&gt;
&lt;br /&gt;
==CRC Cards in Software Development Process==&lt;br /&gt;
&lt;br /&gt;
==Software Development Process for Object Oriented Development==&lt;br /&gt;
&lt;br /&gt;
Software Development Life Cycles are different for a standard development process and for Object Oriented development. This difference needs to be understood in order to know how to meet the benchmarks set for the project. There are multiple processes that are used in software development, the most common ones in use being Waterfall model and Spiral model. The Waterfall model is progression based and the Spiral model is iterative.&lt;br /&gt;
&lt;br /&gt;
We need to understand that the uniqueness of Object Oriented SDLCs comes from the fact that it is more user centric as compared to standard SDLCs that are more system centric. We will now see which models work for Object Oriented SDLCs (OO SDLCs) and which don’t. CRC cards play a very important role in an Object Oriented SDLC. Thus, figuring out which models work well for OO SDLCs will result in understanding which models use CRC cards and why.&lt;br /&gt;
 &lt;br /&gt;
====The Waterfall Model====&lt;br /&gt;
&lt;br /&gt;
The Waterfall model is implemented in multiple phases with each phase having a clear demarcation in terms of its functionality and deliverable. It uses clear stepping stones to come up with deliverables for each deadline. In this case, there are multiple ways to measure progress and methods by which to audit internally and apply checkpoints.&lt;br /&gt;
&lt;br /&gt;
The downside of the Waterfall model lies in the fact that it is a very rigid model that does not offer much in terms of leeway when it comes to deliverables and what each phase in the cycle has to offer. The process is also overly mechanical and over time, just ends up being boring.&lt;br /&gt;
&lt;br /&gt;
Owing to the emphasis on checkpoints and deliverables with strict deadlines, in most cases the analysis and design phases are usually cut short and thus, the project may veer very far from reality. The users are involved only in the requirement gathering phase. This might result in mistranslation of the requirements of the user into what may be an amazing final product but something that the user did not even ask for.&lt;br /&gt;
 &lt;br /&gt;
====The Spiral Model====&lt;br /&gt;
This model iteratively goes through the phases of analysis, design, prototyping and testing after the initial requirements gathering phase. With each iteration, the product is improved based on the feedback from testing in the previous iteration. If required, the outcome of each phase is analyzed, revised and the next prototype is developed after the design is revised, if pertinent. The products from the first phase are not abandoned, they are revised. Evidently, this model is non-linear in nature.&lt;br /&gt;
&lt;br /&gt;
After the first pass through the checkpoint, we can conclude that the work so far is adequate, but not final. The model places emphasis on the iterative process and on the development of standard prototypes at the end of each iteration. At the end of every cycle, we notice the shortcomings from the previous cycle and might end up having to redo all the work in the previous cycle. This proves to be a complete waste of time and effort. All the effort now goes into developing the end point for an older cycle, which makes the model ineffective for the current cycle.&lt;br /&gt;
&lt;br /&gt;
One of the major drawbacks of such a non linear model is that the cost effectiveness and risk analysis cannot be analyzed thoroughly.&lt;br /&gt;
 &lt;br /&gt;
====Why Waterfall and Spiral Models are not useful====&lt;br /&gt;
&lt;br /&gt;
The strength of OO model depends on the idea that design and deployment come together. In the case of a spiral model, this works to make the spiral tighter. Since the waterfall model places over importance on deliverables and user involvement is minimal, which is one of the key focuses of OO SLDCs using CRC cards, the model is considered ineffective. The Spiral model involves multiple revisions of the same idea. When a set of cards have been developed, it would make sense to refine the idea presented in the card but not to redefine them over and over, which may be the case. This does not serve the purpose of actually convening a CRC discussion among the team to draw up cards corresponding to the user requirement. Moreover, in the case of the Spiral model, we would need to convene multiple such meetings at each iteration, which would drastically bring down the overall productivity of the team. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The power of CRC cards for OOP development is in the group session that employs them.  The use of CRC cards is an excellent way for people to begin to grasp the underlying idea of object oriented approach. CRC cards are used in a few steps of the software development process such as Analysis and Design.&lt;br /&gt;
&lt;br /&gt;
===CRC Cards for Analysis===&lt;br /&gt;
&lt;br /&gt;
CRC cards and CRC card sessions are good at organizing and spreading domain knowledge in the analysis phase.  When building an object–oriented application, the focus of the CRC card sessions is on analyzing and describing the problem.  In this phase, the group identifies the objects that are relevant to the application.  Before going to the CRC card session, the team must be aware of the domain classes and frameworks that exist to help them model the problem. During the session, they can decide if the existing ones can be used for the new application.&lt;br /&gt;
&lt;br /&gt;
'''Advantages of using CRC cards in Analysis phase:'''&lt;br /&gt;
&lt;br /&gt;
* People from all phases of the project are involved in the card sessions for problem modeling. The names of the classes and responsibilities are created, argued and agreed upon by the team members at the start itself in order to avoid conflicts later. This gives rise to common project and product vocabulary across different roles.&lt;br /&gt;
&lt;br /&gt;
* Domain knowledge already known is shared in the sessions. Also, missing domain knowledge is identified.&lt;br /&gt;
 &lt;br /&gt;
* Role plays are conducted during these sessions that help spread knowledge about OO concepts.&lt;br /&gt;
&lt;br /&gt;
* These sessions can be used to create a live prototype of what the application is supposed to do. This can be shown to clients as well so that the team receives feedback on their understanding of the requirements.&lt;br /&gt;
 &lt;br /&gt;
* A CRC card session will help the team walk through the requirements and identify any ambiguities.&lt;br /&gt;
&lt;br /&gt;
At the end of the analysis phase, the CRC elements that will be available are:&lt;br /&gt;
&lt;br /&gt;
* '''Classes:''' The classes identified in this phase directly reflect the concepts of the application that is being analyzed. It may not be modeled in terms of software system but it is useful in describing how the application works. However, at this stage the distinction between objects and classes may not be clear.&lt;br /&gt;
&lt;br /&gt;
* '''Responsibilities:'''  The responsibilities that are assigned to the classes in this phase are of relatively higher level.&lt;br /&gt;
&lt;br /&gt;
===CRC Cards for Design===&lt;br /&gt;
 &lt;br /&gt;
During the CRC cards design sessions, other relevant classes are added, if any. &amp;quot;While an analysis must reflect the real world of the user, the design must reflect the real world of the implementers.&amp;quot;[5] A CRC card tool may be helpful for saving, illustrating and documenting a design.&lt;br /&gt;
&lt;br /&gt;
'''Advantages of using CRC cards in Design phase:'''&lt;br /&gt;
&lt;br /&gt;
* These sessions help the team members concentrate on taking the design decisions for the application. These design decisions also include performance, efficiency and other constraints.&lt;br /&gt;
&lt;br /&gt;
* By walking through the scenarios that were seen during the analysis phase, the implementers can give the testers an overview of how the application should work.&lt;br /&gt;
&lt;br /&gt;
* Using CRC cards forces decision to be made up front in front of the team, thus any conflicts can be resolved right there.&lt;br /&gt;
&lt;br /&gt;
* Design constraints such as target environment, language, UI, performance etc., can be discussed during these sessions to check if the design can be implemented.&lt;br /&gt;
&lt;br /&gt;
==Summary==&lt;br /&gt;
Software for CRC cards are immensely helpful in designing and modeling software development using CRC cards.As the size of object-oriented system grow, it becomes increasingly difficult to model the problem with index based CRC cards. Thus an automated tool is required to maintain design and clear functionality.&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Unified_Modeling_Language Unified Modeling Language(UML)]&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Agile_Modeling Agile Modelling]&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Extreme_Programming Extreme Programming]&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
[1] [http://c2.com/doc/oopsla89/paper.html  A Laboratory For Teaching Object-Oriented Thinking]&lt;br /&gt;
&lt;br /&gt;
[2] [http://www.extremeprogramming.org/rules/crccards.html CRC Cards]&lt;br /&gt;
&lt;br /&gt;
[3] [http://www.extremeprogramming.org/example/crcsim.html A Simulator for Coffee Maker]&lt;br /&gt;
&lt;br /&gt;
[4] [http://www.math-cs.gordon.edu/courses/cps211/ATMExample/CRCCards.html CRC Card for ATM]&lt;br /&gt;
&lt;br /&gt;
[5] &amp;quot;Using CRC Cards: An Informal Approach to Object-Oriented Development&amp;quot; by Nancy M.Wilkinson&lt;br /&gt;
&lt;br /&gt;
==External Links==&lt;br /&gt;
* [http://c2.com/doc/oopsla89/paper.html A Laboratory For Teaching Object-Oriented Thinking] by Ward Cunningham and Kent Beck&lt;br /&gt;
* [http://books.google.com/books?id=SGOyQai2TboC&amp;amp;printsec=frontcover&amp;amp;dq=CRC+card+book&amp;amp;hl=en&amp;amp;ei=xSOaTKSaNISclgfRqtkK&amp;amp;sa=X&amp;amp;oi=book_result&amp;amp;ct=result&amp;amp;resnum=1&amp;amp;ved=0CDYQ6AEwAA#v=onepage&amp;amp;q&amp;amp;f=false The CRC card book] by David Bellin, Susan Suchman Simone&lt;br /&gt;
&lt;br /&gt;
* [http://www.agilemodeling.com/artifacts/crcModel.htm Modelling CRC Cards]&lt;br /&gt;
* [http://www.excelsoftware.com/quickcrcwin.html Quick CRC]&lt;/div&gt;</summary>
		<author><name>Pgjalisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch1_1w11_ap&amp;diff=65122</id>
		<title>CSC/ECE 517 Fall 2012/ch1 1w11 ap</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch1_1w11_ap&amp;diff=65122"/>
		<updated>2012-09-15T02:55:47Z</updated>

		<summary type="html">&lt;p&gt;Pgjalisa: /* CRC Cards in Software Development Process */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&amp;lt;b&amp;gt; CRC Cards, &amp;lt;/b&amp;gt; also known as [http://en.wikipedia.org/wiki/Class-responsibility-collaboration_card &amp;lt;b&amp;gt; Class-Responsibility-Collaboration &amp;lt;sup&amp;gt;&amp;lt;/sup&amp;gt;&amp;lt;/b&amp;gt;] cards are a brainstorming tool to enable collaboration across different teams or individuals in contribution to design, usually used in Object Oriented Software development. This was  proposed by &amp;lt;b&amp;gt;Ward Cunningham&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;Kent Beck&amp;lt;/b&amp;gt;&amp;lt;sup&amp;gt;[http://c2.com/doc/oopsla89/paper.html]&amp;lt;/sup&amp;gt;. The CRC card can be viewed as an index card, with the following details:&lt;br /&gt;
[[Image:crc-card.gif|frame|right|CRC Card Structure]]&lt;br /&gt;
&lt;br /&gt;
:* The Top of the card usually bears the name of the class.&lt;br /&gt;
:* The Left side of the card has the responsibilities of the class.&lt;br /&gt;
:* The Right side of the card has the collaborating classes corresponding to each of the responsibilities listed in the left side.&lt;br /&gt;
&lt;br /&gt;
Thus in general, a CRC session can be viewed as the interaction between a set of collaborating classes for a particular [http://en.wikipedia.org/wiki/Use_case Use case]. &amp;lt;br&amp;gt; &amp;lt;br&amp;gt; According to &amp;lt;sup&amp;gt;[http://www.extremeprogramming.org/rules/crccards.html]&amp;lt;/sup&amp;gt;&amp;lt;i&amp;gt;A CRC session proceeds with someone simulating the system by talking about which objects send messages to other objects. By stepping through the process' weaknesses and problems are easily uncovered. Design alternatives can be explored quickly by simulating the design being proposed.&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===A CRC Example===&lt;br /&gt;
To better understand how the CRC cards work together, let us consider a simple student enrollment problem,where we are required to model the students enrolled in different courses. We can easily define the &amp;lt;b&amp;gt;Student CRC Card&amp;lt;/b&amp;gt; as having attributes such as student name, student id and responsibilities that enable a student to enroll in a course or drop the course. In this particular instance, the collaborating class would be the &amp;lt;b&amp;gt;Course&amp;lt;/b&amp;gt; class. The &amp;lt;b&amp;gt;Course CRC Card&amp;lt;/b&amp;gt; can in turn be visualized as having its own responsibilities, such as having attributes like Course id, course name and the collaborating class would be the &amp;lt;b&amp;gt;Instructor &lt;br /&gt;
class&amp;lt;/b&amp;gt;. The CRC cards for the Student class and the Course Class are shown below.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:Stud_enr_Crc.jpg|frame|center|Student and Course CRC Card]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
There are also several practical designs that use the CRC card model to design Object oriented software design. The  [http://www.extremeprogramming.org/example/crcsim.html Simulator for Coffee Maker] explores an [http://en.wikipedia.org/wiki/Extreme_Programming Extreme Programming] approach combined with CRC card technique to come up with a design for the coffee maker.&lt;br /&gt;
&lt;br /&gt;
Another interesting approach using CRC cards is the design for the [http://www.math-cs.gordon.edu/courses/cps211/ATMExample/CRCCards.html ATM Machine]&lt;br /&gt;
&lt;br /&gt;
===Advantages of CRC cards===&lt;br /&gt;
There are a few advantages of CRC cards that make it a preferable model in many designs. Some of the advantages of the CRC card design method are&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
:* CRC cards can allow designers to easily make audience understand a very complex system. In essence it allows for building more complex designs by slowly building the interactions between the collaborating classes, one by one.&lt;br /&gt;
:* CRC cards are a simple technique and it can be easily used by anyone with very little training and does not require any expensive computing resources(a board or a paper and a pen would suffice).&lt;br /&gt;
:* CRC is fundamentally a brainstorming tool, enabling different people in a team to come up with the design by collaborating, enabling everyone in the team to contribute&lt;br /&gt;
:* CRC can be used with other formal object oriented design methodologies such as [http://en.wikipedia.org/wiki/Extreme_Programming Extreme Programming] (an [http://en.wikipedia.org/wiki/Agile_Modeling Agile] development Technique) and can be used along with modeling languages such as [http://en.wikipedia.org/wiki/Unified_Modeling_Language Unified Modeling Language(UML)]&lt;br /&gt;
&lt;br /&gt;
==Software for CRC Cards==&lt;br /&gt;
CRC cards have limited scope. If we go about designing a huge project, the scope spans many classes and interactions between them. The tedious task here is to maintain the CRC cards and properly formulate interaction between them. &lt;br /&gt;
We need software for CRC Cards for the following reasons:&lt;br /&gt;
:* &amp;lt;b&amp;gt;Designing Scenario:&amp;lt;/b&amp;gt;  A scenario represents series of steps in which classes and objects communicate. There can be references to other cards or scenarios. &lt;br /&gt;
:* &amp;lt;b&amp;gt;Modeling :&amp;lt;/b&amp;gt;  Software provides an easy way to segregate cards and objects into different diagrams. Thus we can model our problem with different functionality very easily.&lt;br /&gt;
:* &amp;lt;b&amp;gt;Simulation :&amp;lt;/b&amp;gt; Software can provide simulation of the design. This might include single-stepping a scenario forwards/backwards or jumping to a specific location in the scenario stack of a multiple scenario simulation&lt;br /&gt;
:* &amp;lt;b&amp;gt;Synchronization and Dependencies:&amp;lt;/b&amp;gt; Software can maintain relationships between cards, scenarios as design changes take place. If a card references other cards or classes, those cards are generated automatically. Also any name changes and cross references between objects are instantly updated. &lt;br /&gt;
:* &amp;lt;b&amp;gt;Revision history and Version Control :&amp;lt;/b&amp;gt; Software for CRC cards supports changes to CRC cards. It is easy to model and keep track of all changes to a CRC card. This is extremely helpful in tracking the design changes in CRC cards.&lt;br /&gt;
&lt;br /&gt;
==Designing Software==&lt;br /&gt;
The steps to design software for CRC cards are:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Create CRC Cards&amp;lt;/b&amp;gt; : A CRC model is usually created by an individual or small group of designers during the early phase of an object-oriented development project.The figure shows the design of hierarchy of classes. These set of class used for drawing objects are shown. We can see TShape class has a superclass called TObject and two subclasses, TBox and TCircle. Lets assume we create new class TWindow derived from the superclass TObject.  [[Image:Design.png|thumb|Description]]&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Assign Responsibilities&amp;lt;/b&amp;gt; : Once a set of classes are defined, behaviors can be assigned that will provide the functions of the application. For example, the TShape card has responsibilities ''Initialize'' to create it and ''Draw'' to illustrate it on the diagram.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Add Attributes&amp;lt;/b&amp;gt; : Attributes of classes may also be identified in a CRC Card.The TShape class has attributes fPosition, fType and fSelected.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Define and simulate Scenario&amp;lt;/b&amp;gt; : A scenario describes a sequence of steps in the design using the responsibilities of a group of collaborating classes. Collaboration between classes refers to a client object that uses a responsibility performed by a server object. Often a class must call upon several collaborating classes to implement one of its responsibilities.A scenario describes what happens in the system from a high-level, user's point of view.&lt;br /&gt;
[[Image:Scenario.png|thumb|Description]]&lt;br /&gt;
&lt;br /&gt;
Consider situation to the right. We have defined two CRC cards with their responsibility. A scenario defines several steps. Each step in a scenario has a Client, Server and Responsibility field. For each step, a client class uses a responsibility of a server class&lt;br /&gt;
&lt;br /&gt;
The Open Document scenario in the picture references the Initialize Document sub-scenario by specifying its server class ''Document'' in the server field and its scenario name in the Responsibility field. The first step in the Initialize Document sub-scenario uses ''Document'' as the server class name. By single-stepping forwards, backwards or through each sub-scenario, bugs in the design can be identified and corrected early.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Partition the Design&amp;lt;/b&amp;gt; : As the number of CRC cards in the design grow, they can be grouped by function. By using Software for CRC cards,we can draw separate diagrams to partition the model into different subject areas. &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Inheritance Graph&amp;lt;/b&amp;gt; : An automated tool can generate an inheritance graph from information on CRC cards. This diagram can concisely illustrate the big picture of a large project that might contain hundreds of classes and dozens of diagrams.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Verify Your Work &amp;lt;/b&amp;gt; : Creating and simulating scenarios will help verify that a design is correct and complete. A CRC software can perform other error checks to locate design problems. For example, responsibilities that are not used in any scenarios may indicate that the design is incomplete or perhaps the responsibility isn't needed. Likewise, a card that is not used by any collaboration may not be needed.&lt;br /&gt;
&lt;br /&gt;
==CRC Cards in Software Development Process==&lt;br /&gt;
&lt;br /&gt;
===Software Development Process for Object Oriented Development===&lt;br /&gt;
&lt;br /&gt;
Software Development Life Cycles are different for a standard development process and for Object Oriented development. This difference needs to be understood in order to know how to meet the benchmarks set for the project. There are multiple processes that are used in software development, the most common ones in use being Waterfall model and Spiral model. The Waterfall model is progression based and the Spiral model is iterative.&lt;br /&gt;
&lt;br /&gt;
We need to understand that the uniqueness of Object Oriented SDLCs comes from the fact that it is more user centric as compared to standard SDLCs that are more system centric. We will now see which models work for Object Oriented SDLCs (OO SDLCs) and which don’t. CRC cards play a very important role in an Object Oriented SDLC. Thus, figuring out which models work well for OO SDLCs will result in understanding which models use CRC cards and why.&lt;br /&gt;
 &lt;br /&gt;
====The Waterfall Model====&lt;br /&gt;
&lt;br /&gt;
The Waterfall model is implemented in multiple phases with each phase having a clear demarcation in terms of its functionality and deliverable. It uses clear stepping stones to come up with deliverables for each deadline. In this case, there are multiple ways to measure progress and methods by which to audit internally and apply checkpoints.&lt;br /&gt;
&lt;br /&gt;
The downside of the Waterfall model lies in the fact that it is a very rigid model that does not offer much in terms of leeway when it comes to deliverables and what each phase in the cycle has to offer. The process is also overly mechanical and over time, just ends up being boring.&lt;br /&gt;
&lt;br /&gt;
Owing to the emphasis on checkpoints and deliverables with strict deadlines, in most cases the analysis and design phases are usually cut short and thus, the project may veer very far from reality. The users are involved only in the requirement gathering phase. This might result in mistranslation of the requirements of the user into what may be an amazing final product but something that the user did not even ask for.&lt;br /&gt;
 &lt;br /&gt;
====The Spiral Model====&lt;br /&gt;
This model iteratively goes through the phases of analysis, design, prototyping and testing after the initial requirements gathering phase. With each iteration, the product is improved based on the feedback from testing in the previous iteration. If required, the outcome of each phase is analyzed, revised and the next prototype is developed after the design is revised, if pertinent. The products from the first phase are not abandoned, they are revised. Evidently, this model is non-linear in nature.&lt;br /&gt;
&lt;br /&gt;
After the first pass through the checkpoint, we can conclude that the work so far is adequate, but not final. The model places emphasis on the iterative process and on the development of standard prototypes at the end of each iteration. At the end of every cycle, we notice the shortcomings from the previous cycle and might end up having to redo all the work in the previous cycle. This proves to be a complete waste of time and effort. All the effort now goes into developing the end point for an older cycle, which makes the model ineffective for the current cycle.&lt;br /&gt;
&lt;br /&gt;
One of the major drawbacks of such a non linear model is that the cost effectiveness and risk analysis cannot be analyzed thoroughly.&lt;br /&gt;
 &lt;br /&gt;
====Why Waterfall and Spiral Models are not useful====&lt;br /&gt;
The strength of OO model depends on the idea that design and deployment come together. In the case of a spiral model, this works to make the spiral tighter. Since the waterfall model places over importance on deliverables and user involvement is minimal, which is one of the key focuses of OO SLDCs using CRC cards, the model is considered ineffective. The Spiral model involves multiple revisions of the same idea. When a set of cards have been developed, it would make sense to refine the idea presented in the card but not to redefine them over and over, which may be the case. This does not serve the purpose of actually convening a CRC discussion among the team to draw up cards corresponding to the user requirement. Moreover, in the case of the Spiral model, we would need to convene multiple such meetings at each iteration, which would drastically bring down the overall productivity of the team. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The power of CRC cards for OOP development is in the group session that employs them.  The use of CRC cards is an excellent way for people to begin to grasp the underlying idea of object oriented approach. CRC cards are used in a few steps of the software development process such as Analysis and Design.&lt;br /&gt;
&lt;br /&gt;
===CRC Cards for Analysis===&lt;br /&gt;
&lt;br /&gt;
CRC cards and CRC card sessions are good at organizing and spreading domain knowledge in the analysis phase.  When building an object–oriented application, the focus of the CRC card sessions is on analyzing and describing the problem.  In this phase, the group identifies the objects that are relevant to the application.  Before going to the CRC card session, the team must be aware of the domain classes and frameworks that exist to help them model the problem. During the session, they can decide if the existing ones can be used for the new application.&lt;br /&gt;
&lt;br /&gt;
'''Advantages of using CRC cards in Analysis phase:'''&lt;br /&gt;
&lt;br /&gt;
* People from all phases of the project are involved in the card sessions for problem modeling. The names of the classes and responsibilities are created, argued and agreed upon by the team members at the start itself in order to avoid conflicts later. This gives rise to common project and product vocabulary across different roles.&lt;br /&gt;
&lt;br /&gt;
* Domain knowledge already known is shared in the sessions. Also, missing domain knowledge is identified.&lt;br /&gt;
 &lt;br /&gt;
* Role plays are conducted during these sessions that help spread knowledge about OO concepts.&lt;br /&gt;
&lt;br /&gt;
* These sessions can be used to create a live prototype of what the application is supposed to do. This can be shown to clients as well so that the team receives feedback on their understanding of the requirements.&lt;br /&gt;
 &lt;br /&gt;
* A CRC card session will help the team walk through the requirements and identify any ambiguities.&lt;br /&gt;
&lt;br /&gt;
At the end of the analysis phase, the CRC elements that will be available are:&lt;br /&gt;
&lt;br /&gt;
* '''Classes:''' The classes identified in this phase directly reflect the concepts of the application that is being analyzed. It may not be modeled in terms of software system but it is useful in describing how the application works. However, at this stage the distinction between objects and classes may not be clear.&lt;br /&gt;
&lt;br /&gt;
* '''Responsibilities:'''  The responsibilities that are assigned to the classes in this phase are of relatively higher level.&lt;br /&gt;
&lt;br /&gt;
===CRC Cards for Design===&lt;br /&gt;
 &lt;br /&gt;
During the CRC cards design sessions, other relevant classes are added, if any. &amp;quot;While an analysis must reflect the real world of the user, the design must reflect the real world of the implementers.&amp;quot;[5] A CRC card tool may be helpful for saving, illustrating and documenting a design.&lt;br /&gt;
&lt;br /&gt;
'''Advantages of using CRC cards in Design phase:'''&lt;br /&gt;
&lt;br /&gt;
* These sessions help the team members concentrate on taking the design decisions for the application. These design decisions also include performance, efficiency and other constraints.&lt;br /&gt;
&lt;br /&gt;
* By walking through the scenarios that were seen during the analysis phase, the implementers can give the testers an overview of how the application should work.&lt;br /&gt;
&lt;br /&gt;
* Using CRC cards forces decision to be made up front in front of the team, thus any conflicts can be resolved right there.&lt;br /&gt;
&lt;br /&gt;
* Design constraints such as target environment, language, UI, performance etc., can be discussed during these sessions to check if the design can be implemented.&lt;br /&gt;
&lt;br /&gt;
==Summary==&lt;br /&gt;
Software for CRC cards are immensely helpful in designing and modeling software development using CRC cards.As the size of object-oriented system grow, it becomes increasingly difficult to model the problem with index based CRC cards. Thus an automated tool is required to maintain design and clear functionality.&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Unified_Modeling_Language Unified Modeling Language(UML)]&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Agile_Modeling Agile Modelling]&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Extreme_Programming Extreme Programming]&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
[1] [http://c2.com/doc/oopsla89/paper.html  A Laboratory For Teaching Object-Oriented Thinking]&lt;br /&gt;
&lt;br /&gt;
[2] [http://www.extremeprogramming.org/rules/crccards.html CRC Cards]&lt;br /&gt;
&lt;br /&gt;
[3] [http://www.extremeprogramming.org/example/crcsim.html A Simulator for Coffee Maker]&lt;br /&gt;
&lt;br /&gt;
[4] [http://www.math-cs.gordon.edu/courses/cps211/ATMExample/CRCCards.html CRC Card for ATM]&lt;br /&gt;
&lt;br /&gt;
[5] &amp;quot;Using CRC Cards: An Informal Approach to Object-Oriented Development&amp;quot; by Nancy M.Wilkinson&lt;br /&gt;
&lt;br /&gt;
==External Links==&lt;br /&gt;
* [http://c2.com/doc/oopsla89/paper.html A Laboratory For Teaching Object-Oriented Thinking] by Ward Cunningham and Kent Beck&lt;br /&gt;
* [http://books.google.com/books?id=SGOyQai2TboC&amp;amp;printsec=frontcover&amp;amp;dq=CRC+card+book&amp;amp;hl=en&amp;amp;ei=xSOaTKSaNISclgfRqtkK&amp;amp;sa=X&amp;amp;oi=book_result&amp;amp;ct=result&amp;amp;resnum=1&amp;amp;ved=0CDYQ6AEwAA#v=onepage&amp;amp;q&amp;amp;f=false The CRC card book] by David Bellin, Susan Suchman Simone&lt;br /&gt;
&lt;br /&gt;
* [http://www.agilemodeling.com/artifacts/crcModel.htm Modelling CRC Cards]&lt;br /&gt;
* [http://www.excelsoftware.com/quickcrcwin.html Quick CRC]&lt;/div&gt;</summary>
		<author><name>Pgjalisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch1_1w11_ap&amp;diff=65119</id>
		<title>CSC/ECE 517 Fall 2012/ch1 1w11 ap</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch1_1w11_ap&amp;diff=65119"/>
		<updated>2012-09-15T02:51:16Z</updated>

		<summary type="html">&lt;p&gt;Pgjalisa: /* CRC Cards in Software Development */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&amp;lt;b&amp;gt; CRC Cards, &amp;lt;/b&amp;gt; also known as [http://en.wikipedia.org/wiki/Class-responsibility-collaboration_card &amp;lt;b&amp;gt; Class-Responsibility-Collaboration &amp;lt;sup&amp;gt;&amp;lt;/sup&amp;gt;&amp;lt;/b&amp;gt;] cards are a brainstorming tool to enable collaboration across different teams or individuals in contribution to design, usually used in Object Oriented Software development. This was  proposed by &amp;lt;b&amp;gt;Ward Cunningham&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;Kent Beck&amp;lt;/b&amp;gt;&amp;lt;sup&amp;gt;[http://c2.com/doc/oopsla89/paper.html]&amp;lt;/sup&amp;gt;. The CRC card can be viewed as an index card, with the following details:&lt;br /&gt;
[[Image:crc-card.gif|frame|right|CRC Card Structure]]&lt;br /&gt;
&lt;br /&gt;
:* The Top of the card usually bears the name of the class.&lt;br /&gt;
:* The Left side of the card has the responsibilities of the class.&lt;br /&gt;
:* The Right side of the card has the collaborating classes corresponding to each of the responsibilities listed in the left side.&lt;br /&gt;
&lt;br /&gt;
Thus in general, a CRC session can be viewed as the interaction between a set of collaborating classes for a particular [http://en.wikipedia.org/wiki/Use_case Use case]. &amp;lt;br&amp;gt; &amp;lt;br&amp;gt; According to &amp;lt;sup&amp;gt;[http://www.extremeprogramming.org/rules/crccards.html]&amp;lt;/sup&amp;gt;&amp;lt;i&amp;gt;A CRC session proceeds with someone simulating the system by talking about which objects send messages to other objects. By stepping through the process' weaknesses and problems are easily uncovered. Design alternatives can be explored quickly by simulating the design being proposed.&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===A CRC Example===&lt;br /&gt;
To better understand how the CRC cards work together, let us consider a simple student enrollment problem,where we are required to model the students enrolled in different courses. We can easily define the &amp;lt;b&amp;gt;Student CRC Card&amp;lt;/b&amp;gt; as having attributes such as student name, student id and responsibilities that enable a student to enroll in a course or drop the course. In this particular instance, the collaborating class would be the &amp;lt;b&amp;gt;Course&amp;lt;/b&amp;gt; class. The &amp;lt;b&amp;gt;Course CRC Card&amp;lt;/b&amp;gt; can in turn be visualized as having its own responsibilities, such as having attributes like Course id, course name and the collaborating class would be the &amp;lt;b&amp;gt;Instructor &lt;br /&gt;
class&amp;lt;/b&amp;gt;. The CRC cards for the Student class and the Course Class are shown below.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:Stud_enr_Crc.jpg|frame|center|Student and Course CRC Card]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
There are also several practical designs that use the CRC card model to design Object oriented software design. The  [http://www.extremeprogramming.org/example/crcsim.html Simulator for Coffee Maker] explores an [http://en.wikipedia.org/wiki/Extreme_Programming Extreme Programming] approach combined with CRC card technique to come up with a design for the coffee maker.&lt;br /&gt;
&lt;br /&gt;
Another interesting approach using CRC cards is the design for the [http://www.math-cs.gordon.edu/courses/cps211/ATMExample/CRCCards.html ATM Machine]&lt;br /&gt;
&lt;br /&gt;
===Advantages of CRC cards===&lt;br /&gt;
There are a few advantages of CRC cards that make it a preferable model in many designs. Some of the advantages of the CRC card design method are&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
:* CRC cards can allow designers to easily make audience understand a very complex system. In essence it allows for building more complex designs by slowly building the interactions between the collaborating classes, one by one.&lt;br /&gt;
:* CRC cards are a simple technique and it can be easily used by anyone with very little training and does not require any expensive computing resources(a board or a paper and a pen would suffice).&lt;br /&gt;
:* CRC is fundamentally a brainstorming tool, enabling different people in a team to come up with the design by collaborating, enabling everyone in the team to contribute&lt;br /&gt;
:* CRC can be used with other formal object oriented design methodologies such as [http://en.wikipedia.org/wiki/Extreme_Programming Extreme Programming] (an [http://en.wikipedia.org/wiki/Agile_Modeling Agile] development Technique) and can be used along with modeling languages such as [http://en.wikipedia.org/wiki/Unified_Modeling_Language Unified Modeling Language(UML)]&lt;br /&gt;
&lt;br /&gt;
==Software for CRC Cards==&lt;br /&gt;
CRC cards have limited scope. If we go about designing a huge project, the scope spans many classes and interactions between them. The tedious task here is to maintain the CRC cards and properly formulate interaction between them. &lt;br /&gt;
We need software for CRC Cards for the following reasons:&lt;br /&gt;
:* &amp;lt;b&amp;gt;Designing Scenario:&amp;lt;/b&amp;gt;  A scenario represents series of steps in which classes and objects communicate. There can be references to other cards or scenarios. &lt;br /&gt;
:* &amp;lt;b&amp;gt;Modeling :&amp;lt;/b&amp;gt;  Software provides an easy way to segregate cards and objects into different diagrams. Thus we can model our problem with different functionality very easily.&lt;br /&gt;
:* &amp;lt;b&amp;gt;Simulation :&amp;lt;/b&amp;gt; Software can provide simulation of the design. This might include single-stepping a scenario forwards/backwards or jumping to a specific location in the scenario stack of a multiple scenario simulation&lt;br /&gt;
:* &amp;lt;b&amp;gt;Synchronization and Dependencies:&amp;lt;/b&amp;gt; Software can maintain relationships between cards, scenarios as design changes take place. If a card references other cards or classes, those cards are generated automatically. Also any name changes and cross references between objects are instantly updated. &lt;br /&gt;
:* &amp;lt;b&amp;gt;Revision history and Version Control :&amp;lt;/b&amp;gt; Software for CRC cards supports changes to CRC cards. It is easy to model and keep track of all changes to a CRC card. This is extremely helpful in tracking the design changes in CRC cards.&lt;br /&gt;
&lt;br /&gt;
==Designing Software==&lt;br /&gt;
The steps to design software for CRC cards are:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Create CRC Cards&amp;lt;/b&amp;gt; : A CRC model is usually created by an individual or small group of designers during the early phase of an object-oriented development project.The figure shows the design of hierarchy of classes. These set of class used for drawing objects are shown. We can see TShape class has a superclass called TObject and two subclasses, TBox and TCircle. Lets assume we create new class TWindow derived from the superclass TObject.  [[Image:Design.png|thumb|Description]]&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Assign Responsibilities&amp;lt;/b&amp;gt; : Once a set of classes are defined, behaviors can be assigned that will provide the functions of the application. For example, the TShape card has responsibilities ''Initialize'' to create it and ''Draw'' to illustrate it on the diagram.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Add Attributes&amp;lt;/b&amp;gt; : Attributes of classes may also be identified in a CRC Card.The TShape class has attributes fPosition, fType and fSelected.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Define and simulate Scenario&amp;lt;/b&amp;gt; : A scenario describes a sequence of steps in the design using the responsibilities of a group of collaborating classes. Collaboration between classes refers to a client object that uses a responsibility performed by a server object. Often a class must call upon several collaborating classes to implement one of its responsibilities.A scenario describes what happens in the system from a high-level, user's point of view.&lt;br /&gt;
[[Image:Scenario.png|thumb|Description]]&lt;br /&gt;
&lt;br /&gt;
Consider situation to the right. We have defined two CRC cards with their responsibility. A scenario defines several steps. Each step in a scenario has a Client, Server and Responsibility field. For each step, a client class uses a responsibility of a server class&lt;br /&gt;
&lt;br /&gt;
The Open Document scenario in the picture references the Initialize Document sub-scenario by specifying its server class ''Document'' in the server field and its scenario name in the Responsibility field. The first step in the Initialize Document sub-scenario uses ''Document'' as the server class name. By single-stepping forwards, backwards or through each sub-scenario, bugs in the design can be identified and corrected early.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Partition the Design&amp;lt;/b&amp;gt; : As the number of CRC cards in the design grow, they can be grouped by function. By using Software for CRC cards,we can draw separate diagrams to partition the model into different subject areas. &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Inheritance Graph&amp;lt;/b&amp;gt; : An automated tool can generate an inheritance graph from information on CRC cards. This diagram can concisely illustrate the big picture of a large project that might contain hundreds of classes and dozens of diagrams.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Verify Your Work &amp;lt;/b&amp;gt; : Creating and simulating scenarios will help verify that a design is correct and complete. A CRC software can perform other error checks to locate design problems. For example, responsibilities that are not used in any scenarios may indicate that the design is incomplete or perhaps the responsibility isn't needed. Likewise, a card that is not used by any collaboration may not be needed.&lt;br /&gt;
&lt;br /&gt;
==CRC Cards in Software Development Process==&lt;br /&gt;
The power of CRC cards for OOP development is in the group session that employs them.  The use of CRC cards is an excellent way for people to begin to grasp the underlying idea of object oriented approach. CRC cards are used in a few steps of the software development process such as Analysis and Design.&lt;br /&gt;
&lt;br /&gt;
===CRC Cards for Analysis===&lt;br /&gt;
&lt;br /&gt;
CRC cards and CRC card sessions are good at organizing and spreading domain knowledge in the analysis phase.  When building an object–oriented application, the focus of the CRC card sessions is on analyzing and describing the problem.  In this phase, the group identifies the objects that are relevant to the application.  Before going to the CRC card session, the team must be aware of the domain classes and frameworks that exist to help them model the problem. During the session, they can decide if the existing ones can be used for the new application.&lt;br /&gt;
&lt;br /&gt;
'''Advantages of using CRC cards in Analysis phase:'''&lt;br /&gt;
&lt;br /&gt;
* People from all phases of the project are involved in the card sessions for problem modeling. The names of the classes and responsibilities are created, argued and agreed upon by the team members at the start itself in order to avoid conflicts later. This gives rise to common project and product vocabulary across different roles.&lt;br /&gt;
&lt;br /&gt;
* Domain knowledge already known is shared in the sessions. Also, missing domain knowledge is identified.&lt;br /&gt;
 &lt;br /&gt;
* Role plays are conducted during these sessions that help spread knowledge about OO concepts.&lt;br /&gt;
&lt;br /&gt;
* These sessions can be used to create a live prototype of what the application is supposed to do. This can be shown to clients as well so that the team receives feedback on their understanding of the requirements.&lt;br /&gt;
 &lt;br /&gt;
* A CRC card session will help the team walk through the requirements and identify any ambiguities.&lt;br /&gt;
&lt;br /&gt;
At the end of the analysis phase, the CRC elements that will be available are:&lt;br /&gt;
&lt;br /&gt;
* '''Classes:''' The classes identified in this phase directly reflect the concepts of the application that is being analyzed. It may not be modeled in terms of software system but it is useful in describing how the application works. However, at this stage the distinction between objects and classes may not be clear.&lt;br /&gt;
&lt;br /&gt;
* '''Responsibilities:'''  The responsibilities that are assigned to the classes in this phase are of relatively higher level.&lt;br /&gt;
&lt;br /&gt;
===CRC Cards for Design===&lt;br /&gt;
 &lt;br /&gt;
During the CRC cards design sessions, other relevant classes are added, if any. &amp;quot;While an analysis must reflect the real world of the user, the design must reflect the real world of the implementers.&amp;quot;[5] A CRC card tool may be helpful for saving, illustrating and documenting a design.&lt;br /&gt;
&lt;br /&gt;
'''Advantages of using CRC cards in Design phase:'''&lt;br /&gt;
&lt;br /&gt;
* These sessions help the team members concentrate on taking the design decisions for the application. These design decisions also include performance, efficiency and other constraints.&lt;br /&gt;
&lt;br /&gt;
* By walking through the scenarios that were seen during the analysis phase, the implementers can give the testers an overview of how the application should work.&lt;br /&gt;
&lt;br /&gt;
* Using CRC cards forces decision to be made up front in front of the team, thus any conflicts can be resolved right there.&lt;br /&gt;
&lt;br /&gt;
* Design constraints such as target environment, language, UI, performance etc., can be discussed during these sessions to check if the design can be implemented.&lt;br /&gt;
&lt;br /&gt;
==Summary==&lt;br /&gt;
Software for CRC cards are immensely helpful in designing and modeling software development using CRC cards.As the size of object-oriented system grow, it becomes increasingly difficult to model the problem with index based CRC cards. Thus an automated tool is required to maintain design and clear functionality.&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Unified_Modeling_Language Unified Modeling Language(UML)]&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Agile_Modeling Agile Modelling]&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Extreme_Programming Extreme Programming]&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
[1] [http://c2.com/doc/oopsla89/paper.html  A Laboratory For Teaching Object-Oriented Thinking]&lt;br /&gt;
&lt;br /&gt;
[2] [http://www.extremeprogramming.org/rules/crccards.html CRC Cards]&lt;br /&gt;
&lt;br /&gt;
[3] [http://www.extremeprogramming.org/example/crcsim.html A Simulator for Coffee Maker]&lt;br /&gt;
&lt;br /&gt;
[4] [http://www.math-cs.gordon.edu/courses/cps211/ATMExample/CRCCards.html CRC Card for ATM]&lt;br /&gt;
&lt;br /&gt;
[5] &amp;quot;Using CRC Cards: An Informal Approach to Object-Oriented Development&amp;quot; by Nancy M.Wilkinson&lt;br /&gt;
&lt;br /&gt;
==External Links==&lt;br /&gt;
* [http://c2.com/doc/oopsla89/paper.html A Laboratory For Teaching Object-Oriented Thinking] by Ward Cunningham and Kent Beck&lt;br /&gt;
* [http://books.google.com/books?id=SGOyQai2TboC&amp;amp;printsec=frontcover&amp;amp;dq=CRC+card+book&amp;amp;hl=en&amp;amp;ei=xSOaTKSaNISclgfRqtkK&amp;amp;sa=X&amp;amp;oi=book_result&amp;amp;ct=result&amp;amp;resnum=1&amp;amp;ved=0CDYQ6AEwAA#v=onepage&amp;amp;q&amp;amp;f=false The CRC card book] by David Bellin, Susan Suchman Simone&lt;br /&gt;
&lt;br /&gt;
* [http://www.agilemodeling.com/artifacts/crcModel.htm Modelling CRC Cards]&lt;br /&gt;
* [http://www.excelsoftware.com/quickcrcwin.html Quick CRC]&lt;/div&gt;</summary>
		<author><name>Pgjalisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch1_1w11_ap&amp;diff=65118</id>
		<title>CSC/ECE 517 Fall 2012/ch1 1w11 ap</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch1_1w11_ap&amp;diff=65118"/>
		<updated>2012-09-15T02:44:32Z</updated>

		<summary type="html">&lt;p&gt;Pgjalisa: /* Summary */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&amp;lt;b&amp;gt; CRC Cards, &amp;lt;/b&amp;gt; also known as [http://en.wikipedia.org/wiki/Class-responsibility-collaboration_card &amp;lt;b&amp;gt; Class-Responsibility-Collaboration &amp;lt;sup&amp;gt;&amp;lt;/sup&amp;gt;&amp;lt;/b&amp;gt;] cards are a brainstorming tool to enable collaboration across different teams or individuals in contribution to design, usually used in Object Oriented Software development. This was  proposed by &amp;lt;b&amp;gt;Ward Cunningham&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;Kent Beck&amp;lt;/b&amp;gt;&amp;lt;sup&amp;gt;[http://c2.com/doc/oopsla89/paper.html]&amp;lt;/sup&amp;gt;. The CRC card can be viewed as an index card, with the following details:&lt;br /&gt;
[[Image:crc-card.gif|frame|right|CRC Card Structure]]&lt;br /&gt;
&lt;br /&gt;
:* The Top of the card usually bears the name of the class.&lt;br /&gt;
:* The Left side of the card has the responsibilities of the class.&lt;br /&gt;
:* The Right side of the card has the collaborating classes corresponding to each of the responsibilities listed in the left side.&lt;br /&gt;
&lt;br /&gt;
Thus in general, a CRC session can be viewed as the interaction between a set of collaborating classes for a particular [http://en.wikipedia.org/wiki/Use_case Use case]. &amp;lt;br&amp;gt; &amp;lt;br&amp;gt; According to &amp;lt;sup&amp;gt;[http://www.extremeprogramming.org/rules/crccards.html]&amp;lt;/sup&amp;gt;&amp;lt;i&amp;gt;A CRC session proceeds with someone simulating the system by talking about which objects send messages to other objects. By stepping through the process' weaknesses and problems are easily uncovered. Design alternatives can be explored quickly by simulating the design being proposed.&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===A CRC Example===&lt;br /&gt;
To better understand how the CRC cards work together, let us consider a simple student enrollment problem,where we are required to model the students enrolled in different courses. We can easily define the &amp;lt;b&amp;gt;Student CRC Card&amp;lt;/b&amp;gt; as having attributes such as student name, student id and responsibilities that enable a student to enroll in a course or drop the course. In this particular instance, the collaborating class would be the &amp;lt;b&amp;gt;Course&amp;lt;/b&amp;gt; class. The &amp;lt;b&amp;gt;Course CRC Card&amp;lt;/b&amp;gt; can in turn be visualized as having its own responsibilities, such as having attributes like Course id, course name and the collaborating class would be the &amp;lt;b&amp;gt;Instructor &lt;br /&gt;
class&amp;lt;/b&amp;gt;. The CRC cards for the Student class and the Course Class are shown below.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:Stud_enr_Crc.jpg|frame|center|Student and Course CRC Card]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
There are also several practical designs that use the CRC card model to design Object oriented software design. The  [http://www.extremeprogramming.org/example/crcsim.html Simulator for Coffee Maker] explores an [http://en.wikipedia.org/wiki/Extreme_Programming Extreme Programming] approach combined with CRC card technique to come up with a design for the coffee maker.&lt;br /&gt;
&lt;br /&gt;
Another interesting approach using CRC cards is the design for the [http://www.math-cs.gordon.edu/courses/cps211/ATMExample/CRCCards.html ATM Machine]&lt;br /&gt;
&lt;br /&gt;
===Advantages of CRC cards===&lt;br /&gt;
There are a few advantages of CRC cards that make it a preferable model in many designs. Some of the advantages of the CRC card design method are&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
:* CRC cards can allow designers to easily make audience understand a very complex system. In essence it allows for building more complex designs by slowly building the interactions between the collaborating classes, one by one.&lt;br /&gt;
:* CRC cards are a simple technique and it can be easily used by anyone with very little training and does not require any expensive computing resources(a board or a paper and a pen would suffice).&lt;br /&gt;
:* CRC is fundamentally a brainstorming tool, enabling different people in a team to come up with the design by collaborating, enabling everyone in the team to contribute&lt;br /&gt;
:* CRC can be used with other formal object oriented design methodologies such as [http://en.wikipedia.org/wiki/Extreme_Programming Extreme Programming] (an [http://en.wikipedia.org/wiki/Agile_Modeling Agile] development Technique) and can be used along with modeling languages such as [http://en.wikipedia.org/wiki/Unified_Modeling_Language Unified Modeling Language(UML)]&lt;br /&gt;
&lt;br /&gt;
==Software for CRC Cards==&lt;br /&gt;
CRC cards have limited scope. If we go about designing a huge project, the scope spans many classes and interactions between them. The tedious task here is to maintain the CRC cards and properly formulate interaction between them. &lt;br /&gt;
We need software for CRC Cards for the following reasons:&lt;br /&gt;
:* &amp;lt;b&amp;gt;Designing Scenario:&amp;lt;/b&amp;gt;  A scenario represents series of steps in which classes and objects communicate. There can be references to other cards or scenarios. &lt;br /&gt;
:* &amp;lt;b&amp;gt;Modeling :&amp;lt;/b&amp;gt;  Software provides an easy way to segregate cards and objects into different diagrams. Thus we can model our problem with different functionality very easily.&lt;br /&gt;
:* &amp;lt;b&amp;gt;Simulation :&amp;lt;/b&amp;gt; Software can provide simulation of the design. This might include single-stepping a scenario forwards/backwards or jumping to a specific location in the scenario stack of a multiple scenario simulation&lt;br /&gt;
:* &amp;lt;b&amp;gt;Synchronization and Dependencies:&amp;lt;/b&amp;gt; Software can maintain relationships between cards, scenarios as design changes take place. If a card references other cards or classes, those cards are generated automatically. Also any name changes and cross references between objects are instantly updated. &lt;br /&gt;
:* &amp;lt;b&amp;gt;Revision history and Version Control :&amp;lt;/b&amp;gt; Software for CRC cards supports changes to CRC cards. It is easy to model and keep track of all changes to a CRC card. This is extremely helpful in tracking the design changes in CRC cards.&lt;br /&gt;
&lt;br /&gt;
==Designing Software==&lt;br /&gt;
The steps to design software for CRC cards are:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Create CRC Cards&amp;lt;/b&amp;gt; : A CRC model is usually created by an individual or small group of designers during the early phase of an object-oriented development project.The figure shows the design of hierarchy of classes. These set of class used for drawing objects are shown. We can see TShape class has a superclass called TObject and two subclasses, TBox and TCircle. Lets assume we create new class TWindow derived from the superclass TObject.  [[Image:Design.png|thumb|Description]]&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Assign Responsibilities&amp;lt;/b&amp;gt; : Once a set of classes are defined, behaviors can be assigned that will provide the functions of the application. For example, the TShape card has responsibilities ''Initialize'' to create it and ''Draw'' to illustrate it on the diagram.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Add Attributes&amp;lt;/b&amp;gt; : Attributes of classes may also be identified in a CRC Card.The TShape class has attributes fPosition, fType and fSelected.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Define and simulate Scenario&amp;lt;/b&amp;gt; : A scenario describes a sequence of steps in the design using the responsibilities of a group of collaborating classes. Collaboration between classes refers to a client object that uses a responsibility performed by a server object. Often a class must call upon several collaborating classes to implement one of its responsibilities.A scenario describes what happens in the system from a high-level, user's point of view.&lt;br /&gt;
[[Image:Scenario.png|thumb|Description]]&lt;br /&gt;
&lt;br /&gt;
Consider situation to the right. We have defined two CRC cards with their responsibility. A scenario defines several steps. Each step in a scenario has a Client, Server and Responsibility field. For each step, a client class uses a responsibility of a server class&lt;br /&gt;
&lt;br /&gt;
The Open Document scenario in the picture references the Initialize Document sub-scenario by specifying its server class ''Document'' in the server field and its scenario name in the Responsibility field. The first step in the Initialize Document sub-scenario uses ''Document'' as the server class name. By single-stepping forwards, backwards or through each sub-scenario, bugs in the design can be identified and corrected early.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Partition the Design&amp;lt;/b&amp;gt; : As the number of CRC cards in the design grow, they can be grouped by function. By using Software for CRC cards,we can draw separate diagrams to partition the model into different subject areas. &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Inheritance Graph&amp;lt;/b&amp;gt; : An automated tool can generate an inheritance graph from information on CRC cards. This diagram can concisely illustrate the big picture of a large project that might contain hundreds of classes and dozens of diagrams.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Verify Your Work &amp;lt;/b&amp;gt; : Creating and simulating scenarios will help verify that a design is correct and complete. A CRC software can perform other error checks to locate design problems. For example, responsibilities that are not used in any scenarios may indicate that the design is incomplete or perhaps the responsibility isn't needed. Likewise, a card that is not used by any collaboration may not be needed.&lt;br /&gt;
&lt;br /&gt;
==CRC Cards in Software Development==&lt;br /&gt;
The power of CRC cards for OOP development is in the group session that employs them.  The use of CRC cards is an excellent way for people to begin to grasp the underlying idea of object oriented approach. CRC cards are used in a few steps of the software development process such as Analysis and Design.&lt;br /&gt;
&lt;br /&gt;
===CRC Cards for Analysis===&lt;br /&gt;
&lt;br /&gt;
CRC cards and CRC card sessions are good at organizing and spreading domain knowledge in the analysis phase.  When building an object–oriented application, the focus of the CRC card sessions is on analyzing and describing the problem.  In this phase, the group identifies the objects that are relevant to the application.  Before going to the CRC card session, the team must be aware of the domain classes and frameworks that exist to help them model the problem. During the session, they can decide if the existing ones can be used for the new application.&lt;br /&gt;
&lt;br /&gt;
'''Advantages of using CRC cards in Analysis phase:'''&lt;br /&gt;
&lt;br /&gt;
* People from all phases of the project are involved in the card sessions for problem modeling. The names of the classes and responsibilities are created, argued and agreed upon by the team members at the start itself in order to avoid conflicts later. This gives rise to common project and product vocabulary across different roles.&lt;br /&gt;
&lt;br /&gt;
* Domain knowledge already known is shared in the sessions. Also, missing domain knowledge is identified.&lt;br /&gt;
 &lt;br /&gt;
* Role plays are conducted during these sessions that help spread knowledge about OO concepts.&lt;br /&gt;
&lt;br /&gt;
* These sessions can be used to create a live prototype of what the application is supposed to do. This can be shown to clients as well so that the team receives feedback on their understanding of the requirements.&lt;br /&gt;
 &lt;br /&gt;
* A CRC card session will help the team walk through the requirements and identify any ambiguities.&lt;br /&gt;
&lt;br /&gt;
At the end of the analysis phase, the CRC elements that will be available are:&lt;br /&gt;
&lt;br /&gt;
* '''Classes:''' The classes identified in this phase directly reflect the concepts of the application that is being analyzed. It may not be modeled in terms of software system but it is useful in describing how the application works. However, at this stage the distinction between objects and classes may not be clear.&lt;br /&gt;
&lt;br /&gt;
* '''Responsibilities:'''  The responsibilities that are assigned to the classes in this phase are of relatively higher level.&lt;br /&gt;
&lt;br /&gt;
===CRC Cards for Design===&lt;br /&gt;
 &lt;br /&gt;
During the CRC cards design sessions, other relevant classes are added, if any. &amp;quot;While an analysis must reflect the real world of the user, the design must reflect the real world of the implementers.&amp;quot;[5] A CRC card tool may be helpful for saving, illustrating and documenting a design.&lt;br /&gt;
&lt;br /&gt;
'''Advantages of using CRC cards in Design phase:'''&lt;br /&gt;
&lt;br /&gt;
* These sessions help the team members concentrate on taking the design decisions for the application. These design decisions also include performance, efficiency and other constraints.&lt;br /&gt;
&lt;br /&gt;
* By walking through the scenarios that were seen during the analysis phase, the implementers can give the testers an overview of how the application should work.&lt;br /&gt;
&lt;br /&gt;
* Using CRC cards forces decision to be made up front in front of the team, thus any conflicts can be resolved right there.&lt;br /&gt;
&lt;br /&gt;
* Design constraints such as target environment, language, UI, performance etc., can be discussed during these sessions to check if the design can be implemented.&lt;br /&gt;
&lt;br /&gt;
==Summary==&lt;br /&gt;
Software for CRC cards are immensely helpful in designing and modeling software development using CRC cards.As the size of object-oriented system grow, it becomes increasingly difficult to model the problem with index based CRC cards. Thus an automated tool is required to maintain design and clear functionality.&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Unified_Modeling_Language Unified Modeling Language(UML)]&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Agile_Modeling Agile Modelling]&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Extreme_Programming Extreme Programming]&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
[1] [http://c2.com/doc/oopsla89/paper.html  A Laboratory For Teaching Object-Oriented Thinking]&lt;br /&gt;
&lt;br /&gt;
[2] [http://www.extremeprogramming.org/rules/crccards.html CRC Cards]&lt;br /&gt;
&lt;br /&gt;
[3] [http://www.extremeprogramming.org/example/crcsim.html A Simulator for Coffee Maker]&lt;br /&gt;
&lt;br /&gt;
[4] [http://www.math-cs.gordon.edu/courses/cps211/ATMExample/CRCCards.html CRC Card for ATM]&lt;br /&gt;
&lt;br /&gt;
[5] &amp;quot;Using CRC Cards: An Informal Approach to Object-Oriented Development&amp;quot; by Nancy M.Wilkinson&lt;br /&gt;
&lt;br /&gt;
==External Links==&lt;br /&gt;
* [http://c2.com/doc/oopsla89/paper.html A Laboratory For Teaching Object-Oriented Thinking] by Ward Cunningham and Kent Beck&lt;br /&gt;
* [http://books.google.com/books?id=SGOyQai2TboC&amp;amp;printsec=frontcover&amp;amp;dq=CRC+card+book&amp;amp;hl=en&amp;amp;ei=xSOaTKSaNISclgfRqtkK&amp;amp;sa=X&amp;amp;oi=book_result&amp;amp;ct=result&amp;amp;resnum=1&amp;amp;ved=0CDYQ6AEwAA#v=onepage&amp;amp;q&amp;amp;f=false The CRC card book] by David Bellin, Susan Suchman Simone&lt;br /&gt;
&lt;br /&gt;
* [http://www.agilemodeling.com/artifacts/crcModel.htm Modelling CRC Cards]&lt;br /&gt;
* [http://www.excelsoftware.com/quickcrcwin.html Quick CRC]&lt;/div&gt;</summary>
		<author><name>Pgjalisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch1_1w11_ap&amp;diff=65117</id>
		<title>CSC/ECE 517 Fall 2012/ch1 1w11 ap</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2012/ch1_1w11_ap&amp;diff=65117"/>
		<updated>2012-09-15T02:41:32Z</updated>

		<summary type="html">&lt;p&gt;Pgjalisa: /* CRC Cards in Software Development */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&amp;lt;b&amp;gt; CRC Cards, &amp;lt;/b&amp;gt; also known as [http://en.wikipedia.org/wiki/Class-responsibility-collaboration_card &amp;lt;b&amp;gt; Class-Responsibility-Collaboration &amp;lt;sup&amp;gt;&amp;lt;/sup&amp;gt;&amp;lt;/b&amp;gt;] cards are a brainstorming tool to enable collaboration across different teams or individuals in contribution to design, usually used in Object Oriented Software development. This was  proposed by &amp;lt;b&amp;gt;Ward Cunningham&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;Kent Beck&amp;lt;/b&amp;gt;&amp;lt;sup&amp;gt;[http://c2.com/doc/oopsla89/paper.html]&amp;lt;/sup&amp;gt;. The CRC card can be viewed as an index card, with the following details:&lt;br /&gt;
[[Image:crc-card.gif|frame|right|CRC Card Structure]]&lt;br /&gt;
&lt;br /&gt;
:* The Top of the card usually bears the name of the class.&lt;br /&gt;
:* The Left side of the card has the responsibilities of the class.&lt;br /&gt;
:* The Right side of the card has the collaborating classes corresponding to each of the responsibilities listed in the left side.&lt;br /&gt;
&lt;br /&gt;
Thus in general, a CRC session can be viewed as the interaction between a set of collaborating classes for a particular [http://en.wikipedia.org/wiki/Use_case Use case]. &amp;lt;br&amp;gt; &amp;lt;br&amp;gt; According to &amp;lt;sup&amp;gt;[http://www.extremeprogramming.org/rules/crccards.html]&amp;lt;/sup&amp;gt;&amp;lt;i&amp;gt;A CRC session proceeds with someone simulating the system by talking about which objects send messages to other objects. By stepping through the process' weaknesses and problems are easily uncovered. Design alternatives can be explored quickly by simulating the design being proposed.&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===A CRC Example===&lt;br /&gt;
To better understand how the CRC cards work together, let us consider a simple student enrollment problem,where we are required to model the students enrolled in different courses. We can easily define the &amp;lt;b&amp;gt;Student CRC Card&amp;lt;/b&amp;gt; as having attributes such as student name, student id and responsibilities that enable a student to enroll in a course or drop the course. In this particular instance, the collaborating class would be the &amp;lt;b&amp;gt;Course&amp;lt;/b&amp;gt; class. The &amp;lt;b&amp;gt;Course CRC Card&amp;lt;/b&amp;gt; can in turn be visualized as having its own responsibilities, such as having attributes like Course id, course name and the collaborating class would be the &amp;lt;b&amp;gt;Instructor &lt;br /&gt;
class&amp;lt;/b&amp;gt;. The CRC cards for the Student class and the Course Class are shown below.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:Stud_enr_Crc.jpg|frame|center|Student and Course CRC Card]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
There are also several practical designs that use the CRC card model to design Object oriented software design. The  [http://www.extremeprogramming.org/example/crcsim.html Simulator for Coffee Maker] explores an [http://en.wikipedia.org/wiki/Extreme_Programming Extreme Programming] approach combined with CRC card technique to come up with a design for the coffee maker.&lt;br /&gt;
&lt;br /&gt;
Another interesting approach using CRC cards is the design for the [http://www.math-cs.gordon.edu/courses/cps211/ATMExample/CRCCards.html ATM Machine]&lt;br /&gt;
&lt;br /&gt;
===Advantages of CRC cards===&lt;br /&gt;
There are a few advantages of CRC cards that make it a preferable model in many designs. Some of the advantages of the CRC card design method are&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
:* CRC cards can allow designers to easily make audience understand a very complex system. In essence it allows for building more complex designs by slowly building the interactions between the collaborating classes, one by one.&lt;br /&gt;
:* CRC cards are a simple technique and it can be easily used by anyone with very little training and does not require any expensive computing resources(a board or a paper and a pen would suffice).&lt;br /&gt;
:* CRC is fundamentally a brainstorming tool, enabling different people in a team to come up with the design by collaborating, enabling everyone in the team to contribute&lt;br /&gt;
:* CRC can be used with other formal object oriented design methodologies such as [http://en.wikipedia.org/wiki/Extreme_Programming Extreme Programming] (an [http://en.wikipedia.org/wiki/Agile_Modeling Agile] development Technique) and can be used along with modeling languages such as [http://en.wikipedia.org/wiki/Unified_Modeling_Language Unified Modeling Language(UML)]&lt;br /&gt;
&lt;br /&gt;
==Software for CRC Cards==&lt;br /&gt;
CRC cards have limited scope. If we go about designing a huge project, the scope spans many classes and interactions between them. The tedious task here is to maintain the CRC cards and properly formulate interaction between them. &lt;br /&gt;
We need software for CRC Cards for the following reasons:&lt;br /&gt;
:* &amp;lt;b&amp;gt;Designing Scenario:&amp;lt;/b&amp;gt;  A scenario represents series of steps in which classes and objects communicate. There can be references to other cards or scenarios. &lt;br /&gt;
:* &amp;lt;b&amp;gt;Modeling :&amp;lt;/b&amp;gt;  Software provides an easy way to segregate cards and objects into different diagrams. Thus we can model our problem with different functionality very easily.&lt;br /&gt;
:* &amp;lt;b&amp;gt;Simulation :&amp;lt;/b&amp;gt; Software can provide simulation of the design. This might include single-stepping a scenario forwards/backwards or jumping to a specific location in the scenario stack of a multiple scenario simulation&lt;br /&gt;
:* &amp;lt;b&amp;gt;Synchronization and Dependencies:&amp;lt;/b&amp;gt; Software can maintain relationships between cards, scenarios as design changes take place. If a card references other cards or classes, those cards are generated automatically. Also any name changes and cross references between objects are instantly updated. &lt;br /&gt;
:* &amp;lt;b&amp;gt;Revision history and Version Control :&amp;lt;/b&amp;gt; Software for CRC cards supports changes to CRC cards. It is easy to model and keep track of all changes to a CRC card. This is extremely helpful in tracking the design changes in CRC cards.&lt;br /&gt;
&lt;br /&gt;
==Designing Software==&lt;br /&gt;
The steps to design software for CRC cards are:&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Create CRC Cards&amp;lt;/b&amp;gt; : A CRC model is usually created by an individual or small group of designers during the early phase of an object-oriented development project.The figure shows the design of hierarchy of classes. These set of class used for drawing objects are shown. We can see TShape class has a superclass called TObject and two subclasses, TBox and TCircle. Lets assume we create new class TWindow derived from the superclass TObject.  [[Image:Design.png|thumb|Description]]&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Assign Responsibilities&amp;lt;/b&amp;gt; : Once a set of classes are defined, behaviors can be assigned that will provide the functions of the application. For example, the TShape card has responsibilities ''Initialize'' to create it and ''Draw'' to illustrate it on the diagram.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Add Attributes&amp;lt;/b&amp;gt; : Attributes of classes may also be identified in a CRC Card.The TShape class has attributes fPosition, fType and fSelected.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Define and simulate Scenario&amp;lt;/b&amp;gt; : A scenario describes a sequence of steps in the design using the responsibilities of a group of collaborating classes. Collaboration between classes refers to a client object that uses a responsibility performed by a server object. Often a class must call upon several collaborating classes to implement one of its responsibilities.A scenario describes what happens in the system from a high-level, user's point of view.&lt;br /&gt;
[[Image:Scenario.png|thumb|Description]]&lt;br /&gt;
&lt;br /&gt;
Consider situation to the right. We have defined two CRC cards with their responsibility. A scenario defines several steps. Each step in a scenario has a Client, Server and Responsibility field. For each step, a client class uses a responsibility of a server class&lt;br /&gt;
&lt;br /&gt;
The Open Document scenario in the picture references the Initialize Document sub-scenario by specifying its server class ''Document'' in the server field and its scenario name in the Responsibility field. The first step in the Initialize Document sub-scenario uses ''Document'' as the server class name. By single-stepping forwards, backwards or through each sub-scenario, bugs in the design can be identified and corrected early.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Partition the Design&amp;lt;/b&amp;gt; : As the number of CRC cards in the design grow, they can be grouped by function. By using Software for CRC cards,we can draw separate diagrams to partition the model into different subject areas. &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Inheritance Graph&amp;lt;/b&amp;gt; : An automated tool can generate an inheritance graph from information on CRC cards. This diagram can concisely illustrate the big picture of a large project that might contain hundreds of classes and dozens of diagrams.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;b&amp;gt;Verify Your Work &amp;lt;/b&amp;gt; : Creating and simulating scenarios will help verify that a design is correct and complete. A CRC software can perform other error checks to locate design problems. For example, responsibilities that are not used in any scenarios may indicate that the design is incomplete or perhaps the responsibility isn't needed. Likewise, a card that is not used by any collaboration may not be needed.&lt;br /&gt;
&lt;br /&gt;
==CRC Cards in Software Development==&lt;br /&gt;
The power of CRC cards for OOP development is in the group session that employs them.  The use of CRC cards is an excellent way for people to begin to grasp the underlying idea of object oriented approach. CRC cards are used in a few steps of the software development process such as Analysis and Design.&lt;br /&gt;
&lt;br /&gt;
===CRC Cards for Analysis===&lt;br /&gt;
&lt;br /&gt;
CRC cards and CRC card sessions are good at organizing and spreading domain knowledge in the analysis phase.  When building an object–oriented application, the focus of the CRC card sessions is on analyzing and describing the problem.  In this phase, the group identifies the objects that are relevant to the application.  Before going to the CRC card session, the team must be aware of the domain classes and frameworks that exist to help them model the problem. During the session, they can decide if the existing ones can be used for the new application.&lt;br /&gt;
&lt;br /&gt;
'''Advantages of using CRC cards in Analysis phase:'''&lt;br /&gt;
&lt;br /&gt;
* People from all phases of the project are involved in the card sessions for problem modeling. The names of the classes and responsibilities are created, argued and agreed upon by the team members at the start itself in order to avoid conflicts later. This gives rise to common project and product vocabulary across different roles.&lt;br /&gt;
&lt;br /&gt;
* Domain knowledge already known is shared in the sessions. Also, missing domain knowledge is identified.&lt;br /&gt;
 &lt;br /&gt;
* Role plays are conducted during these sessions that help spread knowledge about OO concepts.&lt;br /&gt;
&lt;br /&gt;
* These sessions can be used to create a live prototype of what the application is supposed to do. This can be shown to clients as well so that the team receives feedback on their understanding of the requirements.&lt;br /&gt;
 &lt;br /&gt;
* A CRC card session will help the team walk through the requirements and identify any ambiguities.&lt;br /&gt;
&lt;br /&gt;
At the end of the analysis phase, the CRC elements that will be available are:&lt;br /&gt;
&lt;br /&gt;
* '''Classes:''' The classes identified in this phase directly reflect the concepts of the application that is being analyzed. It may not be modeled in terms of software system but it is useful in describing how the application works. However, at this stage the distinction between objects and classes may not be clear.&lt;br /&gt;
&lt;br /&gt;
* '''Responsibilities:'''  The responsibilities that are assigned to the classes in this phase are of relatively higher level.&lt;br /&gt;
&lt;br /&gt;
===CRC Cards for Design===&lt;br /&gt;
 &lt;br /&gt;
During the CRC cards design sessions, other relevant classes are added, if any. &amp;quot;While an analysis must reflect the real world of the user, the design must reflect the real world of the implementers.&amp;quot;[5] A CRC card tool may be helpful for saving, illustrating and documenting a design.&lt;br /&gt;
&lt;br /&gt;
'''Advantages of using CRC cards in Design phase:'''&lt;br /&gt;
&lt;br /&gt;
* These sessions help the team members concentrate on taking the design decisions for the application. These design decisions also include performance, efficiency and other constraints.&lt;br /&gt;
&lt;br /&gt;
* By walking through the scenarios that were seen during the analysis phase, the implementers can give the testers an overview of how the application should work.&lt;br /&gt;
&lt;br /&gt;
* Using CRC cards forces decision to be made up front in front of the team, thus any conflicts can be resolved right there.&lt;br /&gt;
&lt;br /&gt;
* Design constraints such as target environment, language, UI, performance etc., can be discussed during these sessions to check if the design can be implemented.&lt;br /&gt;
&lt;br /&gt;
==Summary==&lt;br /&gt;
Software for CRC cards are immensely helpful in designing and modeling Software development using CRC cards.As the size of object-oriented system grow, it becomes increasingly difficult to model the problem with index based CRC cards. Thus an automated tool is required to maintain design and clear functionality.&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Unified_Modeling_Language Unified Modeling Language(UML)]&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Agile_Modeling Agile Modelling]&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Extreme_Programming Extreme Programming]&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
[1] [http://c2.com/doc/oopsla89/paper.html  A Laboratory For Teaching Object-Oriented Thinking]&lt;br /&gt;
&lt;br /&gt;
[2] [http://www.extremeprogramming.org/rules/crccards.html CRC Cards]&lt;br /&gt;
&lt;br /&gt;
[3] [http://www.extremeprogramming.org/example/crcsim.html A Simulator for Coffee Maker]&lt;br /&gt;
&lt;br /&gt;
[4] [http://www.math-cs.gordon.edu/courses/cps211/ATMExample/CRCCards.html CRC Card for ATM]&lt;br /&gt;
&lt;br /&gt;
[5] &amp;quot;Using CRC Cards: An Informal Approach to Object-Oriented Development&amp;quot; by Nancy M.Wilkinson&lt;br /&gt;
&lt;br /&gt;
==External Links==&lt;br /&gt;
* [http://c2.com/doc/oopsla89/paper.html A Laboratory For Teaching Object-Oriented Thinking] by Ward Cunningham and Kent Beck&lt;br /&gt;
* [http://books.google.com/books?id=SGOyQai2TboC&amp;amp;printsec=frontcover&amp;amp;dq=CRC+card+book&amp;amp;hl=en&amp;amp;ei=xSOaTKSaNISclgfRqtkK&amp;amp;sa=X&amp;amp;oi=book_result&amp;amp;ct=result&amp;amp;resnum=1&amp;amp;ved=0CDYQ6AEwAA#v=onepage&amp;amp;q&amp;amp;f=false The CRC card book] by David Bellin, Susan Suchman Simone&lt;br /&gt;
&lt;br /&gt;
* [http://www.agilemodeling.com/artifacts/crcModel.htm Modelling CRC Cards]&lt;br /&gt;
* [http://www.excelsoftware.com/quickcrcwin.html Quick CRC]&lt;/div&gt;</summary>
		<author><name>Pgjalisa</name></author>
	</entry>
</feed>