<?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=Sayenga</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=Sayenga"/>
	<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Special:Contributions/Sayenga"/>
	<updated>2026-05-16T09:09:20Z</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_2013/oss_ssp&amp;diff=82340</id>
		<title>CSC/ECE 517 Fall 2013/oss ssp</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_ssp&amp;diff=82340"/>
		<updated>2013-11-01T17:13:31Z</updated>

		<summary type="html">&lt;p&gt;Sayenga: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''OSS E803 Refactoring and testing — signup_sheet model''' ==&lt;br /&gt;
&lt;br /&gt;
=== '''Motivation''' ===&lt;br /&gt;
&lt;br /&gt;
The motivation of this project was to provide functionality to manage Sign Up Sheets. The intent was to improve the design of the project by modularizing the code and maintaining good naming conventions. The methods relevant to wait-listing a team were all a part of the Sign Up sheet model and controller. in order to improve the readability of the code and to have a better organization, we intended to move these methods to a separate Waitlist Model. Also, some methods had too many functionalities, a lot more than what their names suggested. To have a more elegant code, the functionalities had to be moved to relevant methods. cancel_all_waitlists and waitlist_teams methods were created in the waitlist model for this purpose. Naming conventions are considered very important for making the code more readable and understandable. Ruby is known for its 'Convention over Configuration' ideology. Thus the naming conventions had to be taken care of. In the Sign Up sheet controller, we could see the usage of Camel cases in a lot of places. We intended to replace these by the convention of Ruby where underscore is used between two words in variable names with all the alphabets in small letters.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Design'''===&lt;br /&gt;
===='''Initial Design'''====&lt;br /&gt;
*Initially the sign_up_sheet_controller had huge methods with no comments and multiple variable decalarations.&lt;br /&gt;
*The other major drawback with the initial design was there were redundant methods in sign_up_sheet_controller and sign_up_controller.&lt;br /&gt;
&lt;br /&gt;
===='''Modified Design'''====&lt;br /&gt;
The refactoring required us to modularize and push some of the functionalities in sign_up_sheet_controller.rb to sign_up_topic.rb (model) and waitlist.rb ( model).&lt;br /&gt;
This demanded to make calls from remove_team and reassign_topic from sign_up_topic model to signup_topics method in  sign_up_sheet_controller. Similarly the controller also used methods waitlist_teams and cancel_all_waitlists from the waitlist model.&lt;br /&gt;
&lt;br /&gt;
*'''Refactoring the sign_up_sheet_controller for modularity and flexibility:'''&lt;br /&gt;
#By defining functions in the desired class and making only calls to the specific controller, we have implemented a '''Collaborative design''' based on CRC modelling: &lt;br /&gt;
##finding classes/ models - sign_up_topic.rb and waitlist.rb&lt;br /&gt;
##finding responsibilities - remove_team, reassign_topic in sign_up_topic.rb, cancel-all_waitlists, waitlist_teams in waitlist.rb&lt;br /&gt;
##defining the collaborators - confirm_topic, delete_signup_topic, signup_topics in sign_up_sheet_controller.rb&lt;br /&gt;
#This has also made it more flexible for the developers as a change in the db or table design can be easily tracked. &lt;br /&gt;
##Easily implemented in the respective models and by passing the correct type/number parameters in the controllers.  &lt;br /&gt;
##Reduces overhead of rewriting methods and keeping track of the method calls.&lt;br /&gt;
&lt;br /&gt;
*'''Adding a waitlist model:'''&lt;br /&gt;
#The newly formed waitlist model follows the '''Singleton pattern''' as it is an independent class and also the waitlist for a topic is a single queue or list on which multiple teams and individuals wait on.&lt;br /&gt;
#The methods defined in waitlist model are singleton methods and thus are defined as class methods with the keyword &amp;quot;self&amp;quot; prepended to them.&lt;br /&gt;
&lt;br /&gt;
*'''Removing Redundancy from sign_up_controller'''&lt;br /&gt;
#The methods such as sign_up were redundantly present in both the controllers. &lt;br /&gt;
#Some part of the code which had common functionality were removed and the function calls were also redirected accordingly to the specific views.&lt;br /&gt;
&lt;br /&gt;
=== '''Issues'''===&lt;br /&gt;
*'''Refactoring issues'''&lt;br /&gt;
#Since we had two controllers for the signup sheet, there were many functions which had nested calls and needed to be taken care.&lt;br /&gt;
##For example, slotAvailble?() was called from both controller and the sign_up_topic model.&lt;br /&gt;
#As waitlist was created as a singleton class with no table structure it was difficult to make use of attributes of other classes in it as attributes can be inherited or used only if they have associativity at schema level.&lt;br /&gt;
#By defining the functions in the models, we had to take care of the dependencies of the instance variables defined and used in the controller and interaction between several models had to be taken care. &lt;br /&gt;
#Controllers have the flexibility to directly make use of the parameters from the specific views whereas defining them in models had to carefully set and passed. Since some of the parameters were used in multiple views, it needed to be updated in several places.&lt;br /&gt;
#Some of the methods that were modularised were conflicting as they were modified to class methods from being an instance method.&lt;br /&gt;
&lt;br /&gt;
*'''Redundant Test issues'''&lt;br /&gt;
#Since the code has been developed over the years and refactored by multiple developers, there were several redundant tests and identifying them was a huge task.&lt;br /&gt;
#The rspec environment variable along with the spec_helper had to be freshly created for the test framework suite to be recognized.&lt;br /&gt;
&lt;br /&gt;
*'''Deployment issues'''&lt;br /&gt;
#Merging of branches from the local to the remote repository at the right level was initially being an overhead.&lt;br /&gt;
#This was overcome by cloning a specific branch using: git clone -b &amp;lt;branch_name&amp;gt; &amp;lt;remote_url&amp;gt;.&lt;br /&gt;
#Earlier commits do not have a proper commit message to refer.&lt;br /&gt;
&lt;br /&gt;
=== '''Procedure'''===&lt;br /&gt;
&lt;br /&gt;
====A brief description====&lt;br /&gt;
&lt;br /&gt;
Our OSS project required us to do refactoring and testing of the part of Expertiza that deals with signup,mainly sign_up_sheet controller. This controller manages functionalities of signup sheet for assignment. We have moved a few methods from controller to a more suitable model in order to attain the “thin controller, fat model” implementation. A major part includes the actions related to waitlist. We have put methods from sign_up_sheet controller to the waitlist model (which was earlier empty, so we created a waitlist model by adding functionalities to it)&lt;br /&gt;
A brief description of the refactoring that we have done is given below.&lt;br /&gt;
&lt;br /&gt;
=====Add teams to waiting list=====&lt;br /&gt;
We have moved the functionality that adds teams to waiting list when the topic is unavailable. We have moved this functionality from confirm_topic in sign_up_sheet controller to waitlist_teams method that we have created in waitlist controller.&lt;br /&gt;
&lt;br /&gt;
[[File:confirm_topic_new.png]]&lt;br /&gt;
&lt;br /&gt;
This shows the method confirm_topic in sign_up_sheet controller that contains call to waitlist_teams method in waitlist controller. &lt;br /&gt;
&lt;br /&gt;
[[File:waitlist_teams_new.png]]&lt;br /&gt;
&lt;br /&gt;
This method has definition for waitlist_teams and is defined in waitlist model.&lt;br /&gt;
&lt;br /&gt;
=====Cancel waitlist=====&lt;br /&gt;
We have moved the functionality that removes a team from the waiting list, from sign_up_topic model to waitlist model. The method name is cancel_all_waitlist.&lt;br /&gt;
&lt;br /&gt;
[[File:cancel_all_waitlists_new.png]]&lt;br /&gt;
&lt;br /&gt;
=====Reassign a topic=====&lt;br /&gt;
We have moved the functionality that reassigns a topic to another team when a team holding that particular topic cancels its reservation. We have moved this functionality from delete_signup_for_topic in sign_up_sheet controller to a method named reassign_topic that we have created in sign_up_topic model. &lt;br /&gt;
&lt;br /&gt;
[[File:for_reassign_topic_new.png]]&lt;br /&gt;
&lt;br /&gt;
This shows the method delete_signup_for_topic in sign_up_sheet controller that contains call to reassign_topic method in sign_up_topic model.&lt;br /&gt;
&lt;br /&gt;
[[File:reassign_topic_new.png]]&lt;br /&gt;
&lt;br /&gt;
This method has definition for reassign_topic and is defined in sign_up_topic model.&lt;br /&gt;
&lt;br /&gt;
=====Remove team from topic=====&lt;br /&gt;
We have moved the functionality that removes a team from a topic when all of the team’s members have left the team. We have moved this functionality from signup_topics in sign_up_sheet controller to a method named remove_team that we have created in sign_up_topic model. &lt;br /&gt;
&lt;br /&gt;
[[File:signup_topics_new.png]]&lt;br /&gt;
&lt;br /&gt;
This shows the method signup_topics in sign_up_sheet controller that contains call to remove_team method in sign_up_topic model.&lt;br /&gt;
&lt;br /&gt;
[[File:remove_team_new.png]]&lt;br /&gt;
&lt;br /&gt;
This method has definition for remove_team and is defined in sign_up_topic model.&lt;br /&gt;
Rest, we have done renaming at a few places in sign_up_sheet controller.&lt;br /&gt;
&lt;br /&gt;
====Snapshots====&lt;br /&gt;
Here, we have a few snapshots that would guide one to walk-through our work and the areas wherein we did refactoring.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Login_admin_new.png]]&lt;br /&gt;
&lt;br /&gt;
Login as an admin.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:manage_courses_new.png]]&lt;br /&gt;
&lt;br /&gt;
Go to manage-&amp;gt;courses&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:create_assignment_new.png]]&lt;br /&gt;
&lt;br /&gt;
Create an assignment by filling in the required fields and selecting the checkboxes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:create_users_new.png]]&lt;br /&gt;
&lt;br /&gt;
Create users by filling in the required fields.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:add_participants_admin_new.png]]&lt;br /&gt;
&lt;br /&gt;
Again go to Manage courses and as shown in the snapshot above, one can see actions associated with an assignment. Click on add participants.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:add_participants2_admin.png]]&lt;br /&gt;
&lt;br /&gt;
Add a user to an assignment as a participant.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:participant_added.png]]&lt;br /&gt;
&lt;br /&gt;
The participant is added.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:add_signupsheet.png]]&lt;br /&gt;
&lt;br /&gt;
Also, through manage-&amp;gt; courses, add signup sheet to an assignment in a similar manner as adding participants.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:add_topic.png]]&lt;br /&gt;
&lt;br /&gt;
When a signup sheet is created, add new topics to it in the similar manner&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:topic_created.png]]&lt;br /&gt;
&lt;br /&gt;
Topic is successfully created. Logout of admin system&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:login.png]] &lt;br /&gt;
&lt;br /&gt;
Now login as an user.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:top.png]]&lt;br /&gt;
&lt;br /&gt;
Go to the assignments on top&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:select_one_assignment.png]]&lt;br /&gt;
&lt;br /&gt;
Select one assignment from the list of assignments.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:click_signup_sheet.png]]&lt;br /&gt;
&lt;br /&gt;
Select signup sheet&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:can_view_signup_sheet.png]]&lt;br /&gt;
&lt;br /&gt;
One can view signup sheet and signup for the topic&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:signing_up.png]]&lt;br /&gt;
&lt;br /&gt;
After signing up, here for example for topic 1234, the user has the topic and the no. of available slot shows 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:shows_waiting.png]]&lt;br /&gt;
&lt;br /&gt;
Now, if another user tries to sign up for the same topic, he is put on waitlist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This is a brief illustration of the changes that we have made as a part of our project.&lt;br /&gt;
&lt;br /&gt;
=== '''Testing''' ===&lt;br /&gt;
&lt;br /&gt;
Testing was done using rspec as most of our work involved moving from the controller class and as rspec allows to create a single http request for each test case.&lt;br /&gt;
&lt;br /&gt;
==== '''Set up environment for Testing''' ====&lt;br /&gt;
#Go to Run -&amp;gt; Edit Configuraions -&amp;gt;RSpec -&amp;gt; Select All tests in folder and Test file name mask: **/*_spec.rb&lt;br /&gt;
#Check the run the script in context of the bundle&lt;br /&gt;
#Configuration -&amp;gt; Working directory must be pointed to the root of the application. Apply the changes&lt;br /&gt;
#Run rspec:install form Rails Generator to create a rspec_helper.rb which will have the RAILS_ENV(= 'test')&lt;br /&gt;
#rake db:migrate&lt;br /&gt;
#rake spec&lt;br /&gt;
#run all tests in spec.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== '''Sample Test Case''' ====&lt;br /&gt;
&lt;br /&gt;
 describe &amp;quot;GET show&amp;quot; do&lt;br /&gt;
    it &amp;quot;assigns the requested signup_topic as @signup_topic&amp;quot; do&lt;br /&gt;
      signup_topic = SignupTopic.create! valid_attributes&lt;br /&gt;
      get :show, {:id =&amp;gt; signup_topic.to_param}, valid_session&lt;br /&gt;
      assigns(:signup_topic).should eq(signup_topic)&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  describe &amp;quot;GET new&amp;quot; do&lt;br /&gt;
    it &amp;quot;assigns a new signup_topic as @signup_topic&amp;quot; do&lt;br /&gt;
      get :new, {}, valid_session&lt;br /&gt;
      assigns(:signup_topic).should be_a_new(SignupTopic)&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
=== '''Future Work'''===&lt;br /&gt;
&lt;br /&gt;
The sign up sheet controller still has many methods relevant to other entities which need to be moved to other relevant models and controllers. save_topic_dependancies and save_topic_deadlines are two methods which can be put into SignUpTopic Model or controller. show_team method which is in sign_up_sheet controller can be moved to teams_controller. We also see another controller called SignUp controller which looks like a redundant one which has methods mostly from SignUpSheet controller. And these methods don't seem to be used. So this method can be looked into carefully and discarded if possible. There is also a function called slotAvailable? in the sign up sheet controller which merely makes a call to a method slotAvailable? in the SignUpTopic model and does nothing else. This looks like an unnecesary redirection. Dependencies can be resolved and this method can be removed and calls can directly be made to the slotAvailable? method in the SignUpTopic model. Also the method update_waitlisted_users can be moved from SignUpTopic model to Wailist Model to improve the readability of the code.&lt;/div&gt;</summary>
		<author><name>Sayenga</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_ssp&amp;diff=81191</id>
		<title>CSC/ECE 517 Fall 2013/oss ssp</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_ssp&amp;diff=81191"/>
		<updated>2013-10-30T19:30:45Z</updated>

		<summary type="html">&lt;p&gt;Sayenga: /* Issues */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''OSS E803 Refactoring and testing — signup_sheet model''' ==&lt;br /&gt;
&lt;br /&gt;
=== '''Motivation''' ===&lt;br /&gt;
&lt;br /&gt;
The motivation of this project was to provide functionality to manage Sign Up Sheets. The intent was to improve the design of the project by modularizing the code and maintaining good naming conventions. The methods relevant to wait-listing a team were all a part of the Sign Up sheet model and controller. in order to improve the readability of the code and to have a better organization, we intended to move these methods to a separate Waitlist Model. Also, some methods had too many functionalities, a lot more than what their names suggested. To have a more elegant code, the functionalities had to be moved to relevant methods. cancel_all_waitlists and waitlist_teams methods were created in the waitlist model for this purpose. Naming conventions are considered very important for making the code more readable and understandable. Ruby is known for its 'Convention over Configuration' ideology. Thus the naming conventions had to be taken care of. In the Sign Up sheet controller, we could see the usage of Camel cases in a lot of places. We intended to replace these by the convention of Ruby where underscore is used between two words in variable names with all the alphabets in small letters.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Design'''===&lt;br /&gt;
===='''Initial Design'''====&lt;br /&gt;
*Initially the sign_up_sheet_controller had huge methods with no comments and multiple variable decalarations.&lt;br /&gt;
*The other major drawback with the initial design was there were redundant methods in sign_up_sheet_controller and sign_up_controller.&lt;br /&gt;
&lt;br /&gt;
===='''Modified Design'''====&lt;br /&gt;
The refactoring required us to modularize and push some of the functionalities in sign_up_sheet_controller.rb to sign_up_topic.rb (model) and waitlist.rb ( model).&lt;br /&gt;
This demanded to make calls from remove_team and reassign_topic from sign_up_topic model to signup_topics method in  sign_up_sheet_controller. Similarly the controller also used methods waitlist_teams and cancel_all_waitlists from the waitlist model.&lt;br /&gt;
&lt;br /&gt;
*'''Refactoring the sign_up_sheet_controller for modularity and flexibility:'''&lt;br /&gt;
#By defining functions in the desired class and making only calls to the specific controller, we have implemented a '''Collaborative design''' based on CRC modelling: &lt;br /&gt;
##finding classes/ models - sign_up_topic.rb and waitlist.rb&lt;br /&gt;
##finding responsibilities - remove_team, reassign_topic in sign_up_topic.rb, cancel-all_waitlists, waitlist_teams in waitlist.rb&lt;br /&gt;
##defining the collaborators - confirm_topic, delete_signup_topic, signup_topics in sign_up_sheet_controller.rb&lt;br /&gt;
#This has also made it more flexible for the developers as a change in the db or table design can be easily tracked. &lt;br /&gt;
##Easily implemented in the respective models and by passing the correct type/number parameters in the controllers.  &lt;br /&gt;
##Reduces overhead of rewriting methods and keeping track of the method calls.&lt;br /&gt;
&lt;br /&gt;
*'''Adding a waitlist model:'''&lt;br /&gt;
#The newly formed waitlist model follows the '''Singleton pattern''' as it is an independent class and also the waitlist for a topic is a single queue or list on which multiple teams and individuals wait on.&lt;br /&gt;
#The methods defined in waitlist model are singleton methods and thus are defined as class methods with the keyword &amp;quot;self&amp;quot; prepended to them.&lt;br /&gt;
&lt;br /&gt;
*'''Removing Redundancy from sign_up_controller'''&lt;br /&gt;
#The methods such as sign_up were redundantly present in both the controllers. &lt;br /&gt;
#Some part of the code which had common functionality were removed and the function calls were also redirected accordingly to the specific views.&lt;br /&gt;
&lt;br /&gt;
=== '''Issues'''===&lt;br /&gt;
*'''Refactoring issues'''&lt;br /&gt;
#Since we had two controllers for the signup sheet, there were many functions which had nested calls and needed to be taken care.&lt;br /&gt;
##For example, slotAvailble?() was called from both controller and the sign_up_topic model.&lt;br /&gt;
#As waitlist was created as a singleton class with no table structure it was difficult to make use of attributes of other classes in it as attributes can be inherited or used only if they have associativity at schema level.&lt;br /&gt;
#By defining the functions in the models, we had to take care of the dependencies of the instance variables defined and used in the controller and interaction between several models had to be taken care. &lt;br /&gt;
#Controllers have the flexibility to directly make use of the parameters from the specific views whereas defining them in models had to carefully set and passed. Since some of the parameters were used in multiple views, it needed to be updated in several places.&lt;br /&gt;
#Some of the methods that were modularised were conflicting as they were modified to class methods from being an instance method.&lt;br /&gt;
&lt;br /&gt;
*'''Redundant Test issues'''&lt;br /&gt;
#Since the code has been developed over the years and refactored by multiple developers, there were several redundant tests and identifying them was a huge task.&lt;br /&gt;
#The rspec environment variable along with the spec_helper had to be freshly created for the test framework suite to be recognized.&lt;br /&gt;
&lt;br /&gt;
*'''Deployment issues'''&lt;br /&gt;
#Merging of branches from the local to the remote repository at the right level was initially being an overhead.&lt;br /&gt;
#This was overcome by cloning a specific branch using: git clone -b &amp;lt;branch_name&amp;gt; &amp;lt;remote_url&amp;gt;.&lt;br /&gt;
#Earlier commits do not have a proper commit message to refer.&lt;br /&gt;
&lt;br /&gt;
=== '''Procedure'''===&lt;br /&gt;
&lt;br /&gt;
====A brief description====&lt;br /&gt;
&lt;br /&gt;
Our OSS project required us to do refactoring and testing of the part of Expertiza that deals with signup mainly sign_up_sheet controller. This controller manages functionalities of signup sheet for assignment. We have moved a few methods from controller to a more suitable model in order to attain the “thin controller, fat model” implementation. A major part includes the actions related to waitlist. We have put methods from sign_up_sheet controller to the waitlist model (which was earlier empty, so we created a waitlist model by adding functionalities to it)&lt;br /&gt;
A brief description of the refactoring that we have done is given below&lt;br /&gt;
&lt;br /&gt;
=====Add teams to waiting list=====&lt;br /&gt;
We have moved the functionality that adds teams to waiting list when the topic is unavailable. We have moved this functionality from confirm_topic in sign_up_sheet controller to waitlist_teams method that we have created in waitlist controller.&lt;br /&gt;
&lt;br /&gt;
[[File:confirm_topic_new.png]]&lt;br /&gt;
&lt;br /&gt;
This shows the method confirm_topic in sign_up_sheet controller that contains call to waitlist_teams method in waitlist controller. &lt;br /&gt;
&lt;br /&gt;
[[File:waitlist_teams_new.png]]&lt;br /&gt;
&lt;br /&gt;
This method has definition for waitlist_teams and is defined in waitlist model.&lt;br /&gt;
&lt;br /&gt;
=====Cancel waitlist=====&lt;br /&gt;
We have moved the functionality that removes a team from the waiting list, from sign_up_topic model to waitlist model. The method name is cancel_all_waitlist.&lt;br /&gt;
&lt;br /&gt;
[[File:cancel_all_waitlists_new.png]]&lt;br /&gt;
&lt;br /&gt;
=====Reassign a topic=====&lt;br /&gt;
We have moved the functionality that reassigns a topic to another team when a team holding that particular topic cancels its reservation. We have moved this functionality from delete_signup_for_topic in sign_up_sheet controller to a method named reassign_topic that we have created in sign_up_topic model. &lt;br /&gt;
&lt;br /&gt;
[[File:for_reassign_topic_new.png]]&lt;br /&gt;
&lt;br /&gt;
This shows the method delete_signup_for_topic in sign_up_sheet controller that contains call to reassign_topic method in sign_up_topic model.&lt;br /&gt;
&lt;br /&gt;
[[File:reassign_topic_new.png]]&lt;br /&gt;
&lt;br /&gt;
This method has definition for reassign_topic and is defined in sign_up_topic model.&lt;br /&gt;
&lt;br /&gt;
=====Remove team from topic=====&lt;br /&gt;
We have moved the functionality that removes a team from a topic when all of the team’s members have left the team. We have moved this functionality from signup_topics in sign_up_sheet controller to a method named remove_team that we have created in sign_up_topic model. &lt;br /&gt;
&lt;br /&gt;
[[File:signup_topics_new.png]]&lt;br /&gt;
&lt;br /&gt;
This shows the method signup_topics in sign_up_sheet controller that contains call to remove_team method in sign_up_topic model.&lt;br /&gt;
&lt;br /&gt;
[[File:remove_team_new.png]]&lt;br /&gt;
&lt;br /&gt;
This method has definition for remove_team and is defined in sign_up_topic model.&lt;br /&gt;
Rest, we have done renaming at a few places in sign_up_sheet controller.&lt;br /&gt;
&lt;br /&gt;
====Snapshots====&lt;br /&gt;
Here, we have a few snapshots that would guide one to walk-through our work and the areas wherein we did refactoring.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Login_admin_new.png]]&lt;br /&gt;
&lt;br /&gt;
Login as an admin.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:manage_courses_new.png]]&lt;br /&gt;
&lt;br /&gt;
Go to manage-&amp;gt;courses&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:create_assignment_new.png]]&lt;br /&gt;
&lt;br /&gt;
Create an assignment by filling in the required fields and selecting the checkboxes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:create_users_new.png]]&lt;br /&gt;
&lt;br /&gt;
Create users by filling in the required fields.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:add_participants_admin_new.png]]&lt;br /&gt;
&lt;br /&gt;
Again go to Manage courses and as shown in the snapshot above, one can see actions associated with an assignment. Click on add participants.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:add_participants2_admin.png]]&lt;br /&gt;
&lt;br /&gt;
Add a user to an assignment as a participant.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:participant_added.png]]&lt;br /&gt;
&lt;br /&gt;
The participant is added.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:add_signupsheet.png]]&lt;br /&gt;
&lt;br /&gt;
Also, through manage-&amp;gt; courses, add signup sheet to an assignment in a similar manner as adding participants.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:add_topic.png]]&lt;br /&gt;
&lt;br /&gt;
When a signup sheet is created, add new topics to it in the similar manner&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:topic_created.png]]&lt;br /&gt;
&lt;br /&gt;
Topic is successfully created. Logout of admin system&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:login.png]] &lt;br /&gt;
&lt;br /&gt;
Now login as an user.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:top.png]]&lt;br /&gt;
&lt;br /&gt;
Go to the assignments on top&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:select_one_assignment.png]]&lt;br /&gt;
&lt;br /&gt;
Select one assignment from the list of assignments.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:click_signup_sheet.png]]&lt;br /&gt;
&lt;br /&gt;
Select signup sheet&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:can_view_signup_sheet.png]]&lt;br /&gt;
&lt;br /&gt;
One can view signup sheet and signup for the topic&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:signing_up.png]]&lt;br /&gt;
&lt;br /&gt;
After signing up, here for example for topic 1234, the user has the topic and the no. of available slot shows 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:shows_waiting.png]]&lt;br /&gt;
&lt;br /&gt;
Now, if another user tries to sign up for the same topic, he is put on waitlist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This is a brief illustration of the changes we have made as a part of our project.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Future Work'''===&lt;br /&gt;
&lt;br /&gt;
The sign up sheet controller still has many methods relevant to other entities which need to be moved to other relevant models and controllers. save_topic_dependancies and save_topic_deadlines are two methods which can be put into SignUpTopic Model or controller. show_team method which is in sign_up_sheet controller can be moved to teams_controller. We also see another controller called SignUp controller which looks like a redundant one which has methods mostly from SignUpSheet controller. And these methods don't seem to be used. So this method can be looked into carefully and discarded if possible. There is also a function called slotAvailable? in the sign up sheet controller which merely makes a call to a method slotAvailable? in the SignUpTopic model and does nothing else. This looks like an unnecesary redirection. Dependencies can be resolved and this method can be removed and calls can directly be made to the slotAvailable? method in the SignUpTopic model. Also the method update_waitlisted_users can be moved from SignUpTopic model to Wailist Model to improve the readability of the code.&lt;/div&gt;</summary>
		<author><name>Sayenga</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_ssp&amp;diff=81184</id>
		<title>CSC/ECE 517 Fall 2013/oss ssp</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_ssp&amp;diff=81184"/>
		<updated>2013-10-30T19:28:18Z</updated>

		<summary type="html">&lt;p&gt;Sayenga: /* Issues */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''OSS E803 Refactoring and testing — signup_sheet model''' ==&lt;br /&gt;
&lt;br /&gt;
=== '''Motivation''' ===&lt;br /&gt;
&lt;br /&gt;
The motivation of this project was to provide functionality to manage Sign Up Sheets. The intent was to improve the design of the project by modularizing the code and maintaining good naming conventions. The methods relevant to wait-listing a team were all a part of the Sign Up sheet model and controller. in order to improve the readability of the code and to have a better organization, we intended to move these methods to a separate Waitlist Model. Also, some methods had too many functionalities, a lot more than what their names suggested. To have a more elegant code, the functionalities had to be moved to relevant methods. cancel_all_waitlists and waitlist_teams methods were created in the waitlist model for this purpose. Naming conventions are considered very important for making the code more readable and understandable. Ruby is known for its 'Convention over Configuration' ideology. Thus the naming conventions had to be taken care of. In the Sign Up sheet controller, we could see the usage of Camel cases in a lot of places. We intended to replace these by the convention of Ruby where underscore is used between two words in variable names with all the alphabets in small letters.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Design'''===&lt;br /&gt;
===='''Initial Design'''====&lt;br /&gt;
*Initially the sign_up_sheet_controller had huge methods with no comments and multiple variable decalarations.&lt;br /&gt;
*The other major drawback with the initial design was there were redundant methods in sign_up_sheet_controller and sign_up_controller.&lt;br /&gt;
&lt;br /&gt;
===='''Modified Design'''====&lt;br /&gt;
The refactoring required us to modularize and push some of the functionalities in sign_up_sheet_controller.rb to sign_up_topic.rb (model) and waitlist.rb ( model).&lt;br /&gt;
This demanded to make calls from remove_team and reassign_topic from sign_up_topic model to signup_topics method in  sign_up_sheet_controller. Similarly the controller also used methods waitlist_teams and cancel_all_waitlists from the waitlist model.&lt;br /&gt;
&lt;br /&gt;
*'''Refactoring the sign_up_sheet_controller for modularity and flexibility:'''&lt;br /&gt;
#By defining functions in the desired class and making only calls to the specific controller, we have implemented a '''Collaborative design''' based on CRC modelling: &lt;br /&gt;
##finding classes/ models - sign_up_topic.rb and waitlist.rb&lt;br /&gt;
##finding responsibilities - remove_team, reassign_topic in sign_up_topic.rb, cancel-all_waitlists, waitlist_teams in waitlist.rb&lt;br /&gt;
##defining the collaborators - confirm_topic, delete_signup_topic, signup_topics in sign_up_sheet_controller.rb&lt;br /&gt;
#This has also made it more flexible for the developers as a change in the db or table design can be easily tracked. &lt;br /&gt;
##Easily implemented in the respective models and by passing the correct type/number parameters in the controllers.  &lt;br /&gt;
##Reduces overhead of rewriting methods and keeping track of the method calls.&lt;br /&gt;
&lt;br /&gt;
*'''Adding a waitlist model:'''&lt;br /&gt;
#The newly formed waitlist model follows the '''Singleton pattern''' as it is an independent class and also the waitlist for a topic is a single queue or list on which multiple teams and individuals wait on.&lt;br /&gt;
#The methods defined in waitlist model are singleton methods and thus are defined as class methods with the keyword &amp;quot;self&amp;quot; prepended to them.&lt;br /&gt;
&lt;br /&gt;
*'''Removing Redundancy from sign_up_controller'''&lt;br /&gt;
#The methods such as sign_up were redundantly present in both the controllers. &lt;br /&gt;
#Some part of the code which had common functionality were removed and the function calls were also redirected accordingly to the specific views.&lt;br /&gt;
&lt;br /&gt;
=== '''Issues'''===&lt;br /&gt;
*'''Refactoring issues'''&lt;br /&gt;
#Since we had two controllers for the signup sheet, there were many functions which had nested calls and needed to be taken care.&lt;br /&gt;
##For example, slotAvailble?() was called from both controller and the sign_up_topic model.&lt;br /&gt;
#As waitlist was created as a singleton class with no table structure it was difficult to make use of attributes of other classes in it as attributes can be inherited or used only if they have associativity at schema level.&lt;br /&gt;
#By defining the functions in the models, we had to take care of the dependencies of the instance variables defined and used in the controller and interaction between several models had to be taken care. &lt;br /&gt;
#Controllers have the flexibility to directly make use of the parameters from the specific views whereas defining them in models had to carefully set and passed. Since some of the parameters were used in multiple views, it needed to be updated in several places.&lt;br /&gt;
#Some of the methods that were modularised were conflicting as they were modified to class methods from being an instance method.&lt;br /&gt;
&lt;br /&gt;
*'''Redundant Test issues'''&lt;br /&gt;
#Since the code has been developed over the years and refactored by multiple developers, there were several redundant tests and identifying them was a huge task.&lt;br /&gt;
&lt;br /&gt;
*'''Deployment issues'''&lt;br /&gt;
#Merging of branches from the local to the remote repository at the right level was initially being an overhead.&lt;br /&gt;
#This was overcome by cloning a specific branch using: git clone -b &amp;lt;branch_name&amp;gt; &amp;lt;remote_url&amp;gt;.&lt;br /&gt;
#Earlier commits do not have a proper commit message to refer.&lt;br /&gt;
&lt;br /&gt;
=== '''Procedure'''===&lt;br /&gt;
&lt;br /&gt;
====A brief description====&lt;br /&gt;
&lt;br /&gt;
Our OSS project required us to do refactoring and testing of the part of Expertiza that deals with signup mainly sign_up_sheet controller. This controller manages functionalities of signup sheet for assignment. We have moved a few methods from controller to a more suitable model in order to attain the “thin controller, fat model” implementation. A major part includes the actions related to waitlist. We have put methods from sign_up_sheet controller to the waitlist model (which was earlier empty, so we created a waitlist model by adding functionalities to it)&lt;br /&gt;
A brief description of the refactoring that we have done is given below&lt;br /&gt;
&lt;br /&gt;
=====Add teams to waiting list=====&lt;br /&gt;
We have moved the functionality that adds teams to waiting list when the topic is unavailable. We have moved this functionality from confirm_topic in sign_up_sheet controller to waitlist_teams method that we have created in waitlist controller.&lt;br /&gt;
&lt;br /&gt;
[[File:confirm_topic_new.png]]&lt;br /&gt;
&lt;br /&gt;
This shows the method confirm_topic in sign_up_sheet controller that contains call to waitlist_teams method in waitlist controller. &lt;br /&gt;
&lt;br /&gt;
[[File:waitlist_teams_new.png]]&lt;br /&gt;
&lt;br /&gt;
This method has definition for waitlist_teams and is defined in waitlist model.&lt;br /&gt;
&lt;br /&gt;
=====Cancel waitlist=====&lt;br /&gt;
We have moved the functionality that removes a team from the waiting list, from sign_up_topic model to waitlist model. The method name is cancel_all_waitlist.&lt;br /&gt;
&lt;br /&gt;
[[File:cancel_all_waitlists_new.png]]&lt;br /&gt;
&lt;br /&gt;
=====Reassign a topic=====&lt;br /&gt;
We have moved the functionality that reassigns a topic to another team when a team holding that particular topic cancels its reservation. We have moved this functionality from delete_signup_for_topic in sign_up_sheet controller to a method named reassign_topic that we have created in sign_up_topic model. &lt;br /&gt;
&lt;br /&gt;
[[File:for_reassign_topic_new.png]]&lt;br /&gt;
&lt;br /&gt;
This shows the method delete_signup_for_topic in sign_up_sheet controller that contains call to reassign_topic method in sign_up_topic model.&lt;br /&gt;
&lt;br /&gt;
[[File:reassign_topic_new.png]]&lt;br /&gt;
&lt;br /&gt;
This method has definition for reassign_topic and is defined in sign_up_topic model.&lt;br /&gt;
&lt;br /&gt;
=====Remove team from topic=====&lt;br /&gt;
We have moved the functionality that removes a team from a topic when all of the team’s members have left the team. We have moved this functionality from signup_topics in sign_up_sheet controller to a method named remove_team that we have created in sign_up_topic model. &lt;br /&gt;
&lt;br /&gt;
[[File:signup_topics_new.png]]&lt;br /&gt;
&lt;br /&gt;
This shows the method signup_topics in sign_up_sheet controller that contains call to remove_team method in sign_up_topic model.&lt;br /&gt;
&lt;br /&gt;
[[File:remove_team_new.png]]&lt;br /&gt;
&lt;br /&gt;
This method has definition for remove_team and is defined in sign_up_topic model.&lt;br /&gt;
Rest, we have done renaming at a few places in sign_up_sheet controller.&lt;br /&gt;
&lt;br /&gt;
====Snapshots====&lt;br /&gt;
Here, we have a few snapshots that would guide one to walk-through our work and the areas wherein we did refactoring.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Login_admin_new.png]]&lt;br /&gt;
&lt;br /&gt;
Login as an admin.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:manage_courses_new.png]]&lt;br /&gt;
&lt;br /&gt;
Go to manage-&amp;gt;courses&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:create_assignment_new.png]]&lt;br /&gt;
&lt;br /&gt;
Create an assignment by filling in the required fields and selecting the checkboxes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:create_users_new.png]]&lt;br /&gt;
&lt;br /&gt;
Create users by filling in the required fields.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:add_participants_admin_new.png]]&lt;br /&gt;
&lt;br /&gt;
Again go to Manage courses and as shown in the snapshot above, one can see actions associated with an assignment. Click on add participants.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:add_participants2_admin.png]]&lt;br /&gt;
&lt;br /&gt;
Add a user to an assignment as a participant.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:participant_added.png]]&lt;br /&gt;
&lt;br /&gt;
The participant is added.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:add_signupsheet.png]]&lt;br /&gt;
&lt;br /&gt;
Also, through manage-&amp;gt; courses, add signup sheet to an assignment in a similar manner as adding participants.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:add_topic.png]]&lt;br /&gt;
&lt;br /&gt;
When a signup sheet is created, add new topics to it in the similar manner&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:topic_created.png]]&lt;br /&gt;
&lt;br /&gt;
Topic is successfully created. Logout of admin system&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:login.png]] &lt;br /&gt;
&lt;br /&gt;
Now login as an user.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:top.png]]&lt;br /&gt;
&lt;br /&gt;
Go to the assignments on top&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:select_one_assignment.png]]&lt;br /&gt;
&lt;br /&gt;
Select one assignment from the list of assignments.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:click_signup_sheet.png]]&lt;br /&gt;
&lt;br /&gt;
Select signup sheet&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:can_view_signup_sheet.png]]&lt;br /&gt;
&lt;br /&gt;
One can view signup sheet and signup for the topic&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:signing_up.png]]&lt;br /&gt;
&lt;br /&gt;
After signing up, here for example for topic 1234, the user has the topic and the no. of available slot shows 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:shows_waiting.png]]&lt;br /&gt;
&lt;br /&gt;
Now, if another user tries to sign up for the same topic, he is put on waitlist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This is a brief illustration of the changes we have made as a part of our project.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Future Work'''===&lt;br /&gt;
&lt;br /&gt;
The sign up sheet controller still has many methods relevant to other entities which need to be moved to other relevant models and controllers. save_topic_dependancies and save_topic_deadlines are two methods which can be put into SignUpTopic Model or controller. show_team method which is in sign_up_sheet controller can be moved to teams_controller. We also see another controller called SignUp controller which looks like a redundant one which has methods mostly from SignUpSheet controller. And these methods don't seem to be used. So this method can be looked into carefully and discarded if possible. There is also a function called slotAvailable? in the sign up sheet controller which merely makes a call to a method slotAvailable? in the SignUpTopic model and does nothing else. This looks like an unnecesary redirection. Dependencies can be resolved and this method can be removed and calls can directly be made to the slotAvailable? method in the SignUpTopic model. Also the method update_waitlisted_users can be moved from SignUpTopic model to Wailist Model to improve the readability of the code.&lt;/div&gt;</summary>
		<author><name>Sayenga</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_ssp&amp;diff=81183</id>
		<title>CSC/ECE 517 Fall 2013/oss ssp</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_ssp&amp;diff=81183"/>
		<updated>2013-10-30T19:26:59Z</updated>

		<summary type="html">&lt;p&gt;Sayenga: /* Issues */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''OSS E803 Refactoring and testing — signup_sheet model''' ==&lt;br /&gt;
&lt;br /&gt;
=== '''Motivation''' ===&lt;br /&gt;
&lt;br /&gt;
The motivation of this project was to provide functionality to manage Sign Up Sheets. The intent was to improve the design of the project by modularizing the code and maintaining good naming conventions. The methods relevant to wait-listing a team were all a part of the Sign Up sheet model and controller. in order to improve the readability of the code and to have a better organization, we intended to move these methods to a separate Waitlist Model. Also, some methods had too many functionalities, a lot more than what their names suggested. To have a more elegant code, the functionalities had to be moved to relevant methods. cancel_all_waitlists and waitlist_teams methods were created in the waitlist model for this purpose. Naming conventions are considered very important for making the code more readable and understandable. Ruby is known for its 'Convention over Configuration' ideology. Thus the naming conventions had to be taken care of. In the Sign Up sheet controller, we could see the usage of Camel cases in a lot of places. We intended to replace these by the convention of Ruby where underscore is used between two words in variable names with all the alphabets in small letters.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Design'''===&lt;br /&gt;
===='''Initial Design'''====&lt;br /&gt;
*Initially the sign_up_sheet_controller had huge methods with no comments and multiple variable decalarations.&lt;br /&gt;
*The other major drawback with the initial design was there were redundant methods in sign_up_sheet_controller and sign_up_controller.&lt;br /&gt;
&lt;br /&gt;
===='''Modified Design'''====&lt;br /&gt;
The refactoring required us to modularize and push some of the functionalities in sign_up_sheet_controller.rb to sign_up_topic.rb (model) and waitlist.rb ( model).&lt;br /&gt;
This demanded to make calls from remove_team and reassign_topic from sign_up_topic model to signup_topics method in  sign_up_sheet_controller. Similarly the controller also used methods waitlist_teams and cancel_all_waitlists from the waitlist model.&lt;br /&gt;
&lt;br /&gt;
*'''Refactoring the sign_up_sheet_controller for modularity and flexibility:'''&lt;br /&gt;
#By defining functions in the desired class and making only calls to the specific controller, we have implemented a '''Collaborative design''' based on CRC modelling: &lt;br /&gt;
##finding classes/ models - sign_up_topic.rb and waitlist.rb&lt;br /&gt;
##finding responsibilities - remove_team, reassign_topic in sign_up_topic.rb, cancel-all_waitlists, waitlist_teams in waitlist.rb&lt;br /&gt;
##defining the collaborators - confirm_topic, delete_signup_topic, signup_topics in sign_up_sheet_controller.rb&lt;br /&gt;
#This has also made it more flexible for the developers as a change in the db or table design can be easily tracked. &lt;br /&gt;
##Easily implemented in the respective models and by passing the correct type/number parameters in the controllers.  &lt;br /&gt;
##Reduces overhead of rewriting methods and keeping track of the method calls.&lt;br /&gt;
&lt;br /&gt;
*'''Adding a waitlist model:'''&lt;br /&gt;
#The newly formed waitlist model follows the '''Singleton pattern''' as it is an independent class and also the waitlist for a topic is a single queue or list on which multiple teams and individuals wait on.&lt;br /&gt;
#The methods defined in waitlist model are singleton methods and thus are defined as class methods with the keyword &amp;quot;self&amp;quot; prepended to them.&lt;br /&gt;
&lt;br /&gt;
*'''Removing Redundancy from sign_up_controller'''&lt;br /&gt;
#The methods such as sign_up were redundantly present in both the controllers. &lt;br /&gt;
#Some part of the code which had common functionality were removed and the function calls were also redirected accordingly to the specific views.&lt;br /&gt;
&lt;br /&gt;
=== '''Issues'''===&lt;br /&gt;
*'''Refactoring issues'''&lt;br /&gt;
#Since we had two controllers for the signup sheet, there were many functions which had nested calls and needed to be taken care.&lt;br /&gt;
##For example, slotAvailble?() was called from both controller and the sign_up_topic model.&lt;br /&gt;
#As waitlist was created as a singleton class with no table structure it was difficult to make use of attributes of other classes in it as attributes can be inherited or used only if they have associativity at schema level.&lt;br /&gt;
#By defining the functions in the models, we had to take care of the dependencies of the instance variables defined and used in the controller and interaction between several models had to be taken care. &lt;br /&gt;
#Controllers have the flexibility to directly make use of the parameters from the specific views whereas defining them in models had to carefully set and passed. Since some of the parameters were used in multiple views, it needed to be updated in several places.&lt;br /&gt;
#Some of the methods that were modularised were conflicting as they were modified to class methods from being an instance method.&lt;br /&gt;
&lt;br /&gt;
*'''Redundant Test issues'''&lt;br /&gt;
#Since the code has been developed over the years and refactored by multiple developers, there were several redundant tests and identifying them was a huge task.&lt;br /&gt;
&lt;br /&gt;
*'''Deployment issues'''&lt;br /&gt;
#Merging of branches from the local to the remote repository at the right level was initially being an overhead creating multiple levels.&lt;br /&gt;
#This was overcome by cloning a specific branch using: git clone -b &amp;lt;branch_name&amp;gt; &amp;lt;remote_url&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== '''Procedure'''===&lt;br /&gt;
&lt;br /&gt;
====A brief description====&lt;br /&gt;
&lt;br /&gt;
Our OSS project required us to do refactoring and testing of the part of Expertiza that deals with signup mainly sign_up_sheet controller. This controller manages functionalities of signup sheet for assignment. We have moved a few methods from controller to a more suitable model in order to attain the “thin controller, fat model” implementation. A major part includes the actions related to waitlist. We have put methods from sign_up_sheet controller to the waitlist model (which was earlier empty, so we created a waitlist model by adding functionalities to it)&lt;br /&gt;
A brief description of the refactoring that we have done is given below&lt;br /&gt;
&lt;br /&gt;
=====Add teams to waiting list=====&lt;br /&gt;
We have moved the functionality that adds teams to waiting list when the topic is unavailable. We have moved this functionality from confirm_topic in sign_up_sheet controller to waitlist_teams method that we have created in waitlist controller.&lt;br /&gt;
&lt;br /&gt;
[[File:confirm_topic_new.png]]&lt;br /&gt;
&lt;br /&gt;
This shows the method confirm_topic in sign_up_sheet controller that contains call to waitlist_teams method in waitlist controller. &lt;br /&gt;
&lt;br /&gt;
[[File:waitlist_teams_new.png]]&lt;br /&gt;
&lt;br /&gt;
This method has definition for waitlist_teams and is defined in waitlist model.&lt;br /&gt;
&lt;br /&gt;
=====Cancel waitlist=====&lt;br /&gt;
We have moved the functionality that removes a team from the waiting list, from sign_up_topic model to waitlist model. The method name is cancel_all_waitlist.&lt;br /&gt;
&lt;br /&gt;
[[File:cancel_all_waitlists_new.png]]&lt;br /&gt;
&lt;br /&gt;
=====Reassign a topic=====&lt;br /&gt;
We have moved the functionality that reassigns a topic to another team when a team holding that particular topic cancels its reservation. We have moved this functionality from delete_signup_for_topic in sign_up_sheet controller to a method named reassign_topic that we have created in sign_up_topic model. &lt;br /&gt;
&lt;br /&gt;
[[File:for_reassign_topic_new.png]]&lt;br /&gt;
&lt;br /&gt;
This shows the method delete_signup_for_topic in sign_up_sheet controller that contains call to reassign_topic method in sign_up_topic model.&lt;br /&gt;
&lt;br /&gt;
[[File:reassign_topic_new.png]]&lt;br /&gt;
&lt;br /&gt;
This method has definition for reassign_topic and is defined in sign_up_topic model.&lt;br /&gt;
&lt;br /&gt;
=====Remove team from topic=====&lt;br /&gt;
We have moved the functionality that removes a team from a topic when all of the team’s members have left the team. We have moved this functionality from signup_topics in sign_up_sheet controller to a method named remove_team that we have created in sign_up_topic model. &lt;br /&gt;
&lt;br /&gt;
[[File:signup_topics_new.png]]&lt;br /&gt;
&lt;br /&gt;
This shows the method signup_topics in sign_up_sheet controller that contains call to remove_team method in sign_up_topic model.&lt;br /&gt;
&lt;br /&gt;
[[File:remove_team_new.png]]&lt;br /&gt;
&lt;br /&gt;
This method has definition for remove_team and is defined in sign_up_topic model.&lt;br /&gt;
Rest, we have done renaming at a few places in sign_up_sheet controller.&lt;br /&gt;
&lt;br /&gt;
====Snapshots====&lt;br /&gt;
Here, we have a few snapshots that would guide one to walk-through our work and the areas wherein we did refactoring.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Login_admin_new.png]]&lt;br /&gt;
&lt;br /&gt;
Login as an admin.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:manage_courses_new.png]]&lt;br /&gt;
&lt;br /&gt;
Go to manage-&amp;gt;courses&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:create_assignment_new.png]]&lt;br /&gt;
&lt;br /&gt;
Create an assignment by filling in the required fields and selecting the checkboxes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:create_users_new.png]]&lt;br /&gt;
&lt;br /&gt;
Create users by filling in the required fields.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:add_participants_admin_new.png]]&lt;br /&gt;
&lt;br /&gt;
Again go to Manage courses and as shown in the snapshot above, one can see actions associated with an assignment. Click on add participants.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:add_participants2_admin.png]]&lt;br /&gt;
&lt;br /&gt;
Add a user to an assignment as a participant.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:participant_added.png]]&lt;br /&gt;
&lt;br /&gt;
The participant is added.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:add_signupsheet.png]]&lt;br /&gt;
&lt;br /&gt;
Also, through manage-&amp;gt; courses, add signup sheet to an assignment in a similar manner as adding participants.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:add_topic.png]]&lt;br /&gt;
&lt;br /&gt;
When a signup sheet is created, add new topics to it in the similar manner&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:topic_created.png]]&lt;br /&gt;
&lt;br /&gt;
Topic is successfully created. Logout of admin system&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:login.png]] &lt;br /&gt;
&lt;br /&gt;
Now login as an user.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:top.png]]&lt;br /&gt;
&lt;br /&gt;
Go to the assignments on top&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:select_one_assignment.png]]&lt;br /&gt;
&lt;br /&gt;
Select one assignment from the list of assignments.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:click_signup_sheet.png]]&lt;br /&gt;
&lt;br /&gt;
Select signup sheet&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:can_view_signup_sheet.png]]&lt;br /&gt;
&lt;br /&gt;
One can view signup sheet and signup for the topic&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:signing_up.png]]&lt;br /&gt;
&lt;br /&gt;
After signing up, here for example for topic 1234, the user has the topic and the no. of available slot shows 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:shows_waiting.png]]&lt;br /&gt;
&lt;br /&gt;
Now, if another user tries to sign up for the same topic, he is put on waitlist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This is a brief illustration of the changes we have made as a part of our project.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Future Work'''===&lt;br /&gt;
&lt;br /&gt;
The sign up sheet controller still has many methods relevant to other entities which need to be moved to other relevant models and controllers. save_topic_dependancies and save_topic_deadlines are two methods which can be put into SignUpTopic Model or controller. show_team method which is in sign_up_sheet controller can be moved to teams_controller. We also see another controller called SignUp controller which looks like a redundant one which has methods mostly from SignUpSheet controller. And these methods don't seem to be used. So this method can be looked into carefully and discarded if possible. There is also a function called slotAvailable? in the sign up sheet controller which merely makes a call to a method slotAvailable? in the SignUpTopic model and does nothing else. This looks like an unnecesary redirection. Dependencies can be resolved and this method can be removed and calls can directly be made to the slotAvailable? method in the SignUpTopic model. Also the method update_waitlisted_users can be moved from SignUpTopic model to Wailist Model to improve the readability of the code.&lt;/div&gt;</summary>
		<author><name>Sayenga</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_ssp&amp;diff=81181</id>
		<title>CSC/ECE 517 Fall 2013/oss ssp</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_ssp&amp;diff=81181"/>
		<updated>2013-10-30T19:26:49Z</updated>

		<summary type="html">&lt;p&gt;Sayenga: /* Issues */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''OSS E803 Refactoring and testing — signup_sheet model''' ==&lt;br /&gt;
&lt;br /&gt;
=== '''Motivation''' ===&lt;br /&gt;
&lt;br /&gt;
The motivation of this project was to provide functionality to manage Sign Up Sheets. The intent was to improve the design of the project by modularizing the code and maintaining good naming conventions. The methods relevant to wait-listing a team were all a part of the Sign Up sheet model and controller. in order to improve the readability of the code and to have a better organization, we intended to move these methods to a separate Waitlist Model. Also, some methods had too many functionalities, a lot more than what their names suggested. To have a more elegant code, the functionalities had to be moved to relevant methods. cancel_all_waitlists and waitlist_teams methods were created in the waitlist model for this purpose. Naming conventions are considered very important for making the code more readable and understandable. Ruby is known for its 'Convention over Configuration' ideology. Thus the naming conventions had to be taken care of. In the Sign Up sheet controller, we could see the usage of Camel cases in a lot of places. We intended to replace these by the convention of Ruby where underscore is used between two words in variable names with all the alphabets in small letters.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Design'''===&lt;br /&gt;
===='''Initial Design'''====&lt;br /&gt;
*Initially the sign_up_sheet_controller had huge methods with no comments and multiple variable decalarations.&lt;br /&gt;
*The other major drawback with the initial design was there were redundant methods in sign_up_sheet_controller and sign_up_controller.&lt;br /&gt;
&lt;br /&gt;
===='''Modified Design'''====&lt;br /&gt;
The refactoring required us to modularize and push some of the functionalities in sign_up_sheet_controller.rb to sign_up_topic.rb (model) and waitlist.rb ( model).&lt;br /&gt;
This demanded to make calls from remove_team and reassign_topic from sign_up_topic model to signup_topics method in  sign_up_sheet_controller. Similarly the controller also used methods waitlist_teams and cancel_all_waitlists from the waitlist model.&lt;br /&gt;
&lt;br /&gt;
*'''Refactoring the sign_up_sheet_controller for modularity and flexibility:'''&lt;br /&gt;
#By defining functions in the desired class and making only calls to the specific controller, we have implemented a '''Collaborative design''' based on CRC modelling: &lt;br /&gt;
##finding classes/ models - sign_up_topic.rb and waitlist.rb&lt;br /&gt;
##finding responsibilities - remove_team, reassign_topic in sign_up_topic.rb, cancel-all_waitlists, waitlist_teams in waitlist.rb&lt;br /&gt;
##defining the collaborators - confirm_topic, delete_signup_topic, signup_topics in sign_up_sheet_controller.rb&lt;br /&gt;
#This has also made it more flexible for the developers as a change in the db or table design can be easily tracked. &lt;br /&gt;
##Easily implemented in the respective models and by passing the correct type/number parameters in the controllers.  &lt;br /&gt;
##Reduces overhead of rewriting methods and keeping track of the method calls.&lt;br /&gt;
&lt;br /&gt;
*'''Adding a waitlist model:'''&lt;br /&gt;
#The newly formed waitlist model follows the '''Singleton pattern''' as it is an independent class and also the waitlist for a topic is a single queue or list on which multiple teams and individuals wait on.&lt;br /&gt;
#The methods defined in waitlist model are singleton methods and thus are defined as class methods with the keyword &amp;quot;self&amp;quot; prepended to them.&lt;br /&gt;
&lt;br /&gt;
*'''Removing Redundancy from sign_up_controller'''&lt;br /&gt;
#The methods such as sign_up were redundantly present in both the controllers. &lt;br /&gt;
#Some part of the code which had common functionality were removed and the function calls were also redirected accordingly to the specific views.&lt;br /&gt;
&lt;br /&gt;
=== '''Issues'''===&lt;br /&gt;
*'''Refactoring issues'''&lt;br /&gt;
#Since we had two controllers for the signup sheet, there were many functions which had nested calls and needed to be taken care.&lt;br /&gt;
##For example slotAvailble?() was called from both controller and the sign_up_topic model.&lt;br /&gt;
#As waitlist was created as a singleton class with no table structure it was difficult to make use of attributes of other classes in it as attributes can be inherited or used only if they have associativity at schema level.&lt;br /&gt;
#By defining the functions in the models, we had to take care of the dependencies of the instance variables defined and used in the controller and interaction between several models had to be taken care. &lt;br /&gt;
#Controllers have the flexibility to directly make use of the parameters from the specific views whereas defining them in models had to carefully set and passed. Since some of the parameters were used in multiple views, it needed to be updated in several places.&lt;br /&gt;
#Some of the methods that were modularised were conflicting as they were modified to class methods from being an instance method.&lt;br /&gt;
&lt;br /&gt;
*'''Redundant Test issues'''&lt;br /&gt;
#Since the code has been developed over the years and refactored by multiple developers, there were several redundant tests and identifying them was a huge task.&lt;br /&gt;
&lt;br /&gt;
*'''Deployment issues'''&lt;br /&gt;
#Merging of branches from the local to the remote repository at the right level was initially being an overhead creating multiple levels.&lt;br /&gt;
#This was overcome by cloning a specific branch using: git clone -b &amp;lt;branch_name&amp;gt; &amp;lt;remote_url&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== '''Procedure'''===&lt;br /&gt;
&lt;br /&gt;
====A brief description====&lt;br /&gt;
&lt;br /&gt;
Our OSS project required us to do refactoring and testing of the part of Expertiza that deals with signup mainly sign_up_sheet controller. This controller manages functionalities of signup sheet for assignment. We have moved a few methods from controller to a more suitable model in order to attain the “thin controller, fat model” implementation. A major part includes the actions related to waitlist. We have put methods from sign_up_sheet controller to the waitlist model (which was earlier empty, so we created a waitlist model by adding functionalities to it)&lt;br /&gt;
A brief description of the refactoring that we have done is given below&lt;br /&gt;
&lt;br /&gt;
=====Add teams to waiting list=====&lt;br /&gt;
We have moved the functionality that adds teams to waiting list when the topic is unavailable. We have moved this functionality from confirm_topic in sign_up_sheet controller to waitlist_teams method that we have created in waitlist controller.&lt;br /&gt;
&lt;br /&gt;
[[File:confirm_topic_new.png]]&lt;br /&gt;
&lt;br /&gt;
This shows the method confirm_topic in sign_up_sheet controller that contains call to waitlist_teams method in waitlist controller. &lt;br /&gt;
&lt;br /&gt;
[[File:waitlist_teams_new.png]]&lt;br /&gt;
&lt;br /&gt;
This method has definition for waitlist_teams and is defined in waitlist model.&lt;br /&gt;
&lt;br /&gt;
=====Cancel waitlist=====&lt;br /&gt;
We have moved the functionality that removes a team from the waiting list, from sign_up_topic model to waitlist model. The method name is cancel_all_waitlist.&lt;br /&gt;
&lt;br /&gt;
[[File:cancel_all_waitlists_new.png]]&lt;br /&gt;
&lt;br /&gt;
=====Reassign a topic=====&lt;br /&gt;
We have moved the functionality that reassigns a topic to another team when a team holding that particular topic cancels its reservation. We have moved this functionality from delete_signup_for_topic in sign_up_sheet controller to a method named reassign_topic that we have created in sign_up_topic model. &lt;br /&gt;
&lt;br /&gt;
[[File:for_reassign_topic_new.png]]&lt;br /&gt;
&lt;br /&gt;
This shows the method delete_signup_for_topic in sign_up_sheet controller that contains call to reassign_topic method in sign_up_topic model.&lt;br /&gt;
&lt;br /&gt;
[[File:reassign_topic_new.png]]&lt;br /&gt;
&lt;br /&gt;
This method has definition for reassign_topic and is defined in sign_up_topic model.&lt;br /&gt;
&lt;br /&gt;
=====Remove team from topic=====&lt;br /&gt;
We have moved the functionality that removes a team from a topic when all of the team’s members have left the team. We have moved this functionality from signup_topics in sign_up_sheet controller to a method named remove_team that we have created in sign_up_topic model. &lt;br /&gt;
&lt;br /&gt;
[[File:signup_topics_new.png]]&lt;br /&gt;
&lt;br /&gt;
This shows the method signup_topics in sign_up_sheet controller that contains call to remove_team method in sign_up_topic model.&lt;br /&gt;
&lt;br /&gt;
[[File:remove_team_new.png]]&lt;br /&gt;
&lt;br /&gt;
This method has definition for remove_team and is defined in sign_up_topic model.&lt;br /&gt;
Rest, we have done renaming at a few places in sign_up_sheet controller.&lt;br /&gt;
&lt;br /&gt;
====Snapshots====&lt;br /&gt;
Here, we have a few snapshots that would guide one to walk-through our work and the areas wherein we did refactoring.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Login_admin_new.png]]&lt;br /&gt;
&lt;br /&gt;
Login as an admin.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:manage_courses_new.png]]&lt;br /&gt;
&lt;br /&gt;
Go to manage-&amp;gt;courses&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:create_assignment_new.png]]&lt;br /&gt;
&lt;br /&gt;
Create an assignment by filling in the required fields and selecting the checkboxes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:create_users_new.png]]&lt;br /&gt;
&lt;br /&gt;
Create users by filling in the required fields.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:add_participants_admin_new.png]]&lt;br /&gt;
&lt;br /&gt;
Again go to Manage courses and as shown in the snapshot above, one can see actions associated with an assignment. Click on add participants.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:add_participants2_admin.png]]&lt;br /&gt;
&lt;br /&gt;
Add a user to an assignment as a participant.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:participant_added.png]]&lt;br /&gt;
&lt;br /&gt;
The participant is added.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:add_signupsheet.png]]&lt;br /&gt;
&lt;br /&gt;
Also, through manage-&amp;gt; courses, add signup sheet to an assignment in a similar manner as adding participants.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:add_topic.png]]&lt;br /&gt;
&lt;br /&gt;
When a signup sheet is created, add new topics to it in the similar manner&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:topic_created.png]]&lt;br /&gt;
&lt;br /&gt;
Topic is successfully created. Logout of admin system&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:login.png]] &lt;br /&gt;
&lt;br /&gt;
Now login as an user.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:top.png]]&lt;br /&gt;
&lt;br /&gt;
Go to the assignments on top&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:select_one_assignment.png]]&lt;br /&gt;
&lt;br /&gt;
Select one assignment from the list of assignments.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:click_signup_sheet.png]]&lt;br /&gt;
&lt;br /&gt;
Select signup sheet&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:can_view_signup_sheet.png]]&lt;br /&gt;
&lt;br /&gt;
One can view signup sheet and signup for the topic&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:signing_up.png]]&lt;br /&gt;
&lt;br /&gt;
After signing up, here for example for topic 1234, the user has the topic and the no. of available slot shows 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:shows_waiting.png]]&lt;br /&gt;
&lt;br /&gt;
Now, if another user tries to sign up for the same topic, he is put on waitlist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This is a brief illustration of the changes we have made as a part of our project.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Future Work'''===&lt;br /&gt;
&lt;br /&gt;
The sign up sheet controller still has many methods relevant to other entities which need to be moved to other relevant models and controllers. save_topic_dependancies and save_topic_deadlines are two methods which can be put into SignUpTopic Model or controller. show_team method which is in sign_up_sheet controller can be moved to teams_controller. We also see another controller called SignUp controller which looks like a redundant one which has methods mostly from SignUpSheet controller. And these methods don't seem to be used. So this method can be looked into carefully and discarded if possible. There is also a function called slotAvailable? in the sign up sheet controller which merely makes a call to a method slotAvailable? in the SignUpTopic model and does nothing else. This looks like an unnecesary redirection. Dependencies can be resolved and this method can be removed and calls can directly be made to the slotAvailable? method in the SignUpTopic model. Also the method update_waitlisted_users can be moved from SignUpTopic model to Wailist Model to improve the readability of the code.&lt;/div&gt;</summary>
		<author><name>Sayenga</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_ssp&amp;diff=81179</id>
		<title>CSC/ECE 517 Fall 2013/oss ssp</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_ssp&amp;diff=81179"/>
		<updated>2013-10-30T19:26:34Z</updated>

		<summary type="html">&lt;p&gt;Sayenga: /* Issues */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''OSS E803 Refactoring and testing — signup_sheet model''' ==&lt;br /&gt;
&lt;br /&gt;
=== '''Motivation''' ===&lt;br /&gt;
&lt;br /&gt;
The motivation of this project was to provide functionality to manage Sign Up Sheets. The intent was to improve the design of the project by modularizing the code and maintaining good naming conventions. The methods relevant to wait-listing a team were all a part of the Sign Up sheet model and controller. in order to improve the readability of the code and to have a better organization, we intended to move these methods to a separate Waitlist Model. Also, some methods had too many functionalities, a lot more than what their names suggested. To have a more elegant code, the functionalities had to be moved to relevant methods. cancel_all_waitlists and waitlist_teams methods were created in the waitlist model for this purpose. Naming conventions are considered very important for making the code more readable and understandable. Ruby is known for its 'Convention over Configuration' ideology. Thus the naming conventions had to be taken care of. In the Sign Up sheet controller, we could see the usage of Camel cases in a lot of places. We intended to replace these by the convention of Ruby where underscore is used between two words in variable names with all the alphabets in small letters.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Design'''===&lt;br /&gt;
===='''Initial Design'''====&lt;br /&gt;
*Initially the sign_up_sheet_controller had huge methods with no comments and multiple variable decalarations.&lt;br /&gt;
*The other major drawback with the initial design was there were redundant methods in sign_up_sheet_controller and sign_up_controller.&lt;br /&gt;
&lt;br /&gt;
===='''Modified Design'''====&lt;br /&gt;
The refactoring required us to modularize and push some of the functionalities in sign_up_sheet_controller.rb to sign_up_topic.rb (model) and waitlist.rb ( model).&lt;br /&gt;
This demanded to make calls from remove_team and reassign_topic from sign_up_topic model to signup_topics method in  sign_up_sheet_controller. Similarly the controller also used methods waitlist_teams and cancel_all_waitlists from the waitlist model.&lt;br /&gt;
&lt;br /&gt;
*'''Refactoring the sign_up_sheet_controller for modularity and flexibility:'''&lt;br /&gt;
#By defining functions in the desired class and making only calls to the specific controller, we have implemented a '''Collaborative design''' based on CRC modelling: &lt;br /&gt;
##finding classes/ models - sign_up_topic.rb and waitlist.rb&lt;br /&gt;
##finding responsibilities - remove_team, reassign_topic in sign_up_topic.rb, cancel-all_waitlists, waitlist_teams in waitlist.rb&lt;br /&gt;
##defining the collaborators - confirm_topic, delete_signup_topic, signup_topics in sign_up_sheet_controller.rb&lt;br /&gt;
#This has also made it more flexible for the developers as a change in the db or table design can be easily tracked. &lt;br /&gt;
##Easily implemented in the respective models and by passing the correct type/number parameters in the controllers.  &lt;br /&gt;
##Reduces overhead of rewriting methods and keeping track of the method calls.&lt;br /&gt;
&lt;br /&gt;
*'''Adding a waitlist model:'''&lt;br /&gt;
#The newly formed waitlist model follows the '''Singleton pattern''' as it is an independent class and also the waitlist for a topic is a single queue or list on which multiple teams and individuals wait on.&lt;br /&gt;
#The methods defined in waitlist model are singleton methods and thus are defined as class methods with the keyword &amp;quot;self&amp;quot; prepended to them.&lt;br /&gt;
&lt;br /&gt;
*'''Removing Redundancy from sign_up_controller'''&lt;br /&gt;
#The methods such as sign_up were redundantly present in both the controllers. &lt;br /&gt;
#Some part of the code which had common functionality were removed and the function calls were also redirected accordingly to the specific views.&lt;br /&gt;
&lt;br /&gt;
=== '''Issues'''===&lt;br /&gt;
*'''Refactoring issues'''&lt;br /&gt;
#Since we had two controllers for the signup sheet, there were many functions which had nested calls and needed to be taken care.&lt;br /&gt;
**For example slotAvailble?() was called from both controller and the sign_up_topic model.&lt;br /&gt;
#As waitlist was created as a singleton class with no table structure it was difficult to make use of attributes of other classes in it as attributes can be inherited or used only if they have associativity at schema level.&lt;br /&gt;
#By defining the functions in the models, we had to take care of the dependencies of the instance variables defined and used in the controller and interaction between several models had to be taken care. &lt;br /&gt;
#Controllers have the flexibility to directly make use of the parameters from the specific views whereas defining them in models had to carefully set and passed. Since some of the parameters were used in multiple views, it needed to be updated in several places.&lt;br /&gt;
#Some of the methods that were modularised were conflicting as they were modified to class methods from being an instance method.&lt;br /&gt;
&lt;br /&gt;
*'''Redundant Test issues'''&lt;br /&gt;
#Since the code has been developed over the years and refactored by multiple developers, there were several redundant tests and identifying them was a huge task.&lt;br /&gt;
&lt;br /&gt;
*'''Deployment issues'''&lt;br /&gt;
#Merging of branches from the local to the remote repository at the right level was initially being an overhead creating multiple levels.&lt;br /&gt;
#This was overcome by cloning a specific branch using: git clone -b &amp;lt;branch_name&amp;gt; &amp;lt;remote_url&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== '''Procedure'''===&lt;br /&gt;
&lt;br /&gt;
====A brief description====&lt;br /&gt;
&lt;br /&gt;
Our OSS project required us to do refactoring and testing of the part of Expertiza that deals with signup mainly sign_up_sheet controller. This controller manages functionalities of signup sheet for assignment. We have moved a few methods from controller to a more suitable model in order to attain the “thin controller, fat model” implementation. A major part includes the actions related to waitlist. We have put methods from sign_up_sheet controller to the waitlist model (which was earlier empty, so we created a waitlist model by adding functionalities to it)&lt;br /&gt;
A brief description of the refactoring that we have done is given below&lt;br /&gt;
&lt;br /&gt;
=====Add teams to waiting list=====&lt;br /&gt;
We have moved the functionality that adds teams to waiting list when the topic is unavailable. We have moved this functionality from confirm_topic in sign_up_sheet controller to waitlist_teams method that we have created in waitlist controller.&lt;br /&gt;
&lt;br /&gt;
[[File:confirm_topic_new.png]]&lt;br /&gt;
&lt;br /&gt;
This shows the method confirm_topic in sign_up_sheet controller that contains call to waitlist_teams method in waitlist controller. &lt;br /&gt;
&lt;br /&gt;
[[File:waitlist_teams_new.png]]&lt;br /&gt;
&lt;br /&gt;
This method has definition for waitlist_teams and is defined in waitlist model.&lt;br /&gt;
&lt;br /&gt;
=====Cancel waitlist=====&lt;br /&gt;
We have moved the functionality that removes a team from the waiting list, from sign_up_topic model to waitlist model. The method name is cancel_all_waitlist.&lt;br /&gt;
&lt;br /&gt;
[[File:cancel_all_waitlists_new.png]]&lt;br /&gt;
&lt;br /&gt;
=====Reassign a topic=====&lt;br /&gt;
We have moved the functionality that reassigns a topic to another team when a team holding that particular topic cancels its reservation. We have moved this functionality from delete_signup_for_topic in sign_up_sheet controller to a method named reassign_topic that we have created in sign_up_topic model. &lt;br /&gt;
&lt;br /&gt;
[[File:for_reassign_topic_new.png]]&lt;br /&gt;
&lt;br /&gt;
This shows the method delete_signup_for_topic in sign_up_sheet controller that contains call to reassign_topic method in sign_up_topic model.&lt;br /&gt;
&lt;br /&gt;
[[File:reassign_topic_new.png]]&lt;br /&gt;
&lt;br /&gt;
This method has definition for reassign_topic and is defined in sign_up_topic model.&lt;br /&gt;
&lt;br /&gt;
=====Remove team from topic=====&lt;br /&gt;
We have moved the functionality that removes a team from a topic when all of the team’s members have left the team. We have moved this functionality from signup_topics in sign_up_sheet controller to a method named remove_team that we have created in sign_up_topic model. &lt;br /&gt;
&lt;br /&gt;
[[File:signup_topics_new.png]]&lt;br /&gt;
&lt;br /&gt;
This shows the method signup_topics in sign_up_sheet controller that contains call to remove_team method in sign_up_topic model.&lt;br /&gt;
&lt;br /&gt;
[[File:remove_team_new.png]]&lt;br /&gt;
&lt;br /&gt;
This method has definition for remove_team and is defined in sign_up_topic model.&lt;br /&gt;
Rest, we have done renaming at a few places in sign_up_sheet controller.&lt;br /&gt;
&lt;br /&gt;
====Snapshots====&lt;br /&gt;
Here, we have a few snapshots that would guide one to walk-through our work and the areas wherein we did refactoring.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Login_admin_new.png]]&lt;br /&gt;
&lt;br /&gt;
Login as an admin.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:manage_courses_new.png]]&lt;br /&gt;
&lt;br /&gt;
Go to manage-&amp;gt;courses&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:create_assignment_new.png]]&lt;br /&gt;
&lt;br /&gt;
Create an assignment by filling in the required fields and selecting the checkboxes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:create_users_new.png]]&lt;br /&gt;
&lt;br /&gt;
Create users by filling in the required fields.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:add_participants_admin_new.png]]&lt;br /&gt;
&lt;br /&gt;
Again go to Manage courses and as shown in the snapshot above, one can see actions associated with an assignment. Click on add participants.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:add_participants2_admin.png]]&lt;br /&gt;
&lt;br /&gt;
Add a user to an assignment as a participant.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:participant_added.png]]&lt;br /&gt;
&lt;br /&gt;
The participant is added.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:add_signupsheet.png]]&lt;br /&gt;
&lt;br /&gt;
Also, through manage-&amp;gt; courses, add signup sheet to an assignment in a similar manner as adding participants.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:add_topic.png]]&lt;br /&gt;
&lt;br /&gt;
When a signup sheet is created, add new topics to it in the similar manner&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:topic_created.png]]&lt;br /&gt;
&lt;br /&gt;
Topic is successfully created. Logout of admin system&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:login.png]] &lt;br /&gt;
&lt;br /&gt;
Now login as an user.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:top.png]]&lt;br /&gt;
&lt;br /&gt;
Go to the assignments on top&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:select_one_assignment.png]]&lt;br /&gt;
&lt;br /&gt;
Select one assignment from the list of assignments.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:click_signup_sheet.png]]&lt;br /&gt;
&lt;br /&gt;
Select signup sheet&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:can_view_signup_sheet.png]]&lt;br /&gt;
&lt;br /&gt;
One can view signup sheet and signup for the topic&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:signing_up.png]]&lt;br /&gt;
&lt;br /&gt;
After signing up, here for example for topic 1234, the user has the topic and the no. of available slot shows 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:shows_waiting.png]]&lt;br /&gt;
&lt;br /&gt;
Now, if another user tries to sign up for the same topic, he is put on waitlist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This is a brief illustration of the changes we have made as a part of our project.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Future Work'''===&lt;br /&gt;
&lt;br /&gt;
The sign up sheet controller still has many methods relevant to other entities which need to be moved to other relevant models and controllers. save_topic_dependancies and save_topic_deadlines are two methods which can be put into SignUpTopic Model or controller. show_team method which is in sign_up_sheet controller can be moved to teams_controller. We also see another controller called SignUp controller which looks like a redundant one which has methods mostly from SignUpSheet controller. And these methods don't seem to be used. So this method can be looked into carefully and discarded if possible. There is also a function called slotAvailable? in the sign up sheet controller which merely makes a call to a method slotAvailable? in the SignUpTopic model and does nothing else. This looks like an unnecesary redirection. Dependencies can be resolved and this method can be removed and calls can directly be made to the slotAvailable? method in the SignUpTopic model. Also the method update_waitlisted_users can be moved from SignUpTopic model to Wailist Model to improve the readability of the code.&lt;/div&gt;</summary>
		<author><name>Sayenga</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_ssp&amp;diff=81177</id>
		<title>CSC/ECE 517 Fall 2013/oss ssp</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_ssp&amp;diff=81177"/>
		<updated>2013-10-30T19:26:04Z</updated>

		<summary type="html">&lt;p&gt;Sayenga: /* Issues */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''OSS E803 Refactoring and testing — signup_sheet model''' ==&lt;br /&gt;
&lt;br /&gt;
=== '''Motivation''' ===&lt;br /&gt;
&lt;br /&gt;
The motivation of this project was to provide functionality to manage Sign Up Sheets. The intent was to improve the design of the project by modularizing the code and maintaining good naming conventions. The methods relevant to wait-listing a team were all a part of the Sign Up sheet model and controller. in order to improve the readability of the code and to have a better organization, we intended to move these methods to a separate Waitlist Model. Also, some methods had too many functionalities, a lot more than what their names suggested. To have a more elegant code, the functionalities had to be moved to relevant methods. cancel_all_waitlists and waitlist_teams methods were created in the waitlist model for this purpose. Naming conventions are considered very important for making the code more readable and understandable. Ruby is known for its 'Convention over Configuration' ideology. Thus the naming conventions had to be taken care of. In the Sign Up sheet controller, we could see the usage of Camel cases in a lot of places. We intended to replace these by the convention of Ruby where underscore is used between two words in variable names with all the alphabets in small letters.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Design'''===&lt;br /&gt;
===='''Initial Design'''====&lt;br /&gt;
*Initially the sign_up_sheet_controller had huge methods with no comments and multiple variable decalarations.&lt;br /&gt;
*The other major drawback with the initial design was there were redundant methods in sign_up_sheet_controller and sign_up_controller.&lt;br /&gt;
&lt;br /&gt;
===='''Modified Design'''====&lt;br /&gt;
The refactoring required us to modularize and push some of the functionalities in sign_up_sheet_controller.rb to sign_up_topic.rb (model) and waitlist.rb ( model).&lt;br /&gt;
This demanded to make calls from remove_team and reassign_topic from sign_up_topic model to signup_topics method in  sign_up_sheet_controller. Similarly the controller also used methods waitlist_teams and cancel_all_waitlists from the waitlist model.&lt;br /&gt;
&lt;br /&gt;
*'''Refactoring the sign_up_sheet_controller for modularity and flexibility:'''&lt;br /&gt;
#By defining functions in the desired class and making only calls to the specific controller, we have implemented a '''Collaborative design''' based on CRC modelling: &lt;br /&gt;
##finding classes/ models - sign_up_topic.rb and waitlist.rb&lt;br /&gt;
##finding responsibilities - remove_team, reassign_topic in sign_up_topic.rb, cancel-all_waitlists, waitlist_teams in waitlist.rb&lt;br /&gt;
##defining the collaborators - confirm_topic, delete_signup_topic, signup_topics in sign_up_sheet_controller.rb&lt;br /&gt;
#This has also made it more flexible for the developers as a change in the db or table design can be easily tracked. &lt;br /&gt;
##Easily implemented in the respective models and by passing the correct type/number parameters in the controllers.  &lt;br /&gt;
##Reduces overhead of rewriting methods and keeping track of the method calls.&lt;br /&gt;
&lt;br /&gt;
*'''Adding a waitlist model:'''&lt;br /&gt;
#The newly formed waitlist model follows the '''Singleton pattern''' as it is an independent class and also the waitlist for a topic is a single queue or list on which multiple teams and individuals wait on.&lt;br /&gt;
#The methods defined in waitlist model are singleton methods and thus are defined as class methods with the keyword &amp;quot;self&amp;quot; prepended to them.&lt;br /&gt;
&lt;br /&gt;
*'''Removing Redundancy from sign_up_controller'''&lt;br /&gt;
#The methods such as sign_up were redundantly present in both the controllers. &lt;br /&gt;
#Some part of the code which had common functionality were removed and the function calls were also redirected accordingly to the specific views.&lt;br /&gt;
&lt;br /&gt;
=== '''Issues'''===&lt;br /&gt;
*'''Refactoring issues'''&lt;br /&gt;
#Since we had two controllers for the signup sheet, there were many functions which had nested calls and needed to be taken care.&lt;br /&gt;
 For example slotAvailble?() was called from both controller and the sign_up_topic model.&lt;br /&gt;
#As waitlist was created as a singleton class with no table structure it was difficult to make use of attributes of other classes in it as attributes can be inherited or used only if they have associativity at schema level.&lt;br /&gt;
#By defining the functions in the models, we had to take care of the dependencies of the instance variables defined and used in the controller and interaction between several models had to be taken care. &lt;br /&gt;
#Controllers have the flexibility to directly make use of the parameters from the specific views whereas defining them in models had to carefully set and passed. Since some of the parameters were used in multiple views, it needed to be updated in several places.&lt;br /&gt;
#Some of the methods that were modularised were conflicting as they were modified to class methods from being an instance method.&lt;br /&gt;
&lt;br /&gt;
*'''Redundant Test issues'''&lt;br /&gt;
#Since the code has been developed over the years and refactored by multiple developers, there were several redundant tests and identifying them was a huge task.&lt;br /&gt;
&lt;br /&gt;
*'''Deployment issues'''&lt;br /&gt;
#Merging of branches from the local to the remote repository at the right level was initially being an overhead creating multiple levels.&lt;br /&gt;
#This was overcome by cloning a specific branch using: git clone -b &amp;lt;branch_name&amp;gt; &amp;lt;remote_url&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== '''Procedure'''===&lt;br /&gt;
&lt;br /&gt;
====A brief description====&lt;br /&gt;
&lt;br /&gt;
Our OSS project required us to do refactoring and testing of the part of Expertiza that deals with signup mainly sign_up_sheet controller. This controller manages functionalities of signup sheet for assignment. We have moved a few methods from controller to a more suitable model in order to attain the “thin controller, fat model” implementation. A major part includes the actions related to waitlist. We have put methods from sign_up_sheet controller to the waitlist model (which was earlier empty, so we created a waitlist model by adding functionalities to it)&lt;br /&gt;
A brief description of the refactoring that we have done is given below&lt;br /&gt;
&lt;br /&gt;
=====Add teams to waiting list=====&lt;br /&gt;
We have moved the functionality that adds teams to waiting list when the topic is unavailable. We have moved this functionality from confirm_topic in sign_up_sheet controller to waitlist_teams method that we have created in waitlist controller.&lt;br /&gt;
&lt;br /&gt;
[[File:confirm_topic_new.png]]&lt;br /&gt;
&lt;br /&gt;
This shows the method confirm_topic in sign_up_sheet controller that contains call to waitlist_teams method in waitlist controller. &lt;br /&gt;
&lt;br /&gt;
[[File:waitlist_teams_new.png]]&lt;br /&gt;
&lt;br /&gt;
This method has definition for waitlist_teams and is defined in waitlist model.&lt;br /&gt;
&lt;br /&gt;
=====Cancel waitlist=====&lt;br /&gt;
We have moved the functionality that removes a team from the waiting list, from sign_up_topic model to waitlist model. The method name is cancel_all_waitlist.&lt;br /&gt;
&lt;br /&gt;
[[File:cancel_all_waitlists_new.png]]&lt;br /&gt;
&lt;br /&gt;
=====Reassign a topic=====&lt;br /&gt;
We have moved the functionality that reassigns a topic to another team when a team holding that particular topic cancels its reservation. We have moved this functionality from delete_signup_for_topic in sign_up_sheet controller to a method named reassign_topic that we have created in sign_up_topic model. &lt;br /&gt;
&lt;br /&gt;
[[File:for_reassign_topic_new.png]]&lt;br /&gt;
&lt;br /&gt;
This shows the method delete_signup_for_topic in sign_up_sheet controller that contains call to reassign_topic method in sign_up_topic model.&lt;br /&gt;
&lt;br /&gt;
[[File:reassign_topic_new.png]]&lt;br /&gt;
&lt;br /&gt;
This method has definition for reassign_topic and is defined in sign_up_topic model.&lt;br /&gt;
&lt;br /&gt;
=====Remove team from topic=====&lt;br /&gt;
We have moved the functionality that removes a team from a topic when all of the team’s members have left the team. We have moved this functionality from signup_topics in sign_up_sheet controller to a method named remove_team that we have created in sign_up_topic model. &lt;br /&gt;
&lt;br /&gt;
[[File:signup_topics_new.png]]&lt;br /&gt;
&lt;br /&gt;
This shows the method signup_topics in sign_up_sheet controller that contains call to remove_team method in sign_up_topic model.&lt;br /&gt;
&lt;br /&gt;
[[File:remove_team_new.png]]&lt;br /&gt;
&lt;br /&gt;
This method has definition for remove_team and is defined in sign_up_topic model.&lt;br /&gt;
Rest, we have done renaming at a few places in sign_up_sheet controller.&lt;br /&gt;
&lt;br /&gt;
====Snapshots====&lt;br /&gt;
Here, we have a few snapshots that would guide one to walk-through our work and the areas wherein we did refactoring.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Login_admin_new.png]]&lt;br /&gt;
&lt;br /&gt;
Login as an admin.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:manage_courses_new.png]]&lt;br /&gt;
&lt;br /&gt;
Go to manage-&amp;gt;courses&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:create_assignment_new.png]]&lt;br /&gt;
&lt;br /&gt;
Create an assignment by filling in the required fields and selecting the checkboxes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:create_users_new.png]]&lt;br /&gt;
&lt;br /&gt;
Create users by filling in the required fields.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:add_participants_admin_new.png]]&lt;br /&gt;
&lt;br /&gt;
Again go to Manage courses and as shown in the snapshot above, one can see actions associated with an assignment. Click on add participants.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:add_participants2_admin.png]]&lt;br /&gt;
&lt;br /&gt;
Add a user to an assignment as a participant.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:participant_added.png]]&lt;br /&gt;
&lt;br /&gt;
The participant is added.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:add_signupsheet.png]]&lt;br /&gt;
&lt;br /&gt;
Also, through manage-&amp;gt; courses, add signup sheet to an assignment in a similar manner as adding participants.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:add_topic.png]]&lt;br /&gt;
&lt;br /&gt;
When a signup sheet is created, add new topics to it in the similar manner&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:topic_created.png]]&lt;br /&gt;
&lt;br /&gt;
Topic is successfully created. Logout of admin system&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:login.png]] &lt;br /&gt;
&lt;br /&gt;
Now login as an user.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:top.png]]&lt;br /&gt;
&lt;br /&gt;
Go to the assignments on top&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:select_one_assignment.png]]&lt;br /&gt;
&lt;br /&gt;
Select one assignment from the list of assignments.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:click_signup_sheet.png]]&lt;br /&gt;
&lt;br /&gt;
Select signup sheet&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:can_view_signup_sheet.png]]&lt;br /&gt;
&lt;br /&gt;
One can view signup sheet and signup for the topic&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:signing_up.png]]&lt;br /&gt;
&lt;br /&gt;
After signing up, here for example for topic 1234, the user has the topic and the no. of available slot shows 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:shows_waiting.png]]&lt;br /&gt;
&lt;br /&gt;
Now, if another user tries to sign up for the same topic, he is put on waitlist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This is a brief illustration of the changes we have made as a part of our project.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Future Work'''===&lt;br /&gt;
&lt;br /&gt;
The sign up sheet controller still has many methods relevant to other entities which need to be moved to other relevant models and controllers. save_topic_dependancies and save_topic_deadlines are two methods which can be put into SignUpTopic Model or controller. show_team method which is in sign_up_sheet controller can be moved to teams_controller. We also see another controller called SignUp controller which looks like a redundant one which has methods mostly from SignUpSheet controller. And these methods don't seem to be used. So this method can be looked into carefully and discarded if possible. There is also a function called slotAvailable? in the sign up sheet controller which merely makes a call to a method slotAvailable? in the SignUpTopic model and does nothing else. This looks like an unnecesary redirection. Dependencies can be resolved and this method can be removed and calls can directly be made to the slotAvailable? method in the SignUpTopic model. Also the method update_waitlisted_users can be moved from SignUpTopic model to Wailist Model to improve the readability of the code.&lt;/div&gt;</summary>
		<author><name>Sayenga</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_ssp&amp;diff=81176</id>
		<title>CSC/ECE 517 Fall 2013/oss ssp</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_ssp&amp;diff=81176"/>
		<updated>2013-10-30T19:25:56Z</updated>

		<summary type="html">&lt;p&gt;Sayenga: /* Issues */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''OSS E803 Refactoring and testing — signup_sheet model''' ==&lt;br /&gt;
&lt;br /&gt;
=== '''Motivation''' ===&lt;br /&gt;
&lt;br /&gt;
The motivation of this project was to provide functionality to manage Sign Up Sheets. The intent was to improve the design of the project by modularizing the code and maintaining good naming conventions. The methods relevant to wait-listing a team were all a part of the Sign Up sheet model and controller. in order to improve the readability of the code and to have a better organization, we intended to move these methods to a separate Waitlist Model. Also, some methods had too many functionalities, a lot more than what their names suggested. To have a more elegant code, the functionalities had to be moved to relevant methods. cancel_all_waitlists and waitlist_teams methods were created in the waitlist model for this purpose. Naming conventions are considered very important for making the code more readable and understandable. Ruby is known for its 'Convention over Configuration' ideology. Thus the naming conventions had to be taken care of. In the Sign Up sheet controller, we could see the usage of Camel cases in a lot of places. We intended to replace these by the convention of Ruby where underscore is used between two words in variable names with all the alphabets in small letters.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Design'''===&lt;br /&gt;
===='''Initial Design'''====&lt;br /&gt;
*Initially the sign_up_sheet_controller had huge methods with no comments and multiple variable decalarations.&lt;br /&gt;
*The other major drawback with the initial design was there were redundant methods in sign_up_sheet_controller and sign_up_controller.&lt;br /&gt;
&lt;br /&gt;
===='''Modified Design'''====&lt;br /&gt;
The refactoring required us to modularize and push some of the functionalities in sign_up_sheet_controller.rb to sign_up_topic.rb (model) and waitlist.rb ( model).&lt;br /&gt;
This demanded to make calls from remove_team and reassign_topic from sign_up_topic model to signup_topics method in  sign_up_sheet_controller. Similarly the controller also used methods waitlist_teams and cancel_all_waitlists from the waitlist model.&lt;br /&gt;
&lt;br /&gt;
*'''Refactoring the sign_up_sheet_controller for modularity and flexibility:'''&lt;br /&gt;
#By defining functions in the desired class and making only calls to the specific controller, we have implemented a '''Collaborative design''' based on CRC modelling: &lt;br /&gt;
##finding classes/ models - sign_up_topic.rb and waitlist.rb&lt;br /&gt;
##finding responsibilities - remove_team, reassign_topic in sign_up_topic.rb, cancel-all_waitlists, waitlist_teams in waitlist.rb&lt;br /&gt;
##defining the collaborators - confirm_topic, delete_signup_topic, signup_topics in sign_up_sheet_controller.rb&lt;br /&gt;
#This has also made it more flexible for the developers as a change in the db or table design can be easily tracked. &lt;br /&gt;
##Easily implemented in the respective models and by passing the correct type/number parameters in the controllers.  &lt;br /&gt;
##Reduces overhead of rewriting methods and keeping track of the method calls.&lt;br /&gt;
&lt;br /&gt;
*'''Adding a waitlist model:'''&lt;br /&gt;
#The newly formed waitlist model follows the '''Singleton pattern''' as it is an independent class and also the waitlist for a topic is a single queue or list on which multiple teams and individuals wait on.&lt;br /&gt;
#The methods defined in waitlist model are singleton methods and thus are defined as class methods with the keyword &amp;quot;self&amp;quot; prepended to them.&lt;br /&gt;
&lt;br /&gt;
*'''Removing Redundancy from sign_up_controller'''&lt;br /&gt;
#The methods such as sign_up were redundantly present in both the controllers. &lt;br /&gt;
#Some part of the code which had common functionality were removed and the function calls were also redirected accordingly to the specific views.&lt;br /&gt;
&lt;br /&gt;
=== '''Issues'''===&lt;br /&gt;
*'''Refactoring issues'''&lt;br /&gt;
#Since we had two controllers for the signup sheet, there were many functions which had nested calls and needed to be taken care.&lt;br /&gt;
For example slotAvailble?() was called from both controller and the sign_up_topic model.&lt;br /&gt;
#As waitlist was created as a singleton class with no table structure it was difficult to make use of attributes of other classes in it as attributes can be inherited or used only if they have associativity at schema level.&lt;br /&gt;
#By defining the functions in the models, we had to take care of the dependencies of the instance variables defined and used in the controller and interaction between several models had to be taken care. &lt;br /&gt;
#Controllers have the flexibility to directly make use of the parameters from the specific views whereas defining them in models had to carefully set and passed. Since some of the parameters were used in multiple views, it needed to be updated in several places.&lt;br /&gt;
#Some of the methods that were modularised were conflicting as they were modified to class methods from being an instance method.&lt;br /&gt;
&lt;br /&gt;
*'''Redundant Test issues'''&lt;br /&gt;
#Since the code has been developed over the years and refactored by multiple developers, there were several redundant tests and identifying them was a huge task.&lt;br /&gt;
&lt;br /&gt;
*'''Deployment issues'''&lt;br /&gt;
#Merging of branches from the local to the remote repository at the right level was initially being an overhead creating multiple levels.&lt;br /&gt;
#This was overcome by cloning a specific branch using: git clone -b &amp;lt;branch_name&amp;gt; &amp;lt;remote_url&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== '''Procedure'''===&lt;br /&gt;
&lt;br /&gt;
====A brief description====&lt;br /&gt;
&lt;br /&gt;
Our OSS project required us to do refactoring and testing of the part of Expertiza that deals with signup mainly sign_up_sheet controller. This controller manages functionalities of signup sheet for assignment. We have moved a few methods from controller to a more suitable model in order to attain the “thin controller, fat model” implementation. A major part includes the actions related to waitlist. We have put methods from sign_up_sheet controller to the waitlist model (which was earlier empty, so we created a waitlist model by adding functionalities to it)&lt;br /&gt;
A brief description of the refactoring that we have done is given below&lt;br /&gt;
&lt;br /&gt;
=====Add teams to waiting list=====&lt;br /&gt;
We have moved the functionality that adds teams to waiting list when the topic is unavailable. We have moved this functionality from confirm_topic in sign_up_sheet controller to waitlist_teams method that we have created in waitlist controller.&lt;br /&gt;
&lt;br /&gt;
[[File:confirm_topic_new.png]]&lt;br /&gt;
&lt;br /&gt;
This shows the method confirm_topic in sign_up_sheet controller that contains call to waitlist_teams method in waitlist controller. &lt;br /&gt;
&lt;br /&gt;
[[File:waitlist_teams_new.png]]&lt;br /&gt;
&lt;br /&gt;
This method has definition for waitlist_teams and is defined in waitlist model.&lt;br /&gt;
&lt;br /&gt;
=====Cancel waitlist=====&lt;br /&gt;
We have moved the functionality that removes a team from the waiting list, from sign_up_topic model to waitlist model. The method name is cancel_all_waitlist.&lt;br /&gt;
&lt;br /&gt;
[[File:cancel_all_waitlists_new.png]]&lt;br /&gt;
&lt;br /&gt;
=====Reassign a topic=====&lt;br /&gt;
We have moved the functionality that reassigns a topic to another team when a team holding that particular topic cancels its reservation. We have moved this functionality from delete_signup_for_topic in sign_up_sheet controller to a method named reassign_topic that we have created in sign_up_topic model. &lt;br /&gt;
&lt;br /&gt;
[[File:for_reassign_topic_new.png]]&lt;br /&gt;
&lt;br /&gt;
This shows the method delete_signup_for_topic in sign_up_sheet controller that contains call to reassign_topic method in sign_up_topic model.&lt;br /&gt;
&lt;br /&gt;
[[File:reassign_topic_new.png]]&lt;br /&gt;
&lt;br /&gt;
This method has definition for reassign_topic and is defined in sign_up_topic model.&lt;br /&gt;
&lt;br /&gt;
=====Remove team from topic=====&lt;br /&gt;
We have moved the functionality that removes a team from a topic when all of the team’s members have left the team. We have moved this functionality from signup_topics in sign_up_sheet controller to a method named remove_team that we have created in sign_up_topic model. &lt;br /&gt;
&lt;br /&gt;
[[File:signup_topics_new.png]]&lt;br /&gt;
&lt;br /&gt;
This shows the method signup_topics in sign_up_sheet controller that contains call to remove_team method in sign_up_topic model.&lt;br /&gt;
&lt;br /&gt;
[[File:remove_team_new.png]]&lt;br /&gt;
&lt;br /&gt;
This method has definition for remove_team and is defined in sign_up_topic model.&lt;br /&gt;
Rest, we have done renaming at a few places in sign_up_sheet controller.&lt;br /&gt;
&lt;br /&gt;
====Snapshots====&lt;br /&gt;
Here, we have a few snapshots that would guide one to walk-through our work and the areas wherein we did refactoring.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Login_admin_new.png]]&lt;br /&gt;
&lt;br /&gt;
Login as an admin.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:manage_courses_new.png]]&lt;br /&gt;
&lt;br /&gt;
Go to manage-&amp;gt;courses&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:create_assignment_new.png]]&lt;br /&gt;
&lt;br /&gt;
Create an assignment by filling in the required fields and selecting the checkboxes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:create_users_new.png]]&lt;br /&gt;
&lt;br /&gt;
Create users by filling in the required fields.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:add_participants_admin_new.png]]&lt;br /&gt;
&lt;br /&gt;
Again go to Manage courses and as shown in the snapshot above, one can see actions associated with an assignment. Click on add participants.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:add_participants2_admin.png]]&lt;br /&gt;
&lt;br /&gt;
Add a user to an assignment as a participant.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:participant_added.png]]&lt;br /&gt;
&lt;br /&gt;
The participant is added.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:add_signupsheet.png]]&lt;br /&gt;
&lt;br /&gt;
Also, through manage-&amp;gt; courses, add signup sheet to an assignment in a similar manner as adding participants.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:add_topic.png]]&lt;br /&gt;
&lt;br /&gt;
When a signup sheet is created, add new topics to it in the similar manner&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:topic_created.png]]&lt;br /&gt;
&lt;br /&gt;
Topic is successfully created. Logout of admin system&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:login.png]] &lt;br /&gt;
&lt;br /&gt;
Now login as an user.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:top.png]]&lt;br /&gt;
&lt;br /&gt;
Go to the assignments on top&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:select_one_assignment.png]]&lt;br /&gt;
&lt;br /&gt;
Select one assignment from the list of assignments.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:click_signup_sheet.png]]&lt;br /&gt;
&lt;br /&gt;
Select signup sheet&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:can_view_signup_sheet.png]]&lt;br /&gt;
&lt;br /&gt;
One can view signup sheet and signup for the topic&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:signing_up.png]]&lt;br /&gt;
&lt;br /&gt;
After signing up, here for example for topic 1234, the user has the topic and the no. of available slot shows 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:shows_waiting.png]]&lt;br /&gt;
&lt;br /&gt;
Now, if another user tries to sign up for the same topic, he is put on waitlist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This is a brief illustration of the changes we have made as a part of our project.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Future Work'''===&lt;br /&gt;
&lt;br /&gt;
The sign up sheet controller still has many methods relevant to other entities which need to be moved to other relevant models and controllers. save_topic_dependancies and save_topic_deadlines are two methods which can be put into SignUpTopic Model or controller. show_team method which is in sign_up_sheet controller can be moved to teams_controller. We also see another controller called SignUp controller which looks like a redundant one which has methods mostly from SignUpSheet controller. And these methods don't seem to be used. So this method can be looked into carefully and discarded if possible. There is also a function called slotAvailable? in the sign up sheet controller which merely makes a call to a method slotAvailable? in the SignUpTopic model and does nothing else. This looks like an unnecesary redirection. Dependencies can be resolved and this method can be removed and calls can directly be made to the slotAvailable? method in the SignUpTopic model. Also the method update_waitlisted_users can be moved from SignUpTopic model to Wailist Model to improve the readability of the code.&lt;/div&gt;</summary>
		<author><name>Sayenga</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_ssp&amp;diff=81175</id>
		<title>CSC/ECE 517 Fall 2013/oss ssp</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_ssp&amp;diff=81175"/>
		<updated>2013-10-30T19:25:40Z</updated>

		<summary type="html">&lt;p&gt;Sayenga: /* Issues */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''OSS E803 Refactoring and testing — signup_sheet model''' ==&lt;br /&gt;
&lt;br /&gt;
=== '''Motivation''' ===&lt;br /&gt;
&lt;br /&gt;
The motivation of this project was to provide functionality to manage Sign Up Sheets. The intent was to improve the design of the project by modularizing the code and maintaining good naming conventions. The methods relevant to wait-listing a team were all a part of the Sign Up sheet model and controller. in order to improve the readability of the code and to have a better organization, we intended to move these methods to a separate Waitlist Model. Also, some methods had too many functionalities, a lot more than what their names suggested. To have a more elegant code, the functionalities had to be moved to relevant methods. cancel_all_waitlists and waitlist_teams methods were created in the waitlist model for this purpose. Naming conventions are considered very important for making the code more readable and understandable. Ruby is known for its 'Convention over Configuration' ideology. Thus the naming conventions had to be taken care of. In the Sign Up sheet controller, we could see the usage of Camel cases in a lot of places. We intended to replace these by the convention of Ruby where underscore is used between two words in variable names with all the alphabets in small letters.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Design'''===&lt;br /&gt;
===='''Initial Design'''====&lt;br /&gt;
*Initially the sign_up_sheet_controller had huge methods with no comments and multiple variable decalarations.&lt;br /&gt;
*The other major drawback with the initial design was there were redundant methods in sign_up_sheet_controller and sign_up_controller.&lt;br /&gt;
&lt;br /&gt;
===='''Modified Design'''====&lt;br /&gt;
The refactoring required us to modularize and push some of the functionalities in sign_up_sheet_controller.rb to sign_up_topic.rb (model) and waitlist.rb ( model).&lt;br /&gt;
This demanded to make calls from remove_team and reassign_topic from sign_up_topic model to signup_topics method in  sign_up_sheet_controller. Similarly the controller also used methods waitlist_teams and cancel_all_waitlists from the waitlist model.&lt;br /&gt;
&lt;br /&gt;
*'''Refactoring the sign_up_sheet_controller for modularity and flexibility:'''&lt;br /&gt;
#By defining functions in the desired class and making only calls to the specific controller, we have implemented a '''Collaborative design''' based on CRC modelling: &lt;br /&gt;
##finding classes/ models - sign_up_topic.rb and waitlist.rb&lt;br /&gt;
##finding responsibilities - remove_team, reassign_topic in sign_up_topic.rb, cancel-all_waitlists, waitlist_teams in waitlist.rb&lt;br /&gt;
##defining the collaborators - confirm_topic, delete_signup_topic, signup_topics in sign_up_sheet_controller.rb&lt;br /&gt;
#This has also made it more flexible for the developers as a change in the db or table design can be easily tracked. &lt;br /&gt;
##Easily implemented in the respective models and by passing the correct type/number parameters in the controllers.  &lt;br /&gt;
##Reduces overhead of rewriting methods and keeping track of the method calls.&lt;br /&gt;
&lt;br /&gt;
*'''Adding a waitlist model:'''&lt;br /&gt;
#The newly formed waitlist model follows the '''Singleton pattern''' as it is an independent class and also the waitlist for a topic is a single queue or list on which multiple teams and individuals wait on.&lt;br /&gt;
#The methods defined in waitlist model are singleton methods and thus are defined as class methods with the keyword &amp;quot;self&amp;quot; prepended to them.&lt;br /&gt;
&lt;br /&gt;
*'''Removing Redundancy from sign_up_controller'''&lt;br /&gt;
#The methods such as sign_up were redundantly present in both the controllers. &lt;br /&gt;
#Some part of the code which had common functionality were removed and the function calls were also redirected accordingly to the specific views.&lt;br /&gt;
&lt;br /&gt;
=== '''Issues'''===&lt;br /&gt;
*'''Refactoring issues'''&lt;br /&gt;
#Since we had two controllers for the signup sheet, there were many functions which had nested calls and needed to be taken care.&lt;br /&gt;
##For example slotAvailble?() was called from both controller and the sign_up_topic model.&lt;br /&gt;
#As waitlist was created as a singleton class with no table structure it was difficult to make use of attributes of other classes in it as attributes can be inherited or used only if they have associativity at schema level.&lt;br /&gt;
#By defining the functions in the models, we had to take care of the dependencies of the instance variables defined and used in the controller and interaction between several models had to be taken care. &lt;br /&gt;
#Controllers have the flexibility to directly make use of the parameters from the specific views whereas defining them in models had to carefully set and passed. Since some of the parameters were used in multiple views, it needed to be updated in several places.&lt;br /&gt;
#Some of the methods that were modularised were conflicting as they were modified to class methods from being an instance method.&lt;br /&gt;
&lt;br /&gt;
*'''Redundant Test issues'''&lt;br /&gt;
#Since the code has been developed over the years and refactored by multiple developers, there were several redundant tests and identifying them was a huge task.&lt;br /&gt;
&lt;br /&gt;
*'''Deployment issues'''&lt;br /&gt;
#Merging of branches from the local to the remote repository at the right level was initially being an overhead creating multiple levels.&lt;br /&gt;
#This was overcome by cloning a specific branch using: git clone -b &amp;lt;branch_name&amp;gt; &amp;lt;remote_url&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== '''Procedure'''===&lt;br /&gt;
&lt;br /&gt;
====A brief description====&lt;br /&gt;
&lt;br /&gt;
Our OSS project required us to do refactoring and testing of the part of Expertiza that deals with signup mainly sign_up_sheet controller. This controller manages functionalities of signup sheet for assignment. We have moved a few methods from controller to a more suitable model in order to attain the “thin controller, fat model” implementation. A major part includes the actions related to waitlist. We have put methods from sign_up_sheet controller to the waitlist model (which was earlier empty, so we created a waitlist model by adding functionalities to it)&lt;br /&gt;
A brief description of the refactoring that we have done is given below&lt;br /&gt;
&lt;br /&gt;
=====Add teams to waiting list=====&lt;br /&gt;
We have moved the functionality that adds teams to waiting list when the topic is unavailable. We have moved this functionality from confirm_topic in sign_up_sheet controller to waitlist_teams method that we have created in waitlist controller.&lt;br /&gt;
&lt;br /&gt;
[[File:confirm_topic_new.png]]&lt;br /&gt;
&lt;br /&gt;
This shows the method confirm_topic in sign_up_sheet controller that contains call to waitlist_teams method in waitlist controller. &lt;br /&gt;
&lt;br /&gt;
[[File:waitlist_teams_new.png]]&lt;br /&gt;
&lt;br /&gt;
This method has definition for waitlist_teams and is defined in waitlist model.&lt;br /&gt;
&lt;br /&gt;
=====Cancel waitlist=====&lt;br /&gt;
We have moved the functionality that removes a team from the waiting list, from sign_up_topic model to waitlist model. The method name is cancel_all_waitlist.&lt;br /&gt;
&lt;br /&gt;
[[File:cancel_all_waitlists_new.png]]&lt;br /&gt;
&lt;br /&gt;
=====Reassign a topic=====&lt;br /&gt;
We have moved the functionality that reassigns a topic to another team when a team holding that particular topic cancels its reservation. We have moved this functionality from delete_signup_for_topic in sign_up_sheet controller to a method named reassign_topic that we have created in sign_up_topic model. &lt;br /&gt;
&lt;br /&gt;
[[File:for_reassign_topic_new.png]]&lt;br /&gt;
&lt;br /&gt;
This shows the method delete_signup_for_topic in sign_up_sheet controller that contains call to reassign_topic method in sign_up_topic model.&lt;br /&gt;
&lt;br /&gt;
[[File:reassign_topic_new.png]]&lt;br /&gt;
&lt;br /&gt;
This method has definition for reassign_topic and is defined in sign_up_topic model.&lt;br /&gt;
&lt;br /&gt;
=====Remove team from topic=====&lt;br /&gt;
We have moved the functionality that removes a team from a topic when all of the team’s members have left the team. We have moved this functionality from signup_topics in sign_up_sheet controller to a method named remove_team that we have created in sign_up_topic model. &lt;br /&gt;
&lt;br /&gt;
[[File:signup_topics_new.png]]&lt;br /&gt;
&lt;br /&gt;
This shows the method signup_topics in sign_up_sheet controller that contains call to remove_team method in sign_up_topic model.&lt;br /&gt;
&lt;br /&gt;
[[File:remove_team_new.png]]&lt;br /&gt;
&lt;br /&gt;
This method has definition for remove_team and is defined in sign_up_topic model.&lt;br /&gt;
Rest, we have done renaming at a few places in sign_up_sheet controller.&lt;br /&gt;
&lt;br /&gt;
====Snapshots====&lt;br /&gt;
Here, we have a few snapshots that would guide one to walk-through our work and the areas wherein we did refactoring.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Login_admin_new.png]]&lt;br /&gt;
&lt;br /&gt;
Login as an admin.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:manage_courses_new.png]]&lt;br /&gt;
&lt;br /&gt;
Go to manage-&amp;gt;courses&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:create_assignment_new.png]]&lt;br /&gt;
&lt;br /&gt;
Create an assignment by filling in the required fields and selecting the checkboxes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:create_users_new.png]]&lt;br /&gt;
&lt;br /&gt;
Create users by filling in the required fields.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:add_participants_admin_new.png]]&lt;br /&gt;
&lt;br /&gt;
Again go to Manage courses and as shown in the snapshot above, one can see actions associated with an assignment. Click on add participants.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:add_participants2_admin.png]]&lt;br /&gt;
&lt;br /&gt;
Add a user to an assignment as a participant.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:participant_added.png]]&lt;br /&gt;
&lt;br /&gt;
The participant is added.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:add_signupsheet.png]]&lt;br /&gt;
&lt;br /&gt;
Also, through manage-&amp;gt; courses, add signup sheet to an assignment in a similar manner as adding participants.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:add_topic.png]]&lt;br /&gt;
&lt;br /&gt;
When a signup sheet is created, add new topics to it in the similar manner&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:topic_created.png]]&lt;br /&gt;
&lt;br /&gt;
Topic is successfully created. Logout of admin system&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:login.png]] &lt;br /&gt;
&lt;br /&gt;
Now login as an user.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:top.png]]&lt;br /&gt;
&lt;br /&gt;
Go to the assignments on top&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:select_one_assignment.png]]&lt;br /&gt;
&lt;br /&gt;
Select one assignment from the list of assignments.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:click_signup_sheet.png]]&lt;br /&gt;
&lt;br /&gt;
Select signup sheet&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:can_view_signup_sheet.png]]&lt;br /&gt;
&lt;br /&gt;
One can view signup sheet and signup for the topic&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:signing_up.png]]&lt;br /&gt;
&lt;br /&gt;
After signing up, here for example for topic 1234, the user has the topic and the no. of available slot shows 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:shows_waiting.png]]&lt;br /&gt;
&lt;br /&gt;
Now, if another user tries to sign up for the same topic, he is put on waitlist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This is a brief illustration of the changes we have made as a part of our project.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Future Work'''===&lt;br /&gt;
&lt;br /&gt;
The sign up sheet controller still has many methods relevant to other entities which need to be moved to other relevant models and controllers. save_topic_dependancies and save_topic_deadlines are two methods which can be put into SignUpTopic Model or controller. show_team method which is in sign_up_sheet controller can be moved to teams_controller. We also see another controller called SignUp controller which looks like a redundant one which has methods mostly from SignUpSheet controller. And these methods don't seem to be used. So this method can be looked into carefully and discarded if possible. There is also a function called slotAvailable? in the sign up sheet controller which merely makes a call to a method slotAvailable? in the SignUpTopic model and does nothing else. This looks like an unnecesary redirection. Dependencies can be resolved and this method can be removed and calls can directly be made to the slotAvailable? method in the SignUpTopic model. Also the method update_waitlisted_users can be moved from SignUpTopic model to Wailist Model to improve the readability of the code.&lt;/div&gt;</summary>
		<author><name>Sayenga</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_ssp&amp;diff=81174</id>
		<title>CSC/ECE 517 Fall 2013/oss ssp</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_ssp&amp;diff=81174"/>
		<updated>2013-10-30T19:25:30Z</updated>

		<summary type="html">&lt;p&gt;Sayenga: /* Issues */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''OSS E803 Refactoring and testing — signup_sheet model''' ==&lt;br /&gt;
&lt;br /&gt;
=== '''Motivation''' ===&lt;br /&gt;
&lt;br /&gt;
The motivation of this project was to provide functionality to manage Sign Up Sheets. The intent was to improve the design of the project by modularizing the code and maintaining good naming conventions. The methods relevant to wait-listing a team were all a part of the Sign Up sheet model and controller. in order to improve the readability of the code and to have a better organization, we intended to move these methods to a separate Waitlist Model. Also, some methods had too many functionalities, a lot more than what their names suggested. To have a more elegant code, the functionalities had to be moved to relevant methods. cancel_all_waitlists and waitlist_teams methods were created in the waitlist model for this purpose. Naming conventions are considered very important for making the code more readable and understandable. Ruby is known for its 'Convention over Configuration' ideology. Thus the naming conventions had to be taken care of. In the Sign Up sheet controller, we could see the usage of Camel cases in a lot of places. We intended to replace these by the convention of Ruby where underscore is used between two words in variable names with all the alphabets in small letters.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Design'''===&lt;br /&gt;
===='''Initial Design'''====&lt;br /&gt;
*Initially the sign_up_sheet_controller had huge methods with no comments and multiple variable decalarations.&lt;br /&gt;
*The other major drawback with the initial design was there were redundant methods in sign_up_sheet_controller and sign_up_controller.&lt;br /&gt;
&lt;br /&gt;
===='''Modified Design'''====&lt;br /&gt;
The refactoring required us to modularize and push some of the functionalities in sign_up_sheet_controller.rb to sign_up_topic.rb (model) and waitlist.rb ( model).&lt;br /&gt;
This demanded to make calls from remove_team and reassign_topic from sign_up_topic model to signup_topics method in  sign_up_sheet_controller. Similarly the controller also used methods waitlist_teams and cancel_all_waitlists from the waitlist model.&lt;br /&gt;
&lt;br /&gt;
*'''Refactoring the sign_up_sheet_controller for modularity and flexibility:'''&lt;br /&gt;
#By defining functions in the desired class and making only calls to the specific controller, we have implemented a '''Collaborative design''' based on CRC modelling: &lt;br /&gt;
##finding classes/ models - sign_up_topic.rb and waitlist.rb&lt;br /&gt;
##finding responsibilities - remove_team, reassign_topic in sign_up_topic.rb, cancel-all_waitlists, waitlist_teams in waitlist.rb&lt;br /&gt;
##defining the collaborators - confirm_topic, delete_signup_topic, signup_topics in sign_up_sheet_controller.rb&lt;br /&gt;
#This has also made it more flexible for the developers as a change in the db or table design can be easily tracked. &lt;br /&gt;
##Easily implemented in the respective models and by passing the correct type/number parameters in the controllers.  &lt;br /&gt;
##Reduces overhead of rewriting methods and keeping track of the method calls.&lt;br /&gt;
&lt;br /&gt;
*'''Adding a waitlist model:'''&lt;br /&gt;
#The newly formed waitlist model follows the '''Singleton pattern''' as it is an independent class and also the waitlist for a topic is a single queue or list on which multiple teams and individuals wait on.&lt;br /&gt;
#The methods defined in waitlist model are singleton methods and thus are defined as class methods with the keyword &amp;quot;self&amp;quot; prepended to them.&lt;br /&gt;
&lt;br /&gt;
*'''Removing Redundancy from sign_up_controller'''&lt;br /&gt;
#The methods such as sign_up were redundantly present in both the controllers. &lt;br /&gt;
#Some part of the code which had common functionality were removed and the function calls were also redirected accordingly to the specific views.&lt;br /&gt;
&lt;br /&gt;
=== '''Issues'''===&lt;br /&gt;
*'''Refactoring issues'''&lt;br /&gt;
#Since we had two controllers for the signup sheet, there were many functions which had nested calls and needed to be taken care.&lt;br /&gt;
##For example slotAvailble?() was called from both controller and the sign_up_topic model.&lt;br /&gt;
#As waitlist was created as a singleton class with no table structure it was difficult to make use of attributes of other classes in it as attributes can be inherited or used only if they have associativity at schema level.&lt;br /&gt;
#By defining the functions in the models, we had to take care of the dependencies of the instance variables defined and used in the controller and interaction between several models had to be taken care. &lt;br /&gt;
#Controllers have the flexibility to directly make use of the parameters from the specific views whereas defining them in models had to carefully set and passed. Since some of the parameters were used in multiple views, it needed to be updated in several places.&lt;br /&gt;
#Some of the methods that were modularised were conflicting as they were modified to class methods from being an instance method.&lt;br /&gt;
&lt;br /&gt;
*'''redundant Test issues'''&lt;br /&gt;
#Since the code has been developed over the years and refactored by multiple developers, there were several redundant tests and identifying them was a huge task.&lt;br /&gt;
&lt;br /&gt;
*'''Deployment issues'''&lt;br /&gt;
#Merging of branches from the local to the remote repository at the right level was initially being an overhead creating multiple levels.&lt;br /&gt;
#This was overcome by cloning a specific branch using: git clone -b &amp;lt;branch_name&amp;gt; &amp;lt;remote_url&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== '''Procedure'''===&lt;br /&gt;
&lt;br /&gt;
====A brief description====&lt;br /&gt;
&lt;br /&gt;
Our OSS project required us to do refactoring and testing of the part of Expertiza that deals with signup mainly sign_up_sheet controller. This controller manages functionalities of signup sheet for assignment. We have moved a few methods from controller to a more suitable model in order to attain the “thin controller, fat model” implementation. A major part includes the actions related to waitlist. We have put methods from sign_up_sheet controller to the waitlist model (which was earlier empty, so we created a waitlist model by adding functionalities to it)&lt;br /&gt;
A brief description of the refactoring that we have done is given below&lt;br /&gt;
&lt;br /&gt;
=====Add teams to waiting list=====&lt;br /&gt;
We have moved the functionality that adds teams to waiting list when the topic is unavailable. We have moved this functionality from confirm_topic in sign_up_sheet controller to waitlist_teams method that we have created in waitlist controller.&lt;br /&gt;
&lt;br /&gt;
[[File:confirm_topic_new.png]]&lt;br /&gt;
&lt;br /&gt;
This shows the method confirm_topic in sign_up_sheet controller that contains call to waitlist_teams method in waitlist controller. &lt;br /&gt;
&lt;br /&gt;
[[File:waitlist_teams_new.png]]&lt;br /&gt;
&lt;br /&gt;
This method has definition for waitlist_teams and is defined in waitlist model.&lt;br /&gt;
&lt;br /&gt;
=====Cancel waitlist=====&lt;br /&gt;
We have moved the functionality that removes a team from the waiting list, from sign_up_topic model to waitlist model. The method name is cancel_all_waitlist.&lt;br /&gt;
&lt;br /&gt;
[[File:cancel_all_waitlists_new.png]]&lt;br /&gt;
&lt;br /&gt;
=====Reassign a topic=====&lt;br /&gt;
We have moved the functionality that reassigns a topic to another team when a team holding that particular topic cancels its reservation. We have moved this functionality from delete_signup_for_topic in sign_up_sheet controller to a method named reassign_topic that we have created in sign_up_topic model. &lt;br /&gt;
&lt;br /&gt;
[[File:for_reassign_topic_new.png]]&lt;br /&gt;
&lt;br /&gt;
This shows the method delete_signup_for_topic in sign_up_sheet controller that contains call to reassign_topic method in sign_up_topic model.&lt;br /&gt;
&lt;br /&gt;
[[File:reassign_topic_new.png]]&lt;br /&gt;
&lt;br /&gt;
This method has definition for reassign_topic and is defined in sign_up_topic model.&lt;br /&gt;
&lt;br /&gt;
=====Remove team from topic=====&lt;br /&gt;
We have moved the functionality that removes a team from a topic when all of the team’s members have left the team. We have moved this functionality from signup_topics in sign_up_sheet controller to a method named remove_team that we have created in sign_up_topic model. &lt;br /&gt;
&lt;br /&gt;
[[File:signup_topics_new.png]]&lt;br /&gt;
&lt;br /&gt;
This shows the method signup_topics in sign_up_sheet controller that contains call to remove_team method in sign_up_topic model.&lt;br /&gt;
&lt;br /&gt;
[[File:remove_team_new.png]]&lt;br /&gt;
&lt;br /&gt;
This method has definition for remove_team and is defined in sign_up_topic model.&lt;br /&gt;
Rest, we have done renaming at a few places in sign_up_sheet controller.&lt;br /&gt;
&lt;br /&gt;
====Snapshots====&lt;br /&gt;
Here, we have a few snapshots that would guide one to walk-through our work and the areas wherein we did refactoring.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Login_admin_new.png]]&lt;br /&gt;
&lt;br /&gt;
Login as an admin.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:manage_courses_new.png]]&lt;br /&gt;
&lt;br /&gt;
Go to manage-&amp;gt;courses&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:create_assignment_new.png]]&lt;br /&gt;
&lt;br /&gt;
Create an assignment by filling in the required fields and selecting the checkboxes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:create_users_new.png]]&lt;br /&gt;
&lt;br /&gt;
Create users by filling in the required fields.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:add_participants_admin_new.png]]&lt;br /&gt;
&lt;br /&gt;
Again go to Manage courses and as shown in the snapshot above, one can see actions associated with an assignment. Click on add participants.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:add_participants2_admin.png]]&lt;br /&gt;
&lt;br /&gt;
Add a user to an assignment as a participant.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:participant_added.png]]&lt;br /&gt;
&lt;br /&gt;
The participant is added.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:add_signupsheet.png]]&lt;br /&gt;
&lt;br /&gt;
Also, through manage-&amp;gt; courses, add signup sheet to an assignment in a similar manner as adding participants.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:add_topic.png]]&lt;br /&gt;
&lt;br /&gt;
When a signup sheet is created, add new topics to it in the similar manner&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:topic_created.png]]&lt;br /&gt;
&lt;br /&gt;
Topic is successfully created. Logout of admin system&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:login.png]] &lt;br /&gt;
&lt;br /&gt;
Now login as an user.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:top.png]]&lt;br /&gt;
&lt;br /&gt;
Go to the assignments on top&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:select_one_assignment.png]]&lt;br /&gt;
&lt;br /&gt;
Select one assignment from the list of assignments.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:click_signup_sheet.png]]&lt;br /&gt;
&lt;br /&gt;
Select signup sheet&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:can_view_signup_sheet.png]]&lt;br /&gt;
&lt;br /&gt;
One can view signup sheet and signup for the topic&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:signing_up.png]]&lt;br /&gt;
&lt;br /&gt;
After signing up, here for example for topic 1234, the user has the topic and the no. of available slot shows 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:shows_waiting.png]]&lt;br /&gt;
&lt;br /&gt;
Now, if another user tries to sign up for the same topic, he is put on waitlist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This is a brief illustration of the changes we have made as a part of our project.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Future Work'''===&lt;br /&gt;
&lt;br /&gt;
The sign up sheet controller still has many methods relevant to other entities which need to be moved to other relevant models and controllers. save_topic_dependancies and save_topic_deadlines are two methods which can be put into SignUpTopic Model or controller. show_team method which is in sign_up_sheet controller can be moved to teams_controller. We also see another controller called SignUp controller which looks like a redundant one which has methods mostly from SignUpSheet controller. And these methods don't seem to be used. So this method can be looked into carefully and discarded if possible. There is also a function called slotAvailable? in the sign up sheet controller which merely makes a call to a method slotAvailable? in the SignUpTopic model and does nothing else. This looks like an unnecesary redirection. Dependencies can be resolved and this method can be removed and calls can directly be made to the slotAvailable? method in the SignUpTopic model. Also the method update_waitlisted_users can be moved from SignUpTopic model to Wailist Model to improve the readability of the code.&lt;/div&gt;</summary>
		<author><name>Sayenga</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_ssp&amp;diff=81166</id>
		<title>CSC/ECE 517 Fall 2013/oss ssp</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_ssp&amp;diff=81166"/>
		<updated>2013-10-30T19:21:49Z</updated>

		<summary type="html">&lt;p&gt;Sayenga: /* Issues */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''OSS E803 Refactoring and testing — signup_sheet model''' ==&lt;br /&gt;
&lt;br /&gt;
=== '''Motivation''' ===&lt;br /&gt;
&lt;br /&gt;
The motivation of this project was to provide functionality to manage Sign Up Sheets. The intent was to improve the design of the project by modularizing the code and maintaining good naming conventions. The methods relevant to wait-listing a team were all a part of the Sign Up sheet model and controller. in order to improve the readability of the code and to have a better organization, we intended to move these methods to a separate Waitlist Model. Also, some methods had too many functionalities, a lot more than what their names suggested. To have a more elegant code, the functionalities had to be moved to relevant methods. cancel_all_waitlists and waitlist_teams methods were created in the waitlist model for this purpose. Naming conventions are considered very important for making the code more readable and understandable. Ruby is known for its 'Convention over Configuration' ideology. Thus the naming conventions had to be taken care of. In the Sign Up sheet controller, we could see the usage of Camel cases in a lot of places. We intended to replace these by the convention of Ruby where underscore is used between two words in variable names with all the alphabets in small letters.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Design'''===&lt;br /&gt;
===='''Initial Design'''====&lt;br /&gt;
*Initially the sign_up_sheet_controller had huge methods with no comments and multiple variable decalarations.&lt;br /&gt;
*The other major drawback with the initial design was there were redundant methods in sign_up_sheet_controller and sign_up_controller.&lt;br /&gt;
&lt;br /&gt;
===='''Modified Design'''====&lt;br /&gt;
The refactoring required us to modularize and push some of the functionalities in sign_up_sheet_controller.rb to sign_up_topic.rb (model) and waitlist.rb ( model).&lt;br /&gt;
This demanded to make calls from remove_team and reassign_topic from sign_up_topic model to signup_topics method in  sign_up_sheet_controller. Similarly the controller also used methods waitlist_teams and cancel_all_waitlists from the waitlist model.&lt;br /&gt;
&lt;br /&gt;
*'''Refactoring the sign_up_sheet_controller for modularity and flexibility:'''&lt;br /&gt;
#By defining functions in the desired class and making only calls to the specific controller, we have implemented a '''Collaborative design''' based on CRC modelling: &lt;br /&gt;
##finding classes/ models - sign_up_topic.rb and waitlist.rb&lt;br /&gt;
##finding responsibilities - remove_team, reassign_topic in sign_up_topic.rb, cancel-all_waitlists, waitlist_teams in waitlist.rb&lt;br /&gt;
##defining the collaborators - confirm_topic, delete_signup_topic, signup_topics in sign_up_sheet_controller.rb&lt;br /&gt;
#This has also made it more flexible for the developers as a change in the db or table design can be easily tracked. &lt;br /&gt;
##Easily implemented in the respective models and by passing the correct type/number parameters in the controllers.  &lt;br /&gt;
##Reduces overhead of rewriting methods and keeping track of the method calls.&lt;br /&gt;
&lt;br /&gt;
*'''Adding a waitlist model:'''&lt;br /&gt;
#The newly formed waitlist model follows the '''Singleton pattern''' as it is an independent class and also the waitlist for a topic is a single queue or list on which multiple teams and individuals wait on.&lt;br /&gt;
#The methods defined in waitlist model are singleton methods and thus are defined as class methods with the keyword &amp;quot;self&amp;quot; prepended to them.&lt;br /&gt;
&lt;br /&gt;
*'''Removing Redundancy from sign_up_controller'''&lt;br /&gt;
#The methods such as sign_up were redundantly present in both the controllers. &lt;br /&gt;
#Some part of the code which had common functionality were removed and the function calls were also redirected accordingly to the specific views.&lt;br /&gt;
&lt;br /&gt;
=== '''Issues'''===&lt;br /&gt;
*'''While Refactoring'''&lt;br /&gt;
#Since we had two controllers for the signup sheet, there were many functions which had nested calls and needed to be taken care.&lt;br /&gt;
For example slotAvailble?() was called from both controller and the sign_up_topic model.&lt;br /&gt;
#As waitlist was created as a singleton class with no table structure it was difficult to make use of attributes of other classes in it as attributes can be inherited or used only if they have associativity at schema level.&lt;br /&gt;
#By defining the functions in the models, we had to take care of the dependencies of the instance variables defined and used in the controller and interaction between several models had to be taken care. &lt;br /&gt;
#Controllers have the flexibility to directly make use of the parameters from the specific views whereas defining them in models had to carefully set and passed. Since some of the parameters were used in multiple views, it needed to be updated in several places.&lt;br /&gt;
#Some of the methods that were modularised were conflicting as they were modified to class methods from being an instance method.&lt;br /&gt;
&lt;br /&gt;
=== '''Procedure'''===&lt;br /&gt;
&lt;br /&gt;
====A brief description====&lt;br /&gt;
&lt;br /&gt;
Our OSS project required us to do refactoring and testing of the part of Expertiza that deals with signup mainly sign_up_sheet controller. This controller manages functionalities of signup sheet for assignment. We have moved a few methods from controller to a more suitable model in order to attain the “thin controller, fat model” implementation. A major part includes the actions related to waitlist. We have put methods from sign_up_sheet controller to the waitlist model (which was earlier empty, so we created a waitlist model by adding functionalities to it)&lt;br /&gt;
A brief description of the refactoring that we have done is given below&lt;br /&gt;
&lt;br /&gt;
=====Add teams to waiting list=====&lt;br /&gt;
We have moved the functionality that adds teams to waiting list when the topic is unavailable. We have moved this functionality from confirm_topic in sign_up_sheet controller to waitlist_teams method that we have created in waitlist controller.&lt;br /&gt;
&lt;br /&gt;
[[File:confirm_topic_new.png]]&lt;br /&gt;
&lt;br /&gt;
This shows the method confirm_topic in sign_up_sheet controller that contains call to waitlist_teams method in waitlist controller. &lt;br /&gt;
&lt;br /&gt;
[[File:waitlist_teams_new.png]]&lt;br /&gt;
&lt;br /&gt;
This method has definition for waitlist_teams and is defined in waitlist model.&lt;br /&gt;
&lt;br /&gt;
=====Cancel waitlist=====&lt;br /&gt;
We have moved the functionality that removes a team from the waiting list, from sign_up_topic model to waitlist model. The method name is cancel_all_waitlist.&lt;br /&gt;
&lt;br /&gt;
[[File:cancel_all_waitlists_new.png]]&lt;br /&gt;
&lt;br /&gt;
=====Reassign a topic=====&lt;br /&gt;
We have moved the functionality that reassigns a topic to another team when a team holding that particular topic cancels its reservation. We have moved this functionality from delete_signup_for_topic in sign_up_sheet controller to a method named reassign_topic that we have created in sign_up_topic model. &lt;br /&gt;
&lt;br /&gt;
[[File:for_reassign_topic_new.png]]&lt;br /&gt;
&lt;br /&gt;
This shows the method delete_signup_for_topic in sign_up_sheet controller that contains call to reassign_topic method in sign_up_topic model.&lt;br /&gt;
&lt;br /&gt;
[[File:reassign_topic_new.png]]&lt;br /&gt;
&lt;br /&gt;
This method has definition for reassign_topic and is defined in sign_up_topic model.&lt;br /&gt;
&lt;br /&gt;
=====Remove team from topic=====&lt;br /&gt;
We have moved the functionality that removes a team from a topic when all of the team’s members have left the team. We have moved this functionality from signup_topics in sign_up_sheet controller to a method named remove_team that we have created in sign_up_topic model. &lt;br /&gt;
&lt;br /&gt;
[[File:signup_topics_new.png]]&lt;br /&gt;
&lt;br /&gt;
This shows the method signup_topics in sign_up_sheet controller that contains call to remove_team method in sign_up_topic model.&lt;br /&gt;
&lt;br /&gt;
[[File:remove_team_new.png]]&lt;br /&gt;
&lt;br /&gt;
This method has definition for remove_team and is defined in sign_up_topic model.&lt;br /&gt;
Rest, we have done renaming at a few places in sign_up_sheet controller.&lt;br /&gt;
&lt;br /&gt;
====Snapshots====&lt;br /&gt;
Here, we have a few snapshots that would guide one to walk-through our work and the areas wherein we did refactoring.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Login_admin_new.png]]&lt;br /&gt;
&lt;br /&gt;
Login as an admin.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:manage_courses_new.png]]&lt;br /&gt;
&lt;br /&gt;
Go to manage-&amp;gt;courses&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:create_assignment_new.png]]&lt;br /&gt;
&lt;br /&gt;
Create an assignment by filling in the required fields and selecting the checkboxes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:create_users_new.png]]&lt;br /&gt;
&lt;br /&gt;
Create users by filling in the required fields.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:add_participants_admin_new.png]]&lt;br /&gt;
&lt;br /&gt;
Again go to Manage courses and as shown in the snapshot above, one can see actions associated with an assignment. Click on add participants.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:add_participants2_admin.png]]&lt;br /&gt;
&lt;br /&gt;
Add a user to an assignment as a participant.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:participant_added.png]]&lt;br /&gt;
&lt;br /&gt;
The participant is added.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:add_signupsheet.png]]&lt;br /&gt;
&lt;br /&gt;
Also, through manage-&amp;gt; courses, add signup sheet to an assignment in a similar manner as adding participants.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:add_topic.png]]&lt;br /&gt;
&lt;br /&gt;
When a signup sheet is created, add new topics to it in the similar manner&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:topic_created.png]]&lt;br /&gt;
&lt;br /&gt;
Topic is successfully created. Logout of admin system&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:login.png]] &lt;br /&gt;
&lt;br /&gt;
Now login as an user.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:top.png]]&lt;br /&gt;
&lt;br /&gt;
Go to the assignments on top&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:select_one_assignment.png]]&lt;br /&gt;
&lt;br /&gt;
Select one assignment from the list of assignments.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:click_signup_sheet.png]]&lt;br /&gt;
&lt;br /&gt;
Select signup sheet&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:can_view_signup_sheet.png]]&lt;br /&gt;
&lt;br /&gt;
One can view signup sheet and signup for the topic&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:signing_up.png]]&lt;br /&gt;
&lt;br /&gt;
After signing up, here for example for topic 1234, the user has the topic and the no. of available slot shows 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:shows_waiting.png]]&lt;br /&gt;
&lt;br /&gt;
Now, if another user tries to sign up for the same topic, he is put on waitlist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This is a brief illustration of the changes we have made as a part of our project.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Future Work'''===&lt;br /&gt;
&lt;br /&gt;
The sign up sheet controller still has many methods relevant to other entities which need to be moved to other relevant models and controllers. save_topic_dependancies and save_topic_deadlines are two methods which can be put into SignUpTopic Model or controller. show_team method which is in sign_up_sheet controller can be moved to teams_controller. We also see another controller called SignUp controller which looks like a redundant one which has methods mostly from SignUpSheet controller. And these methods don't seem to be used. So this method can be looked into carefully and discarded if possible. There is also a function called slotAvailable? in the sign up sheet controller which merely makes a call to a method slotAvailable? in the SignUpTopic model and does nothing else. This looks like an unnecesary redirection. Dependencies can be resolved and this method can be removed and calls can directly be made to the slotAvailable? method in the SignUpTopic model. Also the method update_waitlisted_users can be moved from SignUpTopic model to Wailist Model to improve the readability of the code.&lt;/div&gt;</summary>
		<author><name>Sayenga</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_ssp&amp;diff=81023</id>
		<title>CSC/ECE 517 Fall 2013/oss ssp</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_ssp&amp;diff=81023"/>
		<updated>2013-10-30T18:35:41Z</updated>

		<summary type="html">&lt;p&gt;Sayenga: /* Modified Design */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''OSS E803 Refactoring and testing — signup_sheet model''' ==&lt;br /&gt;
&lt;br /&gt;
=== '''Motivation''' ===&lt;br /&gt;
&lt;br /&gt;
The motivation of this project was to provide functionality to manage Sign Up Sheets. The intent was to improve the design of the project by modularizing the code and maintaining good naming conventions. The methods relevant to wait-listing a team were all a part of the Sign Up sheet model and controller. in order to improve the readability of the code and to have a better organization, we intended to move these methods to a separate Waitlist Model. Also, some methods had too many functionalities, a lot more than what their names suggested. To have a more elegant code, the functionalities had to be moved to relevant methods. cancel_all_waitlists and waitlist_teams methods were created in the waitlist model for this purpose. Naming conventions are considered very important for making the code more readable and understandable. Ruby is known for its 'Convention over Configuration' ideology. Thus the naming conventions had to be taken care of. In the Sign Up sheet controller, we could see the usage of Camel cases in a lot of places. We intended to replace these by the convention of Ruby where underscore is used between two words in variable names with all the alphabets in small letters.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Design'''===&lt;br /&gt;
===='''Initial Design'''====&lt;br /&gt;
*Initially the sign_up_sheet_controller had huge methods with no comments and multiple variable decalarations.&lt;br /&gt;
*The other major drawback with the initial design was there were redundant methods in sign_up_sheet_controller and sign_up_controller.&lt;br /&gt;
&lt;br /&gt;
===='''Modified Design'''====&lt;br /&gt;
The refactoring required us to modularize and push some of the functionalities in sign_up_sheet_controller.rb to sign_up_topic.rb (model) and waitlist.rb ( model).&lt;br /&gt;
This demanded to make calls from remove_team and reassign_topic from sign_up_topic model to signup_topics method in  sign_up_sheet_controller. Similarly the controller also used methods waitlist_teams and cancel_all_waitlists from the waitlist model.&lt;br /&gt;
&lt;br /&gt;
*'''Refactoring the sign_up_sheet_controller for modularity and flexibility:'''&lt;br /&gt;
#By defining functions in the desired class and making only calls to the specific controller, we have implemented a '''Collaborative design''' based on CRC modelling: &lt;br /&gt;
##finding classes/ models - sign_up_topic.rb and waitlist.rb&lt;br /&gt;
##finding responsibilities - remove_team, reassign_topic in sign_up_topic.rb, cancel-all_waitlists, waitlist_teams in waitlist.rb&lt;br /&gt;
##defining the collaborators - confirm_topic, delete_signup_topic, signup_topics in sign_up_sheet_controller.rb&lt;br /&gt;
#This has also made it more flexible for the developers as a change in the db or table design can be easily tracked. &lt;br /&gt;
##Easily implemented in the respective models and by passing the correct type/number parameters in the controllers.  &lt;br /&gt;
##Reduces overhead of rewriting methods and keeping track of the method calls.&lt;br /&gt;
&lt;br /&gt;
*'''Adding a waitlist model:'''&lt;br /&gt;
#The newly formed waitlist model follows the '''Singleton pattern''' as it is an independent class and also the waitlist for a topic is a single queue or list on which multiple teams and individuals wait on.&lt;br /&gt;
#The methods defined in waitlist model are singleton methods and thus are defined as class methods with the keyword &amp;quot;self&amp;quot; prepended to them.&lt;br /&gt;
&lt;br /&gt;
*'''Removing Redundancy from sign_up_controller'''&lt;br /&gt;
#The methods such as sign_up were redundantly present in both the controllers. &lt;br /&gt;
#Some part of the code which had common functionality were removed and the function calls were also redirected accordingly to the specific views.&lt;br /&gt;
&lt;br /&gt;
=== '''Issues'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Procedure'''===&lt;br /&gt;
&lt;br /&gt;
====A brief description====&lt;br /&gt;
&lt;br /&gt;
Our OSS project required us to do refactoring and testing of the part of Expertiza that deals with signup mainly sign_up_sheet controller. This controller manages functionalities of signup sheet for assignment. We have moved a few methods from controller to a more suitable model in order to attain the “thin controller, fat model” implementation. A major part includes the actions related to waitlist. We have put methods from sign_up_sheet controller to the waitlist model (which was earlier empty, so we created a waitlist model by adding functionalities to it)&lt;br /&gt;
A brief description of the refactoring that we have done is given below&lt;br /&gt;
&lt;br /&gt;
=====Add teams to waiting list=====&lt;br /&gt;
We have moved the functionality that adds teams to waiting list when the topic is unavailable. We have moved this functionality from confirm_topic in sign_up_sheet controller to waitlist_teams method that we have created in waitlist controller.&lt;br /&gt;
&lt;br /&gt;
[[File:confirm_topic_new.png]]&lt;br /&gt;
&lt;br /&gt;
This shows the method confirm_topic in sign_up_sheet controller that contains call to waitlist_teams method in waitlist controller. &lt;br /&gt;
&lt;br /&gt;
[[File:waitlist_teams_new.png]]&lt;br /&gt;
&lt;br /&gt;
This method has definition for waitlist_teams and is defined in waitlist model.&lt;br /&gt;
&lt;br /&gt;
=====Cancel waitlist=====&lt;br /&gt;
We have moved the functionality that removes a team from the waiting list, from sign_up_topic model to waitlist model. The method name is cancel_all_waitlist.&lt;br /&gt;
&lt;br /&gt;
[[File:cancel_all_waitlists_new.png]]&lt;br /&gt;
&lt;br /&gt;
=====Reassign a topic=====&lt;br /&gt;
We have moved the functionality that reassigns a topic to another team when a team holding that particular topic cancels its reservation. We have moved this functionality from delete_signup_for_topic in sign_up_sheet controller to a method named reassign_topic that we have created in sign_up_topic model. &lt;br /&gt;
&lt;br /&gt;
[[File:for_reassign_topic_new.png]]&lt;br /&gt;
&lt;br /&gt;
This shows the method delete_signup_for_topic in sign_up_sheet controller that contains call to reassign_topic method in sign_up_topic model.&lt;br /&gt;
&lt;br /&gt;
[[File:reassign_topic_new.png]]&lt;br /&gt;
&lt;br /&gt;
This method has definition for reassign_topic and is defined in sign_up_topic model.&lt;br /&gt;
&lt;br /&gt;
=====Remove team from topic=====&lt;br /&gt;
We have moved the functionality that removes a team from a topic when all of the team’s members have left the team. We have moved this functionality from signup_topics in sign_up_sheet controller to a method named remove_team that we have created in sign_up_topic model. &lt;br /&gt;
&lt;br /&gt;
[[File:signup_topics_new.png]]&lt;br /&gt;
&lt;br /&gt;
This shows the method signup_topics in sign_up_sheet controller that contains call to remove_team method in sign_up_topic model.&lt;br /&gt;
&lt;br /&gt;
[[File:remove_team_new.png]]&lt;br /&gt;
&lt;br /&gt;
This method has definition for remove_team and is defined in sign_up_topic model.&lt;br /&gt;
Rest, we have done renaming at a few places in sign_up_sheet controller.&lt;br /&gt;
&lt;br /&gt;
====Snapshots====&lt;br /&gt;
Here, we have a few snapshots that would guide one to walk-through our work and the areas wherein we did refactoring.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Login_admin_new.png]]&lt;br /&gt;
&lt;br /&gt;
Login as an admin.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:manage_courses_new.png]]&lt;br /&gt;
&lt;br /&gt;
Go to manage-&amp;gt;courses&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:create_assignment_new.png]]&lt;br /&gt;
&lt;br /&gt;
Create an assignment by filling in the required fields and selecting the checkboxes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:create_users_new.png]]&lt;br /&gt;
&lt;br /&gt;
Create users by filling in the required fields.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:add_participants_admin_new.png]]&lt;br /&gt;
&lt;br /&gt;
Again go to Manage courses and as shown in the snapshot above, one can see actions associated with an assignment. Click on add participants.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:add_participants2_admin.png]]&lt;br /&gt;
&lt;br /&gt;
Add a user to an assignment as a participant.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:participant_added.png]]&lt;br /&gt;
&lt;br /&gt;
The participant is added.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:add_signupsheet.png]]&lt;br /&gt;
&lt;br /&gt;
Also, through manage-&amp;gt; courses, add signup sheet to an assignment in a similar manner as adding participants.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:add_topic.png]]&lt;br /&gt;
&lt;br /&gt;
When a signup sheet is created, add new topics to it in the similar manner&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:topic_created.png]]&lt;br /&gt;
&lt;br /&gt;
Topic is successfully created. Logout of admin system&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:login.png]] &lt;br /&gt;
&lt;br /&gt;
Now login as an user.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:top.png]]&lt;br /&gt;
&lt;br /&gt;
Go to the assignments on top&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:select_one_assignment.png]]&lt;br /&gt;
&lt;br /&gt;
Select one assignment from the list of assignments.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:click_signup_sheet.png]]&lt;br /&gt;
&lt;br /&gt;
Select signup sheet&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:can_view_signup_sheet.png]]&lt;br /&gt;
&lt;br /&gt;
One can view signup sheet and signup for the topic&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:signing_up.png]]&lt;br /&gt;
&lt;br /&gt;
After signing up, here for example for topic 1234, the user has the topic and the no. of available slot shows 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:shows_waiting.png]]&lt;br /&gt;
&lt;br /&gt;
Now, if another user tries to sign up for the same topic, he is put on waitlist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This is a brief illustration of the changes we have made as a part of our project.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Future Work'''===&lt;br /&gt;
&lt;br /&gt;
The sign up sheet controller still has many methods relevant to other entities which need to be moved to other relevant models and controllers. save_topic_dependancies and save_topic_deadlines are two methods which can be put into SignUpTopic Model or controller. show_team method which is in sign_up_sheet controller can be moved to teams_controller. We also see another controller called SignUp controller which looks like a redundant one which has methods mostly from SignUpSheet controller. And these methods don't seem to be used. So this method can be looked into carefully and discarded if possible. There is also a function called slotAvailable? in the sign up sheet controller which merely makes a call to a method slotAvailable? in the SignUpTopic model and does nothing else. This looks like an unnecesary redirection. Dependencies can be resolved and this method can be removed and calls can directly be made to the slotAvailable? method in the SignUpTopic model. Also the method update_waitlisted_users can be moved from SignUpTopic model to Wailist Model to improve the readability of the code.&lt;/div&gt;</summary>
		<author><name>Sayenga</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_ssp&amp;diff=81019</id>
		<title>CSC/ECE 517 Fall 2013/oss ssp</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_ssp&amp;diff=81019"/>
		<updated>2013-10-30T18:35:01Z</updated>

		<summary type="html">&lt;p&gt;Sayenga: /* Modified Design */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''OSS E803 Refactoring and testing — signup_sheet model''' ==&lt;br /&gt;
&lt;br /&gt;
=== '''Motivation''' ===&lt;br /&gt;
&lt;br /&gt;
The motivation of this project was to provide functionality to manage Sign Up Sheets. The intent was to improve the design of the project by modularizing the code and maintaining good naming conventions. The methods relevant to wait-listing a team were all a part of the Sign Up sheet model and controller. in order to improve the readability of the code and to have a better organization, we intended to move these methods to a separate Waitlist Model. Also, some methods had too many functionalities, a lot more than what their names suggested. To have a more elegant code, the functionalities had to be moved to relevant methods. cancel_all_waitlists and waitlist_teams methods were created in the waitlist model for this purpose. Naming conventions are considered very important for making the code more readable and understandable. Ruby is known for its 'Convention over Configuration' ideology. Thus the naming conventions had to be taken care of. In the Sign Up sheet controller, we could see the usage of Camel cases in a lot of places. We intended to replace these by the convention of Ruby where underscore is used between two words in variable names with all the alphabets in small letters.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Design'''===&lt;br /&gt;
===='''Initial Design'''====&lt;br /&gt;
*Initially the sign_up_sheet_controller had huge methods with no comments and multiple variable decalarations.&lt;br /&gt;
*The other major drawback with the initial design was there were redundant methods in sign_up_sheet_controller and sign_up_controller.&lt;br /&gt;
&lt;br /&gt;
===='''Modified Design'''====&lt;br /&gt;
The refactoring required us to modularize and push some of the functionalities in sign_up_sheet_controller.rb to sign_up_topic.rb (model) and waitlist.rb ( model).&lt;br /&gt;
This demanded to make calls from remove_team and reassign_topic from sign_up_topic model to signup_topics method in  sign_up_sheet_controller. Similarly the controller also used methods waitlist_teams and cancel_all_waitlists from the waitlist model.&lt;br /&gt;
&lt;br /&gt;
*'''Refactoring the sign_up_sheet_controller for modularity and flexibility:'''&lt;br /&gt;
#By defining functions in the desired class and making only calls to the specific controller, we have implemented a '''Collaborative design''' based on CRC modelling: &lt;br /&gt;
##finding classes/ models - sign_up_topic.rb and waitlist.rb&lt;br /&gt;
##finding responsibilities - remove_team, reassign_topic in sign_up_topic.rb, cancel-all_waitlists, waitlist_teams in waitlist.rb&lt;br /&gt;
##defining the collaborators - confirm_topic, delete_signup_topic, signup_topics in sign_up_sheet_controller.rb&lt;br /&gt;
#This has also made it more flexible for the developers as a change in the db or table design can be easily tracked. &lt;br /&gt;
##Easily implemented in the respective models and by passing the correct type/number parameters in the controllers.  &lt;br /&gt;
##Reduces overhead of rewriting methods and keeping track of the method calls.&lt;br /&gt;
&lt;br /&gt;
*'''Adding a waitlist model:'''&lt;br /&gt;
#The newly formed waitlist model follows the '''Singleton pattern''' as it is an independent class and also the waitlist for a topic is a single queue or list on which multiple teams and individuals wait on.&lt;br /&gt;
#The methods defined in waitlist model are singleton methods and thus are defined as class methods with the keyword &amp;quot;self&amp;quot; prepended to them.&lt;br /&gt;
&lt;br /&gt;
*'''Removing Redundancy from sign_up_controller'''&lt;br /&gt;
#The methods such as sign_up were redundantly present in both the controllers. Thus some part of the code which had common functionality were removed and the function calls were also redirected accordingly.&lt;br /&gt;
&lt;br /&gt;
=== '''Issues'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Procedure'''===&lt;br /&gt;
&lt;br /&gt;
====A brief description====&lt;br /&gt;
&lt;br /&gt;
Our OSS project required us to do refactoring and testing of the part of Expertiza that deals with signup mainly sign_up_sheet controller. This controller manages functionalities of signup sheet for assignment. We have moved a few methods from controller to a more suitable model in order to attain the “thin controller, fat model” implementation. A major part includes the actions related to waitlist. We have put methods from sign_up_sheet controller to the waitlist model (which was earlier empty, so we created a waitlist model by adding functionalities to it)&lt;br /&gt;
A brief description of the refactoring that we have done is given below&lt;br /&gt;
&lt;br /&gt;
=====Add teams to waiting list=====&lt;br /&gt;
We have moved the functionality that adds teams to waiting list when the topic is unavailable. We have moved this functionality from confirm_topic in sign_up_sheet controller to waitlist_teams method that we have created in waitlist controller.&lt;br /&gt;
&lt;br /&gt;
[[File:confirm_topic_new.png]]&lt;br /&gt;
&lt;br /&gt;
This shows the method confirm_topic in sign_up_sheet controller that contains call to waitlist_teams method in waitlist controller. &lt;br /&gt;
&lt;br /&gt;
[[File:waitlist_teams_new.png]]&lt;br /&gt;
&lt;br /&gt;
This method has definition for waitlist_teams and is defined in waitlist model.&lt;br /&gt;
&lt;br /&gt;
=====Cancel waitlist=====&lt;br /&gt;
We have moved the functionality that removes a team from the waiting list, from sign_up_topic model to waitlist model. The method name is cancel_all_waitlist.&lt;br /&gt;
&lt;br /&gt;
[[File:cancel_all_waitlists_new.png]]&lt;br /&gt;
&lt;br /&gt;
=====Reassign a topic=====&lt;br /&gt;
We have moved the functionality that reassigns a topic to another team when a team holding that particular topic cancels its reservation. We have moved this functionality from delete_signup_for_topic in sign_up_sheet controller to a method named reassign_topic that we have created in sign_up_topic model. &lt;br /&gt;
&lt;br /&gt;
[[File:for_reassign_topic_new.png]]&lt;br /&gt;
&lt;br /&gt;
This shows the method delete_signup_for_topic in sign_up_sheet controller that contains call to reassign_topic method in sign_up_topic model.&lt;br /&gt;
&lt;br /&gt;
[[File:reassign_topic_new.png]]&lt;br /&gt;
&lt;br /&gt;
This method has definition for reassign_topic and is defined in sign_up_topic model.&lt;br /&gt;
&lt;br /&gt;
=====Remove team from topic=====&lt;br /&gt;
We have moved the functionality that removes a team from a topic when all of the team’s members have left the team. We have moved this functionality from signup_topics in sign_up_sheet controller to a method named remove_team that we have created in sign_up_topic model. &lt;br /&gt;
&lt;br /&gt;
[[File:signup_topics_new.png]]&lt;br /&gt;
&lt;br /&gt;
This shows the method signup_topics in sign_up_sheet controller that contains call to remove_team method in sign_up_topic model.&lt;br /&gt;
&lt;br /&gt;
[[File:remove_team_new.png]]&lt;br /&gt;
&lt;br /&gt;
This method has definition for remove_team and is defined in sign_up_topic model.&lt;br /&gt;
Rest, we have done renaming at a few places in sign_up_sheet controller.&lt;br /&gt;
&lt;br /&gt;
====Snapshots====&lt;br /&gt;
Here, we have a few snapshots that would guide one to walk-through our work and the areas wherein we did refactoring.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Login_admin_new.png]]&lt;br /&gt;
&lt;br /&gt;
Login as an admin.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:manage_courses_new.png]]&lt;br /&gt;
&lt;br /&gt;
Go to manage-&amp;gt;courses&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:create_assignment_new.png]]&lt;br /&gt;
&lt;br /&gt;
Create an assignment by filling in the required fields and selecting the checkboxes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:create_users_new.png]]&lt;br /&gt;
&lt;br /&gt;
Create users by filling in the required fields.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:add_participants_admin_new.png]]&lt;br /&gt;
&lt;br /&gt;
Again go to Manage courses and as shown in the snapshot above, one can see actions associated with an assignment. Click on add participants.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:add_participants2_admin.png]]&lt;br /&gt;
&lt;br /&gt;
Add a user to an assignment as a participant.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:participant_added.png]]&lt;br /&gt;
&lt;br /&gt;
The participant is added.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:add_signupsheet.png]]&lt;br /&gt;
&lt;br /&gt;
Also, through manage-&amp;gt; courses, add signup sheet to an assignment in a similar manner as adding participants.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:add_topic.png]]&lt;br /&gt;
&lt;br /&gt;
When a signup sheet is created, add new topics to it in the similar manner&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:topic_created.png]]&lt;br /&gt;
&lt;br /&gt;
Topic is successfully created. Logout of admin system&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:login.png]] &lt;br /&gt;
&lt;br /&gt;
Now login as an user.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:top.png]]&lt;br /&gt;
&lt;br /&gt;
Go to the assignments on top&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:select_one_assignment.png]]&lt;br /&gt;
&lt;br /&gt;
Select one assignment from the list of assignments.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:click_signup_sheet.png]]&lt;br /&gt;
&lt;br /&gt;
Select signup sheet&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:can_view_signup_sheet.png]]&lt;br /&gt;
&lt;br /&gt;
One can view signup sheet and signup for the topic&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:signing_up.png]]&lt;br /&gt;
&lt;br /&gt;
After signing up, here for example for topic 1234, the user has the topic and the no. of available slot shows 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:shows_waiting.png]]&lt;br /&gt;
&lt;br /&gt;
Now, if another user tries to sign up for the same topic, he is put on waitlist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This is a brief illustration of the changes we have made as a part of our project.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Future Work'''===&lt;br /&gt;
&lt;br /&gt;
The sign up sheet controller still has many methods relevant to other entities which need to be moved to other relevant models and controllers. save_topic_dependancies and save_topic_deadlines are two methods which can be put into SignUpTopic Model or controller. show_team method which is in sign_up_sheet controller can be moved to teams_controller. We also see another controller called SignUp controller which looks like a redundant one which has methods mostly from SignUpSheet controller. And these methods don't seem to be used. So this method can be looked into carefully and discarded if possible. There is also a function called slotAvailable? in the sign up sheet controller which merely makes a call to a method slotAvailable? in the SignUpTopic model and does nothing else. This looks like an unnecesary redirection. Dependencies can be resolved and this method can be removed and calls can directly be made to the slotAvailable? method in the SignUpTopic model. Also the method update_waitlisted_users can be moved from SignUpTopic model to Wailist Model to improve the readability of the code.&lt;/div&gt;</summary>
		<author><name>Sayenga</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_ssp&amp;diff=81018</id>
		<title>CSC/ECE 517 Fall 2013/oss ssp</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_ssp&amp;diff=81018"/>
		<updated>2013-10-30T18:34:51Z</updated>

		<summary type="html">&lt;p&gt;Sayenga: /* Modified Design */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''OSS E803 Refactoring and testing — signup_sheet model''' ==&lt;br /&gt;
&lt;br /&gt;
=== '''Motivation''' ===&lt;br /&gt;
&lt;br /&gt;
The motivation of this project was to provide functionality to manage Sign Up Sheets. The intent was to improve the design of the project by modularizing the code and maintaining good naming conventions. The methods relevant to wait-listing a team were all a part of the Sign Up sheet model and controller. in order to improve the readability of the code and to have a better organization, we intended to move these methods to a separate Waitlist Model. Also, some methods had too many functionalities, a lot more than what their names suggested. To have a more elegant code, the functionalities had to be moved to relevant methods. cancel_all_waitlists and waitlist_teams methods were created in the waitlist model for this purpose. Naming conventions are considered very important for making the code more readable and understandable. Ruby is known for its 'Convention over Configuration' ideology. Thus the naming conventions had to be taken care of. In the Sign Up sheet controller, we could see the usage of Camel cases in a lot of places. We intended to replace these by the convention of Ruby where underscore is used between two words in variable names with all the alphabets in small letters.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Design'''===&lt;br /&gt;
===='''Initial Design'''====&lt;br /&gt;
*Initially the sign_up_sheet_controller had huge methods with no comments and multiple variable decalarations.&lt;br /&gt;
*The other major drawback with the initial design was there were redundant methods in sign_up_sheet_controller and sign_up_controller.&lt;br /&gt;
&lt;br /&gt;
===='''Modified Design'''====&lt;br /&gt;
The refactoring required us to modularize and push some of the functionalities in sign_up_sheet_controller.rb to sign_up_topic.rb (model) and waitlist.rb ( model).&lt;br /&gt;
This demanded to make calls from remove_team and reassign_topic from sign_up_topic model to signup_topics method in  sign_up_sheet_controller. Similarly the controller also used methods waitlist_teams and cancel_all_waitlists from the waitlist model.&lt;br /&gt;
&lt;br /&gt;
*'''Refactoring the sign_up_sheet_controller for modularity and flexibility:'''&lt;br /&gt;
#By defining functions in the desired class and making only calls to the specific controller, we have implemented a '''Collaborative design''' based on CRC modelling: &lt;br /&gt;
##finding classes/ models - sign_up_topic.rb and waitlist.rb&lt;br /&gt;
##finding responsibilities - remove_team, reassign_topic in sign_up_topic.rb, cancel-all_waitlists, waitlist_teams in waitlist.rb&lt;br /&gt;
##defining the collaborators - confirm_topic, delete_signup_topic, signup_topics in sign_up_sheet_controller.rb&lt;br /&gt;
#This has also made it more flexible for the developers as a change in the db or table design can be easily tracked. &lt;br /&gt;
##Easily implemented in the respective models and by passing the correct type/number parameters in the controllers.  &lt;br /&gt;
##Reduces overhead of rewriting methods and keeping track of the method calls.&lt;br /&gt;
&lt;br /&gt;
*'''Adding a waitlist model:'''&lt;br /&gt;
#The newly formed waitlist model follows the '''Singleton pattern''' as it is an independent class and also the waitlist for a topic is a single queue or list on which multiple teams and individuals wait on.&lt;br /&gt;
#The methods defined in waitlist model are singleton methods and thus are defined as class methods with the keyword &amp;quot;self&amp;quot; prepended to them.&lt;br /&gt;
&lt;br /&gt;
*'''Removing Redundancy from sign_up_controller'''&lt;br /&gt;
**The methods such as sign_up were redundantly present in both the controllers. Thus some part of the code which had common functionality were removed and the function calls were also redirected accordingly.&lt;br /&gt;
&lt;br /&gt;
=== '''Issues'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Procedure'''===&lt;br /&gt;
&lt;br /&gt;
====A brief description====&lt;br /&gt;
&lt;br /&gt;
Our OSS project required us to do refactoring and testing of the part of Expertiza that deals with signup mainly sign_up_sheet controller. This controller manages functionalities of signup sheet for assignment. We have moved a few methods from controller to a more suitable model in order to attain the “thin controller, fat model” implementation. A major part includes the actions related to waitlist. We have put methods from sign_up_sheet controller to the waitlist model (which was earlier empty, so we created a waitlist model by adding functionalities to it)&lt;br /&gt;
A brief description of the refactoring that we have done is given below&lt;br /&gt;
&lt;br /&gt;
=====Add teams to waiting list=====&lt;br /&gt;
We have moved the functionality that adds teams to waiting list when the topic is unavailable. We have moved this functionality from confirm_topic in sign_up_sheet controller to waitlist_teams method that we have created in waitlist controller.&lt;br /&gt;
&lt;br /&gt;
[[File:confirm_topic_new.png]]&lt;br /&gt;
&lt;br /&gt;
This shows the method confirm_topic in sign_up_sheet controller that contains call to waitlist_teams method in waitlist controller. &lt;br /&gt;
&lt;br /&gt;
[[File:waitlist_teams_new.png]]&lt;br /&gt;
&lt;br /&gt;
This method has definition for waitlist_teams and is defined in waitlist model.&lt;br /&gt;
&lt;br /&gt;
=====Cancel waitlist=====&lt;br /&gt;
We have moved the functionality that removes a team from the waiting list, from sign_up_topic model to waitlist model. The method name is cancel_all_waitlist.&lt;br /&gt;
&lt;br /&gt;
[[File:cancel_all_waitlists_new.png]]&lt;br /&gt;
&lt;br /&gt;
=====Reassign a topic=====&lt;br /&gt;
We have moved the functionality that reassigns a topic to another team when a team holding that particular topic cancels its reservation. We have moved this functionality from delete_signup_for_topic in sign_up_sheet controller to a method named reassign_topic that we have created in sign_up_topic model. &lt;br /&gt;
&lt;br /&gt;
[[File:for_reassign_topic_new.png]]&lt;br /&gt;
&lt;br /&gt;
This shows the method delete_signup_for_topic in sign_up_sheet controller that contains call to reassign_topic method in sign_up_topic model.&lt;br /&gt;
&lt;br /&gt;
[[File:reassign_topic_new.png]]&lt;br /&gt;
&lt;br /&gt;
This method has definition for reassign_topic and is defined in sign_up_topic model.&lt;br /&gt;
&lt;br /&gt;
=====Remove team from topic=====&lt;br /&gt;
We have moved the functionality that removes a team from a topic when all of the team’s members have left the team. We have moved this functionality from signup_topics in sign_up_sheet controller to a method named remove_team that we have created in sign_up_topic model. &lt;br /&gt;
&lt;br /&gt;
[[File:signup_topics_new.png]]&lt;br /&gt;
&lt;br /&gt;
This shows the method signup_topics in sign_up_sheet controller that contains call to remove_team method in sign_up_topic model.&lt;br /&gt;
&lt;br /&gt;
[[File:remove_team_new.png]]&lt;br /&gt;
&lt;br /&gt;
This method has definition for remove_team and is defined in sign_up_topic model.&lt;br /&gt;
Rest, we have done renaming at a few places in sign_up_sheet controller.&lt;br /&gt;
&lt;br /&gt;
====Snapshots====&lt;br /&gt;
Here, we have a few snapshots that would guide one to walk-through our work and the areas wherein we did refactoring.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Login_admin_new.png]]&lt;br /&gt;
&lt;br /&gt;
Login as an admin.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:manage_courses_new.png]]&lt;br /&gt;
&lt;br /&gt;
Go to manage-&amp;gt;courses&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:create_assignment_new.png]]&lt;br /&gt;
&lt;br /&gt;
Create an assignment by filling in the required fields and selecting the checkboxes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:create_users_new.png]]&lt;br /&gt;
&lt;br /&gt;
Create users by filling in the required fields.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:add_participants_admin_new.png]]&lt;br /&gt;
&lt;br /&gt;
Again go to Manage courses and as shown in the snapshot above, one can see actions associated with an assignment. Click on add participants.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:add_participants2_admin.png]]&lt;br /&gt;
&lt;br /&gt;
Add a user to an assignment as a participant.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:participant_added.png]]&lt;br /&gt;
&lt;br /&gt;
The participant is added.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:add_signupsheet.png]]&lt;br /&gt;
&lt;br /&gt;
Also, through manage-&amp;gt; courses, add signup sheet to an assignment in a similar manner as adding participants.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:add_topic.png]]&lt;br /&gt;
&lt;br /&gt;
When a signup sheet is created, add new topics to it in the similar manner&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:topic_created.png]]&lt;br /&gt;
&lt;br /&gt;
Topic is successfully created. Logout of admin system&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:login.png]] &lt;br /&gt;
&lt;br /&gt;
Now login as an user.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:top.png]]&lt;br /&gt;
&lt;br /&gt;
Go to the assignments on top&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:select_one_assignment.png]]&lt;br /&gt;
&lt;br /&gt;
Select one assignment from the list of assignments.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:click_signup_sheet.png]]&lt;br /&gt;
&lt;br /&gt;
Select signup sheet&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:can_view_signup_sheet.png]]&lt;br /&gt;
&lt;br /&gt;
One can view signup sheet and signup for the topic&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:signing_up.png]]&lt;br /&gt;
&lt;br /&gt;
After signing up, here for example for topic 1234, the user has the topic and the no. of available slot shows 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:shows_waiting.png]]&lt;br /&gt;
&lt;br /&gt;
Now, if another user tries to sign up for the same topic, he is put on waitlist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This is a brief illustration of the changes we have made as a part of our project.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Future Work'''===&lt;br /&gt;
&lt;br /&gt;
The sign up sheet controller still has many methods relevant to other entities which need to be moved to other relevant models and controllers. save_topic_dependancies and save_topic_deadlines are two methods which can be put into SignUpTopic Model or controller. show_team method which is in sign_up_sheet controller can be moved to teams_controller. We also see another controller called SignUp controller which looks like a redundant one which has methods mostly from SignUpSheet controller. And these methods don't seem to be used. So this method can be looked into carefully and discarded if possible. There is also a function called slotAvailable? in the sign up sheet controller which merely makes a call to a method slotAvailable? in the SignUpTopic model and does nothing else. This looks like an unnecesary redirection. Dependencies can be resolved and this method can be removed and calls can directly be made to the slotAvailable? method in the SignUpTopic model. Also the method update_waitlisted_users can be moved from SignUpTopic model to Wailist Model to improve the readability of the code.&lt;/div&gt;</summary>
		<author><name>Sayenga</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_ssp&amp;diff=81017</id>
		<title>CSC/ECE 517 Fall 2013/oss ssp</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_ssp&amp;diff=81017"/>
		<updated>2013-10-30T18:34:43Z</updated>

		<summary type="html">&lt;p&gt;Sayenga: /* Modified Design */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''OSS E803 Refactoring and testing — signup_sheet model''' ==&lt;br /&gt;
&lt;br /&gt;
=== '''Motivation''' ===&lt;br /&gt;
&lt;br /&gt;
The motivation of this project was to provide functionality to manage Sign Up Sheets. The intent was to improve the design of the project by modularizing the code and maintaining good naming conventions. The methods relevant to wait-listing a team were all a part of the Sign Up sheet model and controller. in order to improve the readability of the code and to have a better organization, we intended to move these methods to a separate Waitlist Model. Also, some methods had too many functionalities, a lot more than what their names suggested. To have a more elegant code, the functionalities had to be moved to relevant methods. cancel_all_waitlists and waitlist_teams methods were created in the waitlist model for this purpose. Naming conventions are considered very important for making the code more readable and understandable. Ruby is known for its 'Convention over Configuration' ideology. Thus the naming conventions had to be taken care of. In the Sign Up sheet controller, we could see the usage of Camel cases in a lot of places. We intended to replace these by the convention of Ruby where underscore is used between two words in variable names with all the alphabets in small letters.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Design'''===&lt;br /&gt;
===='''Initial Design'''====&lt;br /&gt;
*Initially the sign_up_sheet_controller had huge methods with no comments and multiple variable decalarations.&lt;br /&gt;
*The other major drawback with the initial design was there were redundant methods in sign_up_sheet_controller and sign_up_controller.&lt;br /&gt;
&lt;br /&gt;
===='''Modified Design'''====&lt;br /&gt;
The refactoring required us to modularize and push some of the functionalities in sign_up_sheet_controller.rb to sign_up_topic.rb (model) and waitlist.rb ( model).&lt;br /&gt;
This demanded to make calls from remove_team and reassign_topic from sign_up_topic model to signup_topics method in  sign_up_sheet_controller. Similarly the controller also used methods waitlist_teams and cancel_all_waitlists from the waitlist model.&lt;br /&gt;
&lt;br /&gt;
*'''Refactoring the sign_up_sheet_controller for modularity and flexibility:'''&lt;br /&gt;
#By defining functions in the desired class and making only calls to the specific controller, we have implemented a '''Collaborative design''' based on CRC modelling: &lt;br /&gt;
##finding classes/ models - sign_up_topic.rb and waitlist.rb&lt;br /&gt;
##finding responsibilities - remove_team, reassign_topic in sign_up_topic.rb, cancel-all_waitlists, waitlist_teams in waitlist.rb&lt;br /&gt;
##defining the collaborators - confirm_topic, delete_signup_topic, signup_topics in sign_up_sheet_controller.rb&lt;br /&gt;
#This has also made it more flexible for the developers as a change in the db or table design can be easily tracked. &lt;br /&gt;
##Easily implemented in the respective models and by passing the correct type/number parameters in the controllers.  &lt;br /&gt;
##Reduces overhead of rewriting methods and keeping track of the method calls.&lt;br /&gt;
&lt;br /&gt;
*'''Adding a waitlist model:'''&lt;br /&gt;
#The newly formed waitlist model follows the '''Singleton pattern''' as it is an independent class and also the waitlist for a topic is a single queue or list on which multiple teams and individuals wait on.&lt;br /&gt;
#The methods defined in waitlist model are singleton methods and thus are defined as class methods with the keyword &amp;quot;self&amp;quot; prepended to them.&lt;br /&gt;
&lt;br /&gt;
*'''Removing Redundancy from sign_up_controller'''&lt;br /&gt;
*The methods such as sign_up were redundantly present in both the controllers. Thus some part of the code which had common functionality were removed and the function calls were also redirected accordingly.&lt;br /&gt;
&lt;br /&gt;
=== '''Issues'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Procedure'''===&lt;br /&gt;
&lt;br /&gt;
====A brief description====&lt;br /&gt;
&lt;br /&gt;
Our OSS project required us to do refactoring and testing of the part of Expertiza that deals with signup mainly sign_up_sheet controller. This controller manages functionalities of signup sheet for assignment. We have moved a few methods from controller to a more suitable model in order to attain the “thin controller, fat model” implementation. A major part includes the actions related to waitlist. We have put methods from sign_up_sheet controller to the waitlist model (which was earlier empty, so we created a waitlist model by adding functionalities to it)&lt;br /&gt;
A brief description of the refactoring that we have done is given below&lt;br /&gt;
&lt;br /&gt;
=====Add teams to waiting list=====&lt;br /&gt;
We have moved the functionality that adds teams to waiting list when the topic is unavailable. We have moved this functionality from confirm_topic in sign_up_sheet controller to waitlist_teams method that we have created in waitlist controller.&lt;br /&gt;
&lt;br /&gt;
[[File:confirm_topic_new.png]]&lt;br /&gt;
&lt;br /&gt;
This shows the method confirm_topic in sign_up_sheet controller that contains call to waitlist_teams method in waitlist controller. &lt;br /&gt;
&lt;br /&gt;
[[File:waitlist_teams_new.png]]&lt;br /&gt;
&lt;br /&gt;
This method has definition for waitlist_teams and is defined in waitlist model.&lt;br /&gt;
&lt;br /&gt;
=====Cancel waitlist=====&lt;br /&gt;
We have moved the functionality that removes a team from the waiting list, from sign_up_topic model to waitlist model. The method name is cancel_all_waitlist.&lt;br /&gt;
&lt;br /&gt;
[[File:cancel_all_waitlists_new.png]]&lt;br /&gt;
&lt;br /&gt;
=====Reassign a topic=====&lt;br /&gt;
We have moved the functionality that reassigns a topic to another team when a team holding that particular topic cancels its reservation. We have moved this functionality from delete_signup_for_topic in sign_up_sheet controller to a method named reassign_topic that we have created in sign_up_topic model. &lt;br /&gt;
&lt;br /&gt;
[[File:for_reassign_topic_new.png]]&lt;br /&gt;
&lt;br /&gt;
This shows the method delete_signup_for_topic in sign_up_sheet controller that contains call to reassign_topic method in sign_up_topic model.&lt;br /&gt;
&lt;br /&gt;
[[File:reassign_topic_new.png]]&lt;br /&gt;
&lt;br /&gt;
This method has definition for reassign_topic and is defined in sign_up_topic model.&lt;br /&gt;
&lt;br /&gt;
=====Remove team from topic=====&lt;br /&gt;
We have moved the functionality that removes a team from a topic when all of the team’s members have left the team. We have moved this functionality from signup_topics in sign_up_sheet controller to a method named remove_team that we have created in sign_up_topic model. &lt;br /&gt;
&lt;br /&gt;
[[File:signup_topics_new.png]]&lt;br /&gt;
&lt;br /&gt;
This shows the method signup_topics in sign_up_sheet controller that contains call to remove_team method in sign_up_topic model.&lt;br /&gt;
&lt;br /&gt;
[[File:remove_team_new.png]]&lt;br /&gt;
&lt;br /&gt;
This method has definition for remove_team and is defined in sign_up_topic model.&lt;br /&gt;
Rest, we have done renaming at a few places in sign_up_sheet controller.&lt;br /&gt;
&lt;br /&gt;
====Snapshots====&lt;br /&gt;
Here, we have a few snapshots that would guide one to walk-through our work and the areas wherein we did refactoring.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Login_admin_new.png]]&lt;br /&gt;
&lt;br /&gt;
Login as an admin.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:manage_courses_new.png]]&lt;br /&gt;
&lt;br /&gt;
Go to manage-&amp;gt;courses&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:create_assignment_new.png]]&lt;br /&gt;
&lt;br /&gt;
Create an assignment by filling in the required fields and selecting the checkboxes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:create_users_new.png]]&lt;br /&gt;
&lt;br /&gt;
Create users by filling in the required fields.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:add_participants_admin_new.png]]&lt;br /&gt;
&lt;br /&gt;
Again go to Manage courses and as shown in the snapshot above, one can see actions associated with an assignment. Click on add participants.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:add_participants2_admin.png]]&lt;br /&gt;
&lt;br /&gt;
Add a user to an assignment as a participant.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:participant_added.png]]&lt;br /&gt;
&lt;br /&gt;
The participant is added.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:add_signupsheet.png]]&lt;br /&gt;
&lt;br /&gt;
Also, through manage-&amp;gt; courses, add signup sheet to an assignment in a similar manner as adding participants.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:add_topic.png]]&lt;br /&gt;
&lt;br /&gt;
When a signup sheet is created, add new topics to it in the similar manner&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:topic_created.png]]&lt;br /&gt;
&lt;br /&gt;
Topic is successfully created. Logout of admin system&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:login.png]] &lt;br /&gt;
&lt;br /&gt;
Now login as an user.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:top.png]]&lt;br /&gt;
&lt;br /&gt;
Go to the assignments on top&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:select_one_assignment.png]]&lt;br /&gt;
&lt;br /&gt;
Select one assignment from the list of assignments.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:click_signup_sheet.png]]&lt;br /&gt;
&lt;br /&gt;
Select signup sheet&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:can_view_signup_sheet.png]]&lt;br /&gt;
&lt;br /&gt;
One can view signup sheet and signup for the topic&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:signing_up.png]]&lt;br /&gt;
&lt;br /&gt;
After signing up, here for example for topic 1234, the user has the topic and the no. of available slot shows 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:shows_waiting.png]]&lt;br /&gt;
&lt;br /&gt;
Now, if another user tries to sign up for the same topic, he is put on waitlist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This is a brief illustration of the changes we have made as a part of our project.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Future Work'''===&lt;br /&gt;
&lt;br /&gt;
The sign up sheet controller still has many methods relevant to other entities which need to be moved to other relevant models and controllers. save_topic_dependancies and save_topic_deadlines are two methods which can be put into SignUpTopic Model or controller. show_team method which is in sign_up_sheet controller can be moved to teams_controller. We also see another controller called SignUp controller which looks like a redundant one which has methods mostly from SignUpSheet controller. And these methods don't seem to be used. So this method can be looked into carefully and discarded if possible. There is also a function called slotAvailable? in the sign up sheet controller which merely makes a call to a method slotAvailable? in the SignUpTopic model and does nothing else. This looks like an unnecesary redirection. Dependencies can be resolved and this method can be removed and calls can directly be made to the slotAvailable? method in the SignUpTopic model. Also the method update_waitlisted_users can be moved from SignUpTopic model to Wailist Model to improve the readability of the code.&lt;/div&gt;</summary>
		<author><name>Sayenga</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_ssp&amp;diff=81015</id>
		<title>CSC/ECE 517 Fall 2013/oss ssp</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_ssp&amp;diff=81015"/>
		<updated>2013-10-30T18:34:29Z</updated>

		<summary type="html">&lt;p&gt;Sayenga: /* Modified Design */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''OSS E803 Refactoring and testing — signup_sheet model''' ==&lt;br /&gt;
&lt;br /&gt;
=== '''Motivation''' ===&lt;br /&gt;
&lt;br /&gt;
The motivation of this project was to provide functionality to manage Sign Up Sheets. The intent was to improve the design of the project by modularizing the code and maintaining good naming conventions. The methods relevant to wait-listing a team were all a part of the Sign Up sheet model and controller. in order to improve the readability of the code and to have a better organization, we intended to move these methods to a separate Waitlist Model. Also, some methods had too many functionalities, a lot more than what their names suggested. To have a more elegant code, the functionalities had to be moved to relevant methods. cancel_all_waitlists and waitlist_teams methods were created in the waitlist model for this purpose. Naming conventions are considered very important for making the code more readable and understandable. Ruby is known for its 'Convention over Configuration' ideology. Thus the naming conventions had to be taken care of. In the Sign Up sheet controller, we could see the usage of Camel cases in a lot of places. We intended to replace these by the convention of Ruby where underscore is used between two words in variable names with all the alphabets in small letters.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Design'''===&lt;br /&gt;
===='''Initial Design'''====&lt;br /&gt;
*Initially the sign_up_sheet_controller had huge methods with no comments and multiple variable decalarations.&lt;br /&gt;
*The other major drawback with the initial design was there were redundant methods in sign_up_sheet_controller and sign_up_controller.&lt;br /&gt;
&lt;br /&gt;
===='''Modified Design'''====&lt;br /&gt;
The refactoring required us to modularize and push some of the functionalities in sign_up_sheet_controller.rb to sign_up_topic.rb (model) and waitlist.rb ( model).&lt;br /&gt;
This demanded to make calls from remove_team and reassign_topic from sign_up_topic model to signup_topics method in  sign_up_sheet_controller. Similarly the controller also used methods waitlist_teams and cancel_all_waitlists from the waitlist model.&lt;br /&gt;
&lt;br /&gt;
*'''Refactoring the sign_up_sheet_controller for modularity and flexibility:'''&lt;br /&gt;
#By defining functions in the desired class and making only calls to the specific controller, we have implemented a '''Collaborative design''' based on CRC modelling: &lt;br /&gt;
##finding classes/ models - sign_up_topic.rb and waitlist.rb&lt;br /&gt;
##finding responsibilities - remove_team, reassign_topic in sign_up_topic.rb, cancel-all_waitlists, waitlist_teams in waitlist.rb&lt;br /&gt;
##defining the collaborators - confirm_topic, delete_signup_topic, signup_topics in sign_up_sheet_controller.rb&lt;br /&gt;
#This has also made it more flexible for the developers as a change in the db or table design can be easily tracked. &lt;br /&gt;
##Easily implemented in the respective models and by passing the correct type/number parameters in the controllers.  &lt;br /&gt;
##Reduces overhead of rewriting methods and keeping track of the method calls.&lt;br /&gt;
&lt;br /&gt;
*'''Adding a waitlist model:'''&lt;br /&gt;
#The newly formed waitlist model follows the '''Singleton pattern''' as it is an independent class and also the waitlist for a topic is a single queue or list on which multiple teams and individuals wait on.&lt;br /&gt;
#The methods defined in waitlist model are singleton methods and thus are defined as class methods with the keyword &amp;quot;self&amp;quot; prepended to them.&lt;br /&gt;
&lt;br /&gt;
*'''Removing Redundancy from sign_up_controller'''*&lt;br /&gt;
*The methods such as sign_up were redundantly present in both the controllers. Thus some part of the code which had common functionality were removed and the function calls were also redirected accordingly.&lt;br /&gt;
&lt;br /&gt;
=== '''Issues'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Procedure'''===&lt;br /&gt;
&lt;br /&gt;
====A brief description====&lt;br /&gt;
&lt;br /&gt;
Our OSS project required us to do refactoring and testing of the part of Expertiza that deals with signup mainly sign_up_sheet controller. This controller manages functionalities of signup sheet for assignment. We have moved a few methods from controller to a more suitable model in order to attain the “thin controller, fat model” implementation. A major part includes the actions related to waitlist. We have put methods from sign_up_sheet controller to the waitlist model (which was earlier empty, so we created a waitlist model by adding functionalities to it)&lt;br /&gt;
A brief description of the refactoring that we have done is given below&lt;br /&gt;
&lt;br /&gt;
=====Add teams to waiting list=====&lt;br /&gt;
We have moved the functionality that adds teams to waiting list when the topic is unavailable. We have moved this functionality from confirm_topic in sign_up_sheet controller to waitlist_teams method that we have created in waitlist controller.&lt;br /&gt;
&lt;br /&gt;
[[File:confirm_topic_new.png]]&lt;br /&gt;
&lt;br /&gt;
This shows the method confirm_topic in sign_up_sheet controller that contains call to waitlist_teams method in waitlist controller. &lt;br /&gt;
&lt;br /&gt;
[[File:waitlist_teams_new.png]]&lt;br /&gt;
&lt;br /&gt;
This method has definition for waitlist_teams and is defined in waitlist model.&lt;br /&gt;
&lt;br /&gt;
=====Cancel waitlist=====&lt;br /&gt;
We have moved the functionality that removes a team from the waiting list, from sign_up_topic model to waitlist model. The method name is cancel_all_waitlist.&lt;br /&gt;
&lt;br /&gt;
[[File:cancel_all_waitlists_new.png]]&lt;br /&gt;
&lt;br /&gt;
=====Reassign a topic=====&lt;br /&gt;
We have moved the functionality that reassigns a topic to another team when a team holding that particular topic cancels its reservation. We have moved this functionality from delete_signup_for_topic in sign_up_sheet controller to a method named reassign_topic that we have created in sign_up_topic model. &lt;br /&gt;
&lt;br /&gt;
[[File:for_reassign_topic_new.png]]&lt;br /&gt;
&lt;br /&gt;
This shows the method delete_signup_for_topic in sign_up_sheet controller that contains call to reassign_topic method in sign_up_topic model.&lt;br /&gt;
&lt;br /&gt;
[[File:reassign_topic_new.png]]&lt;br /&gt;
&lt;br /&gt;
This method has definition for reassign_topic and is defined in sign_up_topic model.&lt;br /&gt;
&lt;br /&gt;
=====Remove team from topic=====&lt;br /&gt;
We have moved the functionality that removes a team from a topic when all of the team’s members have left the team. We have moved this functionality from signup_topics in sign_up_sheet controller to a method named remove_team that we have created in sign_up_topic model. &lt;br /&gt;
&lt;br /&gt;
[[File:signup_topics_new.png]]&lt;br /&gt;
&lt;br /&gt;
This shows the method signup_topics in sign_up_sheet controller that contains call to remove_team method in sign_up_topic model.&lt;br /&gt;
&lt;br /&gt;
[[File:remove_team_new.png]]&lt;br /&gt;
&lt;br /&gt;
This method has definition for remove_team and is defined in sign_up_topic model.&lt;br /&gt;
Rest, we have done renaming at a few places in sign_up_sheet controller.&lt;br /&gt;
&lt;br /&gt;
====Snapshots====&lt;br /&gt;
Here, we have a few snapshots that would guide one to walk-through our work and the areas wherein we did refactoring.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Login_admin_new.png]]&lt;br /&gt;
&lt;br /&gt;
Login as an admin.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:manage_courses_new.png]]&lt;br /&gt;
&lt;br /&gt;
Go to manage-&amp;gt;courses&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:create_assignment_new.png]]&lt;br /&gt;
&lt;br /&gt;
Create an assignment by filling in the required fields and selecting the checkboxes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:create_users_new.png]]&lt;br /&gt;
&lt;br /&gt;
Create users by filling in the required fields.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:add_participants_admin_new.png]]&lt;br /&gt;
&lt;br /&gt;
Again go to Manage courses and as shown in the snapshot above, one can see actions associated with an assignment. Click on add participants.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:add_participants2_admin.png]]&lt;br /&gt;
&lt;br /&gt;
Add a user to an assignment as a participant.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:participant_added.png]]&lt;br /&gt;
&lt;br /&gt;
The participant is added.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:add_signupsheet.png]]&lt;br /&gt;
&lt;br /&gt;
Also, through manage-&amp;gt; courses, add signup sheet to an assignment in a similar manner as adding participants.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:add_topic.png]]&lt;br /&gt;
&lt;br /&gt;
When a signup sheet is created, add new topics to it in the similar manner&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:topic_created.png]]&lt;br /&gt;
&lt;br /&gt;
Topic is successfully created. Logout of admin system&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:login.png]] &lt;br /&gt;
&lt;br /&gt;
Now login as an user.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:top.png]]&lt;br /&gt;
&lt;br /&gt;
Go to the assignments on top&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:select_one_assignment.png]]&lt;br /&gt;
&lt;br /&gt;
Select one assignment from the list of assignments.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:click_signup_sheet.png]]&lt;br /&gt;
&lt;br /&gt;
Select signup sheet&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:can_view_signup_sheet.png]]&lt;br /&gt;
&lt;br /&gt;
One can view signup sheet and signup for the topic&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:signing_up.png]]&lt;br /&gt;
&lt;br /&gt;
After signing up, here for example for topic 1234, the user has the topic and the no. of available slot shows 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:shows_waiting.png]]&lt;br /&gt;
&lt;br /&gt;
Now, if another user tries to sign up for the same topic, he is put on waitlist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This is a brief illustration of the changes we have made as a part of our project.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Future Work'''===&lt;br /&gt;
&lt;br /&gt;
The sign up sheet controller still has many methods relevant to other entities which need to be moved to other relevant models and controllers. save_topic_dependancies and save_topic_deadlines are two methods which can be put into SignUpTopic Model or controller. show_team method which is in sign_up_sheet controller can be moved to teams_controller. We also see another controller called SignUp controller which looks like a redundant one which has methods mostly from SignUpSheet controller. And these methods don't seem to be used. So this method can be looked into carefully and discarded if possible. There is also a function called slotAvailable? in the sign up sheet controller which merely makes a call to a method slotAvailable? in the SignUpTopic model and does nothing else. This looks like an unnecesary redirection. Dependencies can be resolved and this method can be removed and calls can directly be made to the slotAvailable? method in the SignUpTopic model. Also the method update_waitlisted_users can be moved from SignUpTopic model to Wailist Model to improve the readability of the code.&lt;/div&gt;</summary>
		<author><name>Sayenga</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_ssp&amp;diff=81013</id>
		<title>CSC/ECE 517 Fall 2013/oss ssp</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_ssp&amp;diff=81013"/>
		<updated>2013-10-30T18:34:14Z</updated>

		<summary type="html">&lt;p&gt;Sayenga: /* Initial Design */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''OSS E803 Refactoring and testing — signup_sheet model''' ==&lt;br /&gt;
&lt;br /&gt;
=== '''Motivation''' ===&lt;br /&gt;
&lt;br /&gt;
The motivation of this project was to provide functionality to manage Sign Up Sheets. The intent was to improve the design of the project by modularizing the code and maintaining good naming conventions. The methods relevant to wait-listing a team were all a part of the Sign Up sheet model and controller. in order to improve the readability of the code and to have a better organization, we intended to move these methods to a separate Waitlist Model. Also, some methods had too many functionalities, a lot more than what their names suggested. To have a more elegant code, the functionalities had to be moved to relevant methods. cancel_all_waitlists and waitlist_teams methods were created in the waitlist model for this purpose. Naming conventions are considered very important for making the code more readable and understandable. Ruby is known for its 'Convention over Configuration' ideology. Thus the naming conventions had to be taken care of. In the Sign Up sheet controller, we could see the usage of Camel cases in a lot of places. We intended to replace these by the convention of Ruby where underscore is used between two words in variable names with all the alphabets in small letters.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Design'''===&lt;br /&gt;
===='''Initial Design'''====&lt;br /&gt;
*Initially the sign_up_sheet_controller had huge methods with no comments and multiple variable decalarations.&lt;br /&gt;
*The other major drawback with the initial design was there were redundant methods in sign_up_sheet_controller and sign_up_controller.&lt;br /&gt;
&lt;br /&gt;
===='''Modified Design'''====&lt;br /&gt;
The refactoring required us to modularize and push some of the functionalities in sign_up_sheet_controller.rb to sign_up_topic.rb (model) and waitlist.rb ( model).&lt;br /&gt;
This demanded to make calls from remove_team and reassign_topic from sign_up_topic model to signup_topics method in  sign_up_sheet_controller. Similarly the controller also used methods waitlist_teams and cancel_all_waitlists from the waitlist model.&lt;br /&gt;
&lt;br /&gt;
*'''Refactoring the sign_up_sheet_controller for modularity and flexibility:'''&lt;br /&gt;
#By defining functions in the desired class and making only calls to the specific controller, we have implemented a '''Collaborative design''' based on CRC modelling: &lt;br /&gt;
##finding classes/ models - sign_up_topic.rb and waitlist.rb&lt;br /&gt;
##finding responsibilities - remove_team, reassign_topic in sign_up_topic.rb, cancel-all_waitlists, waitlist_teams in waitlist.rb&lt;br /&gt;
##defining the collaborators - confirm_topic, delete_signup_topic, signup_topics in sign_up_sheet_controller.rb&lt;br /&gt;
#This has also made it more flexible for the developers as a change in the db or table design can be easily tracked. &lt;br /&gt;
##Easily implemented in the respective models and by passing the correct type/number parameters in the controllers.  &lt;br /&gt;
##Reduces overhead of rewriting methods and keeping track of the method calls.&lt;br /&gt;
&lt;br /&gt;
*'''Adding a waitlist model:'''&lt;br /&gt;
#The newly formed waitlist model follows the '''Singleton pattern''' as it is an independent class and also the waitlist for a topic is a single queue or list on which multiple teams and individuals wait on.&lt;br /&gt;
#The methods defined in waitlist model are singleton methods and thus are defined as class methods with the keyword &amp;quot;self&amp;quot; prepended to them.&lt;br /&gt;
&lt;br /&gt;
*'''Removing Redundancy from sign_up_controller'''*&lt;br /&gt;
* The methods such as sign_up were redundantly present in both the controllers. Thus some part of the code which had common functionality were removed and the function calls were also redirected accordingly.&lt;br /&gt;
&lt;br /&gt;
=== '''Issues'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Procedure'''===&lt;br /&gt;
&lt;br /&gt;
====A brief description====&lt;br /&gt;
&lt;br /&gt;
Our OSS project required us to do refactoring and testing of the part of Expertiza that deals with signup mainly sign_up_sheet controller. This controller manages functionalities of signup sheet for assignment. We have moved a few methods from controller to a more suitable model in order to attain the “thin controller, fat model” implementation. A major part includes the actions related to waitlist. We have put methods from sign_up_sheet controller to the waitlist model (which was earlier empty, so we created a waitlist model by adding functionalities to it)&lt;br /&gt;
A brief description of the refactoring that we have done is given below&lt;br /&gt;
&lt;br /&gt;
=====Add teams to waiting list=====&lt;br /&gt;
We have moved the functionality that adds teams to waiting list when the topic is unavailable. We have moved this functionality from confirm_topic in sign_up_sheet controller to waitlist_teams method that we have created in waitlist controller.&lt;br /&gt;
&lt;br /&gt;
[[File:confirm_topic_new.png]]&lt;br /&gt;
&lt;br /&gt;
This shows the method confirm_topic in sign_up_sheet controller that contains call to waitlist_teams method in waitlist controller. &lt;br /&gt;
&lt;br /&gt;
[[File:waitlist_teams_new.png]]&lt;br /&gt;
&lt;br /&gt;
This method has definition for waitlist_teams and is defined in waitlist model.&lt;br /&gt;
&lt;br /&gt;
=====Cancel waitlist=====&lt;br /&gt;
We have moved the functionality that removes a team from the waiting list, from sign_up_topic model to waitlist model. The method name is cancel_all_waitlist.&lt;br /&gt;
&lt;br /&gt;
[[File:cancel_all_waitlists_new.png]]&lt;br /&gt;
&lt;br /&gt;
=====Reassign a topic=====&lt;br /&gt;
We have moved the functionality that reassigns a topic to another team when a team holding that particular topic cancels its reservation. We have moved this functionality from delete_signup_for_topic in sign_up_sheet controller to a method named reassign_topic that we have created in sign_up_topic model. &lt;br /&gt;
&lt;br /&gt;
[[File:for_reassign_topic_new.png]]&lt;br /&gt;
&lt;br /&gt;
This shows the method delete_signup_for_topic in sign_up_sheet controller that contains call to reassign_topic method in sign_up_topic model.&lt;br /&gt;
&lt;br /&gt;
[[File:reassign_topic_new.png]]&lt;br /&gt;
&lt;br /&gt;
This method has definition for reassign_topic and is defined in sign_up_topic model.&lt;br /&gt;
&lt;br /&gt;
=====Remove team from topic=====&lt;br /&gt;
We have moved the functionality that removes a team from a topic when all of the team’s members have left the team. We have moved this functionality from signup_topics in sign_up_sheet controller to a method named remove_team that we have created in sign_up_topic model. &lt;br /&gt;
&lt;br /&gt;
[[File:signup_topics_new.png]]&lt;br /&gt;
&lt;br /&gt;
This shows the method signup_topics in sign_up_sheet controller that contains call to remove_team method in sign_up_topic model.&lt;br /&gt;
&lt;br /&gt;
[[File:remove_team_new.png]]&lt;br /&gt;
&lt;br /&gt;
This method has definition for remove_team and is defined in sign_up_topic model.&lt;br /&gt;
Rest, we have done renaming at a few places in sign_up_sheet controller.&lt;br /&gt;
&lt;br /&gt;
====Snapshots====&lt;br /&gt;
Here, we have a few snapshots that would guide one to walk-through our work and the areas wherein we did refactoring.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Login_admin_new.png]]&lt;br /&gt;
&lt;br /&gt;
Login as an admin.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:manage_courses_new.png]]&lt;br /&gt;
&lt;br /&gt;
Go to manage-&amp;gt;courses&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:create_assignment_new.png]]&lt;br /&gt;
&lt;br /&gt;
Create an assignment by filling in the required fields and selecting the checkboxes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:create_users_new.png]]&lt;br /&gt;
&lt;br /&gt;
Create users by filling in the required fields.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:add_participants_admin_new.png]]&lt;br /&gt;
&lt;br /&gt;
Again go to Manage courses and as shown in the snapshot above, one can see actions associated with an assignment. Click on add participants.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:add_participants2_admin.png]]&lt;br /&gt;
&lt;br /&gt;
Add a user to an assignment as a participant.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:participant_added.png]]&lt;br /&gt;
&lt;br /&gt;
The participant is added.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:add_signupsheet.png]]&lt;br /&gt;
&lt;br /&gt;
Also, through manage-&amp;gt; courses, add signup sheet to an assignment in a similar manner as adding participants.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:add_topic.png]]&lt;br /&gt;
&lt;br /&gt;
When a signup sheet is created, add new topics to it in the similar manner&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:topic_created.png]]&lt;br /&gt;
&lt;br /&gt;
Topic is successfully created. Logout of admin system&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:login.png]] &lt;br /&gt;
&lt;br /&gt;
Now login as an user.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:top.png]]&lt;br /&gt;
&lt;br /&gt;
Go to the assignments on top&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:select_one_assignment.png]]&lt;br /&gt;
&lt;br /&gt;
Select one assignment from the list of assignments.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:click_signup_sheet.png]]&lt;br /&gt;
&lt;br /&gt;
Select signup sheet&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:can_view_signup_sheet.png]]&lt;br /&gt;
&lt;br /&gt;
One can view signup sheet and signup for the topic&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:signing_up.png]]&lt;br /&gt;
&lt;br /&gt;
After signing up, here for example for topic 1234, the user has the topic and the no. of available slot shows 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:shows_waiting.png]]&lt;br /&gt;
&lt;br /&gt;
Now, if another user tries to sign up for the same topic, he is put on waitlist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This is a brief illustration of the changes we have made as a part of our project.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Future Work'''===&lt;br /&gt;
&lt;br /&gt;
The sign up sheet controller still has many methods relevant to other entities which need to be moved to other relevant models and controllers. save_topic_dependancies and save_topic_deadlines are two methods which can be put into SignUpTopic Model or controller. show_team method which is in sign_up_sheet controller can be moved to teams_controller. We also see another controller called SignUp controller which looks like a redundant one which has methods mostly from SignUpSheet controller. And these methods don't seem to be used. So this method can be looked into carefully and discarded if possible. There is also a function called slotAvailable? in the sign up sheet controller which merely makes a call to a method slotAvailable? in the SignUpTopic model and does nothing else. This looks like an unnecesary redirection. Dependencies can be resolved and this method can be removed and calls can directly be made to the slotAvailable? method in the SignUpTopic model. Also the method update_waitlisted_users can be moved from SignUpTopic model to Wailist Model to improve the readability of the code.&lt;/div&gt;</summary>
		<author><name>Sayenga</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_ssp&amp;diff=80999</id>
		<title>CSC/ECE 517 Fall 2013/oss ssp</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_ssp&amp;diff=80999"/>
		<updated>2013-10-30T18:28:32Z</updated>

		<summary type="html">&lt;p&gt;Sayenga: /* Design */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''OSS E803 Refactoring and testing — signup_sheet model''' ==&lt;br /&gt;
&lt;br /&gt;
=== '''Motivation''' ===&lt;br /&gt;
&lt;br /&gt;
The motivation of this project was to provide functionality to manage Sign Up Sheets. The intent was to improve the design of the project by modularizing the code and maintaining good naming conventions. The methods relevant to wait-listing a team were all a part of the Sign Up sheet model and controller. in order to improve the readability of the code and to have a better organization, we intended to move these methods to a separate Waitlist Model. Also, some methods had too many functionalities, a lot more than what their names suggested. To have a more elegant code, the functionalities had to be moved to relevant methods. cancel_all_waitlists and waitlist_teams methods were created in the waitlist model for this purpose. Naming conventions are considered very important for making the code more readable and understandable. Ruby is known for its 'Convention over Configuration' ideology. Thus the naming conventions had to be taken care of. In the Sign Up sheet controller, we could see the usage of Camel cases in a lot of places. We intended to replace these by the convention of Ruby where underscore is used between two words in variable names with all the alphabets in small letters.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Design'''===&lt;br /&gt;
===='''Initial Design'''====&lt;br /&gt;
The refactoring required us to modularize and push some of the functionalities in sign_up_sheet_controller.rb to sign_up_topic.rb (model) and waitlist.rb ( model).&lt;br /&gt;
This demanded to make calls from remove_team and reassign_topic from sign_up_topic model to signup_topics method in  sign_up_sheet_controller. Similarly the controller also used methods waitlist_teams and cancel_all_waitlists from the waitlist model.&lt;br /&gt;
&lt;br /&gt;
*'''Refactoring the sign_up_sheet_controller for modularity and flexibility:'''&lt;br /&gt;
#By defining functions in the desired class and making only calls to the specific controller, we have implemented a '''Collaborative design''' based on CRC modelling: &lt;br /&gt;
##finding classes/ models - sign_up_topic.rb and waitlist.rb&lt;br /&gt;
##finding responsibilities - remove_team, reassign_topic in sign_up_topic.rb, cancel-all_waitlists, waitlist_teams in waitlist.rb&lt;br /&gt;
##defining the collaborators - confirm_topic, delete_signup_topic, signup_topics in sign_up_sheet_controller.rb&lt;br /&gt;
#This has also made it more flexible for the developers as a change in the db or table design can be easily tracked. &lt;br /&gt;
##Easily implemented in the respective models and by passing the correct type/number parameters in the controllers.  &lt;br /&gt;
##Reduces overhead of rewriting methods and keeping track of the method calls.&lt;br /&gt;
&lt;br /&gt;
*'''Adding a waitlist model:'''&lt;br /&gt;
#The newly formed waitlist model follows the '''Singleton pattern''' as it is an independent class and also the waitlist for a topic is a single queue or list on which multiple teams and individuals wait on.&lt;br /&gt;
#The methods defined in waitlist model are singleton methods and thus are defined as class methods with the keyword &amp;quot;self&amp;quot; prepended to them.&lt;br /&gt;
&lt;br /&gt;
=== '''Issues'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Procedure'''===&lt;br /&gt;
&lt;br /&gt;
====A brief description====&lt;br /&gt;
&lt;br /&gt;
Our OSS project required us to do refactoring and testing of the part of Expertiza that deals with signup mainly sign_up_sheet controller. This controller manages functionalities of signup sheet for assignment. We have moved a few methods from controller to a more suitable model in order to attain the “thin controller, fat model” implementation. A major part includes the actions related to waitlist. We have put methods from sign_up_sheet controller to the waitlist model (which was earlier empty, so we created a waitlist model by adding functionalities to it)&lt;br /&gt;
A brief description of the refactoring that we have done is given below&lt;br /&gt;
&lt;br /&gt;
=====Add teams to waiting list=====&lt;br /&gt;
We have moved the functionality that adds teams to waiting list when the topic is unavailable. We have moved this functionality from confirm_topic in sign_up_sheet controller to waitlist_teams method that we have created in waitlist controller.&lt;br /&gt;
&lt;br /&gt;
[[File:confirm_topic_new.png]]&lt;br /&gt;
&lt;br /&gt;
This shows the method confirm_topic in sign_up_sheet controller that contains call to waitlist_teams method in waitlist controller. &lt;br /&gt;
&lt;br /&gt;
[[File:waitlist_teams_new.png]]&lt;br /&gt;
&lt;br /&gt;
This method has definition for waitlist_teams and is defined in waitlist model.&lt;br /&gt;
&lt;br /&gt;
=====Cancel waitlist=====&lt;br /&gt;
We have moved the functionality that removes a team from the waiting list, from sign_up_topic model to waitlist model. The method name is cancel_all_waitlist.&lt;br /&gt;
&lt;br /&gt;
[[File:cancel_all_waitlists_new.png]]&lt;br /&gt;
&lt;br /&gt;
=====Reassign a topic=====&lt;br /&gt;
We have moved the functionality that reassigns a topic to another team when a team holding that particular topic cancels its reservation. We have moved this functionality from delete_signup_for_topic in sign_up_sheet controller to a method named reassign_topic that we have created in sign_up_topic model. &lt;br /&gt;
&lt;br /&gt;
[[File:for_reassign_topic_new.png]]&lt;br /&gt;
&lt;br /&gt;
This shows the method delete_signup_for_topic in sign_up_sheet controller that contains call to reassign_topic method in sign_up_topic model.&lt;br /&gt;
&lt;br /&gt;
[[File:reassign_topic_new.png]]&lt;br /&gt;
&lt;br /&gt;
This method has definition for reassign_topic and is defined in sign_up_topic model.&lt;br /&gt;
&lt;br /&gt;
=====Remove team from topic=====&lt;br /&gt;
We have moved the functionality that removes a team from a topic when all of the team’s members have left the team. We have moved this functionality from signup_topics in sign_up_sheet controller to a method named remove_team that we have created in sign_up_topic model. &lt;br /&gt;
&lt;br /&gt;
[[File:signup_topics_new.png]]&lt;br /&gt;
&lt;br /&gt;
This shows the method signup_topics in sign_up_sheet controller that contains call to remove_team method in sign_up_topic model.&lt;br /&gt;
&lt;br /&gt;
[[File:remove_team_new.png]]&lt;br /&gt;
&lt;br /&gt;
This method has definition for remove_team and is defined in sign_up_topic model.&lt;br /&gt;
Rest, we have done renaming at a few places in sign_up_sheet controller.&lt;br /&gt;
&lt;br /&gt;
====Snapshots====&lt;br /&gt;
Here, we have a few snapshots that would guide one to walk-through our work and the areas wherein we did refactoring.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Login_admin_new.png]]&lt;br /&gt;
&lt;br /&gt;
Login as an admin.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:manage_courses_new.png]]&lt;br /&gt;
&lt;br /&gt;
Go to manage-&amp;gt;courses&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:create_assignment_new.png]]&lt;br /&gt;
&lt;br /&gt;
Create an assignment by filling in the required fields and selecting the checkboxes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:create_users_new.png]]&lt;br /&gt;
&lt;br /&gt;
Create users by filling in the required fields.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:add_participants_admin_new.png]]&lt;br /&gt;
&lt;br /&gt;
Again go to Manage courses and as shown in the snapshot above, one can see actions associated with an assignment. Click on add participants.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:add_participants2_admin.png]]&lt;br /&gt;
&lt;br /&gt;
Add a user to an assignment as a participant.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:participant_added.png]]&lt;br /&gt;
&lt;br /&gt;
The participant is added.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:add_signupsheet.png]]&lt;br /&gt;
&lt;br /&gt;
Also, through manage-&amp;gt; courses, add signup sheet to an assignment in a similar manner as adding participants.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:add_topic.png]]&lt;br /&gt;
&lt;br /&gt;
When a signup sheet is created, add new topics to it in the similar manner&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:topic_created.png]]&lt;br /&gt;
&lt;br /&gt;
Topic is successfully created. Logout of admin system&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:login.png]] &lt;br /&gt;
&lt;br /&gt;
Now login as an user.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:top.png]]&lt;br /&gt;
&lt;br /&gt;
Go to the assignments on top&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:select_one_assignment.png]]&lt;br /&gt;
&lt;br /&gt;
Select one assignment from the list of assignments.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:click_signup_sheet.png]]&lt;br /&gt;
&lt;br /&gt;
Select signup sheet&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:can_view_signup_sheet.png]]&lt;br /&gt;
&lt;br /&gt;
One can view signup sheet and signup for the topic&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:signing_up.png]]&lt;br /&gt;
&lt;br /&gt;
After signing up, here for example for topic 1234, the user has the topic and the no. of available slot shows 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:shows_waiting.png]]&lt;br /&gt;
&lt;br /&gt;
Now, if another user tries to sign up for the same topic, he is put on waitlist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This is a brief illustration of the changes we have made as a part of our project.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Future Work'''===&lt;br /&gt;
&lt;br /&gt;
The sign up sheet controller still has many methods relevant to other entities which need to be moved to other relevant models and controllers. save_topic_dependancies and save_topic_deadlines are two methods which can be put into SignUpTopic Model or controller. show_team method which is in sign_up_sheet controller can be moved to teams_controller. We also see another controller called SignUp controller which looks like a redundant one which has methods mostly from SignUpSheet controller. And these methods don't seem to be used. So this method can be looked into carefully and discarded if possible. There is also a function called slotAvailable? in the sign up sheet controller which merely makes a call to a method slotAvailable? in the SignUpTopic model and does nothing else. This looks like an unnecesary redirection. Dependencies can be resolved and this method can be removed and calls can directly be made to the slotAvailable? method in the SignUpTopic model. Also the method update_waitlisted_users can be moved from SignUpTopic model to Wailist Model to improve the readability of the code.&lt;/div&gt;</summary>
		<author><name>Sayenga</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_ssp&amp;diff=80990</id>
		<title>CSC/ECE 517 Fall 2013/oss ssp</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_ssp&amp;diff=80990"/>
		<updated>2013-10-30T18:25:14Z</updated>

		<summary type="html">&lt;p&gt;Sayenga: /* Design */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''OSS E803 Refactoring and testing — signup_sheet model''' ==&lt;br /&gt;
&lt;br /&gt;
=== '''Motivation''' ===&lt;br /&gt;
&lt;br /&gt;
The motivation of this project was to provide functionality to manage Sign Up Sheets. The intent was to improve the design of the project by modularizing the code and maintaining good naming conventions. The methods relevant to wait-listing a team were all a part of the Sign Up sheet model and controller. in order to improve the readability of the code and to have a better organization, we intended to move these methods to a separate Waitlist Model. Also, some methods had too many functionalities, a lot more than what their names suggested. To have a more elegant code, the functionalities had to be moved to relevant methods. cancel_all_waitlists and waitlist_teams methods were created in the waitlist model for this purpose. Naming conventions are considered very important for making the code more readable and understandable. Ruby is known for its 'Convention over Configuration' ideology. Thus the naming conventions had to be taken care of. In the Sign Up sheet controller, we could see the usage of Camel cases in a lot of places. We intended to replace these by the convention of Ruby where underscore is used between two words in variable names with all the alphabets in small letters.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Design'''===&lt;br /&gt;
&lt;br /&gt;
The refactoring required us to modularize and push some of the functionalities in sign_up_sheet_controller.rb to sign_up_topic.rb (model) and waitlist.rb ( model).&lt;br /&gt;
This demanded to make calls from remove_team and reassign_topic from sign_up_topic model to signup_topics method in  sign_up_sheet_controller. Similarly the controller also used methods waitlist_teams and cancel_all_waitlists from the waitlist model.&lt;br /&gt;
&lt;br /&gt;
*'''Refactoring the sign_up_sheet_controller for modularity and flexibility:'''&lt;br /&gt;
#By defining functions in the desired class and making only calls to the specific controller, we have implemented a '''Collaborative design''' based on CRC modelling: &lt;br /&gt;
##finding classes/ models - sign_up_topic.rb and waitlist.rb&lt;br /&gt;
##finding responsibilities - remove_team, reassign_topic in sign_up_topic.rb, cancel-all_waitlists, waitlist_teams in waitlist.rb&lt;br /&gt;
##defining the collaborators - confirm_topic, delete_signup_topic, signup_topics in sign_up_sheet_controller.rb&lt;br /&gt;
#This has also made it more flexible for the developers as a change in the db or table design can be easily tracked. &lt;br /&gt;
##Easily implemented in the respective models and by passing the correct type/number parameters in the controllers.  &lt;br /&gt;
##Reduces overhead of rewriting methods and keeping track of the method calls.&lt;br /&gt;
&lt;br /&gt;
*'''Adding a waitlist model:'''&lt;br /&gt;
#The newly formed waitlist model follows the '''Singleton pattern''' as it is an independent class and also the waitlist for a topic is a single queue or list on which multiple teams and individuals wait on.&lt;br /&gt;
#The methods defined in waitlist model are singleton methods and thus are defined as class methods with the keyword &amp;quot;self&amp;quot; prepended to them.&lt;br /&gt;
&lt;br /&gt;
=== '''Issues'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Procedure'''===&lt;br /&gt;
&lt;br /&gt;
====A brief description====&lt;br /&gt;
&lt;br /&gt;
Our OSS project required us to do refactoring and testing of the part of Expertiza that deals with signup mainly sign_up_sheet controller. This controller manages functionalities of signup sheet for assignment. We have moved a few methods from controller to a more suitable model in order to attain the “thin controller, fat model” implementation. A major part includes the actions related to waitlist. We have put methods from sign_up_sheet controller to the waitlist model (which was earlier empty, so we created a waitlist model by adding functionalities to it)&lt;br /&gt;
A brief description of the refactoring that we have done is given below&lt;br /&gt;
&lt;br /&gt;
=====Add teams to waiting list=====&lt;br /&gt;
We have moved the functionality that adds teams to waiting list when the topic is unavailable. We have moved this functionality from confirm_topic in sign_up_sheet controller to waitlist_teams method that we have created in waitlist controller.&lt;br /&gt;
&lt;br /&gt;
[[File:confirm_topic_new.png]]&lt;br /&gt;
&lt;br /&gt;
This shows the method confirm_topic in sign_up_sheet controller that contains call to waitlist_teams method in waitlist controller. &lt;br /&gt;
&lt;br /&gt;
[[File:waitlist_teams_new.png]]&lt;br /&gt;
&lt;br /&gt;
This method has definition for waitlist_teams and is defined in waitlist model.&lt;br /&gt;
&lt;br /&gt;
=====Cancel waitlist=====&lt;br /&gt;
We have moved the functionality that removes a team from the waiting list, from sign_up_topic model to waitlist model. The method name is cancel_all_waitlist.&lt;br /&gt;
&lt;br /&gt;
[[File:cancel_all_waitlists_new.png]]&lt;br /&gt;
&lt;br /&gt;
=====Reassign a topic=====&lt;br /&gt;
We have moved the functionality that reassigns a topic to another team when a team holding that particular topic cancels its reservation. We have moved this functionality from delete_signup_for_topic in sign_up_sheet controller to a method named reassign_topic that we have created in sign_up_topic model. &lt;br /&gt;
&lt;br /&gt;
[[File:for_reassign_topic_new.png]]&lt;br /&gt;
&lt;br /&gt;
This shows the method delete_signup_for_topic in sign_up_sheet controller that contains call to reassign_topic method in sign_up_topic model.&lt;br /&gt;
&lt;br /&gt;
[[File:reassign_topic_new.png]]&lt;br /&gt;
&lt;br /&gt;
This method has definition for reassign_topic and is defined in sign_up_topic model.&lt;br /&gt;
&lt;br /&gt;
=====Remove team from topic=====&lt;br /&gt;
We have moved the functionality that removes a team from a topic when all of the team’s members have left the team. We have moved this functionality from signup_topics in sign_up_sheet controller to a method named remove_team that we have created in sign_up_topic model. &lt;br /&gt;
&lt;br /&gt;
[[File:signup_topics_new.png]]&lt;br /&gt;
&lt;br /&gt;
This shows the method signup_topics in sign_up_sheet controller that contains call to remove_team method in sign_up_topic model.&lt;br /&gt;
&lt;br /&gt;
[[File:remove_team_new.png]]&lt;br /&gt;
&lt;br /&gt;
This method has definition for remove_team and is defined in sign_up_topic model.&lt;br /&gt;
Rest, we have done renaming at a few places in sign_up_sheet controller.&lt;br /&gt;
&lt;br /&gt;
====Snapshots====&lt;br /&gt;
Here, we have a few snapshots that would guide one to walk-through our work and the areas wherein we did refactoring.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Login_admin_new.png]]&lt;br /&gt;
&lt;br /&gt;
Login as an admin.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:manage_courses_new.png]]&lt;br /&gt;
&lt;br /&gt;
Go to manage-&amp;gt;courses&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:create_assignment_new.png]]&lt;br /&gt;
&lt;br /&gt;
Create an assignment by filling in the required fields and selecting the checkboxes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:create_users_new.png]]&lt;br /&gt;
&lt;br /&gt;
Create users by filling in the required fields.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:add_participants_admin_new.png]]&lt;br /&gt;
&lt;br /&gt;
Again go to Manage courses and as shown in the snapshot above, one can see actions associated with an assignment. Click on add participants.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:add_participants2_admin.png]]&lt;br /&gt;
&lt;br /&gt;
Add a user to an assignment as a participant.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:participant_added.png]]&lt;br /&gt;
&lt;br /&gt;
The participant is added.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:add_signupsheet.png]]&lt;br /&gt;
&lt;br /&gt;
Also, through manage-&amp;gt; courses, add signup sheet to an assignment in a similar manner as adding participants.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:add_topic.png]]&lt;br /&gt;
&lt;br /&gt;
When a signup sheet is created, add new topics to it in the similar manner&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:topic_created.png]]&lt;br /&gt;
&lt;br /&gt;
Topic is successfully created. Logout of admin system&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:login.png]] &lt;br /&gt;
&lt;br /&gt;
Now login as an user.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:top.png]]&lt;br /&gt;
&lt;br /&gt;
Go to the assignments on top&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:select_one_assignment.png]]&lt;br /&gt;
&lt;br /&gt;
Select one assignment from the list of assignments.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:click_signup_sheet.png]]&lt;br /&gt;
&lt;br /&gt;
Select signup sheet&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:can_view_signup_sheet.png]]&lt;br /&gt;
&lt;br /&gt;
One can view signup sheet and signup for the topic&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:signing_up.png]]&lt;br /&gt;
&lt;br /&gt;
After signing up, here for example for topic 1234, the user has the topic and the no. of available slot shows 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:shows_waiting.png]]&lt;br /&gt;
&lt;br /&gt;
Now, if another user tries to sign up for the same topic, he is put on waitlist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This is a brief illustration of the changes we have made as a part of our project.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Future Work'''===&lt;br /&gt;
&lt;br /&gt;
The sign up sheet controller still has many methods relevant to other entities which need to be moved to other relevant models and controllers. save_topic_dependancies and save_topic_deadlines are two methods which can be put into SignUpTopic Model or controller. show_team method which is in sign_up_sheet controller can be moved to teams_controller. We also see another controller called SignUp controller which looks like a redundant one which has methods mostly from SignUpSheet controller. And these methods don't seem to be used. So this method can be looked into carefully and discarded if possible. There is also a function called slotAvailable? in the sign up sheet controller which merely makes a call to a method slotAvailable? in the SignUpTopic model and does nothing else. This looks like an unnecesary redirection. Dependencies can be resolved and this method can be removed and calls can directly be made to the slotAvailable? method in the SignUpTopic model. Also the method update_waitlisted_users can be moved from SignUpTopic model to Wailist Model to improve the readability of the code.&lt;/div&gt;</summary>
		<author><name>Sayenga</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_ssp&amp;diff=80981</id>
		<title>CSC/ECE 517 Fall 2013/oss ssp</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_ssp&amp;diff=80981"/>
		<updated>2013-10-30T18:22:55Z</updated>

		<summary type="html">&lt;p&gt;Sayenga: /* Design */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''OSS E803 Refactoring and testing — signup_sheet model''' ==&lt;br /&gt;
&lt;br /&gt;
=== '''Motivation''' ===&lt;br /&gt;
&lt;br /&gt;
The motivation of this project was to provide functionality to manage Sign Up Sheets. The intent was to improve the design of the project by modularizing the code and maintaining good naming conventions. The methods relevant to wait-listing a team were all a part of the Sign Up sheet model and controller. in order to improve the readability of the code and to have a better organization, we intended to move these methods to a separate Waitlist Model. Also, some methods had too many functionalities, a lot more than what their names suggested. To have a more elegant code, the functionalities had to be moved to relevant methods. cancel_all_waitlists and waitlist_teams methods were created in the waitlist model for this purpose. Naming conventions are considered very important for making the code more readable and understandable. Ruby is known for its 'Convention over Configuration' ideology. Thus the naming conventions had to be taken care of. In the Sign Up sheet controller, we could see the usage of Camel cases in a lot of places. We intended to replace these by the convention of Ruby where underscore is used between two words in variable names with all the alphabets in small letters.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Design'''===&lt;br /&gt;
&lt;br /&gt;
The refactoring required us to modularize and push some of the functionalities in sign_up_sheet_controller.rb to sign_up_topic.rb (model) and waitlist.rb ( model).&lt;br /&gt;
This demanded to make calls from remove_team and reassign_topic from sign_up_topic model to signup_topics method in  sign_up_sheet_controller. Similarly the controller also used methods waitlist_teams and cancel_all_waitlists from the waitlist model.&lt;br /&gt;
&lt;br /&gt;
*'''Refactoring the sign_up_sheet_controller for modularity and flexibility:'''&lt;br /&gt;
#By defining functions in the desired class and making only calls to the specific controller, we have implemented a '''Collaborative design''' based on CRC modelling: &lt;br /&gt;
##finding classes/ models - sign_up_topic.rb and waitlist.rb&lt;br /&gt;
##finding responsibilities - remove_team, reassign_topic in sign_up_topic.rb, cancel-all_waitlists, waitlist_teams in waitlist.rb&lt;br /&gt;
##defining the collaborators - confirm_topic, delete_signup_topic, signup_topics in sign_up_sheet_controller.rb&lt;br /&gt;
&lt;br /&gt;
#This has also made it more flexible for the developers as a change in the db or table design can be easily tracked. &lt;br /&gt;
##Easily implemented in the respective models and by passing the correct type/number parameters in the controllers.  &lt;br /&gt;
##Reduces overhead of rewriting methods and keeping track of the method calls.&lt;br /&gt;
&lt;br /&gt;
*'''Adding a waitlist model:'''&lt;br /&gt;
#The newly formed waitlist model follows the '''Singleton pattern''' as it is an independent class and also the waitlist for a topic is a single queue or list on which multiple teams and individuals wait on.&lt;br /&gt;
#The methods defined in waitlist model are singleton methods and thus are defined as class methods with the keyword &amp;quot;self&amp;quot; prepended to them.&lt;br /&gt;
&lt;br /&gt;
=== '''Issues'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Procedure'''===&lt;br /&gt;
&lt;br /&gt;
====A brief description====&lt;br /&gt;
&lt;br /&gt;
Our OSS project required us to do refactoring and testing of the part of Expertiza that deals with signup mainly sign_up_sheet controller. This controller manages functionalities of signup sheet for assignment. We have moved a few methods from controller to a more suitable model in order to attain the “thin controller, fat model” implementation. A major part includes the actions related to waitlist. We have put methods from sign_up_sheet controller to the waitlist model (which was earlier empty, so we created a waitlist model by adding functionalities to it)&lt;br /&gt;
A brief description of the refactoring that we have done is given below&lt;br /&gt;
&lt;br /&gt;
=====Add teams to waiting list=====&lt;br /&gt;
We have moved the functionality that adds teams to waiting list when the topic is unavailable. We have moved this functionality from confirm_topic in sign_up_sheet controller to waitlist_teams method that we have created in waitlist controller.&lt;br /&gt;
&lt;br /&gt;
[[File:confirm_topic_new.png]]&lt;br /&gt;
&lt;br /&gt;
This shows the method confirm_topic in sign_up_sheet controller that contains call to waitlist_teams method in waitlist controller. &lt;br /&gt;
&lt;br /&gt;
[[File:waitlist_teams_new.png]]&lt;br /&gt;
&lt;br /&gt;
This method has definition for waitlist_teams and is defined in waitlist model.&lt;br /&gt;
&lt;br /&gt;
=====Cancel waitlist=====&lt;br /&gt;
We have moved the functionality that removes a team from the waiting list, from sign_up_topic model to waitlist model. The method name is cancel_all_waitlist.&lt;br /&gt;
&lt;br /&gt;
[[File:cancel_all_waitlists_new.png]]&lt;br /&gt;
&lt;br /&gt;
=====Reassign a topic=====&lt;br /&gt;
We have moved the functionality that reassigns a topic to another team when a team holding that particular topic cancels its reservation. We have moved this functionality from delete_signup_for_topic in sign_up_sheet controller to a method named reassign_topic that we have created in sign_up_topic model. &lt;br /&gt;
&lt;br /&gt;
[[File:for_reassign_topic_new.png]]&lt;br /&gt;
&lt;br /&gt;
This shows the method delete_signup_for_topic in sign_up_sheet controller that contains call to reassign_topic method in sign_up_topic model.&lt;br /&gt;
&lt;br /&gt;
[[File:reassign_topic_new.png]]&lt;br /&gt;
&lt;br /&gt;
This method has definition for reassign_topic and is defined in sign_up_topic model.&lt;br /&gt;
&lt;br /&gt;
=====Remove team from topic=====&lt;br /&gt;
We have moved the functionality that removes a team from a topic when all of the team’s members have left the team. We have moved this functionality from signup_topics in sign_up_sheet controller to a method named remove_team that we have created in sign_up_topic model. &lt;br /&gt;
&lt;br /&gt;
[[File:signup_topics_new.png]]&lt;br /&gt;
&lt;br /&gt;
This shows the method signup_topics in sign_up_sheet controller that contains call to remove_team method in sign_up_topic model.&lt;br /&gt;
&lt;br /&gt;
[[File:remove_team_new.png]]&lt;br /&gt;
&lt;br /&gt;
This method has definition for remove_team and is defined in sign_up_topic model.&lt;br /&gt;
Rest, we have done renaming at a few places in sign_up_sheet controller.&lt;br /&gt;
&lt;br /&gt;
====Snapshots====&lt;br /&gt;
Here, we have a few snapshots that would guide one to walk-through our work and the areas wherein we did refactoring.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Login_admin_new.png]]&lt;br /&gt;
&lt;br /&gt;
Login as an admin.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:manage_courses_new.png]]&lt;br /&gt;
&lt;br /&gt;
Go to manage-&amp;gt;courses&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:create_assignment_new.png]]&lt;br /&gt;
&lt;br /&gt;
Create an assignment by filling in the required fields and selecting the checkboxes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:create_users_new.png]]&lt;br /&gt;
&lt;br /&gt;
Create users by filling in the required fields.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:add_participants_admin_new.png]]&lt;br /&gt;
&lt;br /&gt;
Again go to Manage courses and as shown in the snapshot above, one can see actions associated with an assignment. Click on add participants.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:add_participants2_admin.png]]&lt;br /&gt;
&lt;br /&gt;
Add a user to an assignment as a participant.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:participant_added.png]]&lt;br /&gt;
&lt;br /&gt;
The participant is added.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:add_signupsheet.png]]&lt;br /&gt;
&lt;br /&gt;
Also, through manage-&amp;gt; courses, add signup sheet to an assignment in a similar manner as adding participants.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:add_topic.png]]&lt;br /&gt;
&lt;br /&gt;
When a signup sheet is created, add new topics to it in the similar manner&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:topic_created.png]]&lt;br /&gt;
&lt;br /&gt;
Topic is successfully created. Logout of admin system&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:login.png]] &lt;br /&gt;
&lt;br /&gt;
Now login as an user.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:top.png]]&lt;br /&gt;
&lt;br /&gt;
Go to the assignments on top&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:select_one_assignment.png]]&lt;br /&gt;
&lt;br /&gt;
Select one assignment from the list of assignments.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:click_signup_sheet.png]]&lt;br /&gt;
&lt;br /&gt;
Select signup sheet&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:can_view_signup_sheet.png]]&lt;br /&gt;
&lt;br /&gt;
One can view signup sheet and signup for the topic&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:signing_up.png]]&lt;br /&gt;
&lt;br /&gt;
After signing up, here for example for topic 1234, the user has the topic and the no. of available slot shows 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:shows_waiting.png]]&lt;br /&gt;
&lt;br /&gt;
Now, if another user tries to sign up for the same topic, he is put on waitlist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This is a brief illustration of the changes we have made as a part of our project.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Future Work'''===&lt;br /&gt;
&lt;br /&gt;
The sign up sheet controller still has many methods relevant to other entities which need to be moved to other relevant models and controllers. save_topic_dependancies and save_topic_deadlines are two methods which can be put into SignUpTopic Model or controller. show_team method which is in sign_up_sheet controller can be moved to teams_controller. We also see another controller called SignUp controller which looks like a redundant one which has methods mostly from SignUpSheet controller. And these methods don't seem to be used. So this method can be looked into carefully and discarded if possible. There is also a function called slotAvailable? in the sign up sheet controller which merely makes a call to a method slotAvailable? in the SignUpTopic model and does nothing else. This looks like an unnecesary redirection. Dependencies can be resolved and this method can be removed and calls can directly be made to the slotAvailable? method in the SignUpTopic model. Also the method update_waitlisted_users can be moved from SignUpTopic model to Wailist Model to improve the readability of the code.&lt;/div&gt;</summary>
		<author><name>Sayenga</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_ssp&amp;diff=80978</id>
		<title>CSC/ECE 517 Fall 2013/oss ssp</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_ssp&amp;diff=80978"/>
		<updated>2013-10-30T18:22:40Z</updated>

		<summary type="html">&lt;p&gt;Sayenga: /* Design */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''OSS E803 Refactoring and testing — signup_sheet model''' ==&lt;br /&gt;
&lt;br /&gt;
=== '''Motivation''' ===&lt;br /&gt;
&lt;br /&gt;
The motivation of this project was to provide functionality to manage Sign Up Sheets. The intent was to improve the design of the project by modularizing the code and maintaining good naming conventions. The methods relevant to wait-listing a team were all a part of the Sign Up sheet model and controller. in order to improve the readability of the code and to have a better organization, we intended to move these methods to a separate Waitlist Model. Also, some methods had too many functionalities, a lot more than what their names suggested. To have a more elegant code, the functionalities had to be moved to relevant methods. cancel_all_waitlists and waitlist_teams methods were created in the waitlist model for this purpose. Naming conventions are considered very important for making the code more readable and understandable. Ruby is known for its 'Convention over Configuration' ideology. Thus the naming conventions had to be taken care of. In the Sign Up sheet controller, we could see the usage of Camel cases in a lot of places. We intended to replace these by the convention of Ruby where underscore is used between two words in variable names with all the alphabets in small letters.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Design'''===&lt;br /&gt;
&lt;br /&gt;
The refactoring required us to modularize and push some of the functionalities in sign_up_sheet_controller.rb to sign_up_topic.rb (model) and waitlist.rb ( model).&lt;br /&gt;
This demanded to make calls from remove_team and reassign_topic from sign_up_topic model to signup_topics method in  sign_up_sheet_controller. Similarly the controller also used methods waitlist_teams and cancel_all_waitlists from the waitlist model.&lt;br /&gt;
&lt;br /&gt;
*'''Refactoring the sign_up_sheet_controller for modularity and flexibility:'''&lt;br /&gt;
#By defining functions in the desired class and making only calls to the specific controller, we have implemented a '''Collaborative design''' based on CRC modelling: &lt;br /&gt;
##finding classes/ models - sign_up_topic.rb and waitlist.rb&lt;br /&gt;
##finding responsibilities - remove_team, reassign_topic in sign_up_topic.rb, cancel-all_waitlists, waitlist_teams in waitlist.rb&lt;br /&gt;
##defining the collaborators - confirm_topic, delete_signup_topic, signup_topics in sign_up_sheet_controller.rb&lt;br /&gt;
&lt;br /&gt;
#This has also made it more flexible for the developers as a change in the db or table design can be easily tracked. &lt;br /&gt;
##Easily implemented in the respective models and by passing the correct type/number parameters in the controllers.  &lt;br /&gt;
##Reduces overhead of rewriting methods and keeping track of the method calls.&lt;br /&gt;
&lt;br /&gt;
*'''Adding a waitlist model:'''&lt;br /&gt;
#The newly formed waitlist model follows the '''Singleton pattern''' as it is an independent class and also the waitlist for a topic is a single queue or list on which multiple teams and individuals wait on.&lt;br /&gt;
#The methods defined in waitlist model are singleton methods and thus are defined as class methods with the keyword ' self ' prepended to them.&lt;br /&gt;
&lt;br /&gt;
=== '''Issues'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Procedure'''===&lt;br /&gt;
&lt;br /&gt;
====A brief description====&lt;br /&gt;
&lt;br /&gt;
Our OSS project required us to do refactoring and testing of the part of Expertiza that deals with signup mainly sign_up_sheet controller. This controller manages functionalities of signup sheet for assignment. We have moved a few methods from controller to a more suitable model in order to attain the “thin controller, fat model” implementation. A major part includes the actions related to waitlist. We have put methods from sign_up_sheet controller to the waitlist model (which was earlier empty, so we created a waitlist model by adding functionalities to it)&lt;br /&gt;
A brief description of the refactoring that we have done is given below&lt;br /&gt;
&lt;br /&gt;
=====Add teams to waiting list=====&lt;br /&gt;
We have moved the functionality that adds teams to waiting list when the topic is unavailable. We have moved this functionality from confirm_topic in sign_up_sheet controller to waitlist_teams method that we have created in waitlist controller.&lt;br /&gt;
&lt;br /&gt;
[[File:confirm_topic_new.png]]&lt;br /&gt;
&lt;br /&gt;
This shows the method confirm_topic in sign_up_sheet controller that contains call to waitlist_teams method in waitlist controller. &lt;br /&gt;
&lt;br /&gt;
[[File:waitlist_teams_new.png]]&lt;br /&gt;
&lt;br /&gt;
This method has definition for waitlist_teams and is defined in waitlist model.&lt;br /&gt;
&lt;br /&gt;
=====Cancel waitlist=====&lt;br /&gt;
We have moved the functionality that removes a team from the waiting list, from sign_up_topic model to waitlist model. The method name is cancel_all_waitlist.&lt;br /&gt;
&lt;br /&gt;
[[File:cancel_all_waitlists_new.png]]&lt;br /&gt;
&lt;br /&gt;
=====Reassign a topic=====&lt;br /&gt;
We have moved the functionality that reassigns a topic to another team when a team holding that particular topic cancels its reservation. We have moved this functionality from delete_signup_for_topic in sign_up_sheet controller to a method named reassign_topic that we have created in sign_up_topic model. &lt;br /&gt;
&lt;br /&gt;
[[File:for_reassign_topic_new.png]]&lt;br /&gt;
&lt;br /&gt;
This shows the method delete_signup_for_topic in sign_up_sheet controller that contains call to reassign_topic method in sign_up_topic model.&lt;br /&gt;
&lt;br /&gt;
[[File:reassign_topic_new.png]]&lt;br /&gt;
&lt;br /&gt;
This method has definition for reassign_topic and is defined in sign_up_topic model.&lt;br /&gt;
&lt;br /&gt;
=====Remove team from topic=====&lt;br /&gt;
We have moved the functionality that removes a team from a topic when all of the team’s members have left the team. We have moved this functionality from signup_topics in sign_up_sheet controller to a method named remove_team that we have created in sign_up_topic model. &lt;br /&gt;
&lt;br /&gt;
[[File:signup_topics_new.png]]&lt;br /&gt;
&lt;br /&gt;
This shows the method signup_topics in sign_up_sheet controller that contains call to remove_team method in sign_up_topic model.&lt;br /&gt;
&lt;br /&gt;
[[File:remove_team_new.png]]&lt;br /&gt;
&lt;br /&gt;
This method has definition for remove_team and is defined in sign_up_topic model.&lt;br /&gt;
Rest, we have done renaming at a few places in sign_up_sheet controller.&lt;br /&gt;
&lt;br /&gt;
====Snapshots====&lt;br /&gt;
Here, we have a few snapshots that would guide one to walk-through our work and the areas wherein we did refactoring.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Login_admin_new.png]]&lt;br /&gt;
&lt;br /&gt;
Login as an admin.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:manage_courses_new.png]]&lt;br /&gt;
&lt;br /&gt;
Go to manage-&amp;gt;courses&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:create_assignment_new.png]]&lt;br /&gt;
&lt;br /&gt;
Create an assignment by filling in the required fields and selecting the checkboxes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:create_users_new.png]]&lt;br /&gt;
&lt;br /&gt;
Create users by filling in the required fields.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:add_participants_admin_new.png]]&lt;br /&gt;
&lt;br /&gt;
Again go to Manage courses and as shown in the snapshot above, one can see actions associated with an assignment. Click on add participants.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:add_participants2_admin.png]]&lt;br /&gt;
&lt;br /&gt;
Add a user to an assignment as a participant.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:participant_added.png]]&lt;br /&gt;
&lt;br /&gt;
The participant is added.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:add_signupsheet.png]]&lt;br /&gt;
&lt;br /&gt;
Also, through manage-&amp;gt; courses, add signup sheet to an assignment in a similar manner as adding participants.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:add_topic.png]]&lt;br /&gt;
&lt;br /&gt;
When a signup sheet is created, add new topics to it in the similar manner&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:topic_created.png]]&lt;br /&gt;
&lt;br /&gt;
Topic is successfully created. Logout of admin system&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:login.png]] &lt;br /&gt;
&lt;br /&gt;
Now login as an user.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:top.png]]&lt;br /&gt;
&lt;br /&gt;
Go to the assignments on top&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:select_one_assignment.png]]&lt;br /&gt;
&lt;br /&gt;
Select one assignment from the list of assignments.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:click_signup_sheet.png]]&lt;br /&gt;
&lt;br /&gt;
Select signup sheet&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:can_view_signup_sheet.png]]&lt;br /&gt;
&lt;br /&gt;
One can view signup sheet and signup for the topic&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:signing_up.png]]&lt;br /&gt;
&lt;br /&gt;
After signing up, here for example for topic 1234, the user has the topic and the no. of available slot shows 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:shows_waiting.png]]&lt;br /&gt;
&lt;br /&gt;
Now, if another user tries to sign up for the same topic, he is put on waitlist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This is a brief illustration of the changes we have made as a part of our project.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Future Work'''===&lt;br /&gt;
&lt;br /&gt;
The sign up sheet controller still has many methods relevant to other entities which need to be moved to other relevant models and controllers. save_topic_dependancies and save_topic_deadlines are two methods which can be put into SignUpTopic Model or controller. show_team method which is in sign_up_sheet controller can be moved to teams_controller. We also see another controller called SignUp controller which looks like a redundant one which has methods mostly from SignUpSheet controller. And these methods don't seem to be used. So this method can be looked into carefully and discarded if possible. There is also a function called slotAvailable? in the sign up sheet controller which merely makes a call to a method slotAvailable? in the SignUpTopic model and does nothing else. This looks like an unnecesary redirection. Dependencies can be resolved and this method can be removed and calls can directly be made to the slotAvailable? method in the SignUpTopic model. Also the method update_waitlisted_users can be moved from SignUpTopic model to Wailist Model to improve the readability of the code.&lt;/div&gt;</summary>
		<author><name>Sayenga</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_ssp&amp;diff=80977</id>
		<title>CSC/ECE 517 Fall 2013/oss ssp</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_ssp&amp;diff=80977"/>
		<updated>2013-10-30T18:22:23Z</updated>

		<summary type="html">&lt;p&gt;Sayenga: /* Design */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''OSS E803 Refactoring and testing — signup_sheet model''' ==&lt;br /&gt;
&lt;br /&gt;
=== '''Motivation''' ===&lt;br /&gt;
&lt;br /&gt;
The motivation of this project was to provide functionality to manage Sign Up Sheets. The intent was to improve the design of the project by modularizing the code and maintaining good naming conventions. The methods relevant to wait-listing a team were all a part of the Sign Up sheet model and controller. in order to improve the readability of the code and to have a better organization, we intended to move these methods to a separate Waitlist Model. Also, some methods had too many functionalities, a lot more than what their names suggested. To have a more elegant code, the functionalities had to be moved to relevant methods. cancel_all_waitlists and waitlist_teams methods were created in the waitlist model for this purpose. Naming conventions are considered very important for making the code more readable and understandable. Ruby is known for its 'Convention over Configuration' ideology. Thus the naming conventions had to be taken care of. In the Sign Up sheet controller, we could see the usage of Camel cases in a lot of places. We intended to replace these by the convention of Ruby where underscore is used between two words in variable names with all the alphabets in small letters.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Design'''===&lt;br /&gt;
&lt;br /&gt;
The refactoring required us to modularize and push some of the functionalities in sign_up_sheet_controller.rb to sign_up_topic.rb (model) and waitlist.rb ( model).&lt;br /&gt;
This demanded to make calls from remove_team and reassign_topic from sign_up_topic model to signup_topics method in  sign_up_sheet_controller. Similarly the controller also used methods waitlist_teams and cancel_all_waitlists from the waitlist model.&lt;br /&gt;
&lt;br /&gt;
*'''Refactoring the sign_up_sheet_controller for modularity and flexibility:'''&lt;br /&gt;
#By defining functions in the desired class and making only calls to the specific controller, we have implemented a '''Collaborative design''' based on CRC modelling: &lt;br /&gt;
##finding classes/ models - sign_up_topic.rb and waitlist.rb&lt;br /&gt;
##finding responsibilities - remove_team, reassign_topic in sign_up_topic.rb, cancel-all_waitlists, waitlist_teams in waitlist.rb&lt;br /&gt;
##defining the collaborators - confirm_topic, delete_signup_topic, signup_topics in sign_up_sheet_controller.rb&lt;br /&gt;
&lt;br /&gt;
#This has also made it more flexible for the developers as a change in the db or table design can be easily tracked. &lt;br /&gt;
##Easily implemented in the respective models and by passing the correct type/number parameters in the controllers.  &lt;br /&gt;
##Reduces overhead of rewriting methods and keeping track of the method calls.&lt;br /&gt;
&lt;br /&gt;
*'''Adding a waitlist model:'''&lt;br /&gt;
#The newly formed waitlist model follows the '''Singleton pattern''' as it is an independent class and also the waitlist for a topic is a single queue or list on which multiple teams and individuals wait on.&lt;br /&gt;
#The methods defined in waitlist model are singleton methods and thus are defined as class methods with the keyword 'self' prepended to them.&lt;br /&gt;
&lt;br /&gt;
=== '''Issues'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Procedure'''===&lt;br /&gt;
&lt;br /&gt;
====A brief description====&lt;br /&gt;
&lt;br /&gt;
Our OSS project required us to do refactoring and testing of the part of Expertiza that deals with signup mainly sign_up_sheet controller. This controller manages functionalities of signup sheet for assignment. We have moved a few methods from controller to a more suitable model in order to attain the “thin controller, fat model” implementation. A major part includes the actions related to waitlist. We have put methods from sign_up_sheet controller to the waitlist model (which was earlier empty, so we created a waitlist model by adding functionalities to it)&lt;br /&gt;
A brief description of the refactoring that we have done is given below&lt;br /&gt;
&lt;br /&gt;
=====Add teams to waiting list=====&lt;br /&gt;
We have moved the functionality that adds teams to waiting list when the topic is unavailable. We have moved this functionality from confirm_topic in sign_up_sheet controller to waitlist_teams method that we have created in waitlist controller.&lt;br /&gt;
&lt;br /&gt;
[[File:confirm_topic_new.png]]&lt;br /&gt;
&lt;br /&gt;
This shows the method confirm_topic in sign_up_sheet controller that contains call to waitlist_teams method in waitlist controller. &lt;br /&gt;
&lt;br /&gt;
[[File:waitlist_teams_new.png]]&lt;br /&gt;
&lt;br /&gt;
This method has definition for waitlist_teams and is defined in waitlist model.&lt;br /&gt;
&lt;br /&gt;
=====Cancel waitlist=====&lt;br /&gt;
We have moved the functionality that removes a team from the waiting list, from sign_up_topic model to waitlist model. The method name is cancel_all_waitlist.&lt;br /&gt;
&lt;br /&gt;
[[File:cancel_all_waitlists_new.png]]&lt;br /&gt;
&lt;br /&gt;
=====Reassign a topic=====&lt;br /&gt;
We have moved the functionality that reassigns a topic to another team when a team holding that particular topic cancels its reservation. We have moved this functionality from delete_signup_for_topic in sign_up_sheet controller to a method named reassign_topic that we have created in sign_up_topic model. &lt;br /&gt;
&lt;br /&gt;
[[File:for_reassign_topic_new.png]]&lt;br /&gt;
&lt;br /&gt;
This shows the method delete_signup_for_topic in sign_up_sheet controller that contains call to reassign_topic method in sign_up_topic model.&lt;br /&gt;
&lt;br /&gt;
[[File:reassign_topic_new.png]]&lt;br /&gt;
&lt;br /&gt;
This method has definition for reassign_topic and is defined in sign_up_topic model.&lt;br /&gt;
&lt;br /&gt;
=====Remove team from topic=====&lt;br /&gt;
We have moved the functionality that removes a team from a topic when all of the team’s members have left the team. We have moved this functionality from signup_topics in sign_up_sheet controller to a method named remove_team that we have created in sign_up_topic model. &lt;br /&gt;
&lt;br /&gt;
[[File:signup_topics_new.png]]&lt;br /&gt;
&lt;br /&gt;
This shows the method signup_topics in sign_up_sheet controller that contains call to remove_team method in sign_up_topic model.&lt;br /&gt;
&lt;br /&gt;
[[File:remove_team_new.png]]&lt;br /&gt;
&lt;br /&gt;
This method has definition for remove_team and is defined in sign_up_topic model.&lt;br /&gt;
Rest, we have done renaming at a few places in sign_up_sheet controller.&lt;br /&gt;
&lt;br /&gt;
====Snapshots====&lt;br /&gt;
Here, we have a few snapshots that would guide one to walk-through our work and the areas wherein we did refactoring.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Login_admin_new.png]]&lt;br /&gt;
&lt;br /&gt;
Login as an admin.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:manage_courses_new.png]]&lt;br /&gt;
&lt;br /&gt;
Go to manage-&amp;gt;courses&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:create_assignment_new.png]]&lt;br /&gt;
&lt;br /&gt;
Create an assignment by filling in the required fields and selecting the checkboxes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:create_users_new.png]]&lt;br /&gt;
&lt;br /&gt;
Create users by filling in the required fields.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:add_participants_admin_new.png]]&lt;br /&gt;
&lt;br /&gt;
Again go to Manage courses and as shown in the snapshot above, one can see actions associated with an assignment. Click on add participants.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:add_participants2_admin.png]]&lt;br /&gt;
&lt;br /&gt;
Add a user to an assignment as a participant.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:participant_added.png]]&lt;br /&gt;
&lt;br /&gt;
The participant is added.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:add_signupsheet.png]]&lt;br /&gt;
&lt;br /&gt;
Also, through manage-&amp;gt; courses, add signup sheet to an assignment in a similar manner as adding participants.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:add_topic.png]]&lt;br /&gt;
&lt;br /&gt;
When a signup sheet is created, add new topics to it in the similar manner&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:topic_created.png]]&lt;br /&gt;
&lt;br /&gt;
Topic is successfully created. Logout of admin system&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:login.png]] &lt;br /&gt;
&lt;br /&gt;
Now login as an user.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:top.png]]&lt;br /&gt;
&lt;br /&gt;
Go to the assignments on top&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:select_one_assignment.png]]&lt;br /&gt;
&lt;br /&gt;
Select one assignment from the list of assignments.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:click_signup_sheet.png]]&lt;br /&gt;
&lt;br /&gt;
Select signup sheet&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:can_view_signup_sheet.png]]&lt;br /&gt;
&lt;br /&gt;
One can view signup sheet and signup for the topic&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:signing_up.png]]&lt;br /&gt;
&lt;br /&gt;
After signing up, here for example for topic 1234, the user has the topic and the no. of available slot shows 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:shows_waiting.png]]&lt;br /&gt;
&lt;br /&gt;
Now, if another user tries to sign up for the same topic, he is put on waitlist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This is a brief illustration of the changes we have made as a part of our project.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Future Work'''===&lt;br /&gt;
&lt;br /&gt;
The sign up sheet controller still has many methods relevant to other entities which need to be moved to other relevant models and controllers. save_topic_dependancies and save_topic_deadlines are two methods which can be put into SignUpTopic Model or controller. show_team method which is in sign_up_sheet controller can be moved to teams_controller. We also see another controller called SignUp controller which looks like a redundant one which has methods mostly from SignUpSheet controller. And these methods don't seem to be used. So this method can be looked into carefully and discarded if possible. There is also a function called slotAvailable? in the sign up sheet controller which merely makes a call to a method slotAvailable? in the SignUpTopic model and does nothing else. This looks like an unnecesary redirection. Dependencies can be resolved and this method can be removed and calls can directly be made to the slotAvailable? method in the SignUpTopic model. Also the method update_waitlisted_users can be moved from SignUpTopic model to Wailist Model to improve the readability of the code.&lt;/div&gt;</summary>
		<author><name>Sayenga</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_ssp&amp;diff=80975</id>
		<title>CSC/ECE 517 Fall 2013/oss ssp</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_ssp&amp;diff=80975"/>
		<updated>2013-10-30T18:22:07Z</updated>

		<summary type="html">&lt;p&gt;Sayenga: /* Design */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''OSS E803 Refactoring and testing — signup_sheet model''' ==&lt;br /&gt;
&lt;br /&gt;
=== '''Motivation''' ===&lt;br /&gt;
&lt;br /&gt;
The motivation of this project was to provide functionality to manage Sign Up Sheets. The intent was to improve the design of the project by modularizing the code and maintaining good naming conventions. The methods relevant to wait-listing a team were all a part of the Sign Up sheet model and controller. in order to improve the readability of the code and to have a better organization, we intended to move these methods to a separate Waitlist Model. Also, some methods had too many functionalities, a lot more than what their names suggested. To have a more elegant code, the functionalities had to be moved to relevant methods. cancel_all_waitlists and waitlist_teams methods were created in the waitlist model for this purpose. Naming conventions are considered very important for making the code more readable and understandable. Ruby is known for its 'Convention over Configuration' ideology. Thus the naming conventions had to be taken care of. In the Sign Up sheet controller, we could see the usage of Camel cases in a lot of places. We intended to replace these by the convention of Ruby where underscore is used between two words in variable names with all the alphabets in small letters.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Design'''===&lt;br /&gt;
&lt;br /&gt;
The refactoring required us to modularize and push some of the functionalities in sign_up_sheet_controller.rb to sign_up_topic.rb (model) and waitlist.rb ( model).&lt;br /&gt;
This demanded to make calls from remove_team and reassign_topic from sign_up_topic model to signup_topics method in  sign_up_sheet_controller. Similarly the controller also used methods waitlist_teams and cancel_all_waitlists from the waitlist model.&lt;br /&gt;
&lt;br /&gt;
*'''Refactoring the sign_up_sheet_controller for modularity and flexibility:'''&lt;br /&gt;
#By defining functions in the desired class and making only calls to the specific controller, we have implemented a '''Collaborative design''' based on CRC modelling: &lt;br /&gt;
##finding classes/ models - sign_up_topic.rb and waitlist.rb&lt;br /&gt;
##finding responsibilities - remove_team, reassign_topic in sign_up_topic.rb, cancel-all_waitlists, waitlist_teams in waitlist.rb&lt;br /&gt;
##defining the collaborators - confirm_topic, delete_signup_topic, signup_topics in sign_up_sheet_controller.rb&lt;br /&gt;
&lt;br /&gt;
#This has also made it more flexible for the developers as a change in the db or table design can be easily tracked. &lt;br /&gt;
##Easily implemented in the respective models and by passing the correct type/number parameters in the controllers.  &lt;br /&gt;
##Reduces overhead of rewriting methods and keeping track of the method calls.&lt;br /&gt;
&lt;br /&gt;
*'''Adding a waitlist model:'''&lt;br /&gt;
#The newly formed waitlist model follows the '''Singleton pattern''' as it is an independent class and also the waitlist for a topic is a single queue or list on which multiple teams and individuals wait on.&lt;br /&gt;
#The methods defined in waitlist model are singleton methods and thus are defined as class methods with the keyword self prepended to them.&lt;br /&gt;
&lt;br /&gt;
=== '''Issues'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Procedure'''===&lt;br /&gt;
&lt;br /&gt;
====A brief description====&lt;br /&gt;
&lt;br /&gt;
Our OSS project required us to do refactoring and testing of the part of Expertiza that deals with signup mainly sign_up_sheet controller. This controller manages functionalities of signup sheet for assignment. We have moved a few methods from controller to a more suitable model in order to attain the “thin controller, fat model” implementation. A major part includes the actions related to waitlist. We have put methods from sign_up_sheet controller to the waitlist model (which was earlier empty, so we created a waitlist model by adding functionalities to it)&lt;br /&gt;
A brief description of the refactoring that we have done is given below&lt;br /&gt;
&lt;br /&gt;
=====Add teams to waiting list=====&lt;br /&gt;
We have moved the functionality that adds teams to waiting list when the topic is unavailable. We have moved this functionality from confirm_topic in sign_up_sheet controller to waitlist_teams method that we have created in waitlist controller.&lt;br /&gt;
&lt;br /&gt;
[[File:confirm_topic_new.png]]&lt;br /&gt;
&lt;br /&gt;
This shows the method confirm_topic in sign_up_sheet controller that contains call to waitlist_teams method in waitlist controller. &lt;br /&gt;
&lt;br /&gt;
[[File:waitlist_teams_new.png]]&lt;br /&gt;
&lt;br /&gt;
This method has definition for waitlist_teams and is defined in waitlist model.&lt;br /&gt;
&lt;br /&gt;
=====Cancel waitlist=====&lt;br /&gt;
We have moved the functionality that removes a team from the waiting list, from sign_up_topic model to waitlist model. The method name is cancel_all_waitlist.&lt;br /&gt;
&lt;br /&gt;
[[File:cancel_all_waitlists_new.png]]&lt;br /&gt;
&lt;br /&gt;
=====Reassign a topic=====&lt;br /&gt;
We have moved the functionality that reassigns a topic to another team when a team holding that particular topic cancels its reservation. We have moved this functionality from delete_signup_for_topic in sign_up_sheet controller to a method named reassign_topic that we have created in sign_up_topic model. &lt;br /&gt;
&lt;br /&gt;
[[File:for_reassign_topic_new.png]]&lt;br /&gt;
&lt;br /&gt;
This shows the method delete_signup_for_topic in sign_up_sheet controller that contains call to reassign_topic method in sign_up_topic model.&lt;br /&gt;
&lt;br /&gt;
[[File:reassign_topic_new.png]]&lt;br /&gt;
&lt;br /&gt;
This method has definition for reassign_topic and is defined in sign_up_topic model.&lt;br /&gt;
&lt;br /&gt;
=====Remove team from topic=====&lt;br /&gt;
We have moved the functionality that removes a team from a topic when all of the team’s members have left the team. We have moved this functionality from signup_topics in sign_up_sheet controller to a method named remove_team that we have created in sign_up_topic model. &lt;br /&gt;
&lt;br /&gt;
[[File:signup_topics_new.png]]&lt;br /&gt;
&lt;br /&gt;
This shows the method signup_topics in sign_up_sheet controller that contains call to remove_team method in sign_up_topic model.&lt;br /&gt;
&lt;br /&gt;
[[File:remove_team_new.png]]&lt;br /&gt;
&lt;br /&gt;
This method has definition for remove_team and is defined in sign_up_topic model.&lt;br /&gt;
Rest, we have done renaming at a few places in sign_up_sheet controller.&lt;br /&gt;
&lt;br /&gt;
====Snapshots====&lt;br /&gt;
Here, we have a few snapshots that would guide one to walk-through our work and the areas wherein we did refactoring.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Login_admin_new.png]]&lt;br /&gt;
&lt;br /&gt;
Login as an admin.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:manage_courses_new.png]]&lt;br /&gt;
&lt;br /&gt;
Go to manage-&amp;gt;courses&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:create_assignment_new.png]]&lt;br /&gt;
&lt;br /&gt;
Create an assignment by filling in the required fields and selecting the checkboxes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:create_users_new.png]]&lt;br /&gt;
&lt;br /&gt;
Create users by filling in the required fields.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:add_participants_admin_new.png]]&lt;br /&gt;
&lt;br /&gt;
Again go to Manage courses and as shown in the snapshot above, one can see actions associated with an assignment. Click on add participants.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:add_participants2_admin.png]]&lt;br /&gt;
&lt;br /&gt;
Add a user to an assignment as a participant.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:participant_added.png]]&lt;br /&gt;
&lt;br /&gt;
The participant is added.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:add_signupsheet.png]]&lt;br /&gt;
&lt;br /&gt;
Also, through manage-&amp;gt; courses, add signup sheet to an assignment in a similar manner as adding participants.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:add_topic.png]]&lt;br /&gt;
&lt;br /&gt;
When a signup sheet is created, add new topics to it in the similar manner&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:topic_created.png]]&lt;br /&gt;
&lt;br /&gt;
Topic is successfully created. Logout of admin system&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:login.png]] &lt;br /&gt;
&lt;br /&gt;
Now login as an user.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:top.png]]&lt;br /&gt;
&lt;br /&gt;
Go to the assignments on top&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:select_one_assignment.png]]&lt;br /&gt;
&lt;br /&gt;
Select one assignment from the list of assignments.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:click_signup_sheet.png]]&lt;br /&gt;
&lt;br /&gt;
Select signup sheet&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:can_view_signup_sheet.png]]&lt;br /&gt;
&lt;br /&gt;
One can view signup sheet and signup for the topic&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:signing_up.png]]&lt;br /&gt;
&lt;br /&gt;
After signing up, here for example for topic 1234, the user has the topic and the no. of available slot shows 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:shows_waiting.png]]&lt;br /&gt;
&lt;br /&gt;
Now, if another user tries to sign up for the same topic, he is put on waitlist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This is a brief illustration of the changes we have made as a part of our project.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Future Work'''===&lt;br /&gt;
&lt;br /&gt;
The sign up sheet controller still has many methods relevant to other entities which need to be moved to other relevant models and controllers. save_topic_dependancies and save_topic_deadlines are two methods which can be put into SignUpTopic Model or controller. show_team method which is in sign_up_sheet controller can be moved to teams_controller. We also see another controller called SignUp controller which looks like a redundant one which has methods mostly from SignUpSheet controller. And these methods don't seem to be used. So this method can be looked into carefully and discarded if possible. There is also a function called slotAvailable? in the sign up sheet controller which merely makes a call to a method slotAvailable? in the SignUpTopic model and does nothing else. This looks like an unnecesary redirection. Dependencies can be resolved and this method can be removed and calls can directly be made to the slotAvailable? method in the SignUpTopic model. Also the method update_waitlisted_users can be moved from SignUpTopic model to Wailist Model to improve the readability of the code.&lt;/div&gt;</summary>
		<author><name>Sayenga</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_ssp&amp;diff=80969</id>
		<title>CSC/ECE 517 Fall 2013/oss ssp</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_ssp&amp;diff=80969"/>
		<updated>2013-10-30T18:20:27Z</updated>

		<summary type="html">&lt;p&gt;Sayenga: /* Design */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''OSS E803 Refactoring and testing — signup_sheet model''' ==&lt;br /&gt;
&lt;br /&gt;
=== '''Motivation''' ===&lt;br /&gt;
&lt;br /&gt;
The motivation of this project was to provide functionality to manage Sign Up Sheets. The intent was to improve the design of the project by modularizing the code and maintaining good naming conventions. The methods relevant to wait-listing a team were all a part of the Sign Up sheet model and controller. in order to improve the readability of the code and to have a better organization, we intended to move these methods to a separate Waitlist Model. Also, some methods had too many functionalities, a lot more than what their names suggested. To have a more elegant code, the functionalities had to be moved to relevant methods. cancel_all_waitlists and waitlist_teams methods were created in the waitlist model for this purpose. Naming conventions are considered very important for making the code more readable and understandable. Ruby is known for its 'Convention over Configuration' ideology. Thus the naming conventions had to be taken care of. In the Sign Up sheet controller, we could see the usage of Camel cases in a lot of places. We intended to replace these by the convention of Ruby where underscore is used between two words in variable names with all the alphabets in small letters.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Design'''===&lt;br /&gt;
&lt;br /&gt;
The refactoring required us to modularize and push some of the functionalities in sign_up_sheet_controller.rb to sign_up_topic.rb (model) and waitlist.rb ( model).&lt;br /&gt;
This demanded to make calls from remove_team and reassign_topic from sign_up_topic model to signup_topics method in  sign_up_sheet_controller. Similarly the controller also used methods waitlist_teams and cancel_all_waitlists from the waitlist model.&lt;br /&gt;
&lt;br /&gt;
*'''Refactoring the sign_up_sheet_controller for modularity and flexibility:'''&lt;br /&gt;
#By defining functions in the desired class and making only calls to the specific controller, we have implemented a '''Collaborative design''' based on CRC modelling: &lt;br /&gt;
##finding classes/ models - sign_up_topic.rb and waitlist.rb&lt;br /&gt;
##finding responsibilities - remove_team, reassign_topic in sign_up_topic.rb, cancel-all_waitlists, waitlist_teams in waitlist.rb&lt;br /&gt;
##defining the collaborators - confirm_topic, delete_signup_topic, signup_topics in sign_up_sheet_controller.rb&lt;br /&gt;
&lt;br /&gt;
#This has also made it more flexible for the developers as a change in the db or table design can be easily tracked. &lt;br /&gt;
##Easily implemented in the respective models and by passing the correct type/number parameters in the controllers.  &lt;br /&gt;
##Reduces overhead of rewriting methods and keeping track of the method calls.&lt;br /&gt;
&lt;br /&gt;
*'''Adding a waitlist model:'''&lt;br /&gt;
#The newly formed waitlist model follows the singleton pattern as it is an independent class and also the waitlist for a topic is a single queue or list on which multiple teams and individuals wait on.&lt;br /&gt;
#The methods defined in waitlist model are singleton methods and thus are defined as class methods with the keyword self prepended to them.&lt;br /&gt;
&lt;br /&gt;
=== '''Issues'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Procedure'''===&lt;br /&gt;
&lt;br /&gt;
====A brief description====&lt;br /&gt;
&lt;br /&gt;
Our OSS project required us to do refactoring and testing of the part of Expertiza that deals with signup mainly sign_up_sheet controller. This controller manages functionalities of signup sheet for assignment. We have moved a few methods from controller to a more suitable model in order to attain the “thin controller, fat model” implementation. A major part includes the actions related to waitlist. We have put methods from sign_up_sheet controller to the waitlist model (which was earlier empty, so we created a waitlist model by adding functionalities to it)&lt;br /&gt;
A brief description of the refactoring that we have done is given below&lt;br /&gt;
&lt;br /&gt;
=====Add teams to waiting list=====&lt;br /&gt;
We have moved the functionality that adds teams to waiting list when the topic is unavailable. We have moved this functionality from confirm_topic in sign_up_sheet controller to waitlist_teams method that we have created in waitlist controller.&lt;br /&gt;
&lt;br /&gt;
[[File:confirm_topic_new.png]]&lt;br /&gt;
&lt;br /&gt;
This shows the method confirm_topic in sign_up_sheet controller that contains call to waitlist_teams method in waitlist controller. &lt;br /&gt;
&lt;br /&gt;
[[File:waitlist_teams_new.png]]&lt;br /&gt;
&lt;br /&gt;
This method has definition for waitlist_teams and is defined in waitlist model.&lt;br /&gt;
&lt;br /&gt;
=====Cancel waitlist=====&lt;br /&gt;
We have moved the functionality that removes a team from the waiting list, from sign_up_topic model to waitlist model. The method name is cancel_all_waitlist.&lt;br /&gt;
&lt;br /&gt;
[[File:cancel_all_waitlists_new.png]]&lt;br /&gt;
&lt;br /&gt;
=====Reassign a topic=====&lt;br /&gt;
We have moved the functionality that reassigns a topic to another team when a team holding that particular topic cancels its reservation. We have moved this functionality from delete_signup_for_topic in sign_up_sheet controller to a method named reassign_topic that we have created in sign_up_topic model. &lt;br /&gt;
&lt;br /&gt;
[[File:for_reassign_topic_new.png]]&lt;br /&gt;
&lt;br /&gt;
This shows the method delete_signup_for_topic in sign_up_sheet controller that contains call to reassign_topic method in sign_up_topic model.&lt;br /&gt;
&lt;br /&gt;
[[File:reassign_topic_new.png]]&lt;br /&gt;
&lt;br /&gt;
This method has definition for reassign_topic and is defined in sign_up_topic model.&lt;br /&gt;
&lt;br /&gt;
=====Remove team from topic=====&lt;br /&gt;
We have moved the functionality that removes a team from a topic when all of the team’s members have left the team. We have moved this functionality from signup_topics in sign_up_sheet controller to a method named remove_team that we have created in sign_up_topic model. &lt;br /&gt;
&lt;br /&gt;
[[File:signup_topics_new.png]]&lt;br /&gt;
&lt;br /&gt;
This shows the method signup_topics in sign_up_sheet controller that contains call to remove_team method in sign_up_topic model.&lt;br /&gt;
&lt;br /&gt;
[[File:remove_team_new.png]]&lt;br /&gt;
&lt;br /&gt;
This method has definition for remove_team and is defined in sign_up_topic model.&lt;br /&gt;
Rest, we have done renaming at a few places in sign_up_sheet controller.&lt;br /&gt;
&lt;br /&gt;
====Snapshots====&lt;br /&gt;
Here, we have a few snapshots that would guide one to walk-through our work and the areas wherein we did refactoring.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Login_admin_new.png]]&lt;br /&gt;
&lt;br /&gt;
Login as an admin.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:manage_courses_new.png]]&lt;br /&gt;
&lt;br /&gt;
Go to manage-&amp;gt;courses&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:create_assignment_new.png]]&lt;br /&gt;
&lt;br /&gt;
Create an assignment by filling in the required fields and selecting the checkboxes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:create_users_new.png]]&lt;br /&gt;
&lt;br /&gt;
Create users by filling in the required fields.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:add_participants_admin_new.png]]&lt;br /&gt;
&lt;br /&gt;
Again go to Manage courses and as shown in the snapshot above, one can see actions associated with an assignment. Click on add participants.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:add_participants2_admin.png]]&lt;br /&gt;
&lt;br /&gt;
Add a user to an assignment as a participant.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:participant_added.png]]&lt;br /&gt;
&lt;br /&gt;
The participant is added.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:add_signupsheet.png]]&lt;br /&gt;
&lt;br /&gt;
Also, through manage-&amp;gt; courses, add signup sheet to an assignment in a similar manner as adding participants.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:add_topic.png]]&lt;br /&gt;
&lt;br /&gt;
When a signup sheet is created, add new topics to it in the similar manner&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:topic_created.png]]&lt;br /&gt;
&lt;br /&gt;
Topic is successfully created. Logout of admin system&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:login.png]] &lt;br /&gt;
&lt;br /&gt;
Now login as an user.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:top.png]]&lt;br /&gt;
&lt;br /&gt;
Go to the assignments on top&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:select_one_assignment.png]]&lt;br /&gt;
&lt;br /&gt;
Select one assignment from the list of assignments.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:click_signup_sheet.png]]&lt;br /&gt;
&lt;br /&gt;
Select signup sheet&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:can_view_signup_sheet.png]]&lt;br /&gt;
&lt;br /&gt;
One can view signup sheet and signup for the topic&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:signing_up.png]]&lt;br /&gt;
&lt;br /&gt;
After signing up, here for example for topic 1234, the user has the topic and the no. of available slot shows 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:shows_waiting.png]]&lt;br /&gt;
&lt;br /&gt;
Now, if another user tries to sign up for the same topic, he is put on waitlist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This is a brief illustration of the changes we have made as a part of our project.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Future Work'''===&lt;br /&gt;
&lt;br /&gt;
The sign up sheet controller still has many methods relevant to other entities which need to be moved to other relevant models and controllers. save_topic_dependancies and save_topic_deadlines are two methods which can be put into SignUpTopic Model or controller. show_team method which is in sign_up_sheet controller can be moved to teams_controller. We also see another controller called SignUp controller which looks like a redundant one which has methods mostly from SignUpSheet controller. And these methods don't seem to be used. So this method can be looked into carefully and discarded if possible. There is also a function called slotAvailable? in the sign up sheet controller which merely makes a call to a method slotAvailable? in the SignUpTopic model and does nothing else. This looks like an unnecesary redirection. Dependencies can be resolved and this method can be removed and calls can directly be made to the slotAvailable? method in the SignUpTopic model. Also the method update_waitlisted_users can be moved from SignUpTopic model to Wailist Model to improve the readability of the code.&lt;/div&gt;</summary>
		<author><name>Sayenga</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_ssp&amp;diff=80966</id>
		<title>CSC/ECE 517 Fall 2013/oss ssp</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_ssp&amp;diff=80966"/>
		<updated>2013-10-30T18:20:00Z</updated>

		<summary type="html">&lt;p&gt;Sayenga: /* Design */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''OSS E803 Refactoring and testing — signup_sheet model''' ==&lt;br /&gt;
&lt;br /&gt;
=== '''Motivation''' ===&lt;br /&gt;
&lt;br /&gt;
The motivation of this project was to provide functionality to manage Sign Up Sheets. The intent was to improve the design of the project by modularizing the code and maintaining good naming conventions. The methods relevant to wait-listing a team were all a part of the Sign Up sheet model and controller. in order to improve the readability of the code and to have a better organization, we intended to move these methods to a separate Waitlist Model. Also, some methods had too many functionalities, a lot more than what their names suggested. To have a more elegant code, the functionalities had to be moved to relevant methods. cancel_all_waitlists and waitlist_teams methods were created in the waitlist model for this purpose. Naming conventions are considered very important for making the code more readable and understandable. Ruby is known for its 'Convention over Configuration' ideology. Thus the naming conventions had to be taken care of. In the Sign Up sheet controller, we could see the usage of Camel cases in a lot of places. We intended to replace these by the convention of Ruby where underscore is used between two words in variable names with all the alphabets in small letters.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Design'''===&lt;br /&gt;
&lt;br /&gt;
The refactoring required us to modularize and push some of the functionalities in sign_up_sheet_controller.rb to sign_up_topic.rb (model) and waitlist.rb ( model).&lt;br /&gt;
This demanded to make calls from remove_team and reassign_topic from sign_up_topic model to signup_topics method in  sign_up_sheet_controller. Similarly the controller also used methods waitlist_teams and cancel_all_waitlists from the waitlist model.&lt;br /&gt;
&lt;br /&gt;
*'''Refactoring the sign_up_sheet_controller for modularity and flexibility:'''&lt;br /&gt;
#By defining functions in the desired class and making only calls to the specific controller, we have implemented a Collaborative design based on CRC modelling: &lt;br /&gt;
##finding classes/ models - sign_up_topic.rb and waitlist.rb&lt;br /&gt;
##finding responsibilities - remove_team, reassign_topic in sign_up_topic.rb, cancel-all_waitlists, waitlist_teams in waitlist.rb&lt;br /&gt;
##defining the collaborators - confirm_topic, delete_signup_topic, signup_topics in sign_up_sheet_controller.rb&lt;br /&gt;
&lt;br /&gt;
#This has also made it more flexible for the developers as a change in the db or table design can be easily tracked. &lt;br /&gt;
##Easily implemented in the respective models and by passing the correct type/number parameters in the controllers.  &lt;br /&gt;
##Reduces overhead of rewriting methods and keeping track of the method calls.&lt;br /&gt;
&lt;br /&gt;
*'''Adding a waitlist model:'''&lt;br /&gt;
#The newly formed waitlist model follows the singleton pattern as it is an independent class and also the waitlist for a topic is a single queue or list on which multiple teams and individuals wait on.&lt;br /&gt;
#The methods defined in waitlist model are singleton methods and thus are defined as class methods with the keyword self prepended to them.&lt;br /&gt;
&lt;br /&gt;
=== '''Issues'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Procedure'''===&lt;br /&gt;
&lt;br /&gt;
====A brief description====&lt;br /&gt;
&lt;br /&gt;
Our OSS project required us to do refactoring and testing of the part of Expertiza that deals with signup mainly sign_up_sheet controller. This controller manages functionalities of signup sheet for assignment. We have moved a few methods from controller to a more suitable model in order to attain the “thin controller, fat model” implementation. A major part includes the actions related to waitlist. We have put methods from sign_up_sheet controller to the waitlist model (which was earlier empty, so we created a waitlist model by adding functionalities to it)&lt;br /&gt;
A brief description of the refactoring that we have done is given below&lt;br /&gt;
&lt;br /&gt;
=====Add teams to waiting list=====&lt;br /&gt;
We have moved the functionality that adds teams to waiting list when the topic is unavailable. We have moved this functionality from confirm_topic in sign_up_sheet controller to waitlist_teams method that we have created in waitlist controller.&lt;br /&gt;
&lt;br /&gt;
[[File:confirm_topic_new.png]]&lt;br /&gt;
&lt;br /&gt;
This shows the method confirm_topic in sign_up_sheet controller that contains call to waitlist_teams method in waitlist controller. &lt;br /&gt;
&lt;br /&gt;
[[File:waitlist_teams_new.png]]&lt;br /&gt;
&lt;br /&gt;
This method has definition for waitlist_teams and is defined in waitlist model.&lt;br /&gt;
&lt;br /&gt;
=====Cancel waitlist=====&lt;br /&gt;
We have moved the functionality that removes a team from the waiting list, from sign_up_topic model to waitlist model. The method name is cancel_all_waitlist.&lt;br /&gt;
&lt;br /&gt;
[[File:cancel_all_waitlists_new.png]]&lt;br /&gt;
&lt;br /&gt;
=====Reassign a topic=====&lt;br /&gt;
We have moved the functionality that reassigns a topic to another team when a team holding that particular topic cancels its reservation. We have moved this functionality from delete_signup_for_topic in sign_up_sheet controller to a method named reassign_topic that we have created in sign_up_topic model. &lt;br /&gt;
&lt;br /&gt;
[[File:for_reassign_topic_new.png]]&lt;br /&gt;
&lt;br /&gt;
This shows the method delete_signup_for_topic in sign_up_sheet controller that contains call to reassign_topic method in sign_up_topic model.&lt;br /&gt;
&lt;br /&gt;
[[File:reassign_topic_new.png]]&lt;br /&gt;
&lt;br /&gt;
This method has definition for reassign_topic and is defined in sign_up_topic model.&lt;br /&gt;
&lt;br /&gt;
=====Remove team from topic=====&lt;br /&gt;
We have moved the functionality that removes a team from a topic when all of the team’s members have left the team. We have moved this functionality from signup_topics in sign_up_sheet controller to a method named remove_team that we have created in sign_up_topic model. &lt;br /&gt;
&lt;br /&gt;
[[File:signup_topics_new.png]]&lt;br /&gt;
&lt;br /&gt;
This shows the method signup_topics in sign_up_sheet controller that contains call to remove_team method in sign_up_topic model.&lt;br /&gt;
&lt;br /&gt;
[[File:remove_team_new.png]]&lt;br /&gt;
&lt;br /&gt;
This method has definition for remove_team and is defined in sign_up_topic model.&lt;br /&gt;
Rest, we have done renaming at a few places in sign_up_sheet controller.&lt;br /&gt;
&lt;br /&gt;
====Snapshots====&lt;br /&gt;
Here, we have a few snapshots that would guide one to walk-through our work and the areas wherein we did refactoring.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Login_admin_new.png]]&lt;br /&gt;
&lt;br /&gt;
Login as an admin.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:manage_courses_new.png]]&lt;br /&gt;
&lt;br /&gt;
Go to manage-&amp;gt;courses&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:create_assignment_new.png]]&lt;br /&gt;
&lt;br /&gt;
Create an assignment by filling in the required fields and selecting the checkboxes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:create_users_new.png]]&lt;br /&gt;
&lt;br /&gt;
Create users by filling in the required fields.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:add_participants_admin_new.png]]&lt;br /&gt;
&lt;br /&gt;
Again go to Manage courses and as shown in the snapshot above, one can see actions associated with an assignment. Click on add participants.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:add_participants2_admin.png]]&lt;br /&gt;
&lt;br /&gt;
Add a user to an assignment as a participant.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:participant_added.png]]&lt;br /&gt;
&lt;br /&gt;
The participant is added.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:add_signupsheet.png]]&lt;br /&gt;
&lt;br /&gt;
Also, through manage-&amp;gt; courses, add signup sheet to an assignment in a similar manner as adding participants.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:add_topic.png]]&lt;br /&gt;
&lt;br /&gt;
When a signup sheet is created, add new topics to it in the similar manner&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:topic_created.png]]&lt;br /&gt;
&lt;br /&gt;
Topic is successfully created. Logout of admin system&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:login.png]] &lt;br /&gt;
&lt;br /&gt;
Now login as an user.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:top.png]]&lt;br /&gt;
&lt;br /&gt;
Go to the assignments on top&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:select_one_assignment.png]]&lt;br /&gt;
&lt;br /&gt;
Select one assignment from the list of assignments.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:click_signup_sheet.png]]&lt;br /&gt;
&lt;br /&gt;
Select signup sheet&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:can_view_signup_sheet.png]]&lt;br /&gt;
&lt;br /&gt;
One can view signup sheet and signup for the topic&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:signing_up.png]]&lt;br /&gt;
&lt;br /&gt;
After signing up, here for example for topic 1234, the user has the topic and the no. of available slot shows 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:shows_waiting.png]]&lt;br /&gt;
&lt;br /&gt;
Now, if another user tries to sign up for the same topic, he is put on waitlist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This is a brief illustration of the changes we have made as a part of our project.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Future Work'''===&lt;br /&gt;
&lt;br /&gt;
The sign up sheet controller still has many methods relevant to other entities which need to be moved to other relevant models and controllers. save_topic_dependancies and save_topic_deadlines are two methods which can be put into SignUpTopic Model or controller. show_team method which is in sign_up_sheet controller can be moved to teams_controller. We also see another controller called SignUp controller which looks like a redundant one which has methods mostly from SignUpSheet controller. And these methods don't seem to be used. So this method can be looked into carefully and discarded if possible. There is also a function called slotAvailable? in the sign up sheet controller which merely makes a call to a method slotAvailable? in the SignUpTopic model and does nothing else. This looks like an unnecesary redirection. Dependencies can be resolved and this method can be removed and calls can directly be made to the slotAvailable? method in the SignUpTopic model. Also the method update_waitlisted_users can be moved from SignUpTopic model to Wailist Model to improve the readability of the code.&lt;/div&gt;</summary>
		<author><name>Sayenga</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_ssp&amp;diff=80961</id>
		<title>CSC/ECE 517 Fall 2013/oss ssp</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_ssp&amp;diff=80961"/>
		<updated>2013-10-30T18:18:23Z</updated>

		<summary type="html">&lt;p&gt;Sayenga: /* Design */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''OSS E803 Refactoring and testing — signup_sheet model''' ==&lt;br /&gt;
&lt;br /&gt;
=== '''Motivation''' ===&lt;br /&gt;
&lt;br /&gt;
The motivation of this project was to provide functionality to manage Sign Up Sheets. The intent was to improve the design of the project by modularizing the code and maintaining good naming conventions. The methods relevant to wait-listing a team were all a part of the Sign Up sheet model and controller. in order to improve the readability of the code and to have a better organization, we intended to move these methods to a separate Waitlist Model. Also, some methods had too many functionalities, a lot more than what their names suggested. To have a more elegant code, the functionalities had to be moved to relevant methods. cancel_all_waitlists and waitlist_teams methods were created in the waitlist model for this purpose. Naming conventions are considered very important for making the code more readable and understandable. Ruby is known for its 'Convention over Configuration' ideology. Thus the naming conventions had to be taken care of. In the Sign Up sheet controller, we could see the usage of Camel cases in a lot of places. We intended to replace these by the convention of Ruby where underscore is used between two words in variable names with all the alphabets in small letters.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Design'''===&lt;br /&gt;
&lt;br /&gt;
The refactoring required us to modularize and push some of the functionalities in sign_up_sheet_controller.rb to sign_up_topic.rb (model) and waitlist.rb ( model).&lt;br /&gt;
This demanded to make calls from remove_team and reassign_topic from sign_up_topic model to signup_topics method in  sign_up_sheet_controller. Similarly the controller also used methods waitlist_teams and cancel_all_waitlists from the waitlist model.&lt;br /&gt;
&lt;br /&gt;
*Refactoring the sign_up_sheet_controller for modularity and flexibility:&lt;br /&gt;
#By defining functions in the desired class and making only calls to the specific controller, we have implemented a Collaborative design based on CRC modelling: &lt;br /&gt;
##finding classes/ models - sign_up_topic.rb and waitlist.rb&lt;br /&gt;
##finding responsibilities - remove_team, reassign_topic in sign_up_topic.rb, cancel-all_waitlists, waitlist_teams in waitlist.rb&lt;br /&gt;
##defining the collaborators - confirm_topic, delete_signup_topic, signup_topics in sign_up_sheet_controller.rb&lt;br /&gt;
&lt;br /&gt;
#This has also made it more flexible for the developers as a change in the db or table design can be easily tracked. &lt;br /&gt;
##Easily implemented in the respective models and by passing the correct type/number parameters in the controllers.  &lt;br /&gt;
##Reduces overhead of rewriting methods and keeping track of the method calls.&lt;br /&gt;
&lt;br /&gt;
*Adding a waitlist model:&lt;br /&gt;
#The newly formed waitlist model follows the singleton pattern as it is an independent class and also the waitlist for a topic is a single queue or list on which multiple teams and individuals wait on.&lt;br /&gt;
#The methods defined in waitlist model are singleton methods and thus are defined as class methods with the keyword self prepended to them.&lt;br /&gt;
&lt;br /&gt;
=== '''Issues'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Procedure'''===&lt;br /&gt;
&lt;br /&gt;
====A brief description====&lt;br /&gt;
&lt;br /&gt;
Our OSS project required us to do refactoring and testing of the part of Expertiza that deals with signup mainly sign_up_sheet controller. This controller manages functionalities of signup sheet for assignment. We have moved a few methods from controller to a more suitable model in order to attain the “thin controller, fat model” implementation. A major part includes the actions related to waitlist. We have put methods from sign_up_sheet controller to the waitlist model (which was earlier empty, so we created a waitlist model by adding functionalities to it)&lt;br /&gt;
A brief description of the refactoring that we have done is given below&lt;br /&gt;
&lt;br /&gt;
=====Add teams to waiting list=====&lt;br /&gt;
We have moved the functionality that adds teams to waiting list when the topic is unavailable. We have moved this functionality from confirm_topic in sign_up_sheet controller to waitlist_teams method that we have created in waitlist controller.&lt;br /&gt;
&lt;br /&gt;
[[File:confirm_topic_new.png]]&lt;br /&gt;
&lt;br /&gt;
This shows the method confirm_topic in sign_up_sheet controller that contains call to waitlist_teams method in waitlist controller. &lt;br /&gt;
&lt;br /&gt;
[[File:waitlist_teams_new.png]]&lt;br /&gt;
&lt;br /&gt;
This method has definition for waitlist_teams and is defined in waitlist model.&lt;br /&gt;
&lt;br /&gt;
=====Cancel waitlist=====&lt;br /&gt;
We have moved the functionality that removes a team from the waiting list, from sign_up_topic model to waitlist model. The method name is cancel_all_waitlist.&lt;br /&gt;
&lt;br /&gt;
[[File:cancel_all_waitlists_new.png]]&lt;br /&gt;
&lt;br /&gt;
=====Reassign a topic=====&lt;br /&gt;
We have moved the functionality that reassigns a topic to another team when a team holding that particular topic cancels its reservation. We have moved this functionality from delete_signup_for_topic in sign_up_sheet controller to a method named reassign_topic that we have created in sign_up_topic model. &lt;br /&gt;
&lt;br /&gt;
[[File:for_reassign_topic_new.png]]&lt;br /&gt;
&lt;br /&gt;
This shows the method delete_signup_for_topic in sign_up_sheet controller that contains call to reassign_topic method in sign_up_topic model.&lt;br /&gt;
&lt;br /&gt;
[[File:reassign_topic_new.png]]&lt;br /&gt;
&lt;br /&gt;
This method has definition for reassign_topic and is defined in sign_up_topic model.&lt;br /&gt;
&lt;br /&gt;
=====Remove team from topic=====&lt;br /&gt;
We have moved the functionality that removes a team from a topic when all of the team’s members have left the team. We have moved this functionality from signup_topics in sign_up_sheet controller to a method named remove_team that we have created in sign_up_topic model. &lt;br /&gt;
&lt;br /&gt;
[[File:signup_topics_new.png]]&lt;br /&gt;
&lt;br /&gt;
This shows the method signup_topics in sign_up_sheet controller that contains call to remove_team method in sign_up_topic model.&lt;br /&gt;
&lt;br /&gt;
[[File:remove_team_new.png]]&lt;br /&gt;
&lt;br /&gt;
This method has definition for remove_team and is defined in sign_up_topic model.&lt;br /&gt;
Rest, we have done renaming at a few places in sign_up_sheet controller.&lt;br /&gt;
&lt;br /&gt;
====Snapshots====&lt;br /&gt;
Here, we have a few snapshots that would guide one to walk-through our work and the areas wherein we did refactoring.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Login_admin_new.png]]&lt;br /&gt;
&lt;br /&gt;
Login as an admin.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:manage_courses_new.png]]&lt;br /&gt;
&lt;br /&gt;
Go to manage-&amp;gt;courses&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:create_assignment_new.png]]&lt;br /&gt;
&lt;br /&gt;
Create an assignment by filling in the required fields and selecting the checkboxes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:create_users_new.png]]&lt;br /&gt;
&lt;br /&gt;
Create users by filling in the required fields.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:add_participants_admin_new.png]]&lt;br /&gt;
&lt;br /&gt;
Again go to Manage courses and as shown in the snapshot above, one can see actions associated with an assignment. Click on add participants.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:add_participants2_admin.png]]&lt;br /&gt;
&lt;br /&gt;
Add a user to an assignment as a participant.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:participant_added.png]]&lt;br /&gt;
&lt;br /&gt;
The participant is added.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:add_signupsheet.png]]&lt;br /&gt;
&lt;br /&gt;
Also, through manage-&amp;gt; courses, add signup sheet to an assignment in a similar manner as adding participants.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:add_topic.png]]&lt;br /&gt;
&lt;br /&gt;
When a signup sheet is created, add new topics to it in the similar manner&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:topic_created.png]]&lt;br /&gt;
&lt;br /&gt;
Topic is successfully created. Logout of admin system&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:login.png]] &lt;br /&gt;
&lt;br /&gt;
Now login as an user.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:top.png]]&lt;br /&gt;
&lt;br /&gt;
Go to the assignments on top&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:select_one_assignment.png]]&lt;br /&gt;
&lt;br /&gt;
Select one assignment from the list of assignments.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:click_signup_sheet.png]]&lt;br /&gt;
&lt;br /&gt;
Select signup sheet&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:can_view_signup_sheet.png]]&lt;br /&gt;
&lt;br /&gt;
One can view signup sheet and signup for the topic&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:signing_up.png]]&lt;br /&gt;
&lt;br /&gt;
After signing up, here for example for topic 1234, the user has the topic and the no. of available slot shows 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:shows_waiting.png]]&lt;br /&gt;
&lt;br /&gt;
Now, if another user tries to sign up for the same topic, he is put on waitlist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This is a brief illustration of the changes we have made as a part of our project.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Future Work'''===&lt;br /&gt;
&lt;br /&gt;
The sign up sheet controller still has many methods relevant to other entities which need to be moved to other relevant models and controllers. save_topic_dependancies and save_topic_deadlines are two methods which can be put into SignUpTopic Model or controller. show_team method which is in sign_up_sheet controller can be moved to teams_controller. We also see another controller called SignUp controller which looks like a redundant one which has methods mostly from SignUpSheet controller. And these methods don't seem to be used. So this method can be looked into carefully and discarded if possible. There is also a function called slotAvailable? in the sign up sheet controller which merely makes a call to a method slotAvailable? in the SignUpTopic model and does nothing else. This looks like an unnecesary redirection. Dependencies can be resolved and this method can be removed and calls can directly be made to the slotAvailable? method in the SignUpTopic model. Also the method update_waitlisted_users can be moved from SignUpTopic model to Wailist Model to improve the readability of the code.&lt;/div&gt;</summary>
		<author><name>Sayenga</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_ssp&amp;diff=80955</id>
		<title>CSC/ECE 517 Fall 2013/oss ssp</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_ssp&amp;diff=80955"/>
		<updated>2013-10-30T18:17:24Z</updated>

		<summary type="html">&lt;p&gt;Sayenga: /* Design */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''OSS E803 Refactoring and testing — signup_sheet model''' ==&lt;br /&gt;
&lt;br /&gt;
=== '''Motivation''' ===&lt;br /&gt;
&lt;br /&gt;
The motivation of this project was to provide functionality to manage Sign Up Sheets. The intent was to improve the design of the project by modularizing the code and maintaining good naming conventions. The methods relevant to wait-listing a team were all a part of the Sign Up sheet model and controller. in order to improve the readability of the code and to have a better organization, we intended to move these methods to a separate Waitlist Model. Also, some methods had too many functionalities, a lot more than what their names suggested. To have a more elegant code, the functionalities had to be moved to relevant methods. cancel_all_waitlists and waitlist_teams methods were created in the waitlist model for this purpose. Naming conventions are considered very important for making the code more readable and understandable. Ruby is known for its 'Convention over Configuration' ideology. Thus the naming conventions had to be taken care of. In the Sign Up sheet controller, we could see the usage of Camel cases in a lot of places. We intended to replace these by the convention of Ruby where underscore is used between two words in variable names with all the alphabets in small letters.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Design'''===&lt;br /&gt;
&lt;br /&gt;
The refactoring required us to modularize and push some of the functionalities in sign_up_sheet_controller.rb to sign_up_topic.rb (model) and waitlist.rb ( model).&lt;br /&gt;
This demanded to make calls from remove_team and reassign_topic from sign_up_topic model to signup_topics method in  sign_up_sheet_controller. Similarly the controller also used methods waitlist_teams and cancel_all_waitlists from the waitlist model.&lt;br /&gt;
&lt;br /&gt;
*Refactoring the sign_up_sheet_controller for modularity and flexibility:&lt;br /&gt;
**By defining functions in the desired class and making only calls to the specific controller, we have implemented a Collaborative design based on CRC modelling: &lt;br /&gt;
#finding classes/ models - sign_up_topic.rb and waitlist.rb&lt;br /&gt;
#finding responsibilities - remove_team, reassign_topic in sign_up_topic.rb, cancel-all_waitlists, waitlist_teams in waitlist.rb&lt;br /&gt;
#defining the collaborators - confirm_topic, delete_signup_topic, signup_topics in sign_up_sheet_controller.rb&lt;br /&gt;
&lt;br /&gt;
*This has also made it more flexible for the developers as a change in the db or table design can be easily tracked. &lt;br /&gt;
#Easily implemented in the respective models and by passing the correct type/number parameters in the controllers.  &lt;br /&gt;
#Reduces overhead of rewriting methods and keeping track of the method calls.&lt;br /&gt;
&lt;br /&gt;
*Adding a waitlist model:&lt;br /&gt;
#The newly formed waitlist model follows the singleton pattern as it is an independent class and also the waitlist for a topic is a single queue or list on which multiple teams and individuals wait on.&lt;br /&gt;
#The methods defined in waitlist model are singleton methods and thus are defined as class methods with the keyword self prepended to them.&lt;br /&gt;
&lt;br /&gt;
=== '''Issues'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Procedure'''===&lt;br /&gt;
&lt;br /&gt;
====A brief description====&lt;br /&gt;
&lt;br /&gt;
Our OSS project required us to do refactoring and testing of the part of Expertiza that deals with signup mainly sign_up_sheet controller. This controller manages functionalities of signup sheet for assignment. We have moved a few methods from controller to a more suitable model in order to attain the “thin controller, fat model” implementation. A major part includes the actions related to waitlist. We have put methods from sign_up_sheet controller to the waitlist model (which was earlier empty, so we created a waitlist model by adding functionalities to it)&lt;br /&gt;
A brief description of the refactoring that we have done is given below&lt;br /&gt;
&lt;br /&gt;
=====Add teams to waiting list=====&lt;br /&gt;
We have moved the functionality that adds teams to waiting list when the topic is unavailable. We have moved this functionality from confirm_topic in sign_up_sheet controller to waitlist_teams method that we have created in waitlist controller.&lt;br /&gt;
&lt;br /&gt;
[[File:confirm_topic_new.png]]&lt;br /&gt;
&lt;br /&gt;
This shows the method confirm_topic in sign_up_sheet controller that contains call to waitlist_teams method in waitlist controller. &lt;br /&gt;
&lt;br /&gt;
[[File:waitlist_teams_new.png]]&lt;br /&gt;
&lt;br /&gt;
This method has definition for waitlist_teams and is defined in waitlist model.&lt;br /&gt;
&lt;br /&gt;
=====Cancel waitlist=====&lt;br /&gt;
We have moved the functionality that removes a team from the waiting list, from sign_up_topic model to waitlist model. The method name is cancel_all_waitlist.&lt;br /&gt;
&lt;br /&gt;
[[File:cancel_all_waitlists_new.png]]&lt;br /&gt;
&lt;br /&gt;
=====Reassign a topic=====&lt;br /&gt;
We have moved the functionality that reassigns a topic to another team when a team holding that particular topic cancels its reservation. We have moved this functionality from delete_signup_for_topic in sign_up_sheet controller to a method named reassign_topic that we have created in sign_up_topic model. &lt;br /&gt;
&lt;br /&gt;
[[File:for_reassign_topic_new.png]]&lt;br /&gt;
&lt;br /&gt;
This shows the method delete_signup_for_topic in sign_up_sheet controller that contains call to reassign_topic method in sign_up_topic model.&lt;br /&gt;
&lt;br /&gt;
[[File:reassign_topic_new.png]]&lt;br /&gt;
&lt;br /&gt;
This method has definition for reassign_topic and is defined in sign_up_topic model.&lt;br /&gt;
&lt;br /&gt;
=====Remove team from topic=====&lt;br /&gt;
We have moved the functionality that removes a team from a topic when all of the team’s members have left the team. We have moved this functionality from signup_topics in sign_up_sheet controller to a method named remove_team that we have created in sign_up_topic model. &lt;br /&gt;
&lt;br /&gt;
[[File:signup_topics_new.png]]&lt;br /&gt;
&lt;br /&gt;
This shows the method signup_topics in sign_up_sheet controller that contains call to remove_team method in sign_up_topic model.&lt;br /&gt;
&lt;br /&gt;
[[File:remove_team_new.png]]&lt;br /&gt;
&lt;br /&gt;
This method has definition for remove_team and is defined in sign_up_topic model.&lt;br /&gt;
Rest, we have done renaming at a few places in sign_up_sheet controller.&lt;br /&gt;
&lt;br /&gt;
====Snapshots====&lt;br /&gt;
Here, we have a few snapshots that would guide one to walk-through our work and the areas wherein we did refactoring.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Login_admin_new.png]]&lt;br /&gt;
&lt;br /&gt;
Login as an admin.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:manage_courses_new.png]]&lt;br /&gt;
&lt;br /&gt;
Go to manage-&amp;gt;courses&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:create_assignment_new.png]]&lt;br /&gt;
&lt;br /&gt;
Create an assignment by filling in the required fields and selecting the checkboxes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:create_users_new.png]]&lt;br /&gt;
&lt;br /&gt;
Create users by filling in the required fields.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:add_participants_admin_new.png]]&lt;br /&gt;
&lt;br /&gt;
Again go to Manage courses and as shown in the snapshot above, one can see actions associated with an assignment. Click on add participants.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:add_participants2_admin.png]]&lt;br /&gt;
&lt;br /&gt;
Add a user to an assignment as a participant.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:participant_added.png]]&lt;br /&gt;
&lt;br /&gt;
The participant is added.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:add_signupsheet.png]]&lt;br /&gt;
&lt;br /&gt;
Also, through manage-&amp;gt; courses, add signup sheet to an assignment in a similar manner as adding participants.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:add_topic.png]]&lt;br /&gt;
&lt;br /&gt;
When a signup sheet is created, add new topics to it in the similar manner&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:topic_created.png]]&lt;br /&gt;
&lt;br /&gt;
Topic is successfully created. Logout of admin system&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:login.png]] &lt;br /&gt;
&lt;br /&gt;
Now login as an user.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:top.png]]&lt;br /&gt;
&lt;br /&gt;
Go to the assignments on top&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:select_one_assignment.png]]&lt;br /&gt;
&lt;br /&gt;
Select one assignment from the list of assignments.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:click_signup_sheet.png]]&lt;br /&gt;
&lt;br /&gt;
Select signup sheet&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:can_view_signup_sheet.png]]&lt;br /&gt;
&lt;br /&gt;
One can view signup sheet and signup for the topic&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:signing_up.png]]&lt;br /&gt;
&lt;br /&gt;
After signing up, here for example for topic 1234, the user has the topic and the no. of available slot shows 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:shows_waiting.png]]&lt;br /&gt;
&lt;br /&gt;
Now, if another user tries to sign up for the same topic, he is put on waitlist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This is a brief illustration of the changes we have made as a part of our project.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Future Work'''===&lt;br /&gt;
&lt;br /&gt;
The sign up sheet controller still has many methods relevant to other entities which need to be moved to other relevant models and controllers. save_topic_dependancies and save_topic_deadlines are two methods which can be put into SignUpTopic Model or controller. show_team method which is in sign_up_sheet controller can be moved to teams_controller. We also see another controller called SignUp controller which looks like a redundant one which has methods mostly from SignUpSheet controller. And these methods don't seem to be used. So this method can be looked into carefully and discarded if possible. There is also a function called slotAvailable? in the sign up sheet controller which merely makes a call to a method slotAvailable? in the SignUpTopic model and does nothing else. This looks like an unnecesary redirection. Dependencies can be resolved and this method can be removed and calls can directly be made to the slotAvailable? method in the SignUpTopic model. Also the method update_waitlisted_users can be moved from SignUpTopic model to Wailist Model to improve the readability of the code.&lt;/div&gt;</summary>
		<author><name>Sayenga</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_ssp&amp;diff=80953</id>
		<title>CSC/ECE 517 Fall 2013/oss ssp</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_ssp&amp;diff=80953"/>
		<updated>2013-10-30T18:17:03Z</updated>

		<summary type="html">&lt;p&gt;Sayenga: /* Design */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''OSS E803 Refactoring and testing — signup_sheet model''' ==&lt;br /&gt;
&lt;br /&gt;
=== '''Motivation''' ===&lt;br /&gt;
&lt;br /&gt;
The motivation of this project was to provide functionality to manage Sign Up Sheets. The intent was to improve the design of the project by modularizing the code and maintaining good naming conventions. The methods relevant to wait-listing a team were all a part of the Sign Up sheet model and controller. in order to improve the readability of the code and to have a better organization, we intended to move these methods to a separate Waitlist Model. Also, some methods had too many functionalities, a lot more than what their names suggested. To have a more elegant code, the functionalities had to be moved to relevant methods. cancel_all_waitlists and waitlist_teams methods were created in the waitlist model for this purpose. Naming conventions are considered very important for making the code more readable and understandable. Ruby is known for its 'Convention over Configuration' ideology. Thus the naming conventions had to be taken care of. In the Sign Up sheet controller, we could see the usage of Camel cases in a lot of places. We intended to replace these by the convention of Ruby where underscore is used between two words in variable names with all the alphabets in small letters.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Design'''===&lt;br /&gt;
&lt;br /&gt;
The refactoring required us to modularize and push some of the functionalities in sign_up_sheet_controller.rb to sign_up_topic.rb (model) and waitlist.rb ( model).&lt;br /&gt;
This demanded to make calls from remove_team and reassign_topic from sign_up_topic model to signup_topics method in  sign_up_sheet_controller. Similarly the controller also used methods waitlist_teams and cancel_all_waitlists from the waitlist model.&lt;br /&gt;
&lt;br /&gt;
*Refactoring the sign_up_sheet_controller for modularity and flexibility:&lt;br /&gt;
**By defining functions in the desired class and making only calls to the specific controller, we have implemented a Collaborative design based on CRC modelling: &lt;br /&gt;
#finding classes/ models - sign_up_topic.rb and waitlist.rb&lt;br /&gt;
#finding responsibilities - remove_team, reassign_topic in sign_up_topic.rb, cancel-all_waitlists, waitlist_teams in waitlist.rb&lt;br /&gt;
#defining the collaborators - confirm_topic, delete_signup_topic, signup_topics in sign_up_sheet_controller.rb&lt;br /&gt;
&lt;br /&gt;
**This has also made it more flexible for the developers as a change in the db or table design can be easily tracked. &lt;br /&gt;
#Easily implemented in the respective models and by passing the correct type/number parameters in the controllers.  &lt;br /&gt;
#Reduces overhead of rewriting methods and keeping track of the method calls.&lt;br /&gt;
&lt;br /&gt;
*Adding a waitlist model:&lt;br /&gt;
#The newly formed waitlist model follows the singleton pattern as it is an independent class and also the waitlist for a topic is a single queue or list on which multiple teams and individuals wait on.&lt;br /&gt;
#The methods defined in waitlist model are singleton methods and thus are defined as class methods with the keyword self prepended to them.&lt;br /&gt;
&lt;br /&gt;
=== '''Issues'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Procedure'''===&lt;br /&gt;
&lt;br /&gt;
====A brief description====&lt;br /&gt;
&lt;br /&gt;
Our OSS project required us to do refactoring and testing of the part of Expertiza that deals with signup mainly sign_up_sheet controller. This controller manages functionalities of signup sheet for assignment. We have moved a few methods from controller to a more suitable model in order to attain the “thin controller, fat model” implementation. A major part includes the actions related to waitlist. We have put methods from sign_up_sheet controller to the waitlist model (which was earlier empty, so we created a waitlist model by adding functionalities to it)&lt;br /&gt;
A brief description of the refactoring that we have done is given below&lt;br /&gt;
&lt;br /&gt;
=====Add teams to waiting list=====&lt;br /&gt;
We have moved the functionality that adds teams to waiting list when the topic is unavailable. We have moved this functionality from confirm_topic in sign_up_sheet controller to waitlist_teams method that we have created in waitlist controller.&lt;br /&gt;
&lt;br /&gt;
[[File:confirm_topic_new.png]]&lt;br /&gt;
&lt;br /&gt;
This shows the method confirm_topic in sign_up_sheet controller that contains call to waitlist_teams method in waitlist controller. &lt;br /&gt;
&lt;br /&gt;
[[File:waitlist_teams_new.png]]&lt;br /&gt;
&lt;br /&gt;
This method has definition for waitlist_teams and is defined in waitlist model.&lt;br /&gt;
&lt;br /&gt;
=====Cancel waitlist=====&lt;br /&gt;
We have moved the functionality that removes a team from the waiting list, from sign_up_topic model to waitlist model. The method name is cancel_all_waitlist.&lt;br /&gt;
&lt;br /&gt;
[[File:cancel_all_waitlists_new.png]]&lt;br /&gt;
&lt;br /&gt;
=====Reassign a topic=====&lt;br /&gt;
We have moved the functionality that reassigns a topic to another team when a team holding that particular topic cancels its reservation. We have moved this functionality from delete_signup_for_topic in sign_up_sheet controller to a method named reassign_topic that we have created in sign_up_topic model. &lt;br /&gt;
&lt;br /&gt;
[[File:for_reassign_topic_new.png]]&lt;br /&gt;
&lt;br /&gt;
This shows the method delete_signup_for_topic in sign_up_sheet controller that contains call to reassign_topic method in sign_up_topic model.&lt;br /&gt;
&lt;br /&gt;
[[File:reassign_topic_new.png]]&lt;br /&gt;
&lt;br /&gt;
This method has definition for reassign_topic and is defined in sign_up_topic model.&lt;br /&gt;
&lt;br /&gt;
=====Remove team from topic=====&lt;br /&gt;
We have moved the functionality that removes a team from a topic when all of the team’s members have left the team. We have moved this functionality from signup_topics in sign_up_sheet controller to a method named remove_team that we have created in sign_up_topic model. &lt;br /&gt;
&lt;br /&gt;
[[File:signup_topics_new.png]]&lt;br /&gt;
&lt;br /&gt;
This shows the method signup_topics in sign_up_sheet controller that contains call to remove_team method in sign_up_topic model.&lt;br /&gt;
&lt;br /&gt;
[[File:remove_team_new.png]]&lt;br /&gt;
&lt;br /&gt;
This method has definition for remove_team and is defined in sign_up_topic model.&lt;br /&gt;
Rest, we have done renaming at a few places in sign_up_sheet controller.&lt;br /&gt;
&lt;br /&gt;
====Snapshots====&lt;br /&gt;
Here, we have a few snapshots that would guide one to walk-through our work and the areas wherein we did refactoring.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Login_admin_new.png]]&lt;br /&gt;
&lt;br /&gt;
Login as an admin.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:manage_courses_new.png]]&lt;br /&gt;
&lt;br /&gt;
Go to manage-&amp;gt;courses&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:create_assignment_new.png]]&lt;br /&gt;
&lt;br /&gt;
Create an assignment by filling in the required fields and selecting the checkboxes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:create_users_new.png]]&lt;br /&gt;
&lt;br /&gt;
Create users by filling in the required fields.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:add_participants_admin_new.png]]&lt;br /&gt;
&lt;br /&gt;
Again go to Manage courses and as shown in the snapshot above, one can see actions associated with an assignment. Click on add participants.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:add_participants2_admin.png]]&lt;br /&gt;
&lt;br /&gt;
Add a user to an assignment as a participant.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:participant_added.png]]&lt;br /&gt;
&lt;br /&gt;
The participant is added.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:add_signupsheet.png]]&lt;br /&gt;
&lt;br /&gt;
Also, through manage-&amp;gt; courses, add signup sheet to an assignment in a similar manner as adding participants.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:add_topic.png]]&lt;br /&gt;
&lt;br /&gt;
When a signup sheet is created, add new topics to it in the similar manner&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:topic_created.png]]&lt;br /&gt;
&lt;br /&gt;
Topic is successfully created. Logout of admin system&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:login.png]] &lt;br /&gt;
&lt;br /&gt;
Now login as an user.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:top.png]]&lt;br /&gt;
&lt;br /&gt;
Go to the assignments on top&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:select_one_assignment.png]]&lt;br /&gt;
&lt;br /&gt;
Select one assignment from the list of assignments.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:click_signup_sheet.png]]&lt;br /&gt;
&lt;br /&gt;
Select signup sheet&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:can_view_signup_sheet.png]]&lt;br /&gt;
&lt;br /&gt;
One can view signup sheet and signup for the topic&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:signing_up.png]]&lt;br /&gt;
&lt;br /&gt;
After signing up, here for example for topic 1234, the user has the topic and the no. of available slot shows 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:shows_waiting.png]]&lt;br /&gt;
&lt;br /&gt;
Now, if another user tries to sign up for the same topic, he is put on waitlist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This is a brief illustration of the changes we have made as a part of our project.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Future Work'''===&lt;br /&gt;
&lt;br /&gt;
The sign up sheet controller still has many methods relevant to other entities which need to be moved to other relevant models and controllers. save_topic_dependancies and save_topic_deadlines are two methods which can be put into SignUpTopic Model or controller. show_team method which is in sign_up_sheet controller can be moved to teams_controller. We also see another controller called SignUp controller which looks like a redundant one which has methods mostly from SignUpSheet controller. And these methods don't seem to be used. So this method can be looked into carefully and discarded if possible. There is also a function called slotAvailable? in the sign up sheet controller which merely makes a call to a method slotAvailable? in the SignUpTopic model and does nothing else. This looks like an unnecesary redirection. Dependencies can be resolved and this method can be removed and calls can directly be made to the slotAvailable? method in the SignUpTopic model. Also the method update_waitlisted_users can be moved from SignUpTopic model to Wailist Model to improve the readability of the code.&lt;/div&gt;</summary>
		<author><name>Sayenga</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_ssp&amp;diff=80949</id>
		<title>CSC/ECE 517 Fall 2013/oss ssp</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_ssp&amp;diff=80949"/>
		<updated>2013-10-30T18:16:18Z</updated>

		<summary type="html">&lt;p&gt;Sayenga: /* Design */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''OSS E803 Refactoring and testing — signup_sheet model''' ==&lt;br /&gt;
&lt;br /&gt;
=== '''Motivation''' ===&lt;br /&gt;
&lt;br /&gt;
The motivation of this project was to provide functionality to manage Sign Up Sheets. The intent was to improve the design of the project by modularizing the code and maintaining good naming conventions. The methods relevant to wait-listing a team were all a part of the Sign Up sheet model and controller. in order to improve the readability of the code and to have a better organization, we intended to move these methods to a separate Waitlist Model. Also, some methods had too many functionalities, a lot more than what their names suggested. To have a more elegant code, the functionalities had to be moved to relevant methods. cancel_all_waitlists and waitlist_teams methods were created in the waitlist model for this purpose. Naming conventions are considered very important for making the code more readable and understandable. Ruby is known for its 'Convention over Configuration' ideology. Thus the naming conventions had to be taken care of. In the Sign Up sheet controller, we could see the usage of Camel cases in a lot of places. We intended to replace these by the convention of Ruby where underscore is used between two words in variable names with all the alphabets in small letters.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Design'''===&lt;br /&gt;
&lt;br /&gt;
The refactoring required us to modularize and push some of the functionalities in sign_up_sheet_controller.rb to sign_up_topic.rb (model) and waitlist.rb ( model).&lt;br /&gt;
This demanded to make calls from remove_team and reassign_topic from sign_up_topic model to signup_topics method in  sign_up_sheet_controller. Similarly the controller also used methods waitlist_teams and cancel_all_waitlists from the waitlist model.&lt;br /&gt;
&lt;br /&gt;
*Refactoring the sign_up_sheet_controller for modularity and flexibility:&lt;br /&gt;
**By defining functions in the desired class and making only calls to the specific controller, we have implemented a Collaborative design based on CRC modelling: &lt;br /&gt;
#finding classes/ models - sign_up_topic.rb and waitlist.rb&lt;br /&gt;
#finding responsibilities - remove_team, reassign_topic in sign_up_topic.rb, cancel-all_waitlists, waitlist_teams in waitlist.rb&lt;br /&gt;
#defining the collaborators - confirm_topic, delete_signup_topic, signup_topics in sign_up_sheet_controller.rb&lt;br /&gt;
&lt;br /&gt;
** This has also made it more flexible for the developers as a change in the db or table design can be easily tracked. &lt;br /&gt;
#Easily implemented in the respective models and by passing the correct type/number parameters in the controllers.  &lt;br /&gt;
#Reduces overhead of rewriting methods and keeping track of the method calls.&lt;br /&gt;
&lt;br /&gt;
*Adding a waitlist model:&lt;br /&gt;
**The newly formed waitlist model follows the singleton pattern as it is an independent class and also the waitlist for a topic is a single queue or list on which multiple teams and individuals wait on.&lt;br /&gt;
**The methods defined in waitlist model are singleton methods and thus are defined as class methods with the keyword self prepended to them.&lt;br /&gt;
&lt;br /&gt;
=== '''Issues'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Procedure'''===&lt;br /&gt;
&lt;br /&gt;
====A brief description====&lt;br /&gt;
&lt;br /&gt;
Our OSS project required us to do refactoring and testing of the part of Expertiza that deals with signup mainly sign_up_sheet controller. This controller manages functionalities of signup sheet for assignment. We have moved a few methods from controller to a more suitable model in order to attain the “thin controller, fat model” implementation. A major part includes the actions related to waitlist. We have put methods from sign_up_sheet controller to the waitlist model (which was earlier empty, so we created a waitlist model by adding functionalities to it)&lt;br /&gt;
A brief description of the refactoring that we have done is given below&lt;br /&gt;
&lt;br /&gt;
=====Add teams to waiting list=====&lt;br /&gt;
We have moved the functionality that adds teams to waiting list when the topic is unavailable. We have moved this functionality from confirm_topic in sign_up_sheet controller to waitlist_teams method that we have created in waitlist controller.&lt;br /&gt;
&lt;br /&gt;
[[File:confirm_topic_new.png]]&lt;br /&gt;
&lt;br /&gt;
This shows the method confirm_topic in sign_up_sheet controller that contains call to waitlist_teams method in waitlist controller. &lt;br /&gt;
&lt;br /&gt;
[[File:waitlist_teams_new.png]]&lt;br /&gt;
&lt;br /&gt;
This method has definition for waitlist_teams and is defined in waitlist model.&lt;br /&gt;
&lt;br /&gt;
=====Cancel waitlist=====&lt;br /&gt;
We have moved the functionality that removes a team from the waiting list, from sign_up_topic model to waitlist model. The method name is cancel_all_waitlist.&lt;br /&gt;
&lt;br /&gt;
[[File:cancel_all_waitlists_new.png]]&lt;br /&gt;
&lt;br /&gt;
=====Reassign a topic=====&lt;br /&gt;
We have moved the functionality that reassigns a topic to another team when a team holding that particular topic cancels its reservation. We have moved this functionality from delete_signup_for_topic in sign_up_sheet controller to a method named reassign_topic that we have created in sign_up_topic model. &lt;br /&gt;
&lt;br /&gt;
[[File:for_reassign_topic_new.png]]&lt;br /&gt;
&lt;br /&gt;
This shows the method delete_signup_for_topic in sign_up_sheet controller that contains call to reassign_topic method in sign_up_topic model.&lt;br /&gt;
&lt;br /&gt;
[[File:reassign_topic_new.png]]&lt;br /&gt;
&lt;br /&gt;
This method has definition for reassign_topic and is defined in sign_up_topic model.&lt;br /&gt;
&lt;br /&gt;
=====Remove team from topic=====&lt;br /&gt;
We have moved the functionality that removes a team from a topic when all of the team’s members have left the team. We have moved this functionality from signup_topics in sign_up_sheet controller to a method named remove_team that we have created in sign_up_topic model. &lt;br /&gt;
&lt;br /&gt;
[[File:signup_topics_new.png]]&lt;br /&gt;
&lt;br /&gt;
This shows the method signup_topics in sign_up_sheet controller that contains call to remove_team method in sign_up_topic model.&lt;br /&gt;
&lt;br /&gt;
[[File:remove_team_new.png]]&lt;br /&gt;
&lt;br /&gt;
This method has definition for remove_team and is defined in sign_up_topic model.&lt;br /&gt;
Rest, we have done renaming at a few places in sign_up_sheet controller.&lt;br /&gt;
&lt;br /&gt;
====Snapshots====&lt;br /&gt;
Here, we have a few snapshots that would guide one to walk-through our work and the areas wherein we did refactoring.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Login_admin_new.png]]&lt;br /&gt;
&lt;br /&gt;
Login as an admin.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:manage_courses_new.png]]&lt;br /&gt;
&lt;br /&gt;
Go to manage-&amp;gt;courses&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:create_assignment_new.png]]&lt;br /&gt;
&lt;br /&gt;
Create an assignment by filling in the required fields and selecting the checkboxes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:create_users_new.png]]&lt;br /&gt;
&lt;br /&gt;
Create users by filling in the required fields.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:add_participants_admin_new.png]]&lt;br /&gt;
&lt;br /&gt;
Again go to Manage courses and as shown in the snapshot above, one can see actions associated with an assignment. Click on add participants.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:add_participants2_admin.png]]&lt;br /&gt;
&lt;br /&gt;
Add a user to an assignment as a participant.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:participant_added.png]]&lt;br /&gt;
&lt;br /&gt;
The participant is added.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:add_signupsheet.png]]&lt;br /&gt;
&lt;br /&gt;
Also, through manage-&amp;gt; courses, add signup sheet to an assignment in a similar manner as adding participants.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:add_topic.png]]&lt;br /&gt;
&lt;br /&gt;
When a signup sheet is created, add new topics to it in the similar manner&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:topic_created.png]]&lt;br /&gt;
&lt;br /&gt;
Topic is successfully created. Logout of admin system&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:login.png]] &lt;br /&gt;
&lt;br /&gt;
Now login as an user.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:top.png]]&lt;br /&gt;
&lt;br /&gt;
Go to the assignments on top&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:select_one_assignment.png]]&lt;br /&gt;
&lt;br /&gt;
Select one assignment from the list of assignments.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:click_signup_sheet.png]]&lt;br /&gt;
&lt;br /&gt;
Select signup sheet&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:can_view_signup_sheet.png]]&lt;br /&gt;
&lt;br /&gt;
One can view signup sheet and signup for the topic&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:signing_up.png]]&lt;br /&gt;
&lt;br /&gt;
After signing up, here for example for topic 1234, the user has the topic and the no. of available slot shows 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:shows_waiting.png]]&lt;br /&gt;
&lt;br /&gt;
Now, if another user tries to sign up for the same topic, he is put on waitlist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This is a brief illustration of the changes we have made as a part of our project.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Future Work'''===&lt;br /&gt;
&lt;br /&gt;
The sign up sheet controller still has many methods relevant to other entities which need to be moved to other relevant models and controllers. save_topic_dependancies and save_topic_deadlines are two methods which can be put into SignUpTopic Model or controller. show_team method which is in sign_up_sheet controller can be moved to teams_controller. We also see another controller called SignUp controller which looks like a redundant one which has methods mostly from SignUpSheet controller. And these methods don't seem to be used. So this method can be looked into carefully and discarded if possible. There is also a function called slotAvailable? in the sign up sheet controller which merely makes a call to a method slotAvailable? in the SignUpTopic model and does nothing else. This looks like an unnecesary redirection. Dependencies can be resolved and this method can be removed and calls can directly be made to the slotAvailable? method in the SignUpTopic model. Also the method update_waitlisted_users can be moved from SignUpTopic model to Wailist Model to improve the readability of the code.&lt;/div&gt;</summary>
		<author><name>Sayenga</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_ssp&amp;diff=80768</id>
		<title>CSC/ECE 517 Fall 2013/oss ssp</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/oss_ssp&amp;diff=80768"/>
		<updated>2013-10-30T16:31:49Z</updated>

		<summary type="html">&lt;p&gt;Sayenga: /* Design */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''OSS E803 Refactoring and testing — signup_sheet model''' ==&lt;br /&gt;
&lt;br /&gt;
=== '''Motivation''' ===&lt;br /&gt;
&lt;br /&gt;
The motivation of this project was to provide functionality to manage Sign Up Sheets. The intent was to improve the design of the project by modularizing the code and maintaining good naming conventions. The methods relevant to wait-listing a team were all a part of the Sign Up sheet model and controller. in order to improve the readability of the code and to have a better organization, we intended to move these methods to a separate Waitlist Model. Also, some methods had too many functionalities, a lot more than what their names suggested. To have a more elegant code, the functionalities had to be moved to relevant methods. cancel_all_waitlists and waitlist_teams methods were created in the waitlist model for this purpose. Naming conventions are considered very important for making the code more readable and understandable. Ruby is known for its 'Convention over Configuration' ideology. Thus the naming conventions had to be taken care of. In the Sign Up sheet controller, we could see the usage of Camel cases in a lot of places. We intended to replace these by the convention of Ruby where underscore is used between two words in variable names with all the alphabets in small letters.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Design'''===&lt;br /&gt;
&lt;br /&gt;
=== '''Issues'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Procedure'''===&lt;br /&gt;
&lt;br /&gt;
====A brief description====&lt;br /&gt;
&lt;br /&gt;
Our OSS project required us to do refactoring and testing of the part of Expertiza that deals with signup mainly sign_up_sheet controller. This controller manages functionalities of signup sheet for assignment. We have moved a few methods from controller to a more suitable model in order to attain the “thin controller, fat model” implementation. A major part includes the actions related to waitlist. We have put methods from sign_up_sheet controller to the waitlist model (which was earlier empty, so we created a waitlist model by adding functionalities to it)&lt;br /&gt;
A brief description of the refactoring that we have done is given below&lt;br /&gt;
&lt;br /&gt;
=====Add teams to waiting list=====&lt;br /&gt;
We have moved the functionality that adds teams to waiting list when the topic is unavailable. We have moved this functionality from confirm_topic in sign_up_sheet controller to waitlist_teams method that we have created in waitlist controller.&lt;br /&gt;
&lt;br /&gt;
[[File:confirm_topic.png]]&lt;br /&gt;
&lt;br /&gt;
This shows the method confirm_topic in sign_up_sheet controller that contains call to waitlist_teams method in waitlist controller. &lt;br /&gt;
&lt;br /&gt;
[[File:waitlist_teams.png]]&lt;br /&gt;
&lt;br /&gt;
This method has definition for waitlist_teams and is defined in waitlist model.&lt;br /&gt;
&lt;br /&gt;
=====Cancel waitlist=====&lt;br /&gt;
We have moved the functionality that removes a team from the waiting list, from sign_up_topic model to waitlist model. The method name is cancel_all_waitlist.&lt;br /&gt;
&lt;br /&gt;
[[File:cancel_all_waitlists.png]]&lt;br /&gt;
&lt;br /&gt;
=====Reassign a topic=====&lt;br /&gt;
We have moved the functionality that reassigns a topic to another team when a team holding that particular topic cancels its reservation. We have moved this functionality from delete_signup_for_topic in sign_up_sheet controller to a method named reassign_topic that we have created in sign_up_topic model. &lt;br /&gt;
&lt;br /&gt;
[[File:for_reassign_topic.png]]&lt;br /&gt;
&lt;br /&gt;
This shows the method delete_signup_for_topic in sign_up_sheet controller that contains call to reassign_topic method in sign_up_topic model.&lt;br /&gt;
&lt;br /&gt;
[[File:reassign_topic.png]]&lt;br /&gt;
&lt;br /&gt;
This method has definition for reassign_topic and is defined in sign_up_topic model.&lt;br /&gt;
&lt;br /&gt;
=====Remove team from topic=====&lt;br /&gt;
We have moved the functionality that removes a team from a topic when all of the team’s members have left the team. We have moved this functionality from signup_topics in sign_up_sheet controller to a method named remove_team that we have created in sign_up_topic model. &lt;br /&gt;
&lt;br /&gt;
[[File:signup_topics.png]]&lt;br /&gt;
&lt;br /&gt;
This shows the method signup_topics in sign_up_sheet controller that contains call to remove_team method in sign_up_topic model.&lt;br /&gt;
&lt;br /&gt;
[[File:remove_team.png]]&lt;br /&gt;
&lt;br /&gt;
This method has definition for remove_team and is defined in sign_up_topic model.&lt;br /&gt;
Rest, we have done renaming at a few places in sign_up_sheet controller.&lt;br /&gt;
&lt;br /&gt;
====Snapshots====&lt;br /&gt;
Here, we have a few snapshots that would guide one to walk-through our work and the areas wherein we did refactoring.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Login_admin_new.png]]&lt;br /&gt;
&lt;br /&gt;
Login as an admin.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:manage_courses_new.png]]&lt;br /&gt;
&lt;br /&gt;
Go to manage-&amp;gt;courses&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:create_assignment_new.png]]&lt;br /&gt;
&lt;br /&gt;
Create an assignment by filling in the required fields and selecting the checkboxes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:create_users_new.png]]&lt;br /&gt;
&lt;br /&gt;
Create users by filling in the required fields.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:add_participants_admin_new.png]]&lt;br /&gt;
&lt;br /&gt;
Again go to Manage courses and as shown in the snapshot above, one can see actions associated with an assignment. Click on add participants.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:add_participants2_admin.png]]&lt;br /&gt;
&lt;br /&gt;
Add a user to an assignment as a participant.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:participant_added.png]]&lt;br /&gt;
&lt;br /&gt;
The participant is added.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:add_signupsheet.png]]&lt;br /&gt;
&lt;br /&gt;
Also, through manage-&amp;gt; courses, add signup sheet to an assignment in a similar manner as adding participants.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:add_topic.png]]&lt;br /&gt;
&lt;br /&gt;
When a signup sheet is created, add new topics to it in the similar manner&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:topic_created.png]]&lt;br /&gt;
&lt;br /&gt;
Topic is successfully created. Logout of admin system&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:login.png]] &lt;br /&gt;
&lt;br /&gt;
Now login as an user.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:top.png]]&lt;br /&gt;
&lt;br /&gt;
Go to the assignments on top&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:select_one_assignment.png]]&lt;br /&gt;
&lt;br /&gt;
Select one assignment from the list of assignments.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:click_signup_sheet.png]]&lt;br /&gt;
&lt;br /&gt;
Select signup sheet&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:can_view_signup_sheet.png]]&lt;br /&gt;
&lt;br /&gt;
One can view signup sheet and signup for the topic&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:signing_up.png]]&lt;br /&gt;
&lt;br /&gt;
After signing up, here for example for topic 1234, the user has the topic and the no. of available slot shows 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:shows_waiting.png]]&lt;br /&gt;
&lt;br /&gt;
Now, if another user tries to sign up for the same topic, he is put on waitlist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This is a brief illustration of the changes we have made as a part of our project.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Future Work'''===&lt;br /&gt;
&lt;br /&gt;
The sign up sheet controller still has many methods relevant to other entities which need to be moved to other relevant models and controllers. save_topic_dependancies and save_topic_deadlines are two methods which can be put into SignUpTopic Model or controller. show_team method which is in sign_up_sheet controller can be moved to teams_controller. We also see another controller called SignUp controller which looks like a redundant one which has methods mostly from SignUpSheet controller. And these methods don't seem to be used. So this method can be looked into carefully and discarded if possible. There is also a function called slotAvailable? in the sign up sheet controller which merely makes a call to a method slotAvailable? in the SignUpTopic model and does nothing else. This looks like an unnecesary redirection. Dependencies can be resolved and this method can be removed and calls can directly be made to the slotAvailable? method in the SignUpTopic model. Also the method update_waitlisted_users can be moved from SignUpTopic model to Wailist Model to improve the readability of the code.&lt;/div&gt;</summary>
		<author><name>Sayenga</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/ch1_1w39_as&amp;diff=80079</id>
		<title>CSC/ECE 517 Fall 2013/ch1 1w39 as</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/ch1_1w39_as&amp;diff=80079"/>
		<updated>2013-10-08T03:45:36Z</updated>

		<summary type="html">&lt;p&gt;Sayenga: /* Test-Driven Developmenthttp://www.agiledata.org/essays/tdd.html */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;='''Agile development with Rails'''=&lt;br /&gt;
&lt;br /&gt;
This article focuses on how Rails enables ’agile development&lt;br /&gt;
practices’ and the characteristics of Rails that support specific agile methodologies.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== '''Agile development''' ==&lt;br /&gt;
==='' What is Agile development? ''=== &lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Agile_software_development Agile development]&amp;lt;ref&amp;gt; http://en.wikipedia.org/wiki/Agile_software_development &amp;lt;/ref&amp;gt; is a methodology where requirements and solutions are developed based on [http://en.wikipedia.org/wiki/Iterative_and_incremental_development iterative and incremental development] &amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Iterative_and_incremental_development&amp;lt;/ref&amp;gt; through collaboration between self-organizing, cross-functional teams. Using agile development methodology, a high quality software can be developed by programmers in a minimal amount of time. By involving continuous planning, testing, integration, and other forms of continuous evolution of both the project and the software, it focuses on empowering people to collaborate and make decisions together quickly and effectively. Some of the process under agile development includes adaptive planning, evolutionary development and delivery, a time-boxed iterative approach, and encourages rapid and flexible response to change. It is a conceptual framework that promotes foreseen interactions throughout the development cycle.&lt;br /&gt;
&lt;br /&gt;
===''Why do we need Agile development?''===&lt;br /&gt;
&lt;br /&gt;
:*Visibility through active customer involvement&lt;br /&gt;
:*Flexibility/Agility - ability to accept changes&lt;br /&gt;
:*Quality - testing integrated throughout the lifecycle&lt;br /&gt;
:*Speedy delivery&lt;br /&gt;
:*Customer satisfaction - feeling of a right product&lt;br /&gt;
&lt;br /&gt;
[[File:agl39.jpg|center|alt=Agile development| Fig 1: Agile development]]&lt;br /&gt;
&lt;br /&gt;
===''Principles of agile development'' &amp;lt;ref&amp;gt; http://ruby.about.com/od/rubyonrails/a/agile.htm &amp;lt;/ref&amp;gt; ===&lt;br /&gt;
:*Iterative Development: Iterative development allows the clients to direct the development process in order to get the software features they want. Working software is delivered to the client at regular, short intervals. Client feedback is used to make changes to the software specifications at any stage in the development.&lt;br /&gt;
&lt;br /&gt;
:*Open Collaboration: Open, unrestricted communication between programmers and clients are driving force behind agile development. The programming team must work closely with the customer and also communicate freely with each other. Face to face communication is preferred over specification documents, so working in an open office with no cubicles is ideal.&lt;br /&gt;
&lt;br /&gt;
:*Adaptability: In agile development, changes to the software specifications are welcome even in late stages of development. Principles like Don't Repeat Yourself (DRY) are used to facilitate this. Customers gets hands-on experience with the development of the product, hence they will be able to better communicate their needs. Hence, changes in the market or company structure can be accomodated in the software at any time of the development cycle.&lt;br /&gt;
&lt;br /&gt;
===''Some well known agile development methods''===&lt;br /&gt;
 &lt;br /&gt;
Well-known agile software development methods include:&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Specification_by_example Acceptance Test Driven Development (ATDD)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Dynamic_systems_development_method Dynamic Systems Development Method (DSDM)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Extreme_programming Extreme Programming (XP)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Feature-driven_development Feature Driven Development (FDD)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Lean_software_development Lean software development]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Scrum_(software_development) Scrum]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Story-driven_modeling Story-driven modeling]&lt;br /&gt;
&lt;br /&gt;
=='''Why Use Ruby on Rails for Agile?'''==&lt;br /&gt;
===''Speedy and Effective Development''===&lt;br /&gt;
:* Rails provides a very fast mode to write code in a multitude of languages such as html, [http://en.wikipedia.org/wiki/JavaScript javascript]&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/JavaScript&amp;lt;/ref&amp;gt;, ruby, css, etc that are used to build a web-application by providing preconfigured environments and wire-framed models.&lt;br /&gt;
:* Smoother pace of work, thus putting less pressure on the debugger when it comes to debugging.&lt;br /&gt;
:* Without investing much resources, it can build business models and deliver functionalities, giving scope to customers to innovate and input faster.&lt;br /&gt;
&lt;br /&gt;
===''Open Source''===&lt;br /&gt;
:* The frequently used features and common functionalities can be implemented easily as they are available as Ruby gems.&lt;br /&gt;
:* Provides developers the flexibility to customize and thus encouraging them to make large contributions.&lt;br /&gt;
===''Convention over Configuration''&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Convention_over_configuration&amp;lt;/ref&amp;gt;=== &lt;br /&gt;
:* By following this design paradigm, rails makes it simple for the developer as he need not specify or waste time to decide conventional aspects. &lt;br /&gt;
:* On agreeing to implement simple and common things in a single way, it makes it easy for any new developer to work immediately on an existing project. &lt;br /&gt;
:* This also rules out the need for explicit configuration ( except for unconventional/ customizable aspects).&lt;br /&gt;
&lt;br /&gt;
=='''How Rails supports Agile Methodologies'''==&lt;br /&gt;
===''Generators and Scaffolds''&amp;lt;ref&amp;gt;http://guides.rubyonrails.org/getting_started.html&amp;lt;/ref&amp;gt;===&lt;br /&gt;
:* The command “rails generate” uses templates to create models, controllers, views, databases, etc which helps to setup a test application.&lt;br /&gt;
   rails generate controller sample index&lt;br /&gt;
::The above command generates controllers sample_controller, views sample/index, assets, tests and other helpers with the route 'get' sample/index &lt;br /&gt;
:* The scaffolding can be easily done to deploy any basic web -application, and developers can extend them to implement their functionalities. This overcomes the initial hurdle.&lt;br /&gt;
   rails generate scaffold Exam course:string score:float&lt;br /&gt;
::It generates all the required directories for an MVC application for a model Exam and also creates db migration CreateExams&lt;br /&gt;
&lt;br /&gt;
===''Ready Setup for Multi-environment''===&lt;br /&gt;
:* Rails application provides development, production and testing environments with built-in configurations setup and thus is a huge time saver for an application which is required to be deployed in multiple environments.&lt;br /&gt;
:* The built-in rails web-server has the development environment as the default environment. &lt;br /&gt;
:* Simple deployment allows developers to have face-face client meetings and thus make instantaneous changes based on the client requirements.&lt;br /&gt;
&lt;br /&gt;
'''Built in configuration of DB in database.yml in development environment'''&lt;br /&gt;
  development:&lt;br /&gt;
  adapter: sqlite3&lt;br /&gt;
  database: db/development.sqlite3&lt;br /&gt;
  pool: 5&lt;br /&gt;
  timeout: 5000&lt;br /&gt;
&lt;br /&gt;
===''Test-Driven Development''&amp;lt;ref&amp;gt;http://www.agiledata.org/essays/tdd.html&amp;lt;/ref&amp;gt;===&lt;br /&gt;
:* Built in mocking and stubbing frameworks are available which assists “how to write code”. This follows a red, green and refactor which is an important aspect of agile development.&lt;br /&gt;
:* RSpec is one of the famous testing framework tools used with rails. &lt;br /&gt;
:* Other testing tools can also be swapped in.&lt;br /&gt;
&lt;br /&gt;
[[File:tdd39.jpg|center|alt=Test driven development| Fig 2: TDD cycle]]&lt;br /&gt;
&lt;br /&gt;
'''Below is an example code for test driven development.'''&lt;br /&gt;
&lt;br /&gt;
 describe &amp;quot;Static pages&amp;quot; do&lt;br /&gt;
  describe &amp;quot;Home page&amp;quot; do&lt;br /&gt;
    before { visit root_path }&lt;br /&gt;
    it &amp;quot;should have the words 'Backchannel App' in it&amp;quot; do&lt;br /&gt;
      expect(page).to have_content('Back Channel App')&lt;br /&gt;
  end&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
===''Don’t Repeat Yourself (DRY)''===&lt;br /&gt;
:* Repeated code is written in helpers and libraries, making a single destination and thus updations become simpler by updating at just one place.&lt;br /&gt;
:* [http://guides.rubyonrails.org/layouts_and_rendering.html Partials] are a way of rendering repeated HTML code. Rails understand a file which starts with an underscore, say, _partial.html as a partial to be included in the shared html file which renders it.&lt;br /&gt;
'''Using partials''':&lt;br /&gt;
:'''new.html.erb'''&lt;br /&gt;
&lt;br /&gt;
   New Venture&lt;br /&gt;
   &amp;lt;%= error_messages_for :venture%&amp;gt;&lt;br /&gt;
   &amp;lt;%= render partial: &amp;quot;form&amp;quot;, locals: {venture: @venture} %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:'''_form.html.erb'''&lt;br /&gt;
   &amp;lt;%= form_for(venture) do |f| %&amp;gt;   &lt;br /&gt;
      Venture name&lt;br /&gt;
      &amp;lt;%= f.text_field :name %&amp;gt;&lt;br /&gt;
      &amp;lt;%= f.submit %&amp;gt;    &lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===''Dependency Management''===&lt;br /&gt;
:* Rails acts more than a web framework by providing the necessary utility and support tools and adding dependencies to individual projects in a jiffy using the “bundler”. &lt;br /&gt;
:* This [http://bundler.io/ bundler]&amp;lt;ref&amp;gt;http://bundler.io/&amp;lt;/ref&amp;gt; installs all the relevant gem files and also can be updated when more dependencies are added. No need to search for packages or jars.&lt;br /&gt;
&lt;br /&gt;
===''Easy Migration''===&lt;br /&gt;
:* Rails helps you to keep easy track of database changes with the help of [http://guides.rubyonrails.org/migrations.html Migration]&amp;lt;ref&amp;gt;http://guides.rubyonrails.org/migrations.html&amp;lt;/ref&amp;gt; Objects. It gives the flexibility to rollback and update.&lt;br /&gt;
:* It also allows you to maintain various versions of database for the multi-environment. On running rake db::migrate, the desired database is migrated and deployed with the working rails server.&lt;br /&gt;
:* New technologies such as [http://coffeescript.org/ Coffeescript] can also be easily embedded by installing the relevant gems thus adapting to the changing technology.&lt;br /&gt;
&lt;br /&gt;
===''Assets Pipeline''&amp;lt;ref&amp;gt;http://guides.rubyonrails.org/asset_pipeline.html&amp;lt;/ref&amp;gt;===&lt;br /&gt;
:* The assets pipeline is a new feature embedded in rails ( which is now extracted into sprockets-rails gem), concatenates and compresses javascript and css files.&lt;br /&gt;
:* This renders a web page with reduced number of requests from the browser as files are grouped and whitespaces are trimmed.&lt;br /&gt;
:* Precompiled files can also be attached.&lt;br /&gt;
&lt;br /&gt;
=='''Comparison of Rails with other Agile Web Frameworks'''&amp;lt;ref&amp;gt;http://blog.websitesframeworks.com/2013/03/web-framework-comparison-matt-raible-opinion-138/&amp;lt;/ref&amp;gt;==&lt;br /&gt;
:* This graph shows some of Rabies matrix weights to compare rails with other agile web frameworks. Among the ones compared, Rails is one of the most favourite and production efficient web framework used. GWT and GRAILS also are on par with RAILS.&lt;br /&gt;
:* The graph depicts the five main features that any Agile Web Framework should support and these are supported by Rails thus giving both clients and developers a simple and efficient way to develop several complex web applications.&lt;br /&gt;
&lt;br /&gt;
[[File:Stats.JPG|25 px|upright=0.85|center|frame|alt=Puzzle globe logo|center| Fig 3:Comparison of Agile Web Frameworks]]&lt;br /&gt;
'''''Weights Explained'''''&lt;br /&gt;
:*''Components'': Reusable components accelerate development&lt;br /&gt;
:*''Templating'': Rating based on the number of UI templating options are available for the framework&lt;br /&gt;
:*''Plugins and Add-ons'': Rating based on if they framework has a plugin architecture and how many plugins are available&lt;br /&gt;
:*''Scalability'': Rating based on how much the framework relies on session state for functionality&lt;br /&gt;
:*''REST Support'': Does the framework have the ability to produce JSON and XML instead of simply returning HTML? Can it consume JSON and XML as well?&lt;br /&gt;
:*''Degree of Risk'': This rating is mostly for businesses. If the framework is new, there’s inherently some risk in choosing it for your applications&lt;br /&gt;
:*''Testing'': Tools for testing allow to find errors faster&lt;br /&gt;
&lt;br /&gt;
=='''Future of Agile in Rails'''&amp;lt;ref&amp;gt; http://www.richappsconsulting.com/blog/blog-detail/agile-web-development-with-rails-an-overview/ &amp;lt;/ref&amp;gt;==&lt;br /&gt;
Ruby on Rails is a framework that makes it easier to develop, deploy and maintain web applications. Soon after its initial release, Rails went from being an unfamiliar tool to being a wide-reaching phenomenon. It has become the framework of choice for the implementation of a wide range of Web 2.0 applications as it is both simple and subtle. Rails is often utilized by web developers for its suitability for short, client-driven projects. Many entrepreneurs and businesses have chosen Ruby on Rails to create their web application. Here are few well known web services that are run on Ruby on Rails:&lt;br /&gt;
&lt;br /&gt;
* [https://twitter.com Twitter]&lt;br /&gt;
* [http://www.groupon.com Groupon]&lt;br /&gt;
* [https://soundcloud.com SoundCloud]&lt;br /&gt;
* [https://github.com/ GitHub]&lt;br /&gt;
* [http://www.yellow.com YellowPages]&lt;br /&gt;
* [http://www.shopify.com Shopify]&lt;br /&gt;
&lt;br /&gt;
Due to its simple nature and easy to use features as well as the speed of project completion, Rails is an ideal platform for Agile development practices. Keeping in view its accordance with the Agile Manifesto, it is not hard to predict that Rails will be the future of Agile development.&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Sayenga</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/ch1_1w39_as&amp;diff=80078</id>
		<title>CSC/ECE 517 Fall 2013/ch1 1w39 as</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/ch1_1w39_as&amp;diff=80078"/>
		<updated>2013-10-08T03:42:00Z</updated>

		<summary type="html">&lt;p&gt;Sayenga: /* Agile development with Rails */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;='''Agile development with Rails'''=&lt;br /&gt;
&lt;br /&gt;
This article focuses on how Rails enables ’agile development&lt;br /&gt;
practices’ and the characteristics of Rails that support specific agile methodologies.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== '''Agile development''' ==&lt;br /&gt;
==='' What is Agile development? ''=== &lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Agile_software_development Agile development]&amp;lt;ref&amp;gt; http://en.wikipedia.org/wiki/Agile_software_development &amp;lt;/ref&amp;gt; is a methodology where requirements and solutions are developed based on [http://en.wikipedia.org/wiki/Iterative_and_incremental_development iterative and incremental development] &amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Iterative_and_incremental_development&amp;lt;/ref&amp;gt; through collaboration between self-organizing, cross-functional teams. Using agile development methodology, a high quality software can be developed by programmers in a minimal amount of time. By involving continuous planning, testing, integration, and other forms of continuous evolution of both the project and the software, it focuses on empowering people to collaborate and make decisions together quickly and effectively. Some of the process under agile development includes adaptive planning, evolutionary development and delivery, a time-boxed iterative approach, and encourages rapid and flexible response to change. It is a conceptual framework that promotes foreseen interactions throughout the development cycle.&lt;br /&gt;
&lt;br /&gt;
===''Why do we need Agile development?''===&lt;br /&gt;
&lt;br /&gt;
:*Visibility through active customer involvement&lt;br /&gt;
:*Flexibility/Agility - ability to accept changes&lt;br /&gt;
:*Quality - testing integrated throughout the lifecycle&lt;br /&gt;
:*Speedy delivery&lt;br /&gt;
:*Customer satisfaction - feeling of a right product&lt;br /&gt;
&lt;br /&gt;
[[File:agl39.jpg|center|alt=Agile development| Fig 1: Agile development]]&lt;br /&gt;
&lt;br /&gt;
===''Principles of agile development'' &amp;lt;ref&amp;gt; http://ruby.about.com/od/rubyonrails/a/agile.htm &amp;lt;/ref&amp;gt; ===&lt;br /&gt;
:*Iterative Development: Iterative development allows the clients to direct the development process in order to get the software features they want. Working software is delivered to the client at regular, short intervals. Client feedback is used to make changes to the software specifications at any stage in the development.&lt;br /&gt;
&lt;br /&gt;
:*Open Collaboration: Open, unrestricted communication between programmers and clients are driving force behind agile development. The programming team must work closely with the customer and also communicate freely with each other. Face to face communication is preferred over specification documents, so working in an open office with no cubicles is ideal.&lt;br /&gt;
&lt;br /&gt;
:*Adaptability: In agile development, changes to the software specifications are welcome even in late stages of development. Principles like Don't Repeat Yourself (DRY) are used to facilitate this. Customers gets hands-on experience with the development of the product, hence they will be able to better communicate their needs. Hence, changes in the market or company structure can be accomodated in the software at any time of the development cycle.&lt;br /&gt;
&lt;br /&gt;
===''Some well known agile development methods''===&lt;br /&gt;
 &lt;br /&gt;
Well-known agile software development methods include:&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Specification_by_example Acceptance Test Driven Development (ATDD)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Dynamic_systems_development_method Dynamic Systems Development Method (DSDM)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Extreme_programming Extreme Programming (XP)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Feature-driven_development Feature Driven Development (FDD)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Lean_software_development Lean software development]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Scrum_(software_development) Scrum]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Story-driven_modeling Story-driven modeling]&lt;br /&gt;
&lt;br /&gt;
=='''Why Use Ruby on Rails for Agile?'''==&lt;br /&gt;
===''Speedy and Effective Development''===&lt;br /&gt;
:* Rails provides a very fast mode to write code in a multitude of languages such as html, [http://en.wikipedia.org/wiki/JavaScript javascript]&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/JavaScript&amp;lt;/ref&amp;gt;, ruby, css, etc that are used to build a web-application by providing preconfigured environments and wire-framed models.&lt;br /&gt;
:* Smoother pace of work, thus putting less pressure on the debugger when it comes to debugging.&lt;br /&gt;
:* Without investing much resources, it can build business models and deliver functionalities, giving scope to customers to innovate and input faster.&lt;br /&gt;
&lt;br /&gt;
===''Open Source''===&lt;br /&gt;
:* The frequently used features and common functionalities can be implemented easily as they are available as Ruby gems.&lt;br /&gt;
:* Provides developers the flexibility to customize and thus encouraging them to make large contributions.&lt;br /&gt;
===''Convention over Configuration''&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Convention_over_configuration&amp;lt;/ref&amp;gt;=== &lt;br /&gt;
:* By following this design paradigm, rails makes it simple for the developer as he need not specify or waste time to decide conventional aspects. &lt;br /&gt;
:* On agreeing to implement simple and common things in a single way, it makes it easy for any new developer to work immediately on an existing project. &lt;br /&gt;
:* This also rules out the need for explicit configuration ( except for unconventional/ customizable aspects).&lt;br /&gt;
&lt;br /&gt;
=='''How Rails supports Agile Methodologies'''==&lt;br /&gt;
===''Generators and Scaffolds''&amp;lt;ref&amp;gt;http://guides.rubyonrails.org/getting_started.html&amp;lt;/ref&amp;gt;===&lt;br /&gt;
:* The command “rails generate” uses templates to create models, controllers, views, databases, etc which helps to setup a test application.&lt;br /&gt;
   rails generate controller sample index&lt;br /&gt;
::The above command generates controllers sample_controller, views sample/index, assets, tests and other helpers with the route 'get' sample/index &lt;br /&gt;
:* The scaffolding can be easily done to deploy any basic web -application, and developers can extend them to implement their functionalities. This overcomes the initial hurdle.&lt;br /&gt;
   rails generate scaffold Exam course:string score:float&lt;br /&gt;
::It generates all the required directories for an MVC application for a model Exam and also creates db migration CreateExams&lt;br /&gt;
&lt;br /&gt;
===''Ready Setup for Multi-environment''===&lt;br /&gt;
:* Rails application provides development, production and testing environments with built-in configurations setup and thus is a huge time saver for an application which is required to be deployed in multiple environments.&lt;br /&gt;
:* The built-in rails web-server has the development environment as the default environment. &lt;br /&gt;
:* Simple deployment allows developers to have face-face client meetings and thus make instantaneous changes based on the client requirements.&lt;br /&gt;
&lt;br /&gt;
'''Built in configuration of DB in database.yml in development environment'''&lt;br /&gt;
  development:&lt;br /&gt;
  adapter: sqlite3&lt;br /&gt;
  database: db/development.sqlite3&lt;br /&gt;
  pool: 5&lt;br /&gt;
  timeout: 5000&lt;br /&gt;
&lt;br /&gt;
===''Test-Driven Development''&amp;lt;ref&amp;gt;http://www.agiledata.org/essays/tdd.html&amp;lt;/ref&amp;gt;===&lt;br /&gt;
:* Built in mocking and stubbing frameworks are available which assists “how to write code”. This follows a red, green and refactor which is an important aspect of agile development.&lt;br /&gt;
:* RSpec is one of the famous testing framework tools used with rails. &lt;br /&gt;
:* Other testing tools can also be swapped in.&lt;br /&gt;
&lt;br /&gt;
[[File:tdd39.jpg|center|alt=Test driven development| Fig 2: TDD cycle]]&lt;br /&gt;
&lt;br /&gt;
Below is an example code for test driven development.&lt;br /&gt;
&lt;br /&gt;
 describe &amp;quot;Static pages&amp;quot; do&lt;br /&gt;
  describe &amp;quot;Home page&amp;quot; do&lt;br /&gt;
    before { visit root_path }&lt;br /&gt;
    it &amp;quot;should have the words 'Backchannel App' in it&amp;quot; do&lt;br /&gt;
      expect(page).to have_content('Back Channel App')&lt;br /&gt;
  end&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
===''Don’t Repeat Yourself (DRY)''===&lt;br /&gt;
:* Repeated code is written in helpers and libraries, making a single destination and thus updations become simpler by updating at just one place.&lt;br /&gt;
:* [http://guides.rubyonrails.org/layouts_and_rendering.html Partials] are a way of rendering repeated HTML code. Rails understand a file which starts with an underscore, say, _partial.html as a partial to be included in the shared html file which renders it.&lt;br /&gt;
'''Using partials''':&lt;br /&gt;
:'''new.html.erb'''&lt;br /&gt;
&lt;br /&gt;
   New Venture&lt;br /&gt;
   &amp;lt;%= error_messages_for :venture%&amp;gt;&lt;br /&gt;
   &amp;lt;%= render partial: &amp;quot;form&amp;quot;, locals: {venture: @venture} %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:'''_form.html.erb'''&lt;br /&gt;
   &amp;lt;%= form_for(venture) do |f| %&amp;gt;   &lt;br /&gt;
      Venture name&lt;br /&gt;
      &amp;lt;%= f.text_field :name %&amp;gt;&lt;br /&gt;
      &amp;lt;%= f.submit %&amp;gt;    &lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===''Dependency Management''===&lt;br /&gt;
:* Rails acts more than a web framework by providing the necessary utility and support tools and adding dependencies to individual projects in a jiffy using the “bundler”. &lt;br /&gt;
:* This [http://bundler.io/ bundler]&amp;lt;ref&amp;gt;http://bundler.io/&amp;lt;/ref&amp;gt; installs all the relevant gem files and also can be updated when more dependencies are added. No need to search for packages or jars.&lt;br /&gt;
&lt;br /&gt;
===''Easy Migration''===&lt;br /&gt;
:* Rails helps you to keep easy track of database changes with the help of [http://guides.rubyonrails.org/migrations.html Migration]&amp;lt;ref&amp;gt;http://guides.rubyonrails.org/migrations.html&amp;lt;/ref&amp;gt; Objects. It gives the flexibility to rollback and update.&lt;br /&gt;
:* It also allows you to maintain various versions of database for the multi-environment. On running rake db::migrate, the desired database is migrated and deployed with the working rails server.&lt;br /&gt;
:* New technologies such as [http://coffeescript.org/ Coffeescript] can also be easily embedded by installing the relevant gems thus adapting to the changing technology.&lt;br /&gt;
&lt;br /&gt;
===''Assets Pipeline''&amp;lt;ref&amp;gt;http://guides.rubyonrails.org/asset_pipeline.html&amp;lt;/ref&amp;gt;===&lt;br /&gt;
:* The assets pipeline is a new feature embedded in rails ( which is now extracted into sprockets-rails gem), concatenates and compresses javascript and css files.&lt;br /&gt;
:* This renders a web page with reduced number of requests from the browser as files are grouped and whitespaces are trimmed.&lt;br /&gt;
:* Precompiled files can also be attached.&lt;br /&gt;
&lt;br /&gt;
=='''Comparison of Rails with other Agile Web Frameworks'''&amp;lt;ref&amp;gt;http://blog.websitesframeworks.com/2013/03/web-framework-comparison-matt-raible-opinion-138/&amp;lt;/ref&amp;gt;==&lt;br /&gt;
:* This graph shows some of Rabies matrix weights to compare rails with other agile web frameworks. Among the ones compared, Rails is one of the most favourite and production efficient web framework used. GWT and GRAILS also are on par with RAILS.&lt;br /&gt;
:* The graph depicts the five main features that any Agile Web Framework should support and these are supported by Rails thus giving both clients and developers a simple and efficient way to develop several complex web applications.&lt;br /&gt;
&lt;br /&gt;
[[File:Stats.JPG|25 px|upright=0.85|center|frame|alt=Puzzle globe logo|center| Fig 3:Comparison of Agile Web Frameworks]]&lt;br /&gt;
'''''Weights Explained'''''&lt;br /&gt;
:*''Components'': Reusable components accelerate development&lt;br /&gt;
:*''Templating'': Rating based on the number of UI templating options are available for the framework&lt;br /&gt;
:*''Plugins and Add-ons'': Rating based on if they framework has a plugin architecture and how many plugins are available&lt;br /&gt;
:*''Scalability'': Rating based on how much the framework relies on session state for functionality&lt;br /&gt;
:*''REST Support'': Does the framework have the ability to produce JSON and XML instead of simply returning HTML? Can it consume JSON and XML as well?&lt;br /&gt;
:*''Degree of Risk'': This rating is mostly for businesses. If the framework is new, there’s inherently some risk in choosing it for your applications&lt;br /&gt;
:*''Testing'': Tools for testing allow to find errors faster&lt;br /&gt;
&lt;br /&gt;
=='''Future of Agile in Rails'''&amp;lt;ref&amp;gt; http://www.richappsconsulting.com/blog/blog-detail/agile-web-development-with-rails-an-overview/ &amp;lt;/ref&amp;gt;==&lt;br /&gt;
Ruby on Rails is a framework that makes it easier to develop, deploy and maintain web applications. Soon after its initial release, Rails went from being an unfamiliar tool to being a wide-reaching phenomenon. It has become the framework of choice for the implementation of a wide range of Web 2.0 applications as it is both simple and subtle. Rails is often utilized by web developers for its suitability for short, client-driven projects. Many entrepreneurs and businesses have chosen Ruby on Rails to create their web application. Here are few well known web services that are run on Ruby on Rails:&lt;br /&gt;
&lt;br /&gt;
* [https://twitter.com Twitter]&lt;br /&gt;
* [http://www.groupon.com Groupon]&lt;br /&gt;
* [https://soundcloud.com SoundCloud]&lt;br /&gt;
* [https://github.com/ GitHub]&lt;br /&gt;
* [http://www.yellow.com YellowPages]&lt;br /&gt;
* [http://www.shopify.com Shopify]&lt;br /&gt;
&lt;br /&gt;
Due to its simple nature and easy to use features as well as the speed of project completion, Rails is an ideal platform for Agile development practices. Keeping in view its accordance with the Agile Manifesto, it is not hard to predict that Rails will be the future of Agile development.&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Sayenga</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/ch1_1w39_as&amp;diff=80075</id>
		<title>CSC/ECE 517 Fall 2013/ch1 1w39 as</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/ch1_1w39_as&amp;diff=80075"/>
		<updated>2013-10-08T03:36:18Z</updated>

		<summary type="html">&lt;p&gt;Sayenga: /* Comparison of Rails with other Agile Web Frameworkshttp://blog.websitesframeworks.com/2013/03/web-framework-comparison-matt-raible-opinion-138/ */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''Agile development with Rails''' ==&lt;br /&gt;
&lt;br /&gt;
This article focuses on how Rails enables ’agile development&lt;br /&gt;
practices’ and the characteristics of Rails that support specific agile methodologies.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== '''Agile development''' ==&lt;br /&gt;
==='' What is Agile development? ''=== &lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Agile_software_development Agile development]&amp;lt;ref&amp;gt; http://en.wikipedia.org/wiki/Agile_software_development &amp;lt;/ref&amp;gt; is a methodology where requirements and solutions are developed based on [http://en.wikipedia.org/wiki/Iterative_and_incremental_development iterative and incremental development] &amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Iterative_and_incremental_development&amp;lt;/ref&amp;gt; through collaboration between self-organizing, cross-functional teams. Using agile development methodology, a high quality software can be developed by programmers in a minimal amount of time. By involving continuous planning, testing, integration, and other forms of continuous evolution of both the project and the software, it focuses on empowering people to collaborate and make decisions together quickly and effectively. Some of the process under agile development includes adaptive planning, evolutionary development and delivery, a time-boxed iterative approach, and encourages rapid and flexible response to change. It is a conceptual framework that promotes foreseen interactions throughout the development cycle.&lt;br /&gt;
&lt;br /&gt;
===''Why do we need Agile development?''===&lt;br /&gt;
&lt;br /&gt;
:*Visibility through active customer involvement&lt;br /&gt;
:*Flexibility/Agility - ability to accept changes&lt;br /&gt;
:*Quality - testing integrated throughout the lifecycle&lt;br /&gt;
:*Speedy delivery&lt;br /&gt;
:*Customer satisfaction - feeling of a right product&lt;br /&gt;
&lt;br /&gt;
[[File:agl39.jpg|center|alt=Agile development| Fig 1: Agile development]]&lt;br /&gt;
&lt;br /&gt;
===''Principles of agile development'' &amp;lt;ref&amp;gt; http://ruby.about.com/od/rubyonrails/a/agile.htm &amp;lt;/ref&amp;gt; ===&lt;br /&gt;
:*Iterative Development: Iterative development allows the clients to direct the development process in order to get the software features they want. Working software is delivered to the client at regular, short intervals. Client feedback is used to make changes to the software specifications at any stage in the development.&lt;br /&gt;
&lt;br /&gt;
:*Open Collaboration: Open, unrestricted communication between programmers and clients are driving force behind agile development. The programming team must work closely with the customer and also communicate freely with each other. Face to face communication is preferred over specification documents, so working in an open office with no cubicles is ideal.&lt;br /&gt;
&lt;br /&gt;
:*Adaptability: In agile development, changes to the software specifications are welcome even in late stages of development. Principles like Don't Repeat Yourself (DRY) are used to facilitate this. Customers gets hands-on experience with the development of the product, hence they will be able to better communicate their needs. Hence, changes in the market or company structure can be accomodated in the software at any time of the development cycle.&lt;br /&gt;
&lt;br /&gt;
===''Some well known agile development methods''===&lt;br /&gt;
 &lt;br /&gt;
Well-known agile software development methods include:&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Specification_by_example Acceptance Test Driven Development (ATDD)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Dynamic_systems_development_method Dynamic Systems Development Method (DSDM)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Extreme_programming Extreme Programming (XP)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Feature-driven_development Feature Driven Development (FDD)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Lean_software_development Lean software development]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Scrum_(software_development) Scrum]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Story-driven_modeling Story-driven modeling]&lt;br /&gt;
&lt;br /&gt;
=='''Why Use Ruby on Rails for Agile?'''==&lt;br /&gt;
===''Speedy and Effective Development''===&lt;br /&gt;
:* Rails provides a very fast mode to write code in a multitude of languages such as html, [http://en.wikipedia.org/wiki/JavaScript javascript]&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/JavaScript&amp;lt;/ref&amp;gt;, ruby, css, etc that are used to build a web-application by providing preconfigured environments and wire-framed models.&lt;br /&gt;
:* Smoother pace of work, thus putting less pressure on the debugger when it comes to debugging.&lt;br /&gt;
:* Without investing much resources, it can build business models and deliver functionalities, giving scope to customers to innovate and input faster.&lt;br /&gt;
&lt;br /&gt;
===''Open Source''===&lt;br /&gt;
:* The frequently used features and common functionalities can be implemented easily as they are available as Ruby gems.&lt;br /&gt;
:* Provides developers the flexibility to customize and thus encouraging them to make large contributions.&lt;br /&gt;
===''Convention over Configuration''&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Convention_over_configuration&amp;lt;/ref&amp;gt;=== &lt;br /&gt;
:* By following this design paradigm, rails makes it simple for the developer as he need not specify or waste time to decide conventional aspects. &lt;br /&gt;
:* On agreeing to implement simple and common things in a single way, it makes it easy for any new developer to work immediately on an existing project. &lt;br /&gt;
:* This also rules out the need for explicit configuration ( except for unconventional/ customizable aspects).&lt;br /&gt;
&lt;br /&gt;
=='''How Rails supports Agile Methodologies'''==&lt;br /&gt;
===''Generators and Scaffolds''&amp;lt;ref&amp;gt;http://guides.rubyonrails.org/getting_started.html&amp;lt;/ref&amp;gt;===&lt;br /&gt;
:* The command “rails generate” uses templates to create models, controllers, views, databases, etc which helps to setup a test application.&lt;br /&gt;
   rails generate controller sample index&lt;br /&gt;
::The above command generates controllers sample_controller, views sample/index, assets, tests and other helpers with the route 'get' sample/index &lt;br /&gt;
:* The scaffolding can be easily done to deploy any basic web -application, and developers can extend them to implement their functionalities. This overcomes the initial hurdle.&lt;br /&gt;
   rails generate scaffold Exam course:string score:float&lt;br /&gt;
::It generates all the required directories for an MVC application for a model Exam and also creates db migration CreateExams&lt;br /&gt;
&lt;br /&gt;
===''Ready Setup for Multi-environment''===&lt;br /&gt;
:* Rails application provides development, production and testing environments with built-in configurations setup and thus is a huge time saver for an application which is required to be deployed in multiple environments.&lt;br /&gt;
:* The built-in rails web-server has the development environment as the default environment. &lt;br /&gt;
:* Simple deployment allows developers to have face-face client meetings and thus make instantaneous changes based on the client requirements.&lt;br /&gt;
&lt;br /&gt;
'''Built in configuration of DB in database.yml in development environment'''&lt;br /&gt;
  development:&lt;br /&gt;
  adapter: sqlite3&lt;br /&gt;
  database: db/development.sqlite3&lt;br /&gt;
  pool: 5&lt;br /&gt;
  timeout: 5000&lt;br /&gt;
&lt;br /&gt;
===''Test-Driven Development''&amp;lt;ref&amp;gt;http://www.agiledata.org/essays/tdd.html&amp;lt;/ref&amp;gt;===&lt;br /&gt;
:* Built in mocking and stubbing frameworks are available which assists “how to write code”. This follows a red, green and refactor which is an important aspect of agile development.&lt;br /&gt;
:* RSpec is one of the famous testing framework tools used with rails. &lt;br /&gt;
:* Other testing tools can also be swapped in.&lt;br /&gt;
&lt;br /&gt;
[[File:tdd39.jpg|center|alt=Test driven development| Fig 2: TDD cycle]]&lt;br /&gt;
&lt;br /&gt;
Below is an example code for test driven development.&lt;br /&gt;
&lt;br /&gt;
 describe &amp;quot;Static pages&amp;quot; do&lt;br /&gt;
  describe &amp;quot;Home page&amp;quot; do&lt;br /&gt;
    before { visit root_path }&lt;br /&gt;
    it &amp;quot;should have the words 'Backchannel App' in it&amp;quot; do&lt;br /&gt;
      expect(page).to have_content('Back Channel App')&lt;br /&gt;
  end&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
===''Don’t Repeat Yourself (DRY)''===&lt;br /&gt;
:* Repeated code is written in helpers and libraries, making a single destination and thus updations become simpler by updating at just one place.&lt;br /&gt;
:* [http://guides.rubyonrails.org/layouts_and_rendering.html Partials] are a way of rendering repeated HTML code. Rails understand a file which starts with an underscore, say, _partial.html as a partial to be included in the shared html file which renders it.&lt;br /&gt;
'''Using partials''':&lt;br /&gt;
:'''new.html.erb'''&lt;br /&gt;
&lt;br /&gt;
   New Venture&lt;br /&gt;
   &amp;lt;%= error_messages_for :venture%&amp;gt;&lt;br /&gt;
   &amp;lt;%= render partial: &amp;quot;form&amp;quot;, locals: {venture: @venture} %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:'''_form.html.erb'''&lt;br /&gt;
   &amp;lt;%= form_for(venture) do |f| %&amp;gt;   &lt;br /&gt;
      Venture name&lt;br /&gt;
      &amp;lt;%= f.text_field :name %&amp;gt;&lt;br /&gt;
      &amp;lt;%= f.submit %&amp;gt;    &lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===''Dependency Management''===&lt;br /&gt;
:* Rails acts more than a web framework by providing the necessary utility and support tools and adding dependencies to individual projects in a jiffy using the “bundler”. &lt;br /&gt;
:* This [http://bundler.io/ bundler]&amp;lt;ref&amp;gt;http://bundler.io/&amp;lt;/ref&amp;gt; installs all the relevant gem files and also can be updated when more dependencies are added. No need to search for packages or jars.&lt;br /&gt;
&lt;br /&gt;
===''Easy Migration''===&lt;br /&gt;
:* Rails helps you to keep easy track of database changes with the help of [http://guides.rubyonrails.org/migrations.html Migration]&amp;lt;ref&amp;gt;http://guides.rubyonrails.org/migrations.html&amp;lt;/ref&amp;gt; Objects. It gives the flexibility to rollback and update.&lt;br /&gt;
:* It also allows you to maintain various versions of database for the multi-environment. On running rake db::migrate, the desired database is migrated and deployed with the working rails server.&lt;br /&gt;
:* New technologies such as [http://coffeescript.org/ Coffeescript] can also be easily embedded by installing the relevant gems thus adapting to the changing technology.&lt;br /&gt;
&lt;br /&gt;
===''Assets Pipeline''&amp;lt;ref&amp;gt;http://guides.rubyonrails.org/asset_pipeline.html&amp;lt;/ref&amp;gt;===&lt;br /&gt;
:* The assets pipeline is a new feature embedded in rails ( which is now extracted into sprockets-rails gem), concatenates and compresses javascript and css files.&lt;br /&gt;
:* This renders a web page with reduced number of requests from the browser as files are grouped and whitespaces are trimmed.&lt;br /&gt;
:* Precompiled files can also be attached.&lt;br /&gt;
&lt;br /&gt;
=='''Comparison of Rails with other Agile Web Frameworks'''&amp;lt;ref&amp;gt;http://blog.websitesframeworks.com/2013/03/web-framework-comparison-matt-raible-opinion-138/&amp;lt;/ref&amp;gt;==&lt;br /&gt;
:* This graph shows some of Rabies matrix weights to compare rails with other agile web frameworks. Among the ones compared, Rails is one of the most favourite and production efficient web framework used. GWT and GRAILS also are on par with RAILS.&lt;br /&gt;
:* The graph depicts the five main features that any Agile Web Framework should support and these are supported by Rails thus giving both clients and developers a simple and efficient way to develop several complex web applications.&lt;br /&gt;
&lt;br /&gt;
[[File:Stats.JPG|25 px|upright=0.85|center|frame|alt=Puzzle globe logo|center| Fig 3:Comparison of Agile Web Frameworks]]&lt;br /&gt;
'''''Weights Explained'''''&lt;br /&gt;
:*''Components'': Reusable components accelerate development&lt;br /&gt;
:*''Templating'': Rating based on the number of UI templating options are available for the framework&lt;br /&gt;
:*''Plugins and Add-ons'': Rating based on if they framework has a plugin architecture and how many plugins are available&lt;br /&gt;
:*''Scalability'': Rating based on how much the framework relies on session state for functionality&lt;br /&gt;
:*''REST Support'': Does the framework have the ability to produce JSON and XML instead of simply returning HTML? Can it consume JSON and XML as well?&lt;br /&gt;
:*''Degree of Risk'': This rating is mostly for businesses. If the framework is new, there’s inherently some risk in choosing it for your applications&lt;br /&gt;
:*''Testing'': Tools for testing allow to find errors faster&lt;br /&gt;
&lt;br /&gt;
=='''Future of Agile in Rails'''&amp;lt;ref&amp;gt; http://www.richappsconsulting.com/blog/blog-detail/agile-web-development-with-rails-an-overview/ &amp;lt;/ref&amp;gt;==&lt;br /&gt;
Ruby on Rails is a framework that makes it easier to develop, deploy and maintain web applications. Soon after its initial release, Rails went from being an unfamiliar tool to being a wide-reaching phenomenon. It has become the framework of choice for the implementation of a wide range of Web 2.0 applications as it is both simple and subtle. Rails is often utilized by web developers for its suitability for short, client-driven projects. Many entrepreneurs and businesses have chosen Ruby on Rails to create their web application. Here are few well known web services that are run on Ruby on Rails:&lt;br /&gt;
&lt;br /&gt;
* [https://twitter.com Twitter]&lt;br /&gt;
* [http://www.groupon.com Groupon]&lt;br /&gt;
* [https://soundcloud.com SoundCloud]&lt;br /&gt;
* [https://github.com/ GitHub]&lt;br /&gt;
* [http://www.yellow.com YellowPages]&lt;br /&gt;
* [http://www.shopify.com Shopify]&lt;br /&gt;
&lt;br /&gt;
Due to its simple nature and easy to use features as well as the speed of project completion, Rails is an ideal platform for Agile development practices. Keeping in view its accordance with the Agile Manifesto, it is not hard to predict that Rails will be the future of Agile development.&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Sayenga</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/ch1_1w39_as&amp;diff=80074</id>
		<title>CSC/ECE 517 Fall 2013/ch1 1w39 as</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/ch1_1w39_as&amp;diff=80074"/>
		<updated>2013-10-08T03:35:31Z</updated>

		<summary type="html">&lt;p&gt;Sayenga: /* Comparison of Rails with other Agile Web Frameworkshttp://blog.websitesframeworks.com/2013/03/web-framework-comparison-matt-raible-opinion-138/ */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''Agile development with Rails''' ==&lt;br /&gt;
&lt;br /&gt;
This article focuses on how Rails enables ’agile development&lt;br /&gt;
practices’ and the characteristics of Rails that support specific agile methodologies.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== '''Agile development''' ==&lt;br /&gt;
==='' What is Agile development? ''=== &lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Agile_software_development Agile development]&amp;lt;ref&amp;gt; http://en.wikipedia.org/wiki/Agile_software_development &amp;lt;/ref&amp;gt; is a methodology where requirements and solutions are developed based on [http://en.wikipedia.org/wiki/Iterative_and_incremental_development iterative and incremental development] &amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Iterative_and_incremental_development&amp;lt;/ref&amp;gt; through collaboration between self-organizing, cross-functional teams. Using agile development methodology, a high quality software can be developed by programmers in a minimal amount of time. By involving continuous planning, testing, integration, and other forms of continuous evolution of both the project and the software, it focuses on empowering people to collaborate and make decisions together quickly and effectively. Some of the process under agile development includes adaptive planning, evolutionary development and delivery, a time-boxed iterative approach, and encourages rapid and flexible response to change. It is a conceptual framework that promotes foreseen interactions throughout the development cycle.&lt;br /&gt;
&lt;br /&gt;
===''Why do we need Agile development?''===&lt;br /&gt;
&lt;br /&gt;
:*Visibility through active customer involvement&lt;br /&gt;
:*Flexibility/Agility - ability to accept changes&lt;br /&gt;
:*Quality - testing integrated throughout the lifecycle&lt;br /&gt;
:*Speedy delivery&lt;br /&gt;
:*Customer satisfaction - feeling of a right product&lt;br /&gt;
&lt;br /&gt;
[[File:agl39.jpg|center|alt=Agile development| Fig 1: Agile development]]&lt;br /&gt;
&lt;br /&gt;
===''Principles of agile development'' &amp;lt;ref&amp;gt; http://ruby.about.com/od/rubyonrails/a/agile.htm &amp;lt;/ref&amp;gt; ===&lt;br /&gt;
:*Iterative Development: Iterative development allows the clients to direct the development process in order to get the software features they want. Working software is delivered to the client at regular, short intervals. Client feedback is used to make changes to the software specifications at any stage in the development.&lt;br /&gt;
&lt;br /&gt;
:*Open Collaboration: Open, unrestricted communication between programmers and clients are driving force behind agile development. The programming team must work closely with the customer and also communicate freely with each other. Face to face communication is preferred over specification documents, so working in an open office with no cubicles is ideal.&lt;br /&gt;
&lt;br /&gt;
:*Adaptability: In agile development, changes to the software specifications are welcome even in late stages of development. Principles like Don't Repeat Yourself (DRY) are used to facilitate this. Customers gets hands-on experience with the development of the product, hence they will be able to better communicate their needs. Hence, changes in the market or company structure can be accomodated in the software at any time of the development cycle.&lt;br /&gt;
&lt;br /&gt;
===''Some well known agile development methods''===&lt;br /&gt;
 &lt;br /&gt;
Well-known agile software development methods include:&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Specification_by_example Acceptance Test Driven Development (ATDD)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Dynamic_systems_development_method Dynamic Systems Development Method (DSDM)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Extreme_programming Extreme Programming (XP)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Feature-driven_development Feature Driven Development (FDD)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Lean_software_development Lean software development]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Scrum_(software_development) Scrum]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Story-driven_modeling Story-driven modeling]&lt;br /&gt;
&lt;br /&gt;
=='''Why Use Ruby on Rails for Agile?'''==&lt;br /&gt;
===''Speedy and Effective Development''===&lt;br /&gt;
:* Rails provides a very fast mode to write code in a multitude of languages such as html, [http://en.wikipedia.org/wiki/JavaScript javascript]&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/JavaScript&amp;lt;/ref&amp;gt;, ruby, css, etc that are used to build a web-application by providing preconfigured environments and wire-framed models.&lt;br /&gt;
:* Smoother pace of work, thus putting less pressure on the debugger when it comes to debugging.&lt;br /&gt;
:* Without investing much resources, it can build business models and deliver functionalities, giving scope to customers to innovate and input faster.&lt;br /&gt;
&lt;br /&gt;
===''Open Source''===&lt;br /&gt;
:* The frequently used features and common functionalities can be implemented easily as they are available as Ruby gems.&lt;br /&gt;
:* Provides developers the flexibility to customize and thus encouraging them to make large contributions.&lt;br /&gt;
===''Convention over Configuration''&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Convention_over_configuration&amp;lt;/ref&amp;gt;=== &lt;br /&gt;
:* By following this design paradigm, rails makes it simple for the developer as he need not specify or waste time to decide conventional aspects. &lt;br /&gt;
:* On agreeing to implement simple and common things in a single way, it makes it easy for any new developer to work immediately on an existing project. &lt;br /&gt;
:* This also rules out the need for explicit configuration ( except for unconventional/ customizable aspects).&lt;br /&gt;
&lt;br /&gt;
=='''How Rails supports Agile Methodologies'''==&lt;br /&gt;
===''Generators and Scaffolds''&amp;lt;ref&amp;gt;http://guides.rubyonrails.org/getting_started.html&amp;lt;/ref&amp;gt;===&lt;br /&gt;
:* The command “rails generate” uses templates to create models, controllers, views, databases, etc which helps to setup a test application.&lt;br /&gt;
   rails generate controller sample index&lt;br /&gt;
::The above command generates controllers sample_controller, views sample/index, assets, tests and other helpers with the route 'get' sample/index &lt;br /&gt;
:* The scaffolding can be easily done to deploy any basic web -application, and developers can extend them to implement their functionalities. This overcomes the initial hurdle.&lt;br /&gt;
   rails generate scaffold Exam course:string score:float&lt;br /&gt;
::It generates all the required directories for an MVC application for a model Exam and also creates db migration CreateExams&lt;br /&gt;
&lt;br /&gt;
===''Ready Setup for Multi-environment''===&lt;br /&gt;
:* Rails application provides development, production and testing environments with built-in configurations setup and thus is a huge time saver for an application which is required to be deployed in multiple environments.&lt;br /&gt;
:* The built-in rails web-server has the development environment as the default environment. &lt;br /&gt;
:* Simple deployment allows developers to have face-face client meetings and thus make instantaneous changes based on the client requirements.&lt;br /&gt;
&lt;br /&gt;
'''Built in configuration of DB in database.yml in development environment'''&lt;br /&gt;
  development:&lt;br /&gt;
  adapter: sqlite3&lt;br /&gt;
  database: db/development.sqlite3&lt;br /&gt;
  pool: 5&lt;br /&gt;
  timeout: 5000&lt;br /&gt;
&lt;br /&gt;
===''Test-Driven Development''&amp;lt;ref&amp;gt;http://www.agiledata.org/essays/tdd.html&amp;lt;/ref&amp;gt;===&lt;br /&gt;
:* Built in mocking and stubbing frameworks are available which assists “how to write code”. This follows a red, green and refactor which is an important aspect of agile development.&lt;br /&gt;
:* RSpec is one of the famous testing framework tools used with rails. &lt;br /&gt;
:* Other testing tools can also be swapped in.&lt;br /&gt;
&lt;br /&gt;
[[File:tdd39.jpg|center|alt=Test driven development| Fig 2: TDD cycle]]&lt;br /&gt;
&lt;br /&gt;
Below is an example code for test driven development.&lt;br /&gt;
&lt;br /&gt;
 describe &amp;quot;Static pages&amp;quot; do&lt;br /&gt;
  describe &amp;quot;Home page&amp;quot; do&lt;br /&gt;
    before { visit root_path }&lt;br /&gt;
    it &amp;quot;should have the words 'Backchannel App' in it&amp;quot; do&lt;br /&gt;
      expect(page).to have_content('Back Channel App')&lt;br /&gt;
  end&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
===''Don’t Repeat Yourself (DRY)''===&lt;br /&gt;
:* Repeated code is written in helpers and libraries, making a single destination and thus updations become simpler by updating at just one place.&lt;br /&gt;
:* [http://guides.rubyonrails.org/layouts_and_rendering.html Partials] are a way of rendering repeated HTML code. Rails understand a file which starts with an underscore, say, _partial.html as a partial to be included in the shared html file which renders it.&lt;br /&gt;
'''Using partials''':&lt;br /&gt;
:'''new.html.erb'''&lt;br /&gt;
&lt;br /&gt;
   New Venture&lt;br /&gt;
   &amp;lt;%= error_messages_for :venture%&amp;gt;&lt;br /&gt;
   &amp;lt;%= render partial: &amp;quot;form&amp;quot;, locals: {venture: @venture} %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:'''_form.html.erb'''&lt;br /&gt;
   &amp;lt;%= form_for(venture) do |f| %&amp;gt;   &lt;br /&gt;
      Venture name&lt;br /&gt;
      &amp;lt;%= f.text_field :name %&amp;gt;&lt;br /&gt;
      &amp;lt;%= f.submit %&amp;gt;    &lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===''Dependency Management''===&lt;br /&gt;
:* Rails acts more than a web framework by providing the necessary utility and support tools and adding dependencies to individual projects in a jiffy using the “bundler”. &lt;br /&gt;
:* This [http://bundler.io/ bundler]&amp;lt;ref&amp;gt;http://bundler.io/&amp;lt;/ref&amp;gt; installs all the relevant gem files and also can be updated when more dependencies are added. No need to search for packages or jars.&lt;br /&gt;
&lt;br /&gt;
===''Easy Migration''===&lt;br /&gt;
:* Rails helps you to keep easy track of database changes with the help of [http://guides.rubyonrails.org/migrations.html Migration]&amp;lt;ref&amp;gt;http://guides.rubyonrails.org/migrations.html&amp;lt;/ref&amp;gt; Objects. It gives the flexibility to rollback and update.&lt;br /&gt;
:* It also allows you to maintain various versions of database for the multi-environment. On running rake db::migrate, the desired database is migrated and deployed with the working rails server.&lt;br /&gt;
:* New technologies such as [http://coffeescript.org/ Coffeescript] can also be easily embedded by installing the relevant gems thus adapting to the changing technology.&lt;br /&gt;
&lt;br /&gt;
===''Assets Pipeline''&amp;lt;ref&amp;gt;http://guides.rubyonrails.org/asset_pipeline.html&amp;lt;/ref&amp;gt;===&lt;br /&gt;
:* The assets pipeline is a new feature embedded in rails ( which is now extracted into sprockets-rails gem), concatenates and compresses javascript and css files.&lt;br /&gt;
:* This renders a web page with reduced number of requests from the browser as files are grouped and whitespaces are trimmed.&lt;br /&gt;
:* Precompiled files can also be attached.&lt;br /&gt;
&lt;br /&gt;
=='''Comparison of Rails with other Agile Web Frameworks'''&amp;lt;ref&amp;gt;http://blog.websitesframeworks.com/2013/03/web-framework-comparison-matt-raible-opinion-138/&amp;lt;/ref&amp;gt;==&lt;br /&gt;
:* This graph shows some of Rabies matrix weights to compare rails with other agile web frameworks. Among the ones compared, Rails is one of the most favourite and production efficient web framework used. GWT and GRAILS also are on par with RAILS.&lt;br /&gt;
:* The graph depicts the five main things that any agile web framework should support and these are supported by rails thus giving both clients and developers a simple and efficient way to develop several complex web applications.&lt;br /&gt;
&lt;br /&gt;
[[File:Stats.JPG|25 px|upright=0.85|center|frame|alt=Puzzle globe logo|center| Fig 3:Comparison of Agile Web Frameworks]]&lt;br /&gt;
'''''Weights Explained'''''&lt;br /&gt;
:*''Components'': Reusable components accelerate development&lt;br /&gt;
:*''Templating'': Rating based on the number of UI templating options are available for the framework&lt;br /&gt;
:*''Plugins and Add-ons'': Rating based on if they framework has a plugin architecture and how many plugins are available&lt;br /&gt;
:*''Scalability'': Rating based on how much the framework relies on session state for functionality&lt;br /&gt;
:*''REST Support'': Does the framework have the ability to produce JSON and XML instead of simply returning HTML? Can it consume JSON and XML as well?&lt;br /&gt;
:*''Degree of Risk'': This rating is mostly for businesses. If the framework is new, there’s inherently some risk in choosing it for your applications&lt;br /&gt;
:*''Testing'': Tools for testing allow to find errors faster&lt;br /&gt;
&lt;br /&gt;
=='''Future of Agile in Rails'''&amp;lt;ref&amp;gt; http://www.richappsconsulting.com/blog/blog-detail/agile-web-development-with-rails-an-overview/ &amp;lt;/ref&amp;gt;==&lt;br /&gt;
Ruby on Rails is a framework that makes it easier to develop, deploy and maintain web applications. Soon after its initial release, Rails went from being an unfamiliar tool to being a wide-reaching phenomenon. It has become the framework of choice for the implementation of a wide range of Web 2.0 applications as it is both simple and subtle. Rails is often utilized by web developers for its suitability for short, client-driven projects. Many entrepreneurs and businesses have chosen Ruby on Rails to create their web application. Here are few well known web services that are run on Ruby on Rails:&lt;br /&gt;
&lt;br /&gt;
* [https://twitter.com Twitter]&lt;br /&gt;
* [http://www.groupon.com Groupon]&lt;br /&gt;
* [https://soundcloud.com SoundCloud]&lt;br /&gt;
* [https://github.com/ GitHub]&lt;br /&gt;
* [http://www.yellow.com YellowPages]&lt;br /&gt;
* [http://www.shopify.com Shopify]&lt;br /&gt;
&lt;br /&gt;
Due to its simple nature and easy to use features as well as the speed of project completion, Rails is an ideal platform for Agile development practices. Keeping in view its accordance with the Agile Manifesto, it is not hard to predict that Rails will be the future of Agile development.&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Sayenga</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/ch1_1w39_as&amp;diff=80068</id>
		<title>CSC/ECE 517 Fall 2013/ch1 1w39 as</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/ch1_1w39_as&amp;diff=80068"/>
		<updated>2013-10-08T03:32:05Z</updated>

		<summary type="html">&lt;p&gt;Sayenga: /* Dependency Management */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''Agile development with Rails''' ==&lt;br /&gt;
&lt;br /&gt;
This article focuses on how Rails enables ’agile development&lt;br /&gt;
practices’ and the characteristics of Rails that support specific agile methodologies.&lt;br /&gt;
&lt;br /&gt;
{{TOC limit}}&lt;br /&gt;
&lt;br /&gt;
== '''Agile development''' ==&lt;br /&gt;
==='' What is Agile development? ''=== &lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Agile_software_development Agile development]&amp;lt;ref&amp;gt; http://en.wikipedia.org/wiki/Agile_software_development &amp;lt;/ref&amp;gt; is a methodology where requirements and solutions are developed based on [http://en.wikipedia.org/wiki/Iterative_and_incremental_development iterative and incremental development] &amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Iterative_and_incremental_development&amp;lt;/ref&amp;gt; through collaboration between self-organizing, cross-functional teams. Using agile development methodology, a high quality software can be developed by programmers in a minimal amount of time. By involving continuous planning, testing, integration, and other forms of continuous evolution of both the project and the software, it focuses on empowering people to collaborate and make decisions together quickly and effectively. Some of the process under agile development includes adaptive planning, evolutionary development and delivery, a time-boxed iterative approach, and encourages rapid and flexible response to change. It is a conceptual framework that promotes foreseen interactions throughout the development cycle.&lt;br /&gt;
&lt;br /&gt;
===''Why do we need Agile development?''===&lt;br /&gt;
&lt;br /&gt;
:*Visibility through active customer involvement&lt;br /&gt;
:*Flexibility/Agility - ability to accept changes&lt;br /&gt;
:*Quality - testing integrated throughout the lifecycle&lt;br /&gt;
:*Speedy delivery&lt;br /&gt;
:*Customer satisfaction - feeling of a right product&lt;br /&gt;
&lt;br /&gt;
[[File:agl39.jpg|center|alt=Agile development| Fig 1: Agile development]]&lt;br /&gt;
&lt;br /&gt;
===''Principles of agile development'' &amp;lt;ref&amp;gt; http://ruby.about.com/od/rubyonrails/a/agile.htm &amp;lt;/ref&amp;gt; ===&lt;br /&gt;
:*Iterative Development: Iterative development allows the clients to direct the development process in order to get the software features they want. Working software is delivered to the client at regular, short intervals. Client feedback is used to make changes to the software specifications at any stage in the development.&lt;br /&gt;
&lt;br /&gt;
:*Open Collaboration: Open, unrestricted communication between programmers and clients are driving force behind agile development. The programming team must work closely with the customer and also communicate freely with each other. Face to face communication is preferred over specification documents, so working in an open office with no cubicles is ideal.&lt;br /&gt;
&lt;br /&gt;
:*Adaptability: In agile development, changes to the software specifications are welcome even in late stages of development. Principles like Don't Repeat Yourself (DRY) are used to facilitate this. Customers gets hands-on experience with the development of the product, hence they will be able to better communicate their needs. Hence, changes in the market or company structure can be accomodated in the software at any time of the development cycle.&lt;br /&gt;
&lt;br /&gt;
===''Some well known agile development methods''===&lt;br /&gt;
 &lt;br /&gt;
Well-known agile software development methods include:&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Specification_by_example Acceptance Test Driven Development (ATDD)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Dynamic_systems_development_method Dynamic Systems Development Method (DSDM)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Extreme_programming Extreme Programming (XP)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Feature-driven_development Feature Driven Development (FDD)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Lean_software_development Lean software development]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Scrum_(software_development) Scrum]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Story-driven_modeling Story-driven modeling]&lt;br /&gt;
&lt;br /&gt;
=='''Why Use Ruby on Rails for Agile?'''==&lt;br /&gt;
===''Speedy and Effective Development''===&lt;br /&gt;
:* Rails provides a very fast mode to write code in a multitude of languages such as html, [http://en.wikipedia.org/wiki/JavaScript javascript]&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/JavaScript&amp;lt;/ref&amp;gt;, ruby, css, etc that are used to build a web-application by providing preconfigured environments and wire-framed models.&lt;br /&gt;
:* Smoother pace of work, thus putting less pressure on the debugger when it comes to debugging.&lt;br /&gt;
:* Without investing much resources, it can build business models and deliver functionalities, giving scope to customers to innovate and input faster.&lt;br /&gt;
&lt;br /&gt;
===''Open Source''===&lt;br /&gt;
:* The frequently used features and common functionalities can be implemented easily as they are available as Ruby gems.&lt;br /&gt;
:* Provides developers the flexibility to customize and thus encouraging them to make large contributions.&lt;br /&gt;
===''Convention over Configuration''&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Convention_over_configuration&amp;lt;/ref&amp;gt;=== &lt;br /&gt;
:* By following this design paradigm, rails makes it simple for the developer as he need not specify or waste time to decide conventional aspects. &lt;br /&gt;
:* On agreeing to implement simple and common things in a single way, it makes it easy for any new developer to work immediately on an existing project. &lt;br /&gt;
:* This also rules out the need for explicit configuration ( except for unconventional/ customizable aspects).&lt;br /&gt;
&lt;br /&gt;
=='''How Rails supports Agile Methodologies'''==&lt;br /&gt;
===''Generators and Scaffolds''&amp;lt;ref&amp;gt;http://guides.rubyonrails.org/getting_started.html&amp;lt;/ref&amp;gt;===&lt;br /&gt;
:* The command “rails generate” uses templates to create models, controllers, views, databases, etc which helps to setup a test application.&lt;br /&gt;
   rails generate controller sample index&lt;br /&gt;
::The above command generates controllers sample_controller, views sample/index, assets, tests and other helpers with the route 'get' sample/index &lt;br /&gt;
:* The scaffolding can be easily done to deploy any basic web -application, and developers can extend them to implement their functionalities. This overcomes the initial hurdle.&lt;br /&gt;
   rails generate scaffold Exam course:string score:float&lt;br /&gt;
::It generates all the required directories for an MVC application for a model Exam and also creates db migration CreateExams&lt;br /&gt;
&lt;br /&gt;
===''Ready Setup for Multi-environment''===&lt;br /&gt;
:* Rails application provides development, production and testing environments with built-in configurations setup and thus is a huge time saver for an application which is required to be deployed in multiple environments.&lt;br /&gt;
:* The built-in rails web-server has the development environment as the default environment. &lt;br /&gt;
:* Simple deployment allows developers to have face-face client meetings and thus make instantaneous changes based on the client requirements.&lt;br /&gt;
&lt;br /&gt;
'''Built in configuration of DB in database.yml in development environment'''&lt;br /&gt;
  development:&lt;br /&gt;
  adapter: sqlite3&lt;br /&gt;
  database: db/development.sqlite3&lt;br /&gt;
  pool: 5&lt;br /&gt;
  timeout: 5000&lt;br /&gt;
&lt;br /&gt;
===''Test-Driven Development''&amp;lt;ref&amp;gt;http://www.agiledata.org/essays/tdd.html&amp;lt;/ref&amp;gt;===&lt;br /&gt;
:* Built in mocking and stubbing frameworks are available which assists “how to write code”. This follows a red, green and refactor which is an important aspect of agile development.&lt;br /&gt;
:* RSpec is one of the famous testing framework tools used with rails. &lt;br /&gt;
:* Other testing tools can also be swapped in.&lt;br /&gt;
&lt;br /&gt;
[[File:tdd39.jpg|center|alt=Test driven development| Fig 2: TDD cycle]]&lt;br /&gt;
&lt;br /&gt;
Below is an example code for test driven development.&lt;br /&gt;
&lt;br /&gt;
 describe &amp;quot;Static pages&amp;quot; do&lt;br /&gt;
  describe &amp;quot;Home page&amp;quot; do&lt;br /&gt;
    before { visit root_path }&lt;br /&gt;
    it &amp;quot;should have the words 'Backchannel App' in it&amp;quot; do&lt;br /&gt;
      expect(page).to have_content('Back Channel App')&lt;br /&gt;
  end&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
===''Don’t Repeat Yourself (DRY)''===&lt;br /&gt;
:* Repeated code is written in helpers and libraries, making a single destination and thus updations become simpler by updating at just one place.&lt;br /&gt;
:* [http://guides.rubyonrails.org/layouts_and_rendering.html Partials] are a way of rendering repeated HTML code. Rails understand a file which starts with an underscore, say, _partial.html as a partial to be included in the shared html file which renders it.&lt;br /&gt;
'''Using partials''':&lt;br /&gt;
:'''new.html.erb'''&lt;br /&gt;
&lt;br /&gt;
   New Venture&lt;br /&gt;
   &amp;lt;%= error_messages_for :venture%&amp;gt;&lt;br /&gt;
   &amp;lt;%= render partial: &amp;quot;form&amp;quot;, locals: {venture: @venture} %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:'''_form.html.erb'''&lt;br /&gt;
   &amp;lt;%= form_for(venture) do |f| %&amp;gt;   &lt;br /&gt;
      Venture name&lt;br /&gt;
      &amp;lt;%= f.text_field :name %&amp;gt;&lt;br /&gt;
      &amp;lt;%= f.submit %&amp;gt;    &lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===''Dependency Management''===&lt;br /&gt;
:* Rails acts more than a web framework by providing the necessary utility and support tools and adding dependencies to individual projects in a jiffy using the “bundler”. &lt;br /&gt;
:* This [http://bundler.io/ bundler]&amp;lt;ref&amp;gt;http://bundler.io/&amp;lt;/ref&amp;gt; installs all the relevant gem files and also can be updated when more dependencies are added. No need to search for packages or jars.&lt;br /&gt;
&lt;br /&gt;
===''Easy Migration''===&lt;br /&gt;
:* Rails helps you to keep easy track of database changes with the help of [http://guides.rubyonrails.org/migrations.html Migration]&amp;lt;ref&amp;gt;http://guides.rubyonrails.org/migrations.html&amp;lt;/ref&amp;gt; Objects. It gives the flexibility to rollback and update.&lt;br /&gt;
:* It also allows you to maintain various versions of database for the multi-environment. On running rake db::migrate, the desired database is migrated and deployed with the working rails server.&lt;br /&gt;
:* New technologies such as [http://coffeescript.org/ Coffeescript] can also be easily embedded by installing the relevant gems thus adapting to the changing technology.&lt;br /&gt;
&lt;br /&gt;
===''Assets Pipeline''&amp;lt;ref&amp;gt;http://guides.rubyonrails.org/asset_pipeline.html&amp;lt;/ref&amp;gt;===&lt;br /&gt;
:* The assets pipeline is a new feature embedded in rails ( which is now extracted into sprockets-rails gem), concatenates and compresses javascript and css files.&lt;br /&gt;
:* This renders a web page with reduced number of requests from the browser as files are grouped and whitespaces are trimmed.&lt;br /&gt;
:* Precompiled files can also be attached.&lt;br /&gt;
&lt;br /&gt;
=='''Comparison of Rails with other Agile Web Frameworks'''&amp;lt;ref&amp;gt;http://blog.websitesframeworks.com/2013/03/web-framework-comparison-matt-raible-opinion-138/&amp;lt;/ref&amp;gt;==&lt;br /&gt;
:* This graph shows some of Rabies matrix weights to compare rails with other agile web frameworks. Among the ones compared, Rails is one of the most favourite and production efficient. GWT and GRAILS also are on par with RAILS.&lt;br /&gt;
&lt;br /&gt;
[[File:Stats.JPG|25 px|upright=0.85|center|frame|alt=Puzzle globe logo|center| Fig 3:Comparison of Agile Web Frameworks]]&lt;br /&gt;
'''''Weights Explained'''''&lt;br /&gt;
:*''Components'': Reusable components accelerate development&lt;br /&gt;
:*''Templating'': Rating based on the number of UI templating options are available for the framework&lt;br /&gt;
:*''Plugins and Add-ons'': Rating based on if they framework has a plugin architecture and how many plugins are available&lt;br /&gt;
:*''Scalability'': Rating based on how much the framework relies on session state for functionality&lt;br /&gt;
:*''REST Support'': Does the framework have the ability to produce JSON and XML instead of simply returning HTML? Can it consume JSON and XML as well?&lt;br /&gt;
:*''Degree of Risk'': This rating is mostly for businesses. If the framework is new, there’s inherently some risk in choosing it for your applications&lt;br /&gt;
:*''Testing'': Tools for testing allow to find errors faster&lt;br /&gt;
&lt;br /&gt;
=='''Future of Agile in Rails'''&amp;lt;ref&amp;gt; http://www.richappsconsulting.com/blog/blog-detail/agile-web-development-with-rails-an-overview/ &amp;lt;/ref&amp;gt;==&lt;br /&gt;
Ruby on Rails is a framework that makes it easier to develop, deploy and maintain web applications. Soon after its initial release, Rails went from being an unfamiliar tool to being a wide-reaching phenomenon. It has become the framework of choice for the implementation of a wide range of Web 2.0 applications as it is both simple and subtle. Rails is often utilized by web developers for its suitability for short, client-driven projects. Many entrepreneurs and businesses have chosen Ruby on Rails to create their web application. Here are few well known web services that are run on Ruby on Rails:&lt;br /&gt;
&lt;br /&gt;
* [https://twitter.com Twitter]&lt;br /&gt;
* [http://www.groupon.com Groupon]&lt;br /&gt;
* [https://soundcloud.com SoundCloud]&lt;br /&gt;
* [https://github.com/ GitHub]&lt;br /&gt;
* [http://www.yellow.com YellowPages]&lt;br /&gt;
* [http://www.shopify.com Shopify]&lt;br /&gt;
&lt;br /&gt;
Due to its simple nature and easy to use features as well as the speed of project completion, Rails is an ideal platform for Agile development practices. Keeping in view its accordance with the Agile Manifesto, it is not hard to predict that Rails will be the future of Agile development.&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Sayenga</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/ch1_1w39_as&amp;diff=80067</id>
		<title>CSC/ECE 517 Fall 2013/ch1 1w39 as</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/ch1_1w39_as&amp;diff=80067"/>
		<updated>2013-10-08T03:31:24Z</updated>

		<summary type="html">&lt;p&gt;Sayenga: /* Dependency Management */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''Agile development with Rails''' ==&lt;br /&gt;
&lt;br /&gt;
This article focuses on how Rails enables ’agile development&lt;br /&gt;
practices’ and the characteristics of Rails that support specific agile methodologies.&lt;br /&gt;
&lt;br /&gt;
{{TOC limit}}&lt;br /&gt;
&lt;br /&gt;
== '''Agile development''' ==&lt;br /&gt;
==='' What is Agile development? ''=== &lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Agile_software_development Agile development]&amp;lt;ref&amp;gt; http://en.wikipedia.org/wiki/Agile_software_development &amp;lt;/ref&amp;gt; is a methodology where requirements and solutions are developed based on [http://en.wikipedia.org/wiki/Iterative_and_incremental_development iterative and incremental development] &amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Iterative_and_incremental_development&amp;lt;/ref&amp;gt; through collaboration between self-organizing, cross-functional teams. Using agile development methodology, a high quality software can be developed by programmers in a minimal amount of time. By involving continuous planning, testing, integration, and other forms of continuous evolution of both the project and the software, it focuses on empowering people to collaborate and make decisions together quickly and effectively. Some of the process under agile development includes adaptive planning, evolutionary development and delivery, a time-boxed iterative approach, and encourages rapid and flexible response to change. It is a conceptual framework that promotes foreseen interactions throughout the development cycle.&lt;br /&gt;
&lt;br /&gt;
===''Why do we need Agile development?''===&lt;br /&gt;
&lt;br /&gt;
:*Visibility through active customer involvement&lt;br /&gt;
:*Flexibility/Agility - ability to accept changes&lt;br /&gt;
:*Quality - testing integrated throughout the lifecycle&lt;br /&gt;
:*Speedy delivery&lt;br /&gt;
:*Customer satisfaction - feeling of a right product&lt;br /&gt;
&lt;br /&gt;
[[File:agl39.jpg|center|alt=Agile development| Fig 1: Agile development]]&lt;br /&gt;
&lt;br /&gt;
===''Principles of agile development'' &amp;lt;ref&amp;gt; http://ruby.about.com/od/rubyonrails/a/agile.htm &amp;lt;/ref&amp;gt; ===&lt;br /&gt;
:*Iterative Development: Iterative development allows the clients to direct the development process in order to get the software features they want. Working software is delivered to the client at regular, short intervals. Client feedback is used to make changes to the software specifications at any stage in the development.&lt;br /&gt;
&lt;br /&gt;
:*Open Collaboration: Open, unrestricted communication between programmers and clients are driving force behind agile development. The programming team must work closely with the customer and also communicate freely with each other. Face to face communication is preferred over specification documents, so working in an open office with no cubicles is ideal.&lt;br /&gt;
&lt;br /&gt;
:*Adaptability: In agile development, changes to the software specifications are welcome even in late stages of development. Principles like Don't Repeat Yourself (DRY) are used to facilitate this. Customers gets hands-on experience with the development of the product, hence they will be able to better communicate their needs. Hence, changes in the market or company structure can be accomodated in the software at any time of the development cycle.&lt;br /&gt;
&lt;br /&gt;
===''Some well known agile development methods''===&lt;br /&gt;
 &lt;br /&gt;
Well-known agile software development methods include:&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Specification_by_example Acceptance Test Driven Development (ATDD)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Dynamic_systems_development_method Dynamic Systems Development Method (DSDM)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Extreme_programming Extreme Programming (XP)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Feature-driven_development Feature Driven Development (FDD)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Lean_software_development Lean software development]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Scrum_(software_development) Scrum]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Story-driven_modeling Story-driven modeling]&lt;br /&gt;
&lt;br /&gt;
=='''Why Use Ruby on Rails for Agile?'''==&lt;br /&gt;
===''Speedy and Effective Development''===&lt;br /&gt;
:* Rails provides a very fast mode to write code in a multitude of languages such as html, [http://en.wikipedia.org/wiki/JavaScript javascript]&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/JavaScript&amp;lt;/ref&amp;gt;, ruby, css, etc that are used to build a web-application by providing preconfigured environments and wire-framed models.&lt;br /&gt;
:* Smoother pace of work, thus putting less pressure on the debugger when it comes to debugging.&lt;br /&gt;
:* Without investing much resources, it can build business models and deliver functionalities, giving scope to customers to innovate and input faster.&lt;br /&gt;
&lt;br /&gt;
===''Open Source''===&lt;br /&gt;
:* The frequently used features and common functionalities can be implemented easily as they are available as Ruby gems.&lt;br /&gt;
:* Provides developers the flexibility to customize and thus encouraging them to make large contributions.&lt;br /&gt;
===''Convention over Configuration''&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Convention_over_configuration&amp;lt;/ref&amp;gt;=== &lt;br /&gt;
:* By following this design paradigm, rails makes it simple for the developer as he need not specify or waste time to decide conventional aspects. &lt;br /&gt;
:* On agreeing to implement simple and common things in a single way, it makes it easy for any new developer to work immediately on an existing project. &lt;br /&gt;
:* This also rules out the need for explicit configuration ( except for unconventional/ customizable aspects).&lt;br /&gt;
&lt;br /&gt;
=='''How Rails supports Agile Methodologies'''==&lt;br /&gt;
===''Generators and Scaffolds''&amp;lt;ref&amp;gt;http://guides.rubyonrails.org/getting_started.html&amp;lt;/ref&amp;gt;===&lt;br /&gt;
:* The command “rails generate” uses templates to create models, controllers, views, databases, etc which helps to setup a test application.&lt;br /&gt;
   rails generate controller sample index&lt;br /&gt;
::The above command generates controllers sample_controller, views sample/index, assets, tests and other helpers with the route 'get' sample/index &lt;br /&gt;
:* The scaffolding can be easily done to deploy any basic web -application, and developers can extend them to implement their functionalities. This overcomes the initial hurdle.&lt;br /&gt;
   rails generate scaffold Exam course:string score:float&lt;br /&gt;
::It generates all the required directories for an MVC application for a model Exam and also creates db migration CreateExams&lt;br /&gt;
&lt;br /&gt;
===''Ready Setup for Multi-environment''===&lt;br /&gt;
:* Rails application provides development, production and testing environments with built-in configurations setup and thus is a huge time saver for an application which is required to be deployed in multiple environments.&lt;br /&gt;
:* The built-in rails web-server has the development environment as the default environment. &lt;br /&gt;
:* Simple deployment allows developers to have face-face client meetings and thus make instantaneous changes based on the client requirements.&lt;br /&gt;
&lt;br /&gt;
'''Built in configuration of DB in database.yml in development environment'''&lt;br /&gt;
  development:&lt;br /&gt;
  adapter: sqlite3&lt;br /&gt;
  database: db/development.sqlite3&lt;br /&gt;
  pool: 5&lt;br /&gt;
  timeout: 5000&lt;br /&gt;
&lt;br /&gt;
===''Test-Driven Development''&amp;lt;ref&amp;gt;http://www.agiledata.org/essays/tdd.html&amp;lt;/ref&amp;gt;===&lt;br /&gt;
:* Built in mocking and stubbing frameworks are available which assists “how to write code”. This follows a red, green and refactor which is an important aspect of agile development.&lt;br /&gt;
:* RSpec is one of the famous testing framework tools used with rails. &lt;br /&gt;
:* Other testing tools can also be swapped in.&lt;br /&gt;
&lt;br /&gt;
[[File:tdd39.jpg|center|alt=Test driven development| Fig 2: TDD cycle]]&lt;br /&gt;
&lt;br /&gt;
Below is an example code for test driven development.&lt;br /&gt;
&lt;br /&gt;
 describe &amp;quot;Static pages&amp;quot; do&lt;br /&gt;
  describe &amp;quot;Home page&amp;quot; do&lt;br /&gt;
    before { visit root_path }&lt;br /&gt;
    it &amp;quot;should have the words 'Backchannel App' in it&amp;quot; do&lt;br /&gt;
      expect(page).to have_content('Back Channel App')&lt;br /&gt;
  end&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
===''Don’t Repeat Yourself (DRY)''===&lt;br /&gt;
:* Repeated code is written in helpers and libraries, making a single destination and thus updations become simpler by updating at just one place.&lt;br /&gt;
:* [http://guides.rubyonrails.org/layouts_and_rendering.html Partials] are a way of rendering repeated HTML code. Rails understand a file which starts with an underscore, say, _partial.html as a partial to be included in the shared html file which renders it.&lt;br /&gt;
'''Using partials''':&lt;br /&gt;
:'''new.html.erb'''&lt;br /&gt;
&lt;br /&gt;
   New Venture&lt;br /&gt;
   &amp;lt;%= error_messages_for :venture%&amp;gt;&lt;br /&gt;
   &amp;lt;%= render partial: &amp;quot;form&amp;quot;, locals: {venture: @venture} %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:'''_form.html.erb'''&lt;br /&gt;
   &amp;lt;%= form_for(venture) do |f| %&amp;gt;   &lt;br /&gt;
      Venture name&lt;br /&gt;
      &amp;lt;%= f.text_field :name %&amp;gt;&lt;br /&gt;
      &amp;lt;%= f.submit %&amp;gt;    &lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===''Dependency Management''===&lt;br /&gt;
:* Rails acts more than a web framework by providing the necessary utility and support tools and adding dependencies to individual projects in a jiffy using the “[http://bundler.io/ bundler]&amp;lt;ref&amp;gt;http://bundler.io/&amp;lt;/ref&amp;gt;”. &lt;br /&gt;
:* This bundler installs all the relevant gem files and also can be updated when more dependencies are added. No need to search for packages or jars.&lt;br /&gt;
&lt;br /&gt;
===''Easy Migration''===&lt;br /&gt;
:* Rails helps you to keep easy track of database changes with the help of [http://guides.rubyonrails.org/migrations.html Migration]&amp;lt;ref&amp;gt;http://guides.rubyonrails.org/migrations.html&amp;lt;/ref&amp;gt; Objects. It gives the flexibility to rollback and update.&lt;br /&gt;
:* It also allows you to maintain various versions of database for the multi-environment. On running rake db::migrate, the desired database is migrated and deployed with the working rails server.&lt;br /&gt;
:* New technologies such as [http://coffeescript.org/ Coffeescript] can also be easily embedded by installing the relevant gems thus adapting to the changing technology.&lt;br /&gt;
&lt;br /&gt;
===''Assets Pipeline''&amp;lt;ref&amp;gt;http://guides.rubyonrails.org/asset_pipeline.html&amp;lt;/ref&amp;gt;===&lt;br /&gt;
:* The assets pipeline is a new feature embedded in rails ( which is now extracted into sprockets-rails gem), concatenates and compresses javascript and css files.&lt;br /&gt;
:* This renders a web page with reduced number of requests from the browser as files are grouped and whitespaces are trimmed.&lt;br /&gt;
:* Precompiled files can also be attached.&lt;br /&gt;
&lt;br /&gt;
=='''Comparison of Rails with other Agile Web Frameworks'''&amp;lt;ref&amp;gt;http://blog.websitesframeworks.com/2013/03/web-framework-comparison-matt-raible-opinion-138/&amp;lt;/ref&amp;gt;==&lt;br /&gt;
:* This graph shows some of Rabies matrix weights to compare rails with other agile web frameworks. Among the ones compared, Rails is one of the most favourite and production efficient. GWT and GRAILS also are on par with RAILS.&lt;br /&gt;
&lt;br /&gt;
[[File:Stats.JPG|25 px|upright=0.85|center|frame|alt=Puzzle globe logo|center| Fig 3:Comparison of Agile Web Frameworks]]&lt;br /&gt;
'''''Weights Explained'''''&lt;br /&gt;
:*''Components'': Reusable components accelerate development&lt;br /&gt;
:*''Templating'': Rating based on the number of UI templating options are available for the framework&lt;br /&gt;
:*''Plugins and Add-ons'': Rating based on if they framework has a plugin architecture and how many plugins are available&lt;br /&gt;
:*''Scalability'': Rating based on how much the framework relies on session state for functionality&lt;br /&gt;
:*''REST Support'': Does the framework have the ability to produce JSON and XML instead of simply returning HTML? Can it consume JSON and XML as well?&lt;br /&gt;
:*''Degree of Risk'': This rating is mostly for businesses. If the framework is new, there’s inherently some risk in choosing it for your applications&lt;br /&gt;
:*''Testing'': Tools for testing allow to find errors faster&lt;br /&gt;
&lt;br /&gt;
=='''Future of Agile in Rails'''&amp;lt;ref&amp;gt; http://www.richappsconsulting.com/blog/blog-detail/agile-web-development-with-rails-an-overview/ &amp;lt;/ref&amp;gt;==&lt;br /&gt;
Ruby on Rails is a framework that makes it easier to develop, deploy and maintain web applications. Soon after its initial release, Rails went from being an unfamiliar tool to being a wide-reaching phenomenon. It has become the framework of choice for the implementation of a wide range of Web 2.0 applications as it is both simple and subtle. Rails is often utilized by web developers for its suitability for short, client-driven projects. Many entrepreneurs and businesses have chosen Ruby on Rails to create their web application. Here are few well known web services that are run on Ruby on Rails:&lt;br /&gt;
&lt;br /&gt;
* [https://twitter.com Twitter]&lt;br /&gt;
* [http://www.groupon.com Groupon]&lt;br /&gt;
* [https://soundcloud.com SoundCloud]&lt;br /&gt;
* [https://github.com/ GitHub]&lt;br /&gt;
* [http://www.yellow.com YellowPages]&lt;br /&gt;
* [http://www.shopify.com Shopify]&lt;br /&gt;
&lt;br /&gt;
Due to its simple nature and easy to use features as well as the speed of project completion, Rails is an ideal platform for Agile development practices. Keeping in view its accordance with the Agile Manifesto, it is not hard to predict that Rails will be the future of Agile development.&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Sayenga</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/ch1_1w39_as&amp;diff=80065</id>
		<title>CSC/ECE 517 Fall 2013/ch1 1w39 as</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/ch1_1w39_as&amp;diff=80065"/>
		<updated>2013-10-08T03:28:40Z</updated>

		<summary type="html">&lt;p&gt;Sayenga: /* Don’t Repeat Yourself (DRY) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article focuses on how Rails enables ’agile development&lt;br /&gt;
practices’ and the characteristics of Rails that support specific agile methodologies.&lt;br /&gt;
&lt;br /&gt;
{{TOC limit}}&lt;br /&gt;
&lt;br /&gt;
== '''Agile development''' ==&lt;br /&gt;
==='' What is Agile development? ''=== &lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Agile_software_development Agile development]&amp;lt;ref&amp;gt; http://en.wikipedia.org/wiki/Agile_software_development &amp;lt;/ref&amp;gt; is a methodology where requirements and solutions are developed based on [http://en.wikipedia.org/wiki/Iterative_and_incremental_development iterative and incremental development] &amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Iterative_and_incremental_development&amp;lt;/ref&amp;gt; through collaboration between self-organizing, cross-functional teams. Using agile development methodology, a high quality software can be developed by programmers in a minimal amount of time. By involving continuous planning, testing, integration, and other forms of continuous evolution of both the project and the software, it focuses on empowering people to collaborate and make decisions together quickly and effectively. Some of the process under agile development includes adaptive planning, evolutionary development and delivery, a time-boxed iterative approach, and encourages rapid and flexible response to change. It is a conceptual framework that promotes foreseen interactions throughout the development cycle.&lt;br /&gt;
&lt;br /&gt;
===''Why do we need Agile development?''===&lt;br /&gt;
&lt;br /&gt;
:*Visibility through active customer involvement&lt;br /&gt;
:*Flexibility/Agility - ability to accept changes&lt;br /&gt;
:*Quality - testing integrated throughout the lifecycle&lt;br /&gt;
:*Speedy delivery&lt;br /&gt;
:*Customer satisfaction - feeling of a right product&lt;br /&gt;
&lt;br /&gt;
[[File:agl39.jpg|center|alt=Agile development| Fig 1: Agile development]]&lt;br /&gt;
&lt;br /&gt;
===''Principles of agile development'' &amp;lt;ref&amp;gt; http://ruby.about.com/od/rubyonrails/a/agile.htm &amp;lt;/ref&amp;gt; ===&lt;br /&gt;
:*Iterative Development: Iterative development allows the clients to direct the development process in order to get the software features they want. Working software is delivered to the client at regular, short intervals. Client feedback is used to make changes to the software specifications at any stage in the development.&lt;br /&gt;
&lt;br /&gt;
:*Open Collaboration: Open, unrestricted communication between programmers and clients are driving force behind agile development. The programming team must work closely with the customer and also communicate freely with each other. Face to face communication is preferred over specification documents, so working in an open office with no cubicles is ideal.&lt;br /&gt;
&lt;br /&gt;
:*Adaptability: In agile development, changes to the software specifications are welcome even in late stages of development. Principles like Don't Repeat Yourself (DRY) are used to facilitate this. Customers gets hands-on experience with the development of the product, hence they will be able to better communicate their needs. Hence, changes in the market or company structure can be accomodated in the software at any time of the development cycle.&lt;br /&gt;
&lt;br /&gt;
===''Some well known agile development methods''===&lt;br /&gt;
 &lt;br /&gt;
Well-known agile software development methods include:&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Specification_by_example Acceptance Test Driven Development (ATDD)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Dynamic_systems_development_method Dynamic Systems Development Method (DSDM)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Extreme_programming Extreme Programming (XP)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Feature-driven_development Feature Driven Development (FDD)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Lean_software_development Lean software development]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Scrum_(software_development) Scrum]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Story-driven_modeling Story-driven modeling]&lt;br /&gt;
&lt;br /&gt;
=='''Why Use Ruby on Rails for Agile?'''==&lt;br /&gt;
===''Speedy and Effective Development''===&lt;br /&gt;
:* Rails provides a very fast mode to write code in a multitude of languages such as html, [http://en.wikipedia.org/wiki/JavaScript javascript]&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/JavaScript&amp;lt;/ref&amp;gt;, ruby, css, etc that are used to build a web-application by providing preconfigured environments and wire-framed models.&lt;br /&gt;
:* Smoother pace of work, thus putting less pressure on the debugger when it comes to debugging.&lt;br /&gt;
:* Without investing much resources, it can build business models and deliver functionalities, giving scope to customers to innovate and input faster.&lt;br /&gt;
&lt;br /&gt;
===''Open Source''===&lt;br /&gt;
:* The frequently used features and common functionalities can be implemented easily as they are available as Ruby gems.&lt;br /&gt;
:* Provides developers the flexibility to customize and thus encouraging them to make large contributions.&lt;br /&gt;
===''Convention over Configuration''&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Convention_over_configuration&amp;lt;/ref&amp;gt;=== &lt;br /&gt;
:* By following this design paradigm, rails makes it simple for the developer as he need not specify or waste time to decide conventional aspects. &lt;br /&gt;
:* On agreeing to implement simple and common things in a single way, it makes it easy for any new developer to work immediately on an existing project. &lt;br /&gt;
:* This also rules out the need for explicit configuration ( except for unconventional/ customizable aspects).&lt;br /&gt;
&lt;br /&gt;
=='''How Rails supports Agile Methodologies'''==&lt;br /&gt;
===''Generators and Scaffolds''&amp;lt;ref&amp;gt;http://guides.rubyonrails.org/getting_started.html&amp;lt;/ref&amp;gt;===&lt;br /&gt;
:* The command “rails generate” uses templates to create models, controllers, views, databases, etc which helps to setup a test application.&lt;br /&gt;
   rails generate controller sample index&lt;br /&gt;
::The above command generates controllers sample_controller, views sample/index, assets, tests and other helpers with the route 'get' sample/index &lt;br /&gt;
:* The scaffolding can be easily done to deploy any basic web -application, and developers can extend them to implement their functionalities. This overcomes the initial hurdle.&lt;br /&gt;
   rails generate scaffold Exam course:string score:float&lt;br /&gt;
::It generates all the required directories for an MVC application for a model Exam and also creates db migration CreateExams&lt;br /&gt;
&lt;br /&gt;
===''Ready Setup for Multi-environment''===&lt;br /&gt;
:* Rails application provides development, production and testing environments with built-in configurations setup and thus is a huge time saver for an application which is required to be deployed in multiple environments.&lt;br /&gt;
:* The built-in rails web-server has the development environment as the default environment. &lt;br /&gt;
:* Simple deployment allows developers to have face-face client meetings and thus make instantaneous changes based on the client requirements.&lt;br /&gt;
&lt;br /&gt;
'''Built in configuration of DB in database.yml in development environment'''&lt;br /&gt;
  development:&lt;br /&gt;
  adapter: sqlite3&lt;br /&gt;
  database: db/development.sqlite3&lt;br /&gt;
  pool: 5&lt;br /&gt;
  timeout: 5000&lt;br /&gt;
&lt;br /&gt;
===''Test-Driven Development''&amp;lt;ref&amp;gt;http://www.agiledata.org/essays/tdd.html&amp;lt;/ref&amp;gt;===&lt;br /&gt;
:* Built in mocking and stubbing frameworks are available which assists “how to write code”. This follows a red, green and refactor which is an important aspect of agile development.&lt;br /&gt;
:* RSpec is one of the famous testing framework tools used with rails. &lt;br /&gt;
:* Other testing tools can also be swapped in.&lt;br /&gt;
&lt;br /&gt;
[[File:tdd39.jpg|center|alt=Test driven development| Fig 2: TDD cycle]]&lt;br /&gt;
&lt;br /&gt;
Below is an example code for test driven development.&lt;br /&gt;
&lt;br /&gt;
 describe &amp;quot;Static pages&amp;quot; do&lt;br /&gt;
  describe &amp;quot;Home page&amp;quot; do&lt;br /&gt;
    before { visit root_path }&lt;br /&gt;
    it &amp;quot;should have the words 'Backchannel App' in it&amp;quot; do&lt;br /&gt;
      expect(page).to have_content('Back Channel App')&lt;br /&gt;
  end&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
===''Don’t Repeat Yourself (DRY)''===&lt;br /&gt;
:* Repeated code is written in helpers and libraries, making a single destination and thus updations become simpler by updating at just one place.&lt;br /&gt;
:* [http://guides.rubyonrails.org/layouts_and_rendering.html Partials] are a way of rendering repeated HTML code. Rails understand a file which starts with an underscore, say, _partial.html as a partial to be included in the shared html file which renders it.&lt;br /&gt;
'''Using partials''':&lt;br /&gt;
:'''new.html.erb'''&lt;br /&gt;
&lt;br /&gt;
   New Venture&lt;br /&gt;
   &amp;lt;%= error_messages_for :venture%&amp;gt;&lt;br /&gt;
   &amp;lt;%= render partial: &amp;quot;form&amp;quot;, locals: {venture: @venture} %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:'''_form.html.erb'''&lt;br /&gt;
   &amp;lt;%= form_for(venture) do |f| %&amp;gt;   &lt;br /&gt;
      Venture name&lt;br /&gt;
      &amp;lt;%= f.text_field :name %&amp;gt;&lt;br /&gt;
      &amp;lt;%= f.submit %&amp;gt;    &lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===''Dependency Management''===&lt;br /&gt;
:* Rails acts more than a web framework by providing the necessary utility and support tools and adding dependencies to individual projects in a jiffy using the “bundler”. &lt;br /&gt;
:* This bundler installs all the relevant gem files and also can be updated when more dependencies are added. No need to search for packages or jars.&lt;br /&gt;
===''Easy Migration''===&lt;br /&gt;
:* Rails helps you to keep easy track of database changes with the help of [http://guides.rubyonrails.org/migrations.html Migration]&amp;lt;ref&amp;gt;http://guides.rubyonrails.org/migrations.html&amp;lt;/ref&amp;gt; Objects. It gives the flexibility to rollback and update.&lt;br /&gt;
:* It also allows you to maintain various versions of database for the multi-environment. On running rake db::migrate, the desired database is migrated and deployed with the working rails server.&lt;br /&gt;
:* New technologies such as [http://coffeescript.org/ Coffeescript] can also be easily embedded by installing the relevant gems thus adapting to the changing technology.&lt;br /&gt;
&lt;br /&gt;
===''Assets Pipeline''&amp;lt;ref&amp;gt;http://guides.rubyonrails.org/asset_pipeline.html&amp;lt;/ref&amp;gt;===&lt;br /&gt;
:* The assets pipeline is a new feature embedded in rails ( which is now extracted into sprockets-rails gem), concatenates and compresses javascript and css files.&lt;br /&gt;
:* This renders a web page with reduced number of requests from the browser as files are grouped and whitespaces are trimmed.&lt;br /&gt;
:* Precompiled files can also be attached.&lt;br /&gt;
&lt;br /&gt;
=='''Comparison of Rails with other Agile Web Frameworks'''&amp;lt;ref&amp;gt;http://blog.websitesframeworks.com/2013/03/web-framework-comparison-matt-raible-opinion-138/&amp;lt;/ref&amp;gt;==&lt;br /&gt;
:* This graph shows some of Rabies matrix weights to compare rails with other agile web frameworks. Among the ones compared, Rails is one of the most favourite and production efficient. GWT and GRAILS also are on par with RAILS.&lt;br /&gt;
&lt;br /&gt;
[[File:Stats.JPG|25 px|upright=0.85|center|frame|alt=Puzzle globe logo|center| Fig 3:Comparison of Agile Web Frameworks]]&lt;br /&gt;
'''''Weights Explained'''''&lt;br /&gt;
:*''Components'': Reusable components accelerate development&lt;br /&gt;
:*''Templating'': Rating based on the number of UI templating options are available for the framework&lt;br /&gt;
:*''Plugins and Add-ons'': Rating based on if they framework has a plugin architecture and how many plugins are available&lt;br /&gt;
:*''Scalability'': Rating based on how much the framework relies on session state for functionality&lt;br /&gt;
:*''REST Support'': Does the framework have the ability to produce JSON and XML instead of simply returning HTML? Can it consume JSON and XML as well?&lt;br /&gt;
:*''Degree of Risk'': This rating is mostly for businesses. If the framework is new, there’s inherently some risk in choosing it for your applications&lt;br /&gt;
:*''Testing'': Tools for testing allow to find errors faster&lt;br /&gt;
&lt;br /&gt;
=='''Future of Agile in Rails'''&amp;lt;ref&amp;gt; http://www.richappsconsulting.com/blog/blog-detail/agile-web-development-with-rails-an-overview/ &amp;lt;/ref&amp;gt;==&lt;br /&gt;
Ruby on Rails is a framework that makes it easier to develop, deploy and maintain web applications. Soon after its initial release, Rails went from being an unfamiliar tool to being a wide-reaching phenomenon. It has become the framework of choice for the implementation of a wide range of Web 2.0 applications as it is both simple and subtle. Rails is often utilized by web developers for its suitability for short, client-driven projects. Many entrepreneurs and businesses have chosen Ruby on Rails to create their web application. Here are few well known web services that are run on Ruby on Rails:&lt;br /&gt;
&lt;br /&gt;
* [https://twitter.com Twitter]&lt;br /&gt;
* [http://www.groupon.com Groupon]&lt;br /&gt;
* [https://soundcloud.com SoundCloud]&lt;br /&gt;
* [https://github.com/ GitHub]&lt;br /&gt;
* [http://www.yellow.com YellowPages]&lt;br /&gt;
* [http://www.shopify.com Shopify]&lt;br /&gt;
&lt;br /&gt;
Due to its simple nature and easy to use features as well as the speed of project completion, Rails is an ideal platform for Agile development practices. Keeping in view its accordance with the Agile Manifesto, it is not hard to predict that Rails will be the future of Agile development.&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Sayenga</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/ch1_1w39_as&amp;diff=80064</id>
		<title>CSC/ECE 517 Fall 2013/ch1 1w39 as</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/ch1_1w39_as&amp;diff=80064"/>
		<updated>2013-10-08T03:27:52Z</updated>

		<summary type="html">&lt;p&gt;Sayenga: /* Comparison of Rails with other Agile Web Frameworks */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article focuses on how Rails enables ’agile development&lt;br /&gt;
practices’ and the characteristics of Rails that support specific agile methodologies.&lt;br /&gt;
&lt;br /&gt;
{{TOC limit}}&lt;br /&gt;
&lt;br /&gt;
== '''Agile development''' ==&lt;br /&gt;
==='' What is Agile development? ''=== &lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Agile_software_development Agile development]&amp;lt;ref&amp;gt; http://en.wikipedia.org/wiki/Agile_software_development &amp;lt;/ref&amp;gt; is a methodology where requirements and solutions are developed based on [http://en.wikipedia.org/wiki/Iterative_and_incremental_development iterative and incremental development] &amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Iterative_and_incremental_development&amp;lt;/ref&amp;gt; through collaboration between self-organizing, cross-functional teams. Using agile development methodology, a high quality software can be developed by programmers in a minimal amount of time. By involving continuous planning, testing, integration, and other forms of continuous evolution of both the project and the software, it focuses on empowering people to collaborate and make decisions together quickly and effectively. Some of the process under agile development includes adaptive planning, evolutionary development and delivery, a time-boxed iterative approach, and encourages rapid and flexible response to change. It is a conceptual framework that promotes foreseen interactions throughout the development cycle.&lt;br /&gt;
&lt;br /&gt;
===''Why do we need Agile development?''===&lt;br /&gt;
&lt;br /&gt;
:*Visibility through active customer involvement&lt;br /&gt;
:*Flexibility/Agility - ability to accept changes&lt;br /&gt;
:*Quality - testing integrated throughout the lifecycle&lt;br /&gt;
:*Speedy delivery&lt;br /&gt;
:*Customer satisfaction - feeling of a right product&lt;br /&gt;
&lt;br /&gt;
[[File:agl39.jpg|center|alt=Agile development| Fig 1: Agile development]]&lt;br /&gt;
&lt;br /&gt;
===''Principles of agile development'' &amp;lt;ref&amp;gt; http://ruby.about.com/od/rubyonrails/a/agile.htm &amp;lt;/ref&amp;gt; ===&lt;br /&gt;
:*Iterative Development: Iterative development allows the clients to direct the development process in order to get the software features they want. Working software is delivered to the client at regular, short intervals. Client feedback is used to make changes to the software specifications at any stage in the development.&lt;br /&gt;
&lt;br /&gt;
:*Open Collaboration: Open, unrestricted communication between programmers and clients are driving force behind agile development. The programming team must work closely with the customer and also communicate freely with each other. Face to face communication is preferred over specification documents, so working in an open office with no cubicles is ideal.&lt;br /&gt;
&lt;br /&gt;
:*Adaptability: In agile development, changes to the software specifications are welcome even in late stages of development. Principles like Don't Repeat Yourself (DRY) are used to facilitate this. Customers gets hands-on experience with the development of the product, hence they will be able to better communicate their needs. Hence, changes in the market or company structure can be accomodated in the software at any time of the development cycle.&lt;br /&gt;
&lt;br /&gt;
===''Some well known agile development methods''===&lt;br /&gt;
 &lt;br /&gt;
Well-known agile software development methods include:&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Specification_by_example Acceptance Test Driven Development (ATDD)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Dynamic_systems_development_method Dynamic Systems Development Method (DSDM)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Extreme_programming Extreme Programming (XP)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Feature-driven_development Feature Driven Development (FDD)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Lean_software_development Lean software development]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Scrum_(software_development) Scrum]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Story-driven_modeling Story-driven modeling]&lt;br /&gt;
&lt;br /&gt;
=='''Why Use Ruby on Rails for Agile?'''==&lt;br /&gt;
===''Speedy and Effective Development''===&lt;br /&gt;
:* Rails provides a very fast mode to write code in a multitude of languages such as html, [http://en.wikipedia.org/wiki/JavaScript javascript]&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/JavaScript&amp;lt;/ref&amp;gt;, ruby, css, etc that are used to build a web-application by providing preconfigured environments and wire-framed models.&lt;br /&gt;
:* Smoother pace of work, thus putting less pressure on the debugger when it comes to debugging.&lt;br /&gt;
:* Without investing much resources, it can build business models and deliver functionalities, giving scope to customers to innovate and input faster.&lt;br /&gt;
&lt;br /&gt;
===''Open Source''===&lt;br /&gt;
:* The frequently used features and common functionalities can be implemented easily as they are available as Ruby gems.&lt;br /&gt;
:* Provides developers the flexibility to customize and thus encouraging them to make large contributions.&lt;br /&gt;
===''Convention over Configuration''&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Convention_over_configuration&amp;lt;/ref&amp;gt;=== &lt;br /&gt;
:* By following this design paradigm, rails makes it simple for the developer as he need not specify or waste time to decide conventional aspects. &lt;br /&gt;
:* On agreeing to implement simple and common things in a single way, it makes it easy for any new developer to work immediately on an existing project. &lt;br /&gt;
:* This also rules out the need for explicit configuration ( except for unconventional/ customizable aspects).&lt;br /&gt;
&lt;br /&gt;
=='''How Rails supports Agile Methodologies'''==&lt;br /&gt;
===''Generators and Scaffolds''&amp;lt;ref&amp;gt;http://guides.rubyonrails.org/getting_started.html&amp;lt;/ref&amp;gt;===&lt;br /&gt;
:* The command “rails generate” uses templates to create models, controllers, views, databases, etc which helps to setup a test application.&lt;br /&gt;
   rails generate controller sample index&lt;br /&gt;
::The above command generates controllers sample_controller, views sample/index, assets, tests and other helpers with the route 'get' sample/index &lt;br /&gt;
:* The scaffolding can be easily done to deploy any basic web -application, and developers can extend them to implement their functionalities. This overcomes the initial hurdle.&lt;br /&gt;
   rails generate scaffold Exam course:string score:float&lt;br /&gt;
::It generates all the required directories for an MVC application for a model Exam and also creates db migration CreateExams&lt;br /&gt;
&lt;br /&gt;
===''Ready Setup for Multi-environment''===&lt;br /&gt;
:* Rails application provides development, production and testing environments with built-in configurations setup and thus is a huge time saver for an application which is required to be deployed in multiple environments.&lt;br /&gt;
:* The built-in rails web-server has the development environment as the default environment. &lt;br /&gt;
:* Simple deployment allows developers to have face-face client meetings and thus make instantaneous changes based on the client requirements.&lt;br /&gt;
&lt;br /&gt;
'''Built in configuration of DB in database.yml in development environment'''&lt;br /&gt;
  development:&lt;br /&gt;
  adapter: sqlite3&lt;br /&gt;
  database: db/development.sqlite3&lt;br /&gt;
  pool: 5&lt;br /&gt;
  timeout: 5000&lt;br /&gt;
&lt;br /&gt;
===''Test-Driven Development''&amp;lt;ref&amp;gt;http://www.agiledata.org/essays/tdd.html&amp;lt;/ref&amp;gt;===&lt;br /&gt;
:* Built in mocking and stubbing frameworks are available which assists “how to write code”. This follows a red, green and refactor which is an important aspect of agile development.&lt;br /&gt;
:* RSpec is one of the famous testing framework tools used with rails. &lt;br /&gt;
:* Other testing tools can also be swapped in.&lt;br /&gt;
&lt;br /&gt;
[[File:tdd39.jpg|center|alt=Test driven development| Fig 2: TDD cycle]]&lt;br /&gt;
&lt;br /&gt;
Below is an example code for test driven development.&lt;br /&gt;
&lt;br /&gt;
 describe &amp;quot;Static pages&amp;quot; do&lt;br /&gt;
  describe &amp;quot;Home page&amp;quot; do&lt;br /&gt;
    before { visit root_path }&lt;br /&gt;
    it &amp;quot;should have the words 'Backchannel App' in it&amp;quot; do&lt;br /&gt;
      expect(page).to have_content('Back Channel App')&lt;br /&gt;
  end&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
===''Don’t Repeat Yourself (DRY)''===&lt;br /&gt;
:* Repeated code is written in helpers and libraries, making a single destination and thus updations become simpler by updating at just one place.&lt;br /&gt;
:* Partials are a way of rendering repeated HTML code. Rails understand a file which starts with an underscore, say, _partial.html as a partial to be included in the shared html file which renders it.&lt;br /&gt;
'''Using partials''':&lt;br /&gt;
:'''new.html.erb'''&lt;br /&gt;
&lt;br /&gt;
   New Venture&lt;br /&gt;
   &amp;lt;%= error_messages_for :venture%&amp;gt;&lt;br /&gt;
   &amp;lt;%= render partial: &amp;quot;form&amp;quot;, locals: {venture: @venture} %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:'''_form.html.erb'''&lt;br /&gt;
   &amp;lt;%= form_for(venture) do |f| %&amp;gt;   &lt;br /&gt;
      Venture name&lt;br /&gt;
      &amp;lt;%= f.text_field :name %&amp;gt;&lt;br /&gt;
      &amp;lt;%= f.submit %&amp;gt;    &lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===''Dependency Management''===&lt;br /&gt;
:* Rails acts more than a web framework by providing the necessary utility and support tools and adding dependencies to individual projects in a jiffy using the “bundler”. &lt;br /&gt;
:* This bundler installs all the relevant gem files and also can be updated when more dependencies are added. No need to search for packages or jars.&lt;br /&gt;
===''Easy Migration''===&lt;br /&gt;
:* Rails helps you to keep easy track of database changes with the help of [http://guides.rubyonrails.org/migrations.html Migration]&amp;lt;ref&amp;gt;http://guides.rubyonrails.org/migrations.html&amp;lt;/ref&amp;gt; Objects. It gives the flexibility to rollback and update.&lt;br /&gt;
:* It also allows you to maintain various versions of database for the multi-environment. On running rake db::migrate, the desired database is migrated and deployed with the working rails server.&lt;br /&gt;
:* New technologies such as [http://coffeescript.org/ Coffeescript] can also be easily embedded by installing the relevant gems thus adapting to the changing technology.&lt;br /&gt;
&lt;br /&gt;
===''Assets Pipeline''&amp;lt;ref&amp;gt;http://guides.rubyonrails.org/asset_pipeline.html&amp;lt;/ref&amp;gt;===&lt;br /&gt;
:* The assets pipeline is a new feature embedded in rails ( which is now extracted into sprockets-rails gem), concatenates and compresses javascript and css files.&lt;br /&gt;
:* This renders a web page with reduced number of requests from the browser as files are grouped and whitespaces are trimmed.&lt;br /&gt;
:* Precompiled files can also be attached.&lt;br /&gt;
&lt;br /&gt;
=='''Comparison of Rails with other Agile Web Frameworks'''&amp;lt;ref&amp;gt;http://blog.websitesframeworks.com/2013/03/web-framework-comparison-matt-raible-opinion-138/&amp;lt;/ref&amp;gt;==&lt;br /&gt;
:* This graph shows some of Rabies matrix weights to compare rails with other agile web frameworks. Among the ones compared, Rails is one of the most favourite and production efficient. GWT and GRAILS also are on par with RAILS.&lt;br /&gt;
&lt;br /&gt;
[[File:Stats.JPG|25 px|upright=0.85|center|frame|alt=Puzzle globe logo|center| Fig 3:Comparison of Agile Web Frameworks]]&lt;br /&gt;
'''''Weights Explained'''''&lt;br /&gt;
:*''Components'': Reusable components accelerate development&lt;br /&gt;
:*''Templating'': Rating based on the number of UI templating options are available for the framework&lt;br /&gt;
:*''Plugins and Add-ons'': Rating based on if they framework has a plugin architecture and how many plugins are available&lt;br /&gt;
:*''Scalability'': Rating based on how much the framework relies on session state for functionality&lt;br /&gt;
:*''REST Support'': Does the framework have the ability to produce JSON and XML instead of simply returning HTML? Can it consume JSON and XML as well?&lt;br /&gt;
:*''Degree of Risk'': This rating is mostly for businesses. If the framework is new, there’s inherently some risk in choosing it for your applications&lt;br /&gt;
:*''Testing'': Tools for testing allow to find errors faster&lt;br /&gt;
&lt;br /&gt;
=='''Future of Agile in Rails'''&amp;lt;ref&amp;gt; http://www.richappsconsulting.com/blog/blog-detail/agile-web-development-with-rails-an-overview/ &amp;lt;/ref&amp;gt;==&lt;br /&gt;
Ruby on Rails is a framework that makes it easier to develop, deploy and maintain web applications. Soon after its initial release, Rails went from being an unfamiliar tool to being a wide-reaching phenomenon. It has become the framework of choice for the implementation of a wide range of Web 2.0 applications as it is both simple and subtle. Rails is often utilized by web developers for its suitability for short, client-driven projects. Many entrepreneurs and businesses have chosen Ruby on Rails to create their web application. Here are few well known web services that are run on Ruby on Rails:&lt;br /&gt;
&lt;br /&gt;
* [https://twitter.com Twitter]&lt;br /&gt;
* [http://www.groupon.com Groupon]&lt;br /&gt;
* [https://soundcloud.com SoundCloud]&lt;br /&gt;
* [https://github.com/ GitHub]&lt;br /&gt;
* [http://www.yellow.com YellowPages]&lt;br /&gt;
* [http://www.shopify.com Shopify]&lt;br /&gt;
&lt;br /&gt;
Due to its simple nature and easy to use features as well as the speed of project completion, Rails is an ideal platform for Agile development practices. Keeping in view its accordance with the Agile Manifesto, it is not hard to predict that Rails will be the future of Agile development.&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Sayenga</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/ch1_1w39_as&amp;diff=80061</id>
		<title>CSC/ECE 517 Fall 2013/ch1 1w39 as</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/ch1_1w39_as&amp;diff=80061"/>
		<updated>2013-10-08T03:26:01Z</updated>

		<summary type="html">&lt;p&gt;Sayenga: /* Easy Migration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article focuses on how Rails enables ’agile development&lt;br /&gt;
practices’ and the characteristics of Rails that support specific agile methodologies.&lt;br /&gt;
&lt;br /&gt;
{{TOC limit}}&lt;br /&gt;
&lt;br /&gt;
== '''Agile development''' ==&lt;br /&gt;
==='' What is Agile development? ''=== &lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Agile_software_development Agile development]&amp;lt;ref&amp;gt; http://en.wikipedia.org/wiki/Agile_software_development &amp;lt;/ref&amp;gt; is a methodology where requirements and solutions are developed based on [http://en.wikipedia.org/wiki/Iterative_and_incremental_development iterative and incremental development] &amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Iterative_and_incremental_development&amp;lt;/ref&amp;gt; through collaboration between self-organizing, cross-functional teams. Using agile development methodology, a high quality software can be developed by programmers in a minimal amount of time. By involving continuous planning, testing, integration, and other forms of continuous evolution of both the project and the software, it focuses on empowering people to collaborate and make decisions together quickly and effectively. Some of the process under agile development includes adaptive planning, evolutionary development and delivery, a time-boxed iterative approach, and encourages rapid and flexible response to change. It is a conceptual framework that promotes foreseen interactions throughout the development cycle.&lt;br /&gt;
&lt;br /&gt;
===''Why do we need Agile development?''===&lt;br /&gt;
&lt;br /&gt;
:*Visibility through active customer involvement&lt;br /&gt;
:*Flexibility/Agility - ability to accept changes&lt;br /&gt;
:*Quality - testing integrated throughout the lifecycle&lt;br /&gt;
:*Speedy delivery&lt;br /&gt;
:*Customer satisfaction - feeling of a right product&lt;br /&gt;
&lt;br /&gt;
[[File:agl39.jpg|center|alt=Agile development| Fig 1: Agile development]]&lt;br /&gt;
&lt;br /&gt;
===''Principles of agile development'' &amp;lt;ref&amp;gt; http://ruby.about.com/od/rubyonrails/a/agile.htm &amp;lt;/ref&amp;gt; ===&lt;br /&gt;
:*Iterative Development: Iterative development allows the clients to direct the development process in order to get the software features they want. Working software is delivered to the client at regular, short intervals. Client feedback is used to make changes to the software specifications at any stage in the development.&lt;br /&gt;
&lt;br /&gt;
:*Open Collaboration: Open, unrestricted communication between programmers and clients are driving force behind agile development. The programming team must work closely with the customer and also communicate freely with each other. Face to face communication is preferred over specification documents, so working in an open office with no cubicles is ideal.&lt;br /&gt;
&lt;br /&gt;
:*Adaptability: In agile development, changes to the software specifications are welcome even in late stages of development. Principles like Don't Repeat Yourself (DRY) are used to facilitate this. Customers gets hands-on experience with the development of the product, hence they will be able to better communicate their needs. Hence, changes in the market or company structure can be accomodated in the software at any time of the development cycle.&lt;br /&gt;
&lt;br /&gt;
===''Some well known agile development methods''===&lt;br /&gt;
 &lt;br /&gt;
Well-known agile software development methods include:&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Specification_by_example Acceptance Test Driven Development (ATDD)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Dynamic_systems_development_method Dynamic Systems Development Method (DSDM)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Extreme_programming Extreme Programming (XP)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Feature-driven_development Feature Driven Development (FDD)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Lean_software_development Lean software development]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Scrum_(software_development) Scrum]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Story-driven_modeling Story-driven modeling]&lt;br /&gt;
&lt;br /&gt;
=='''Why Use Ruby on Rails for Agile?'''==&lt;br /&gt;
===''Speedy and Effective Development''===&lt;br /&gt;
:* Rails provides a very fast mode to write code in a multitude of languages such as html, [http://en.wikipedia.org/wiki/JavaScript javascript]&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/JavaScript&amp;lt;/ref&amp;gt;, ruby, css, etc that are used to build a web-application by providing preconfigured environments and wire-framed models.&lt;br /&gt;
:* Smoother pace of work, thus putting less pressure on the debugger when it comes to debugging.&lt;br /&gt;
:* Without investing much resources, it can build business models and deliver functionalities, giving scope to customers to innovate and input faster.&lt;br /&gt;
&lt;br /&gt;
===''Open Source''===&lt;br /&gt;
:* The frequently used features and common functionalities can be implemented easily as they are available as Ruby gems.&lt;br /&gt;
:* Provides developers the flexibility to customize and thus encouraging them to make large contributions.&lt;br /&gt;
===''Convention over Configuration''&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Convention_over_configuration&amp;lt;/ref&amp;gt;=== &lt;br /&gt;
:* By following this design paradigm, rails makes it simple for the developer as he need not specify or waste time to decide conventional aspects. &lt;br /&gt;
:* On agreeing to implement simple and common things in a single way, it makes it easy for any new developer to work immediately on an existing project. &lt;br /&gt;
:* This also rules out the need for explicit configuration ( except for unconventional/ customizable aspects).&lt;br /&gt;
&lt;br /&gt;
=='''How Rails supports Agile Methodologies'''==&lt;br /&gt;
===''Generators and Scaffolds''&amp;lt;ref&amp;gt;http://guides.rubyonrails.org/getting_started.html&amp;lt;/ref&amp;gt;===&lt;br /&gt;
:* The command “rails generate” uses templates to create models, controllers, views, databases, etc which helps to setup a test application.&lt;br /&gt;
   rails generate controller sample index&lt;br /&gt;
::The above command generates controllers sample_controller, views sample/index, assets, tests and other helpers with the route 'get' sample/index &lt;br /&gt;
:* The scaffolding can be easily done to deploy any basic web -application, and developers can extend them to implement their functionalities. This overcomes the initial hurdle.&lt;br /&gt;
   rails generate scaffold Exam course:string score:float&lt;br /&gt;
::It generates all the required directories for an MVC application for a model Exam and also creates db migration CreateExams&lt;br /&gt;
&lt;br /&gt;
===''Ready Setup for Multi-environment''===&lt;br /&gt;
:* Rails application provides development, production and testing environments with built-in configurations setup and thus is a huge time saver for an application which is required to be deployed in multiple environments.&lt;br /&gt;
:* The built-in rails web-server has the development environment as the default environment. &lt;br /&gt;
:* Simple deployment allows developers to have face-face client meetings and thus make instantaneous changes based on the client requirements.&lt;br /&gt;
&lt;br /&gt;
'''Built in configuration of DB in database.yml in development environment'''&lt;br /&gt;
  development:&lt;br /&gt;
  adapter: sqlite3&lt;br /&gt;
  database: db/development.sqlite3&lt;br /&gt;
  pool: 5&lt;br /&gt;
  timeout: 5000&lt;br /&gt;
&lt;br /&gt;
===''Test-Driven Development''&amp;lt;ref&amp;gt;http://www.agiledata.org/essays/tdd.html&amp;lt;/ref&amp;gt;===&lt;br /&gt;
:* Built in mocking and stubbing frameworks are available which assists “how to write code”. This follows a red, green and refactor which is an important aspect of agile development.&lt;br /&gt;
:* RSpec is one of the famous testing framework tools used with rails. &lt;br /&gt;
:* Other testing tools can also be swapped in.&lt;br /&gt;
&lt;br /&gt;
[[File:tdd39.jpg|center|alt=Test driven development| Fig 2: TDD cycle]]&lt;br /&gt;
&lt;br /&gt;
Below is an example code for test driven development.&lt;br /&gt;
&lt;br /&gt;
 describe &amp;quot;Static pages&amp;quot; do&lt;br /&gt;
  describe &amp;quot;Home page&amp;quot; do&lt;br /&gt;
    before { visit root_path }&lt;br /&gt;
    it &amp;quot;should have the words 'Backchannel App' in it&amp;quot; do&lt;br /&gt;
      expect(page).to have_content('Back Channel App')&lt;br /&gt;
  end&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
===''Don’t Repeat Yourself (DRY)''===&lt;br /&gt;
:* Repeated code is written in helpers and libraries, making a single destination and thus updations become simpler by updating at just one place.&lt;br /&gt;
:* Partials are a way of rendering repeated HTML code. Rails understand a file which starts with an underscore, say, _partial.html as a partial to be included in the shared html file which renders it.&lt;br /&gt;
'''Using partials''':&lt;br /&gt;
:'''new.html.erb'''&lt;br /&gt;
&lt;br /&gt;
   New Venture&lt;br /&gt;
   &amp;lt;%= error_messages_for :venture%&amp;gt;&lt;br /&gt;
   &amp;lt;%= render partial: &amp;quot;form&amp;quot;, locals: {venture: @venture} %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:'''_form.html.erb'''&lt;br /&gt;
   &amp;lt;%= form_for(venture) do |f| %&amp;gt;   &lt;br /&gt;
      Venture name&lt;br /&gt;
      &amp;lt;%= f.text_field :name %&amp;gt;&lt;br /&gt;
      &amp;lt;%= f.submit %&amp;gt;    &lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===''Dependency Management''===&lt;br /&gt;
:* Rails acts more than a web framework by providing the necessary utility and support tools and adding dependencies to individual projects in a jiffy using the “bundler”. &lt;br /&gt;
:* This bundler installs all the relevant gem files and also can be updated when more dependencies are added. No need to search for packages or jars.&lt;br /&gt;
===''Easy Migration''===&lt;br /&gt;
:* Rails helps you to keep easy track of database changes with the help of [http://guides.rubyonrails.org/migrations.html Migration]&amp;lt;ref&amp;gt;http://guides.rubyonrails.org/migrations.html&amp;lt;/ref&amp;gt; Objects. It gives the flexibility to rollback and update.&lt;br /&gt;
:* It also allows you to maintain various versions of database for the multi-environment. On running rake db::migrate, the desired database is migrated and deployed with the working rails server.&lt;br /&gt;
:* New technologies such as [http://coffeescript.org/ Coffeescript] can also be easily embedded by installing the relevant gems thus adapting to the changing technology.&lt;br /&gt;
&lt;br /&gt;
===''Assets Pipeline''&amp;lt;ref&amp;gt;http://guides.rubyonrails.org/asset_pipeline.html&amp;lt;/ref&amp;gt;===&lt;br /&gt;
:* The assets pipeline is a new feature embedded in rails ( which is now extracted into sprockets-rails gem), concatenates and compresses javascript and css files.&lt;br /&gt;
:* This renders a web page with reduced number of requests from the browser as files are grouped and whitespaces are trimmed.&lt;br /&gt;
:* Precompiled files can also be attached.&lt;br /&gt;
&lt;br /&gt;
=='''Comparison of Rails with other Agile Web Frameworks'''==&lt;br /&gt;
:* This graph shows some of Rabies matrix weights to compare rails with other agile web frameworks. Among the ones compared, Rails is one of the most favourite and production efficient. GWT and GRAILS also are on par with RAILS.&lt;br /&gt;
&lt;br /&gt;
[[File:Stats.JPG|25 px|upright=0.85|center|frame|alt=Puzzle globe logo|center| Fig 3:Comparison of Agile Web Frameworks]]&lt;br /&gt;
'''''Weights Explained'''''&lt;br /&gt;
:*''Components'': Reusable components accelerate development&lt;br /&gt;
:*''Templating'': Rating based on the number of UI templating options are available for the framework&lt;br /&gt;
:*''Plugins and Add-ons'': Rating based on if they framework has a plugin architecture and how many plugins are available&lt;br /&gt;
:*''Scalability'': Rating based on how much the framework relies on session state for functionality&lt;br /&gt;
:*''REST Support'': Does the framework have the ability to produce JSON and XML instead of simply returning HTML? Can it consume JSON and XML as well?&lt;br /&gt;
:*''Degree of Risk'': This rating is mostly for businesses. If the framework is new, there’s inherently some risk in choosing it for your applications&lt;br /&gt;
:*''Testing'': Tools for testing allow to find errors faster&lt;br /&gt;
&lt;br /&gt;
=='''Future of Agile in Rails'''&amp;lt;ref&amp;gt; http://www.richappsconsulting.com/blog/blog-detail/agile-web-development-with-rails-an-overview/ &amp;lt;/ref&amp;gt;==&lt;br /&gt;
Ruby on Rails is a framework that makes it easier to develop, deploy and maintain web applications. Soon after its initial release, Rails went from being an unfamiliar tool to being a wide-reaching phenomenon. It has become the framework of choice for the implementation of a wide range of Web 2.0 applications as it is both simple and subtle. Rails is often utilized by web developers for its suitability for short, client-driven projects. Many entrepreneurs and businesses have chosen Ruby on Rails to create their web application. Here are few well known web services that are run on Ruby on Rails:&lt;br /&gt;
&lt;br /&gt;
* [https://twitter.com Twitter]&lt;br /&gt;
* [http://www.groupon.com Groupon]&lt;br /&gt;
* [https://soundcloud.com SoundCloud]&lt;br /&gt;
* [https://github.com/ GitHub]&lt;br /&gt;
* [http://www.yellow.com YellowPages]&lt;br /&gt;
* [http://www.shopify.com Shopify]&lt;br /&gt;
&lt;br /&gt;
Due to its simple nature and easy to use features as well as the speed of project completion, Rails is an ideal platform for Agile development practices. Keeping in view its accordance with the Agile Manifesto, it is not hard to predict that Rails will be the future of Agile development.&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Sayenga</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/ch1_1w39_as&amp;diff=80059</id>
		<title>CSC/ECE 517 Fall 2013/ch1 1w39 as</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/ch1_1w39_as&amp;diff=80059"/>
		<updated>2013-10-08T03:25:32Z</updated>

		<summary type="html">&lt;p&gt;Sayenga: /* Easy Migration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article focuses on how Rails enables ’agile development&lt;br /&gt;
practices’ and the characteristics of Rails that support specific agile methodologies.&lt;br /&gt;
&lt;br /&gt;
{{TOC limit}}&lt;br /&gt;
&lt;br /&gt;
== '''Agile development''' ==&lt;br /&gt;
==='' What is Agile development? ''=== &lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Agile_software_development Agile development]&amp;lt;ref&amp;gt; http://en.wikipedia.org/wiki/Agile_software_development &amp;lt;/ref&amp;gt; is a methodology where requirements and solutions are developed based on [http://en.wikipedia.org/wiki/Iterative_and_incremental_development iterative and incremental development] &amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Iterative_and_incremental_development&amp;lt;/ref&amp;gt; through collaboration between self-organizing, cross-functional teams. Using agile development methodology, a high quality software can be developed by programmers in a minimal amount of time. By involving continuous planning, testing, integration, and other forms of continuous evolution of both the project and the software, it focuses on empowering people to collaborate and make decisions together quickly and effectively. Some of the process under agile development includes adaptive planning, evolutionary development and delivery, a time-boxed iterative approach, and encourages rapid and flexible response to change. It is a conceptual framework that promotes foreseen interactions throughout the development cycle.&lt;br /&gt;
&lt;br /&gt;
===''Why do we need Agile development?''===&lt;br /&gt;
&lt;br /&gt;
:*Visibility through active customer involvement&lt;br /&gt;
:*Flexibility/Agility - ability to accept changes&lt;br /&gt;
:*Quality - testing integrated throughout the lifecycle&lt;br /&gt;
:*Speedy delivery&lt;br /&gt;
:*Customer satisfaction - feeling of a right product&lt;br /&gt;
&lt;br /&gt;
[[File:agl39.jpg|center|alt=Agile development| Fig 1: Agile development]]&lt;br /&gt;
&lt;br /&gt;
===''Principles of agile development'' &amp;lt;ref&amp;gt; http://ruby.about.com/od/rubyonrails/a/agile.htm &amp;lt;/ref&amp;gt; ===&lt;br /&gt;
:*Iterative Development: Iterative development allows the clients to direct the development process in order to get the software features they want. Working software is delivered to the client at regular, short intervals. Client feedback is used to make changes to the software specifications at any stage in the development.&lt;br /&gt;
&lt;br /&gt;
:*Open Collaboration: Open, unrestricted communication between programmers and clients are driving force behind agile development. The programming team must work closely with the customer and also communicate freely with each other. Face to face communication is preferred over specification documents, so working in an open office with no cubicles is ideal.&lt;br /&gt;
&lt;br /&gt;
:*Adaptability: In agile development, changes to the software specifications are welcome even in late stages of development. Principles like Don't Repeat Yourself (DRY) are used to facilitate this. Customers gets hands-on experience with the development of the product, hence they will be able to better communicate their needs. Hence, changes in the market or company structure can be accomodated in the software at any time of the development cycle.&lt;br /&gt;
&lt;br /&gt;
===''Some well known agile development methods''===&lt;br /&gt;
 &lt;br /&gt;
Well-known agile software development methods include:&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Specification_by_example Acceptance Test Driven Development (ATDD)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Dynamic_systems_development_method Dynamic Systems Development Method (DSDM)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Extreme_programming Extreme Programming (XP)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Feature-driven_development Feature Driven Development (FDD)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Lean_software_development Lean software development]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Scrum_(software_development) Scrum]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Story-driven_modeling Story-driven modeling]&lt;br /&gt;
&lt;br /&gt;
=='''Why Use Ruby on Rails for Agile?'''==&lt;br /&gt;
===''Speedy and Effective Development''===&lt;br /&gt;
:* Rails provides a very fast mode to write code in a multitude of languages such as html, [http://en.wikipedia.org/wiki/JavaScript javascript]&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/JavaScript&amp;lt;/ref&amp;gt;, ruby, css, etc that are used to build a web-application by providing preconfigured environments and wire-framed models.&lt;br /&gt;
:* Smoother pace of work, thus putting less pressure on the debugger when it comes to debugging.&lt;br /&gt;
:* Without investing much resources, it can build business models and deliver functionalities, giving scope to customers to innovate and input faster.&lt;br /&gt;
&lt;br /&gt;
===''Open Source''===&lt;br /&gt;
:* The frequently used features and common functionalities can be implemented easily as they are available as Ruby gems.&lt;br /&gt;
:* Provides developers the flexibility to customize and thus encouraging them to make large contributions.&lt;br /&gt;
===''Convention over Configuration''&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Convention_over_configuration&amp;lt;/ref&amp;gt;=== &lt;br /&gt;
:* By following this design paradigm, rails makes it simple for the developer as he need not specify or waste time to decide conventional aspects. &lt;br /&gt;
:* On agreeing to implement simple and common things in a single way, it makes it easy for any new developer to work immediately on an existing project. &lt;br /&gt;
:* This also rules out the need for explicit configuration ( except for unconventional/ customizable aspects).&lt;br /&gt;
&lt;br /&gt;
=='''How Rails supports Agile Methodologies'''==&lt;br /&gt;
===''Generators and Scaffolds''&amp;lt;ref&amp;gt;http://guides.rubyonrails.org/getting_started.html&amp;lt;/ref&amp;gt;===&lt;br /&gt;
:* The command “rails generate” uses templates to create models, controllers, views, databases, etc which helps to setup a test application.&lt;br /&gt;
   rails generate controller sample index&lt;br /&gt;
::The above command generates controllers sample_controller, views sample/index, assets, tests and other helpers with the route 'get' sample/index &lt;br /&gt;
:* The scaffolding can be easily done to deploy any basic web -application, and developers can extend them to implement their functionalities. This overcomes the initial hurdle.&lt;br /&gt;
   rails generate scaffold Exam course:string score:float&lt;br /&gt;
::It generates all the required directories for an MVC application for a model Exam and also creates db migration CreateExams&lt;br /&gt;
&lt;br /&gt;
===''Ready Setup for Multi-environment''===&lt;br /&gt;
:* Rails application provides development, production and testing environments with built-in configurations setup and thus is a huge time saver for an application which is required to be deployed in multiple environments.&lt;br /&gt;
:* The built-in rails web-server has the development environment as the default environment. &lt;br /&gt;
:* Simple deployment allows developers to have face-face client meetings and thus make instantaneous changes based on the client requirements.&lt;br /&gt;
&lt;br /&gt;
'''Built in configuration of DB in database.yml in development environment'''&lt;br /&gt;
  development:&lt;br /&gt;
  adapter: sqlite3&lt;br /&gt;
  database: db/development.sqlite3&lt;br /&gt;
  pool: 5&lt;br /&gt;
  timeout: 5000&lt;br /&gt;
&lt;br /&gt;
===''Test-Driven Development''&amp;lt;ref&amp;gt;http://www.agiledata.org/essays/tdd.html&amp;lt;/ref&amp;gt;===&lt;br /&gt;
:* Built in mocking and stubbing frameworks are available which assists “how to write code”. This follows a red, green and refactor which is an important aspect of agile development.&lt;br /&gt;
:* RSpec is one of the famous testing framework tools used with rails. &lt;br /&gt;
:* Other testing tools can also be swapped in.&lt;br /&gt;
&lt;br /&gt;
[[File:tdd39.jpg|center|alt=Test driven development| Fig 2: TDD cycle]]&lt;br /&gt;
&lt;br /&gt;
Below is an example code for test driven development.&lt;br /&gt;
&lt;br /&gt;
 describe &amp;quot;Static pages&amp;quot; do&lt;br /&gt;
  describe &amp;quot;Home page&amp;quot; do&lt;br /&gt;
    before { visit root_path }&lt;br /&gt;
    it &amp;quot;should have the words 'Backchannel App' in it&amp;quot; do&lt;br /&gt;
      expect(page).to have_content('Back Channel App')&lt;br /&gt;
  end&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
===''Don’t Repeat Yourself (DRY)''===&lt;br /&gt;
:* Repeated code is written in helpers and libraries, making a single destination and thus updations become simpler by updating at just one place.&lt;br /&gt;
:* Partials are a way of rendering repeated HTML code. Rails understand a file which starts with an underscore, say, _partial.html as a partial to be included in the shared html file which renders it.&lt;br /&gt;
'''Using partials''':&lt;br /&gt;
:'''new.html.erb'''&lt;br /&gt;
&lt;br /&gt;
   New Venture&lt;br /&gt;
   &amp;lt;%= error_messages_for :venture%&amp;gt;&lt;br /&gt;
   &amp;lt;%= render partial: &amp;quot;form&amp;quot;, locals: {venture: @venture} %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:'''_form.html.erb'''&lt;br /&gt;
   &amp;lt;%= form_for(venture) do |f| %&amp;gt;   &lt;br /&gt;
      Venture name&lt;br /&gt;
      &amp;lt;%= f.text_field :name %&amp;gt;&lt;br /&gt;
      &amp;lt;%= f.submit %&amp;gt;    &lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===''Dependency Management''===&lt;br /&gt;
:* Rails acts more than a web framework by providing the necessary utility and support tools and adding dependencies to individual projects in a jiffy using the “bundler”. &lt;br /&gt;
:* This bundler installs all the relevant gem files and also can be updated when more dependencies are added. No need to search for packages or jars.&lt;br /&gt;
===''Easy Migration''===&lt;br /&gt;
:* Rails helps you to keep easy track of database changes with the help of [http://guides.rubyonrails.org/migrations.html Migration]&amp;lt;ref&amp;gt;http://guides.rubyonrails.org/migrations.html&amp;lt;/ref&amp;gt; Objects. It gives the flexibility to rollback and update.&lt;br /&gt;
:* It also allows you to maintain various versions of database for the multi-environment. On running rake db::migrate, the desired database is migrated and deployed with the working rails server.&lt;br /&gt;
:* New technologies such as Coffeescript can also be easily embedded by installing the relevant gems thus adapting to the changing technology.&lt;br /&gt;
&lt;br /&gt;
===''Assets Pipeline''&amp;lt;ref&amp;gt;http://guides.rubyonrails.org/asset_pipeline.html&amp;lt;/ref&amp;gt;===&lt;br /&gt;
:* The assets pipeline is a new feature embedded in rails ( which is now extracted into sprockets-rails gem), concatenates and compresses javascript and css files.&lt;br /&gt;
:* This renders a web page with reduced number of requests from the browser as files are grouped and whitespaces are trimmed.&lt;br /&gt;
:* Precompiled files can also be attached.&lt;br /&gt;
&lt;br /&gt;
=='''Comparison of Rails with other Agile Web Frameworks'''==&lt;br /&gt;
:* This graph shows some of Rabies matrix weights to compare rails with other agile web frameworks. Among the ones compared, Rails is one of the most favourite and production efficient. GWT and GRAILS also are on par with RAILS.&lt;br /&gt;
&lt;br /&gt;
[[File:Stats.JPG|25 px|upright=0.85|center|frame|alt=Puzzle globe logo|center| Fig 3:Comparison of Agile Web Frameworks]]&lt;br /&gt;
'''''Weights Explained'''''&lt;br /&gt;
:*''Components'': Reusable components accelerate development&lt;br /&gt;
:*''Templating'': Rating based on the number of UI templating options are available for the framework&lt;br /&gt;
:*''Plugins and Add-ons'': Rating based on if they framework has a plugin architecture and how many plugins are available&lt;br /&gt;
:*''Scalability'': Rating based on how much the framework relies on session state for functionality&lt;br /&gt;
:*''REST Support'': Does the framework have the ability to produce JSON and XML instead of simply returning HTML? Can it consume JSON and XML as well?&lt;br /&gt;
:*''Degree of Risk'': This rating is mostly for businesses. If the framework is new, there’s inherently some risk in choosing it for your applications&lt;br /&gt;
:*''Testing'': Tools for testing allow to find errors faster&lt;br /&gt;
&lt;br /&gt;
=='''Future of Agile in Rails'''&amp;lt;ref&amp;gt; http://www.richappsconsulting.com/blog/blog-detail/agile-web-development-with-rails-an-overview/ &amp;lt;/ref&amp;gt;==&lt;br /&gt;
Ruby on Rails is a framework that makes it easier to develop, deploy and maintain web applications. Soon after its initial release, Rails went from being an unfamiliar tool to being a wide-reaching phenomenon. It has become the framework of choice for the implementation of a wide range of Web 2.0 applications as it is both simple and subtle. Rails is often utilized by web developers for its suitability for short, client-driven projects. Many entrepreneurs and businesses have chosen Ruby on Rails to create their web application. Here are few well known web services that are run on Ruby on Rails:&lt;br /&gt;
&lt;br /&gt;
* [https://twitter.com Twitter]&lt;br /&gt;
* [http://www.groupon.com Groupon]&lt;br /&gt;
* [https://soundcloud.com SoundCloud]&lt;br /&gt;
* [https://github.com/ GitHub]&lt;br /&gt;
* [http://www.yellow.com YellowPages]&lt;br /&gt;
* [http://www.shopify.com Shopify]&lt;br /&gt;
&lt;br /&gt;
Due to its simple nature and easy to use features as well as the speed of project completion, Rails is an ideal platform for Agile development practices. Keeping in view its accordance with the Agile Manifesto, it is not hard to predict that Rails will be the future of Agile development.&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Sayenga</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/ch1_1w39_as&amp;diff=80056</id>
		<title>CSC/ECE 517 Fall 2013/ch1 1w39 as</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/ch1_1w39_as&amp;diff=80056"/>
		<updated>2013-10-08T03:24:52Z</updated>

		<summary type="html">&lt;p&gt;Sayenga: /* Assets Pipeline */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article focuses on how Rails enables ’agile development&lt;br /&gt;
practices’ and the characteristics of Rails that support specific agile methodologies.&lt;br /&gt;
&lt;br /&gt;
{{TOC limit}}&lt;br /&gt;
&lt;br /&gt;
== '''Agile development''' ==&lt;br /&gt;
==='' What is Agile development? ''=== &lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Agile_software_development Agile development]&amp;lt;ref&amp;gt; http://en.wikipedia.org/wiki/Agile_software_development &amp;lt;/ref&amp;gt; is a methodology where requirements and solutions are developed based on [http://en.wikipedia.org/wiki/Iterative_and_incremental_development iterative and incremental development] &amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Iterative_and_incremental_development&amp;lt;/ref&amp;gt; through collaboration between self-organizing, cross-functional teams. Using agile development methodology, a high quality software can be developed by programmers in a minimal amount of time. By involving continuous planning, testing, integration, and other forms of continuous evolution of both the project and the software, it focuses on empowering people to collaborate and make decisions together quickly and effectively. Some of the process under agile development includes adaptive planning, evolutionary development and delivery, a time-boxed iterative approach, and encourages rapid and flexible response to change. It is a conceptual framework that promotes foreseen interactions throughout the development cycle.&lt;br /&gt;
&lt;br /&gt;
===''Why do we need Agile development?''===&lt;br /&gt;
&lt;br /&gt;
:*Visibility through active customer involvement&lt;br /&gt;
:*Flexibility/Agility - ability to accept changes&lt;br /&gt;
:*Quality - testing integrated throughout the lifecycle&lt;br /&gt;
:*Speedy delivery&lt;br /&gt;
:*Customer satisfaction - feeling of a right product&lt;br /&gt;
&lt;br /&gt;
[[File:agl39.jpg|center|alt=Agile development| Fig 1: Agile development]]&lt;br /&gt;
&lt;br /&gt;
===''Principles of agile development'' &amp;lt;ref&amp;gt; http://ruby.about.com/od/rubyonrails/a/agile.htm &amp;lt;/ref&amp;gt; ===&lt;br /&gt;
:*Iterative Development: Iterative development allows the clients to direct the development process in order to get the software features they want. Working software is delivered to the client at regular, short intervals. Client feedback is used to make changes to the software specifications at any stage in the development.&lt;br /&gt;
&lt;br /&gt;
:*Open Collaboration: Open, unrestricted communication between programmers and clients are driving force behind agile development. The programming team must work closely with the customer and also communicate freely with each other. Face to face communication is preferred over specification documents, so working in an open office with no cubicles is ideal.&lt;br /&gt;
&lt;br /&gt;
:*Adaptability: In agile development, changes to the software specifications are welcome even in late stages of development. Principles like Don't Repeat Yourself (DRY) are used to facilitate this. Customers gets hands-on experience with the development of the product, hence they will be able to better communicate their needs. Hence, changes in the market or company structure can be accomodated in the software at any time of the development cycle.&lt;br /&gt;
&lt;br /&gt;
===''Some well known agile development methods''===&lt;br /&gt;
 &lt;br /&gt;
Well-known agile software development methods include:&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Specification_by_example Acceptance Test Driven Development (ATDD)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Dynamic_systems_development_method Dynamic Systems Development Method (DSDM)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Extreme_programming Extreme Programming (XP)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Feature-driven_development Feature Driven Development (FDD)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Lean_software_development Lean software development]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Scrum_(software_development) Scrum]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Story-driven_modeling Story-driven modeling]&lt;br /&gt;
&lt;br /&gt;
=='''Why Use Ruby on Rails for Agile?'''==&lt;br /&gt;
===''Speedy and Effective Development''===&lt;br /&gt;
:* Rails provides a very fast mode to write code in a multitude of languages such as html, [http://en.wikipedia.org/wiki/JavaScript javascript]&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/JavaScript&amp;lt;/ref&amp;gt;, ruby, css, etc that are used to build a web-application by providing preconfigured environments and wire-framed models.&lt;br /&gt;
:* Smoother pace of work, thus putting less pressure on the debugger when it comes to debugging.&lt;br /&gt;
:* Without investing much resources, it can build business models and deliver functionalities, giving scope to customers to innovate and input faster.&lt;br /&gt;
&lt;br /&gt;
===''Open Source''===&lt;br /&gt;
:* The frequently used features and common functionalities can be implemented easily as they are available as Ruby gems.&lt;br /&gt;
:* Provides developers the flexibility to customize and thus encouraging them to make large contributions.&lt;br /&gt;
===''Convention over Configuration''&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Convention_over_configuration&amp;lt;/ref&amp;gt;=== &lt;br /&gt;
:* By following this design paradigm, rails makes it simple for the developer as he need not specify or waste time to decide conventional aspects. &lt;br /&gt;
:* On agreeing to implement simple and common things in a single way, it makes it easy for any new developer to work immediately on an existing project. &lt;br /&gt;
:* This also rules out the need for explicit configuration ( except for unconventional/ customizable aspects).&lt;br /&gt;
&lt;br /&gt;
=='''How Rails supports Agile Methodologies'''==&lt;br /&gt;
===''Generators and Scaffolds''&amp;lt;ref&amp;gt;http://guides.rubyonrails.org/getting_started.html&amp;lt;/ref&amp;gt;===&lt;br /&gt;
:* The command “rails generate” uses templates to create models, controllers, views, databases, etc which helps to setup a test application.&lt;br /&gt;
   rails generate controller sample index&lt;br /&gt;
::The above command generates controllers sample_controller, views sample/index, assets, tests and other helpers with the route 'get' sample/index &lt;br /&gt;
:* The scaffolding can be easily done to deploy any basic web -application, and developers can extend them to implement their functionalities. This overcomes the initial hurdle.&lt;br /&gt;
   rails generate scaffold Exam course:string score:float&lt;br /&gt;
::It generates all the required directories for an MVC application for a model Exam and also creates db migration CreateExams&lt;br /&gt;
&lt;br /&gt;
===''Ready Setup for Multi-environment''===&lt;br /&gt;
:* Rails application provides development, production and testing environments with built-in configurations setup and thus is a huge time saver for an application which is required to be deployed in multiple environments.&lt;br /&gt;
:* The built-in rails web-server has the development environment as the default environment. &lt;br /&gt;
:* Simple deployment allows developers to have face-face client meetings and thus make instantaneous changes based on the client requirements.&lt;br /&gt;
&lt;br /&gt;
'''Built in configuration of DB in database.yml in development environment'''&lt;br /&gt;
  development:&lt;br /&gt;
  adapter: sqlite3&lt;br /&gt;
  database: db/development.sqlite3&lt;br /&gt;
  pool: 5&lt;br /&gt;
  timeout: 5000&lt;br /&gt;
&lt;br /&gt;
===''Test-Driven Development''&amp;lt;ref&amp;gt;http://www.agiledata.org/essays/tdd.html&amp;lt;/ref&amp;gt;===&lt;br /&gt;
:* Built in mocking and stubbing frameworks are available which assists “how to write code”. This follows a red, green and refactor which is an important aspect of agile development.&lt;br /&gt;
:* RSpec is one of the famous testing framework tools used with rails. &lt;br /&gt;
:* Other testing tools can also be swapped in.&lt;br /&gt;
&lt;br /&gt;
[[File:tdd39.jpg|center|alt=Test driven development| Fig 2: TDD cycle]]&lt;br /&gt;
&lt;br /&gt;
Below is an example code for test driven development.&lt;br /&gt;
&lt;br /&gt;
 describe &amp;quot;Static pages&amp;quot; do&lt;br /&gt;
  describe &amp;quot;Home page&amp;quot; do&lt;br /&gt;
    before { visit root_path }&lt;br /&gt;
    it &amp;quot;should have the words 'Backchannel App' in it&amp;quot; do&lt;br /&gt;
      expect(page).to have_content('Back Channel App')&lt;br /&gt;
  end&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
===''Don’t Repeat Yourself (DRY)''===&lt;br /&gt;
:* Repeated code is written in helpers and libraries, making a single destination and thus updations become simpler by updating at just one place.&lt;br /&gt;
:* Partials are a way of rendering repeated HTML code. Rails understand a file which starts with an underscore, say, _partial.html as a partial to be included in the shared html file which renders it.&lt;br /&gt;
'''Using partials''':&lt;br /&gt;
:'''new.html.erb'''&lt;br /&gt;
&lt;br /&gt;
   New Venture&lt;br /&gt;
   &amp;lt;%= error_messages_for :venture%&amp;gt;&lt;br /&gt;
   &amp;lt;%= render partial: &amp;quot;form&amp;quot;, locals: {venture: @venture} %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:'''_form.html.erb'''&lt;br /&gt;
   &amp;lt;%= form_for(venture) do |f| %&amp;gt;   &lt;br /&gt;
      Venture name&lt;br /&gt;
      &amp;lt;%= f.text_field :name %&amp;gt;&lt;br /&gt;
      &amp;lt;%= f.submit %&amp;gt;    &lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===''Dependency Management''===&lt;br /&gt;
:* Rails acts more than a web framework by providing the necessary utility and support tools and adding dependencies to individual projects in a jiffy using the “bundler”. &lt;br /&gt;
:* This bundler installs all the relevant gem files and also can be updated when more dependencies are added. No need to search for packages or jars.&lt;br /&gt;
===''Easy Migration''===&lt;br /&gt;
:* Rails helps you to keep easy track of database changes with the help of Migration Objects. It gives the flexibility to rollback and update.&lt;br /&gt;
:* It also allows you to maintain various versions of database for the multi-environment. On running rake db::migrate, the desired database is migrated and deployed with the working rails server.&lt;br /&gt;
:* New technologies such as Coffeescript can also be easily embedded by installing the relevant gems thus adapting to the changing technology.&lt;br /&gt;
===''Assets Pipeline''&amp;lt;ref&amp;gt;http://guides.rubyonrails.org/asset_pipeline.html&amp;lt;/ref&amp;gt;===&lt;br /&gt;
:* The assets pipeline is a new feature embedded in rails ( which is now extracted into sprockets-rails gem), concatenates and compresses javascript and css files.&lt;br /&gt;
:* This renders a web page with reduced number of requests from the browser as files are grouped and whitespaces are trimmed.&lt;br /&gt;
:* Precompiled files can also be attached.&lt;br /&gt;
&lt;br /&gt;
=='''Comparison of Rails with other Agile Web Frameworks'''==&lt;br /&gt;
:* This graph shows some of Rabies matrix weights to compare rails with other agile web frameworks. Among the ones compared, Rails is one of the most favourite and production efficient. GWT and GRAILS also are on par with RAILS.&lt;br /&gt;
&lt;br /&gt;
[[File:Stats.JPG|25 px|upright=0.85|center|frame|alt=Puzzle globe logo|center| Fig 3:Comparison of Agile Web Frameworks]]&lt;br /&gt;
'''''Weights Explained'''''&lt;br /&gt;
:*''Components'': Reusable components accelerate development&lt;br /&gt;
:*''Templating'': Rating based on the number of UI templating options are available for the framework&lt;br /&gt;
:*''Plugins and Add-ons'': Rating based on if they framework has a plugin architecture and how many plugins are available&lt;br /&gt;
:*''Scalability'': Rating based on how much the framework relies on session state for functionality&lt;br /&gt;
:*''REST Support'': Does the framework have the ability to produce JSON and XML instead of simply returning HTML? Can it consume JSON and XML as well?&lt;br /&gt;
:*''Degree of Risk'': This rating is mostly for businesses. If the framework is new, there’s inherently some risk in choosing it for your applications&lt;br /&gt;
:*''Testing'': Tools for testing allow to find errors faster&lt;br /&gt;
&lt;br /&gt;
=='''Future of Agile in Rails'''&amp;lt;ref&amp;gt; http://www.richappsconsulting.com/blog/blog-detail/agile-web-development-with-rails-an-overview/ &amp;lt;/ref&amp;gt;==&lt;br /&gt;
Ruby on Rails is a framework that makes it easier to develop, deploy and maintain web applications. Soon after its initial release, Rails went from being an unfamiliar tool to being a wide-reaching phenomenon. It has become the framework of choice for the implementation of a wide range of Web 2.0 applications as it is both simple and subtle. Rails is often utilized by web developers for its suitability for short, client-driven projects. Many entrepreneurs and businesses have chosen Ruby on Rails to create their web application. Here are few well known web services that are run on Ruby on Rails:&lt;br /&gt;
&lt;br /&gt;
* [https://twitter.com Twitter]&lt;br /&gt;
* [http://www.groupon.com Groupon]&lt;br /&gt;
* [https://soundcloud.com SoundCloud]&lt;br /&gt;
* [https://github.com/ GitHub]&lt;br /&gt;
* [http://www.yellow.com YellowPages]&lt;br /&gt;
* [http://www.shopify.com Shopify]&lt;br /&gt;
&lt;br /&gt;
Due to its simple nature and easy to use features as well as the speed of project completion, Rails is an ideal platform for Agile development practices. Keeping in view its accordance with the Agile Manifesto, it is not hard to predict that Rails will be the future of Agile development.&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Sayenga</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/ch1_1w39_as&amp;diff=80055</id>
		<title>CSC/ECE 517 Fall 2013/ch1 1w39 as</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/ch1_1w39_as&amp;diff=80055"/>
		<updated>2013-10-08T03:24:17Z</updated>

		<summary type="html">&lt;p&gt;Sayenga: /* Test-Driven Development */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article focuses on how Rails enables ’agile development&lt;br /&gt;
practices’ and the characteristics of Rails that support specific agile methodologies.&lt;br /&gt;
&lt;br /&gt;
{{TOC limit}}&lt;br /&gt;
&lt;br /&gt;
== '''Agile development''' ==&lt;br /&gt;
==='' What is Agile development? ''=== &lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Agile_software_development Agile development]&amp;lt;ref&amp;gt; http://en.wikipedia.org/wiki/Agile_software_development &amp;lt;/ref&amp;gt; is a methodology where requirements and solutions are developed based on [http://en.wikipedia.org/wiki/Iterative_and_incremental_development iterative and incremental development] &amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Iterative_and_incremental_development&amp;lt;/ref&amp;gt; through collaboration between self-organizing, cross-functional teams. Using agile development methodology, a high quality software can be developed by programmers in a minimal amount of time. By involving continuous planning, testing, integration, and other forms of continuous evolution of both the project and the software, it focuses on empowering people to collaborate and make decisions together quickly and effectively. Some of the process under agile development includes adaptive planning, evolutionary development and delivery, a time-boxed iterative approach, and encourages rapid and flexible response to change. It is a conceptual framework that promotes foreseen interactions throughout the development cycle.&lt;br /&gt;
&lt;br /&gt;
===''Why do we need Agile development?''===&lt;br /&gt;
&lt;br /&gt;
:*Visibility through active customer involvement&lt;br /&gt;
:*Flexibility/Agility - ability to accept changes&lt;br /&gt;
:*Quality - testing integrated throughout the lifecycle&lt;br /&gt;
:*Speedy delivery&lt;br /&gt;
:*Customer satisfaction - feeling of a right product&lt;br /&gt;
&lt;br /&gt;
[[File:agl39.jpg|center|alt=Agile development| Fig 1: Agile development]]&lt;br /&gt;
&lt;br /&gt;
===''Principles of agile development'' &amp;lt;ref&amp;gt; http://ruby.about.com/od/rubyonrails/a/agile.htm &amp;lt;/ref&amp;gt; ===&lt;br /&gt;
:*Iterative Development: Iterative development allows the clients to direct the development process in order to get the software features they want. Working software is delivered to the client at regular, short intervals. Client feedback is used to make changes to the software specifications at any stage in the development.&lt;br /&gt;
&lt;br /&gt;
:*Open Collaboration: Open, unrestricted communication between programmers and clients are driving force behind agile development. The programming team must work closely with the customer and also communicate freely with each other. Face to face communication is preferred over specification documents, so working in an open office with no cubicles is ideal.&lt;br /&gt;
&lt;br /&gt;
:*Adaptability: In agile development, changes to the software specifications are welcome even in late stages of development. Principles like Don't Repeat Yourself (DRY) are used to facilitate this. Customers gets hands-on experience with the development of the product, hence they will be able to better communicate their needs. Hence, changes in the market or company structure can be accomodated in the software at any time of the development cycle.&lt;br /&gt;
&lt;br /&gt;
===''Some well known agile development methods''===&lt;br /&gt;
 &lt;br /&gt;
Well-known agile software development methods include:&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Specification_by_example Acceptance Test Driven Development (ATDD)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Dynamic_systems_development_method Dynamic Systems Development Method (DSDM)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Extreme_programming Extreme Programming (XP)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Feature-driven_development Feature Driven Development (FDD)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Lean_software_development Lean software development]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Scrum_(software_development) Scrum]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Story-driven_modeling Story-driven modeling]&lt;br /&gt;
&lt;br /&gt;
=='''Why Use Ruby on Rails for Agile?'''==&lt;br /&gt;
===''Speedy and Effective Development''===&lt;br /&gt;
:* Rails provides a very fast mode to write code in a multitude of languages such as html, [http://en.wikipedia.org/wiki/JavaScript javascript]&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/JavaScript&amp;lt;/ref&amp;gt;, ruby, css, etc that are used to build a web-application by providing preconfigured environments and wire-framed models.&lt;br /&gt;
:* Smoother pace of work, thus putting less pressure on the debugger when it comes to debugging.&lt;br /&gt;
:* Without investing much resources, it can build business models and deliver functionalities, giving scope to customers to innovate and input faster.&lt;br /&gt;
&lt;br /&gt;
===''Open Source''===&lt;br /&gt;
:* The frequently used features and common functionalities can be implemented easily as they are available as Ruby gems.&lt;br /&gt;
:* Provides developers the flexibility to customize and thus encouraging them to make large contributions.&lt;br /&gt;
===''Convention over Configuration''&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Convention_over_configuration&amp;lt;/ref&amp;gt;=== &lt;br /&gt;
:* By following this design paradigm, rails makes it simple for the developer as he need not specify or waste time to decide conventional aspects. &lt;br /&gt;
:* On agreeing to implement simple and common things in a single way, it makes it easy for any new developer to work immediately on an existing project. &lt;br /&gt;
:* This also rules out the need for explicit configuration ( except for unconventional/ customizable aspects).&lt;br /&gt;
&lt;br /&gt;
=='''How Rails supports Agile Methodologies'''==&lt;br /&gt;
===''Generators and Scaffolds''&amp;lt;ref&amp;gt;http://guides.rubyonrails.org/getting_started.html&amp;lt;/ref&amp;gt;===&lt;br /&gt;
:* The command “rails generate” uses templates to create models, controllers, views, databases, etc which helps to setup a test application.&lt;br /&gt;
   rails generate controller sample index&lt;br /&gt;
::The above command generates controllers sample_controller, views sample/index, assets, tests and other helpers with the route 'get' sample/index &lt;br /&gt;
:* The scaffolding can be easily done to deploy any basic web -application, and developers can extend them to implement their functionalities. This overcomes the initial hurdle.&lt;br /&gt;
   rails generate scaffold Exam course:string score:float&lt;br /&gt;
::It generates all the required directories for an MVC application for a model Exam and also creates db migration CreateExams&lt;br /&gt;
&lt;br /&gt;
===''Ready Setup for Multi-environment''===&lt;br /&gt;
:* Rails application provides development, production and testing environments with built-in configurations setup and thus is a huge time saver for an application which is required to be deployed in multiple environments.&lt;br /&gt;
:* The built-in rails web-server has the development environment as the default environment. &lt;br /&gt;
:* Simple deployment allows developers to have face-face client meetings and thus make instantaneous changes based on the client requirements.&lt;br /&gt;
&lt;br /&gt;
'''Built in configuration of DB in database.yml in development environment'''&lt;br /&gt;
  development:&lt;br /&gt;
  adapter: sqlite3&lt;br /&gt;
  database: db/development.sqlite3&lt;br /&gt;
  pool: 5&lt;br /&gt;
  timeout: 5000&lt;br /&gt;
&lt;br /&gt;
===''Test-Driven Development''&amp;lt;ref&amp;gt;http://www.agiledata.org/essays/tdd.html&amp;lt;/ref&amp;gt;===&lt;br /&gt;
:* Built in mocking and stubbing frameworks are available which assists “how to write code”. This follows a red, green and refactor which is an important aspect of agile development.&lt;br /&gt;
:* RSpec is one of the famous testing framework tools used with rails. &lt;br /&gt;
:* Other testing tools can also be swapped in.&lt;br /&gt;
&lt;br /&gt;
[[File:tdd39.jpg|center|alt=Test driven development| Fig 2: TDD cycle]]&lt;br /&gt;
&lt;br /&gt;
Below is an example code for test driven development.&lt;br /&gt;
&lt;br /&gt;
 describe &amp;quot;Static pages&amp;quot; do&lt;br /&gt;
  describe &amp;quot;Home page&amp;quot; do&lt;br /&gt;
    before { visit root_path }&lt;br /&gt;
    it &amp;quot;should have the words 'Backchannel App' in it&amp;quot; do&lt;br /&gt;
      expect(page).to have_content('Back Channel App')&lt;br /&gt;
  end&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
===''Don’t Repeat Yourself (DRY)''===&lt;br /&gt;
:* Repeated code is written in helpers and libraries, making a single destination and thus updations become simpler by updating at just one place.&lt;br /&gt;
:* Partials are a way of rendering repeated HTML code. Rails understand a file which starts with an underscore, say, _partial.html as a partial to be included in the shared html file which renders it.&lt;br /&gt;
'''Using partials''':&lt;br /&gt;
:'''new.html.erb'''&lt;br /&gt;
&lt;br /&gt;
   New Venture&lt;br /&gt;
   &amp;lt;%= error_messages_for :venture%&amp;gt;&lt;br /&gt;
   &amp;lt;%= render partial: &amp;quot;form&amp;quot;, locals: {venture: @venture} %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:'''_form.html.erb'''&lt;br /&gt;
   &amp;lt;%= form_for(venture) do |f| %&amp;gt;   &lt;br /&gt;
      Venture name&lt;br /&gt;
      &amp;lt;%= f.text_field :name %&amp;gt;&lt;br /&gt;
      &amp;lt;%= f.submit %&amp;gt;    &lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===''Dependency Management''===&lt;br /&gt;
:* Rails acts more than a web framework by providing the necessary utility and support tools and adding dependencies to individual projects in a jiffy using the “bundler”. &lt;br /&gt;
:* This bundler installs all the relevant gem files and also can be updated when more dependencies are added. No need to search for packages or jars.&lt;br /&gt;
===''Easy Migration''===&lt;br /&gt;
:* Rails helps you to keep easy track of database changes with the help of Migration Objects. It gives the flexibility to rollback and update.&lt;br /&gt;
:* It also allows you to maintain various versions of database for the multi-environment. On running rake db::migrate, the desired database is migrated and deployed with the working rails server.&lt;br /&gt;
:* New technologies such as Coffeescript can also be easily embedded by installing the relevant gems thus adapting to the changing technology.&lt;br /&gt;
===''Assets Pipeline''===&lt;br /&gt;
:* The assets pipeline is a new feature embedded in rails ( which is now extracted into sprockets-rails gem), concatenates and compresses javascript and css files.&lt;br /&gt;
:* This renders a web page with reduced number of requests from the browser as files are grouped and whitespaces are trimmed.&lt;br /&gt;
:* Precompiled files can also be attached.&lt;br /&gt;
&lt;br /&gt;
=='''Comparison of Rails with other Agile Web Frameworks'''==&lt;br /&gt;
:* This graph shows some of Rabies matrix weights to compare rails with other agile web frameworks. Among the ones compared, Rails is one of the most favourite and production efficient. GWT and GRAILS also are on par with RAILS.&lt;br /&gt;
&lt;br /&gt;
[[File:Stats.JPG|25 px|upright=0.85|center|frame|alt=Puzzle globe logo|center| Fig 3:Comparison of Agile Web Frameworks]]&lt;br /&gt;
'''''Weights Explained'''''&lt;br /&gt;
:*''Components'': Reusable components accelerate development&lt;br /&gt;
:*''Templating'': Rating based on the number of UI templating options are available for the framework&lt;br /&gt;
:*''Plugins and Add-ons'': Rating based on if they framework has a plugin architecture and how many plugins are available&lt;br /&gt;
:*''Scalability'': Rating based on how much the framework relies on session state for functionality&lt;br /&gt;
:*''REST Support'': Does the framework have the ability to produce JSON and XML instead of simply returning HTML? Can it consume JSON and XML as well?&lt;br /&gt;
:*''Degree of Risk'': This rating is mostly for businesses. If the framework is new, there’s inherently some risk in choosing it for your applications&lt;br /&gt;
:*''Testing'': Tools for testing allow to find errors faster&lt;br /&gt;
&lt;br /&gt;
=='''Future of Agile in Rails'''&amp;lt;ref&amp;gt; http://www.richappsconsulting.com/blog/blog-detail/agile-web-development-with-rails-an-overview/ &amp;lt;/ref&amp;gt;==&lt;br /&gt;
Ruby on Rails is a framework that makes it easier to develop, deploy and maintain web applications. Soon after its initial release, Rails went from being an unfamiliar tool to being a wide-reaching phenomenon. It has become the framework of choice for the implementation of a wide range of Web 2.0 applications as it is both simple and subtle. Rails is often utilized by web developers for its suitability for short, client-driven projects. Many entrepreneurs and businesses have chosen Ruby on Rails to create their web application. Here are few well known web services that are run on Ruby on Rails:&lt;br /&gt;
&lt;br /&gt;
* [https://twitter.com Twitter]&lt;br /&gt;
* [http://www.groupon.com Groupon]&lt;br /&gt;
* [https://soundcloud.com SoundCloud]&lt;br /&gt;
* [https://github.com/ GitHub]&lt;br /&gt;
* [http://www.yellow.com YellowPages]&lt;br /&gt;
* [http://www.shopify.com Shopify]&lt;br /&gt;
&lt;br /&gt;
Due to its simple nature and easy to use features as well as the speed of project completion, Rails is an ideal platform for Agile development practices. Keeping in view its accordance with the Agile Manifesto, it is not hard to predict that Rails will be the future of Agile development.&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Sayenga</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/ch1_1w39_as&amp;diff=80053</id>
		<title>CSC/ECE 517 Fall 2013/ch1 1w39 as</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/ch1_1w39_as&amp;diff=80053"/>
		<updated>2013-10-08T03:23:30Z</updated>

		<summary type="html">&lt;p&gt;Sayenga: /* How Rails supports Agile Methodologies */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article focuses on how Rails enables ’agile development&lt;br /&gt;
practices’ and the characteristics of Rails that support specific agile methodologies.&lt;br /&gt;
&lt;br /&gt;
{{TOC limit}}&lt;br /&gt;
&lt;br /&gt;
== '''Agile development''' ==&lt;br /&gt;
==='' What is Agile development? ''=== &lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Agile_software_development Agile development]&amp;lt;ref&amp;gt; http://en.wikipedia.org/wiki/Agile_software_development &amp;lt;/ref&amp;gt; is a methodology where requirements and solutions are developed based on [http://en.wikipedia.org/wiki/Iterative_and_incremental_development iterative and incremental development] &amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Iterative_and_incremental_development&amp;lt;/ref&amp;gt; through collaboration between self-organizing, cross-functional teams. Using agile development methodology, a high quality software can be developed by programmers in a minimal amount of time. By involving continuous planning, testing, integration, and other forms of continuous evolution of both the project and the software, it focuses on empowering people to collaborate and make decisions together quickly and effectively. Some of the process under agile development includes adaptive planning, evolutionary development and delivery, a time-boxed iterative approach, and encourages rapid and flexible response to change. It is a conceptual framework that promotes foreseen interactions throughout the development cycle.&lt;br /&gt;
&lt;br /&gt;
===''Why do we need Agile development?''===&lt;br /&gt;
&lt;br /&gt;
:*Visibility through active customer involvement&lt;br /&gt;
:*Flexibility/Agility - ability to accept changes&lt;br /&gt;
:*Quality - testing integrated throughout the lifecycle&lt;br /&gt;
:*Speedy delivery&lt;br /&gt;
:*Customer satisfaction - feeling of a right product&lt;br /&gt;
&lt;br /&gt;
[[File:agl39.jpg|center|alt=Agile development| Fig 1: Agile development]]&lt;br /&gt;
&lt;br /&gt;
===''Principles of agile development'' &amp;lt;ref&amp;gt; http://ruby.about.com/od/rubyonrails/a/agile.htm &amp;lt;/ref&amp;gt; ===&lt;br /&gt;
:*Iterative Development: Iterative development allows the clients to direct the development process in order to get the software features they want. Working software is delivered to the client at regular, short intervals. Client feedback is used to make changes to the software specifications at any stage in the development.&lt;br /&gt;
&lt;br /&gt;
:*Open Collaboration: Open, unrestricted communication between programmers and clients are driving force behind agile development. The programming team must work closely with the customer and also communicate freely with each other. Face to face communication is preferred over specification documents, so working in an open office with no cubicles is ideal.&lt;br /&gt;
&lt;br /&gt;
:*Adaptability: In agile development, changes to the software specifications are welcome even in late stages of development. Principles like Don't Repeat Yourself (DRY) are used to facilitate this. Customers gets hands-on experience with the development of the product, hence they will be able to better communicate their needs. Hence, changes in the market or company structure can be accomodated in the software at any time of the development cycle.&lt;br /&gt;
&lt;br /&gt;
===''Some well known agile development methods''===&lt;br /&gt;
 &lt;br /&gt;
Well-known agile software development methods include:&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Specification_by_example Acceptance Test Driven Development (ATDD)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Dynamic_systems_development_method Dynamic Systems Development Method (DSDM)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Extreme_programming Extreme Programming (XP)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Feature-driven_development Feature Driven Development (FDD)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Lean_software_development Lean software development]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Scrum_(software_development) Scrum]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Story-driven_modeling Story-driven modeling]&lt;br /&gt;
&lt;br /&gt;
=='''Why Use Ruby on Rails for Agile?'''==&lt;br /&gt;
===''Speedy and Effective Development''===&lt;br /&gt;
:* Rails provides a very fast mode to write code in a multitude of languages such as html, [http://en.wikipedia.org/wiki/JavaScript javascript]&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/JavaScript&amp;lt;/ref&amp;gt;, ruby, css, etc that are used to build a web-application by providing preconfigured environments and wire-framed models.&lt;br /&gt;
:* Smoother pace of work, thus putting less pressure on the debugger when it comes to debugging.&lt;br /&gt;
:* Without investing much resources, it can build business models and deliver functionalities, giving scope to customers to innovate and input faster.&lt;br /&gt;
&lt;br /&gt;
===''Open Source''===&lt;br /&gt;
:* The frequently used features and common functionalities can be implemented easily as they are available as Ruby gems.&lt;br /&gt;
:* Provides developers the flexibility to customize and thus encouraging them to make large contributions.&lt;br /&gt;
===''Convention over Configuration''&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Convention_over_configuration&amp;lt;/ref&amp;gt;=== &lt;br /&gt;
:* By following this design paradigm, rails makes it simple for the developer as he need not specify or waste time to decide conventional aspects. &lt;br /&gt;
:* On agreeing to implement simple and common things in a single way, it makes it easy for any new developer to work immediately on an existing project. &lt;br /&gt;
:* This also rules out the need for explicit configuration ( except for unconventional/ customizable aspects).&lt;br /&gt;
&lt;br /&gt;
=='''How Rails supports Agile Methodologies'''==&lt;br /&gt;
===''Generators and Scaffolds''&amp;lt;ref&amp;gt;http://guides.rubyonrails.org/getting_started.html&amp;lt;/ref&amp;gt;===&lt;br /&gt;
:* The command “rails generate” uses templates to create models, controllers, views, databases, etc which helps to setup a test application.&lt;br /&gt;
   rails generate controller sample index&lt;br /&gt;
::The above command generates controllers sample_controller, views sample/index, assets, tests and other helpers with the route 'get' sample/index &lt;br /&gt;
:* The scaffolding can be easily done to deploy any basic web -application, and developers can extend them to implement their functionalities. This overcomes the initial hurdle.&lt;br /&gt;
   rails generate scaffold Exam course:string score:float&lt;br /&gt;
::It generates all the required directories for an MVC application for a model Exam and also creates db migration CreateExams&lt;br /&gt;
&lt;br /&gt;
===''Ready Setup for Multi-environment''===&lt;br /&gt;
:* Rails application provides development, production and testing environments with built-in configurations setup and thus is a huge time saver for an application which is required to be deployed in multiple environments.&lt;br /&gt;
:* The built-in rails web-server has the development environment as the default environment. &lt;br /&gt;
:* Simple deployment allows developers to have face-face client meetings and thus make instantaneous changes based on the client requirements.&lt;br /&gt;
&lt;br /&gt;
'''Built in configuration of DB in database.yml in development environment'''&lt;br /&gt;
  development:&lt;br /&gt;
  adapter: sqlite3&lt;br /&gt;
  database: db/development.sqlite3&lt;br /&gt;
  pool: 5&lt;br /&gt;
  timeout: 5000&lt;br /&gt;
&lt;br /&gt;
===''Test-Driven Development''===&lt;br /&gt;
:* Built in mocking and stubbing frameworks are available which assists “how to write code”. This follows a red, green and refactor which is an important aspect of agile development.&lt;br /&gt;
:* RSpec is one of the famous testing framework tools used with rails. &lt;br /&gt;
:* Other testing tools can also be swapped in.&lt;br /&gt;
&lt;br /&gt;
[[File:tdd39.jpg|center|alt=Test driven development| Fig 2: TDD cycle]]&lt;br /&gt;
&lt;br /&gt;
Below is an example code for test driven development.&lt;br /&gt;
&lt;br /&gt;
 describe &amp;quot;Static pages&amp;quot; do&lt;br /&gt;
  describe &amp;quot;Home page&amp;quot; do&lt;br /&gt;
    before { visit root_path }&lt;br /&gt;
    it &amp;quot;should have the words 'Backchannel App' in it&amp;quot; do&lt;br /&gt;
      expect(page).to have_content('Back Channel App')&lt;br /&gt;
  end&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
===''Don’t Repeat Yourself (DRY)''===&lt;br /&gt;
:* Repeated code is written in helpers and libraries, making a single destination and thus updations become simpler by updating at just one place.&lt;br /&gt;
:* Partials are a way of rendering repeated HTML code. Rails understand a file which starts with an underscore, say, _partial.html as a partial to be included in the shared html file which renders it.&lt;br /&gt;
'''Using partials''':&lt;br /&gt;
:'''new.html.erb'''&lt;br /&gt;
&lt;br /&gt;
   New Venture&lt;br /&gt;
   &amp;lt;%= error_messages_for :venture%&amp;gt;&lt;br /&gt;
   &amp;lt;%= render partial: &amp;quot;form&amp;quot;, locals: {venture: @venture} %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:'''_form.html.erb'''&lt;br /&gt;
   &amp;lt;%= form_for(venture) do |f| %&amp;gt;   &lt;br /&gt;
      Venture name&lt;br /&gt;
      &amp;lt;%= f.text_field :name %&amp;gt;&lt;br /&gt;
      &amp;lt;%= f.submit %&amp;gt;    &lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===''Dependency Management''===&lt;br /&gt;
:* Rails acts more than a web framework by providing the necessary utility and support tools and adding dependencies to individual projects in a jiffy using the “bundler”. &lt;br /&gt;
:* This bundler installs all the relevant gem files and also can be updated when more dependencies are added. No need to search for packages or jars.&lt;br /&gt;
===''Easy Migration''===&lt;br /&gt;
:* Rails helps you to keep easy track of database changes with the help of Migration Objects. It gives the flexibility to rollback and update.&lt;br /&gt;
:* It also allows you to maintain various versions of database for the multi-environment. On running rake db::migrate, the desired database is migrated and deployed with the working rails server.&lt;br /&gt;
:* New technologies such as Coffeescript can also be easily embedded by installing the relevant gems thus adapting to the changing technology.&lt;br /&gt;
===''Assets Pipeline''===&lt;br /&gt;
:* The assets pipeline is a new feature embedded in rails ( which is now extracted into sprockets-rails gem), concatenates and compresses javascript and css files.&lt;br /&gt;
:* This renders a web page with reduced number of requests from the browser as files are grouped and whitespaces are trimmed.&lt;br /&gt;
:* Precompiled files can also be attached.&lt;br /&gt;
&lt;br /&gt;
=='''Comparison of Rails with other Agile Web Frameworks'''==&lt;br /&gt;
:* This graph shows some of Rabies matrix weights to compare rails with other agile web frameworks. Among the ones compared, Rails is one of the most favourite and production efficient. GWT and GRAILS also are on par with RAILS.&lt;br /&gt;
&lt;br /&gt;
[[File:Stats.JPG|25 px|upright=0.85|center|frame|alt=Puzzle globe logo|center| Fig 3:Comparison of Agile Web Frameworks]]&lt;br /&gt;
'''''Weights Explained'''''&lt;br /&gt;
:*''Components'': Reusable components accelerate development&lt;br /&gt;
:*''Templating'': Rating based on the number of UI templating options are available for the framework&lt;br /&gt;
:*''Plugins and Add-ons'': Rating based on if they framework has a plugin architecture and how many plugins are available&lt;br /&gt;
:*''Scalability'': Rating based on how much the framework relies on session state for functionality&lt;br /&gt;
:*''REST Support'': Does the framework have the ability to produce JSON and XML instead of simply returning HTML? Can it consume JSON and XML as well?&lt;br /&gt;
:*''Degree of Risk'': This rating is mostly for businesses. If the framework is new, there’s inherently some risk in choosing it for your applications&lt;br /&gt;
:*''Testing'': Tools for testing allow to find errors faster&lt;br /&gt;
&lt;br /&gt;
=='''Future of Agile in Rails'''&amp;lt;ref&amp;gt; http://www.richappsconsulting.com/blog/blog-detail/agile-web-development-with-rails-an-overview/ &amp;lt;/ref&amp;gt;==&lt;br /&gt;
Ruby on Rails is a framework that makes it easier to develop, deploy and maintain web applications. Soon after its initial release, Rails went from being an unfamiliar tool to being a wide-reaching phenomenon. It has become the framework of choice for the implementation of a wide range of Web 2.0 applications as it is both simple and subtle. Rails is often utilized by web developers for its suitability for short, client-driven projects. Many entrepreneurs and businesses have chosen Ruby on Rails to create their web application. Here are few well known web services that are run on Ruby on Rails:&lt;br /&gt;
&lt;br /&gt;
* [https://twitter.com Twitter]&lt;br /&gt;
* [http://www.groupon.com Groupon]&lt;br /&gt;
* [https://soundcloud.com SoundCloud]&lt;br /&gt;
* [https://github.com/ GitHub]&lt;br /&gt;
* [http://www.yellow.com YellowPages]&lt;br /&gt;
* [http://www.shopify.com Shopify]&lt;br /&gt;
&lt;br /&gt;
Due to its simple nature and easy to use features as well as the speed of project completion, Rails is an ideal platform for Agile development practices. Keeping in view its accordance with the Agile Manifesto, it is not hard to predict that Rails will be the future of Agile development.&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Sayenga</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/ch1_1w39_as&amp;diff=80052</id>
		<title>CSC/ECE 517 Fall 2013/ch1 1w39 as</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/ch1_1w39_as&amp;diff=80052"/>
		<updated>2013-10-08T03:22:58Z</updated>

		<summary type="html">&lt;p&gt;Sayenga: /* Generators and Scaffolds */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article focuses on how Rails enables ’agile development&lt;br /&gt;
practices’ and the characteristics of Rails that support specific agile methodologies.&lt;br /&gt;
&lt;br /&gt;
{{TOC limit}}&lt;br /&gt;
&lt;br /&gt;
== '''Agile development''' ==&lt;br /&gt;
==='' What is Agile development? ''=== &lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Agile_software_development Agile development]&amp;lt;ref&amp;gt; http://en.wikipedia.org/wiki/Agile_software_development &amp;lt;/ref&amp;gt; is a methodology where requirements and solutions are developed based on [http://en.wikipedia.org/wiki/Iterative_and_incremental_development iterative and incremental development] &amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Iterative_and_incremental_development&amp;lt;/ref&amp;gt; through collaboration between self-organizing, cross-functional teams. Using agile development methodology, a high quality software can be developed by programmers in a minimal amount of time. By involving continuous planning, testing, integration, and other forms of continuous evolution of both the project and the software, it focuses on empowering people to collaborate and make decisions together quickly and effectively. Some of the process under agile development includes adaptive planning, evolutionary development and delivery, a time-boxed iterative approach, and encourages rapid and flexible response to change. It is a conceptual framework that promotes foreseen interactions throughout the development cycle.&lt;br /&gt;
&lt;br /&gt;
===''Why do we need Agile development?''===&lt;br /&gt;
&lt;br /&gt;
:*Visibility through active customer involvement&lt;br /&gt;
:*Flexibility/Agility - ability to accept changes&lt;br /&gt;
:*Quality - testing integrated throughout the lifecycle&lt;br /&gt;
:*Speedy delivery&lt;br /&gt;
:*Customer satisfaction - feeling of a right product&lt;br /&gt;
&lt;br /&gt;
[[File:agl39.jpg|center|alt=Agile development| Fig 1: Agile development]]&lt;br /&gt;
&lt;br /&gt;
===''Principles of agile development'' &amp;lt;ref&amp;gt; http://ruby.about.com/od/rubyonrails/a/agile.htm &amp;lt;/ref&amp;gt; ===&lt;br /&gt;
:*Iterative Development: Iterative development allows the clients to direct the development process in order to get the software features they want. Working software is delivered to the client at regular, short intervals. Client feedback is used to make changes to the software specifications at any stage in the development.&lt;br /&gt;
&lt;br /&gt;
:*Open Collaboration: Open, unrestricted communication between programmers and clients are driving force behind agile development. The programming team must work closely with the customer and also communicate freely with each other. Face to face communication is preferred over specification documents, so working in an open office with no cubicles is ideal.&lt;br /&gt;
&lt;br /&gt;
:*Adaptability: In agile development, changes to the software specifications are welcome even in late stages of development. Principles like Don't Repeat Yourself (DRY) are used to facilitate this. Customers gets hands-on experience with the development of the product, hence they will be able to better communicate their needs. Hence, changes in the market or company structure can be accomodated in the software at any time of the development cycle.&lt;br /&gt;
&lt;br /&gt;
===''Some well known agile development methods''===&lt;br /&gt;
 &lt;br /&gt;
Well-known agile software development methods include:&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Specification_by_example Acceptance Test Driven Development (ATDD)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Dynamic_systems_development_method Dynamic Systems Development Method (DSDM)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Extreme_programming Extreme Programming (XP)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Feature-driven_development Feature Driven Development (FDD)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Lean_software_development Lean software development]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Scrum_(software_development) Scrum]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Story-driven_modeling Story-driven modeling]&lt;br /&gt;
&lt;br /&gt;
=='''Why Use Ruby on Rails for Agile?'''==&lt;br /&gt;
===''Speedy and Effective Development''===&lt;br /&gt;
:* Rails provides a very fast mode to write code in a multitude of languages such as html, [http://en.wikipedia.org/wiki/JavaScript javascript]&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/JavaScript&amp;lt;/ref&amp;gt;, ruby, css, etc that are used to build a web-application by providing preconfigured environments and wire-framed models.&lt;br /&gt;
:* Smoother pace of work, thus putting less pressure on the debugger when it comes to debugging.&lt;br /&gt;
:* Without investing much resources, it can build business models and deliver functionalities, giving scope to customers to innovate and input faster.&lt;br /&gt;
&lt;br /&gt;
===''Open Source''===&lt;br /&gt;
:* The frequently used features and common functionalities can be implemented easily as they are available as Ruby gems.&lt;br /&gt;
:* Provides developers the flexibility to customize and thus encouraging them to make large contributions.&lt;br /&gt;
===''Convention over Configuration''&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Convention_over_configuration&amp;lt;/ref&amp;gt;=== &lt;br /&gt;
:* By following this design paradigm, rails makes it simple for the developer as he need not specify or waste time to decide conventional aspects. &lt;br /&gt;
:* On agreeing to implement simple and common things in a single way, it makes it easy for any new developer to work immediately on an existing project. &lt;br /&gt;
:* This also rules out the need for explicit configuration ( except for unconventional/ customizable aspects).&lt;br /&gt;
&lt;br /&gt;
=='''How Rails supports Agile Methodologies'''==&lt;br /&gt;
===''Generators and Scaffolds''===&amp;lt;ref&amp;gt;http://guides.rubyonrails.org/getting_started.html&amp;lt;/ref&amp;gt;&lt;br /&gt;
:* The command “rails generate” uses templates to create models, controllers, views, databases, etc which helps to setup a test application.&lt;br /&gt;
   rails generate controller sample index&lt;br /&gt;
::The above command generates controllers sample_controller, views sample/index, assets, tests and other helpers with the route 'get' sample/index &lt;br /&gt;
:* The scaffolding can be easily done to deploy any basic web -application, and developers can extend them to implement their functionalities. This overcomes the initial hurdle.&lt;br /&gt;
   rails generate scaffold Exam course:string score:float&lt;br /&gt;
::It generates all the required directories for an MVC application for a model Exam and also creates db migration CreateExams&lt;br /&gt;
&lt;br /&gt;
===''Ready Setup for Multi-environment''===&lt;br /&gt;
:* Rails application provides development, production and testing environments with built-in configurations setup and thus is a huge time saver for an application which is required to be deployed in multiple environments.&lt;br /&gt;
:* The built-in rails web-server has the development environment as the default environment. &lt;br /&gt;
:* Simple deployment allows developers to have face-face client meetings and thus make instantaneous changes based on the client requirements.&lt;br /&gt;
&lt;br /&gt;
'''Built in configuration of DB in database.yml in development environment'''&lt;br /&gt;
  development:&lt;br /&gt;
  adapter: sqlite3&lt;br /&gt;
  database: db/development.sqlite3&lt;br /&gt;
  pool: 5&lt;br /&gt;
  timeout: 5000&lt;br /&gt;
&lt;br /&gt;
===''Test-Driven Development''===&lt;br /&gt;
:* Built in mocking and stubbing frameworks are available which assists “how to write code”. This follows a red, green and refactor which is an important aspect of agile development.&lt;br /&gt;
:* RSpec is one of the famous testing framework tools used with rails. &lt;br /&gt;
:* Other testing tools can also be swapped in.&lt;br /&gt;
&lt;br /&gt;
[[File:tdd39.jpg|center|alt=Test driven development| Fig 2: TDD cycle]]&lt;br /&gt;
&lt;br /&gt;
Below is an example code for test driven development.&lt;br /&gt;
&lt;br /&gt;
 describe &amp;quot;Static pages&amp;quot; do&lt;br /&gt;
  describe &amp;quot;Home page&amp;quot; do&lt;br /&gt;
    before { visit root_path }&lt;br /&gt;
    it &amp;quot;should have the words 'Backchannel App' in it&amp;quot; do&lt;br /&gt;
      expect(page).to have_content('Back Channel App')&lt;br /&gt;
  end&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
===''Don’t Repeat Yourself (DRY)''===&lt;br /&gt;
:* Repeated code is written in helpers and libraries, making a single destination and thus updations become simpler by updating at just one place.&lt;br /&gt;
:* Partials are a way of rendering repeated HTML code. Rails understand a file which starts with an underscore, say, _partial.html as a partial to be included in the shared html file which renders it.&lt;br /&gt;
'''Using partials''':&lt;br /&gt;
:'''new.html.erb'''&lt;br /&gt;
&lt;br /&gt;
   New Venture&lt;br /&gt;
   &amp;lt;%= error_messages_for :venture%&amp;gt;&lt;br /&gt;
   &amp;lt;%= render partial: &amp;quot;form&amp;quot;, locals: {venture: @venture} %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:'''_form.html.erb'''&lt;br /&gt;
   &amp;lt;%= form_for(venture) do |f| %&amp;gt;   &lt;br /&gt;
      Venture name&lt;br /&gt;
      &amp;lt;%= f.text_field :name %&amp;gt;&lt;br /&gt;
      &amp;lt;%= f.submit %&amp;gt;    &lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===''Dependency Management''===&lt;br /&gt;
:* Rails acts more than a web framework by providing the necessary utility and support tools and adding dependencies to individual projects in a jiffy using the “bundler”. &lt;br /&gt;
:* This bundler installs all the relevant gem files and also can be updated when more dependencies are added. No need to search for packages or jars.&lt;br /&gt;
===''Easy Migration''===&lt;br /&gt;
:* Rails helps you to keep easy track of database changes with the help of Migration Objects. It gives the flexibility to rollback and update.&lt;br /&gt;
:* It also allows you to maintain various versions of database for the multi-environment. On running rake db::migrate, the desired database is migrated and deployed with the working rails server.&lt;br /&gt;
:* New technologies such as Coffeescript can also be easily embedded by installing the relevant gems thus adapting to the changing technology.&lt;br /&gt;
===''Assets Pipeline''===&lt;br /&gt;
:* The assets pipeline is a new feature embedded in rails ( which is now extracted into sprockets-rails gem), concatenates and compresses javascript and css files.&lt;br /&gt;
:* This renders a web page with reduced number of requests from the browser as files are grouped and whitespaces are trimmed.&lt;br /&gt;
:* Precompiled files can also be attached.&lt;br /&gt;
&lt;br /&gt;
=='''Comparison of Rails with other Agile Web Frameworks'''==&lt;br /&gt;
:* This graph shows some of Rabies matrix weights to compare rails with other agile web frameworks. Among the ones compared, Rails is one of the most favourite and production efficient. GWT and GRAILS also are on par with RAILS.&lt;br /&gt;
&lt;br /&gt;
[[File:Stats.JPG|25 px|upright=0.85|center|frame|alt=Puzzle globe logo|center| Fig 3:Comparison of Agile Web Frameworks]]&lt;br /&gt;
'''''Weights Explained'''''&lt;br /&gt;
:*''Components'': Reusable components accelerate development&lt;br /&gt;
:*''Templating'': Rating based on the number of UI templating options are available for the framework&lt;br /&gt;
:*''Plugins and Add-ons'': Rating based on if they framework has a plugin architecture and how many plugins are available&lt;br /&gt;
:*''Scalability'': Rating based on how much the framework relies on session state for functionality&lt;br /&gt;
:*''REST Support'': Does the framework have the ability to produce JSON and XML instead of simply returning HTML? Can it consume JSON and XML as well?&lt;br /&gt;
:*''Degree of Risk'': This rating is mostly for businesses. If the framework is new, there’s inherently some risk in choosing it for your applications&lt;br /&gt;
:*''Testing'': Tools for testing allow to find errors faster&lt;br /&gt;
&lt;br /&gt;
=='''Future of Agile in Rails'''&amp;lt;ref&amp;gt; http://www.richappsconsulting.com/blog/blog-detail/agile-web-development-with-rails-an-overview/ &amp;lt;/ref&amp;gt;==&lt;br /&gt;
Ruby on Rails is a framework that makes it easier to develop, deploy and maintain web applications. Soon after its initial release, Rails went from being an unfamiliar tool to being a wide-reaching phenomenon. It has become the framework of choice for the implementation of a wide range of Web 2.0 applications as it is both simple and subtle. Rails is often utilized by web developers for its suitability for short, client-driven projects. Many entrepreneurs and businesses have chosen Ruby on Rails to create their web application. Here are few well known web services that are run on Ruby on Rails:&lt;br /&gt;
&lt;br /&gt;
* [https://twitter.com Twitter]&lt;br /&gt;
* [http://www.groupon.com Groupon]&lt;br /&gt;
* [https://soundcloud.com SoundCloud]&lt;br /&gt;
* [https://github.com/ GitHub]&lt;br /&gt;
* [http://www.yellow.com YellowPages]&lt;br /&gt;
* [http://www.shopify.com Shopify]&lt;br /&gt;
&lt;br /&gt;
Due to its simple nature and easy to use features as well as the speed of project completion, Rails is an ideal platform for Agile development practices. Keeping in view its accordance with the Agile Manifesto, it is not hard to predict that Rails will be the future of Agile development.&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Sayenga</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/ch1_1w39_as&amp;diff=80050</id>
		<title>CSC/ECE 517 Fall 2013/ch1 1w39 as</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/ch1_1w39_as&amp;diff=80050"/>
		<updated>2013-10-08T03:22:03Z</updated>

		<summary type="html">&lt;p&gt;Sayenga: /* Speedy and Effective Development */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article focuses on how Rails enables ’agile development&lt;br /&gt;
practices’ and the characteristics of Rails that support specific agile methodologies.&lt;br /&gt;
&lt;br /&gt;
{{TOC limit}}&lt;br /&gt;
&lt;br /&gt;
== '''Agile development''' ==&lt;br /&gt;
==='' What is Agile development? ''=== &lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Agile_software_development Agile development]&amp;lt;ref&amp;gt; http://en.wikipedia.org/wiki/Agile_software_development &amp;lt;/ref&amp;gt; is a methodology where requirements and solutions are developed based on [http://en.wikipedia.org/wiki/Iterative_and_incremental_development iterative and incremental development] &amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Iterative_and_incremental_development&amp;lt;/ref&amp;gt; through collaboration between self-organizing, cross-functional teams. Using agile development methodology, a high quality software can be developed by programmers in a minimal amount of time. By involving continuous planning, testing, integration, and other forms of continuous evolution of both the project and the software, it focuses on empowering people to collaborate and make decisions together quickly and effectively. Some of the process under agile development includes adaptive planning, evolutionary development and delivery, a time-boxed iterative approach, and encourages rapid and flexible response to change. It is a conceptual framework that promotes foreseen interactions throughout the development cycle.&lt;br /&gt;
&lt;br /&gt;
===''Why do we need Agile development?''===&lt;br /&gt;
&lt;br /&gt;
:*Visibility through active customer involvement&lt;br /&gt;
:*Flexibility/Agility - ability to accept changes&lt;br /&gt;
:*Quality - testing integrated throughout the lifecycle&lt;br /&gt;
:*Speedy delivery&lt;br /&gt;
:*Customer satisfaction - feeling of a right product&lt;br /&gt;
&lt;br /&gt;
[[File:agl39.jpg|center|alt=Agile development| Fig 1: Agile development]]&lt;br /&gt;
&lt;br /&gt;
===''Principles of agile development'' &amp;lt;ref&amp;gt; http://ruby.about.com/od/rubyonrails/a/agile.htm &amp;lt;/ref&amp;gt; ===&lt;br /&gt;
:*Iterative Development: Iterative development allows the clients to direct the development process in order to get the software features they want. Working software is delivered to the client at regular, short intervals. Client feedback is used to make changes to the software specifications at any stage in the development.&lt;br /&gt;
&lt;br /&gt;
:*Open Collaboration: Open, unrestricted communication between programmers and clients are driving force behind agile development. The programming team must work closely with the customer and also communicate freely with each other. Face to face communication is preferred over specification documents, so working in an open office with no cubicles is ideal.&lt;br /&gt;
&lt;br /&gt;
:*Adaptability: In agile development, changes to the software specifications are welcome even in late stages of development. Principles like Don't Repeat Yourself (DRY) are used to facilitate this. Customers gets hands-on experience with the development of the product, hence they will be able to better communicate their needs. Hence, changes in the market or company structure can be accomodated in the software at any time of the development cycle.&lt;br /&gt;
&lt;br /&gt;
===''Some well known agile development methods''===&lt;br /&gt;
 &lt;br /&gt;
Well-known agile software development methods include:&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Specification_by_example Acceptance Test Driven Development (ATDD)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Dynamic_systems_development_method Dynamic Systems Development Method (DSDM)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Extreme_programming Extreme Programming (XP)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Feature-driven_development Feature Driven Development (FDD)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Lean_software_development Lean software development]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Scrum_(software_development) Scrum]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Story-driven_modeling Story-driven modeling]&lt;br /&gt;
&lt;br /&gt;
=='''Why Use Ruby on Rails for Agile?'''==&lt;br /&gt;
===''Speedy and Effective Development''===&lt;br /&gt;
:* Rails provides a very fast mode to write code in a multitude of languages such as html, [http://en.wikipedia.org/wiki/JavaScript javascript]&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/JavaScript&amp;lt;/ref&amp;gt;, ruby, css, etc that are used to build a web-application by providing preconfigured environments and wire-framed models.&lt;br /&gt;
:* Smoother pace of work, thus putting less pressure on the debugger when it comes to debugging.&lt;br /&gt;
:* Without investing much resources, it can build business models and deliver functionalities, giving scope to customers to innovate and input faster.&lt;br /&gt;
&lt;br /&gt;
===''Open Source''===&lt;br /&gt;
:* The frequently used features and common functionalities can be implemented easily as they are available as Ruby gems.&lt;br /&gt;
:* Provides developers the flexibility to customize and thus encouraging them to make large contributions.&lt;br /&gt;
===''Convention over Configuration''&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Convention_over_configuration&amp;lt;/ref&amp;gt;=== &lt;br /&gt;
:* By following this design paradigm, rails makes it simple for the developer as he need not specify or waste time to decide conventional aspects. &lt;br /&gt;
:* On agreeing to implement simple and common things in a single way, it makes it easy for any new developer to work immediately on an existing project. &lt;br /&gt;
:* This also rules out the need for explicit configuration ( except for unconventional/ customizable aspects).&lt;br /&gt;
&lt;br /&gt;
=='''How Rails supports Agile Methodologies'''==&lt;br /&gt;
===''Generators and Scaffolds''===&lt;br /&gt;
:* The command “rails generate” uses templates to create models, controllers, views, databases, etc which helps to setup a test application.&lt;br /&gt;
   rails generate controller sample index&lt;br /&gt;
::The above command generates controllers sample_controller, views sample/index, assets, tests and other helpers with the route 'get' sample/index &lt;br /&gt;
:* The scaffolding can be easily done to deploy any basic web -application, and developers can extend them to implement their functionalities. This overcomes the initial hurdle.&lt;br /&gt;
   rails generate scaffold Exam course:string score:float&lt;br /&gt;
::It generates all the required directories for an MVC application for a model Exam and also creates db migration CreateExams&lt;br /&gt;
&lt;br /&gt;
===''Ready Setup for Multi-environment''===&lt;br /&gt;
:* Rails application provides development, production and testing environments with built-in configurations setup and thus is a huge time saver for an application which is required to be deployed in multiple environments.&lt;br /&gt;
:* The built-in rails web-server has the development environment as the default environment. &lt;br /&gt;
:* Simple deployment allows developers to have face-face client meetings and thus make instantaneous changes based on the client requirements.&lt;br /&gt;
&lt;br /&gt;
'''Built in configuration of DB in database.yml in development environment'''&lt;br /&gt;
  development:&lt;br /&gt;
  adapter: sqlite3&lt;br /&gt;
  database: db/development.sqlite3&lt;br /&gt;
  pool: 5&lt;br /&gt;
  timeout: 5000&lt;br /&gt;
&lt;br /&gt;
===''Test-Driven Development''===&lt;br /&gt;
:* Built in mocking and stubbing frameworks are available which assists “how to write code”. This follows a red, green and refactor which is an important aspect of agile development.&lt;br /&gt;
:* RSpec is one of the famous testing framework tools used with rails. &lt;br /&gt;
:* Other testing tools can also be swapped in.&lt;br /&gt;
&lt;br /&gt;
[[File:tdd39.jpg|center|alt=Test driven development| Fig 2: TDD cycle]]&lt;br /&gt;
&lt;br /&gt;
Below is an example code for test driven development.&lt;br /&gt;
&lt;br /&gt;
 describe &amp;quot;Static pages&amp;quot; do&lt;br /&gt;
  describe &amp;quot;Home page&amp;quot; do&lt;br /&gt;
    before { visit root_path }&lt;br /&gt;
    it &amp;quot;should have the words 'Backchannel App' in it&amp;quot; do&lt;br /&gt;
      expect(page).to have_content('Back Channel App')&lt;br /&gt;
  end&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
===''Don’t Repeat Yourself (DRY)''===&lt;br /&gt;
:* Repeated code is written in helpers and libraries, making a single destination and thus updations become simpler by updating at just one place.&lt;br /&gt;
:* Partials are a way of rendering repeated HTML code. Rails understand a file which starts with an underscore, say, _partial.html as a partial to be included in the shared html file which renders it.&lt;br /&gt;
'''Using partials''':&lt;br /&gt;
:'''new.html.erb'''&lt;br /&gt;
&lt;br /&gt;
   New Venture&lt;br /&gt;
   &amp;lt;%= error_messages_for :venture%&amp;gt;&lt;br /&gt;
   &amp;lt;%= render partial: &amp;quot;form&amp;quot;, locals: {venture: @venture} %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:'''_form.html.erb'''&lt;br /&gt;
   &amp;lt;%= form_for(venture) do |f| %&amp;gt;   &lt;br /&gt;
      Venture name&lt;br /&gt;
      &amp;lt;%= f.text_field :name %&amp;gt;&lt;br /&gt;
      &amp;lt;%= f.submit %&amp;gt;    &lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===''Dependency Management''===&lt;br /&gt;
:* Rails acts more than a web framework by providing the necessary utility and support tools and adding dependencies to individual projects in a jiffy using the “bundler”. &lt;br /&gt;
:* This bundler installs all the relevant gem files and also can be updated when more dependencies are added. No need to search for packages or jars.&lt;br /&gt;
===''Easy Migration''===&lt;br /&gt;
:* Rails helps you to keep easy track of database changes with the help of Migration Objects. It gives the flexibility to rollback and update.&lt;br /&gt;
:* It also allows you to maintain various versions of database for the multi-environment. On running rake db::migrate, the desired database is migrated and deployed with the working rails server.&lt;br /&gt;
:* New technologies such as Coffeescript can also be easily embedded by installing the relevant gems thus adapting to the changing technology.&lt;br /&gt;
===''Assets Pipeline''===&lt;br /&gt;
:* The assets pipeline is a new feature embedded in rails ( which is now extracted into sprockets-rails gem), concatenates and compresses javascript and css files.&lt;br /&gt;
:* This renders a web page with reduced number of requests from the browser as files are grouped and whitespaces are trimmed.&lt;br /&gt;
:* Precompiled files can also be attached.&lt;br /&gt;
&lt;br /&gt;
=='''Comparison of Rails with other Agile Web Frameworks'''==&lt;br /&gt;
:* This graph shows some of Rabies matrix weights to compare rails with other agile web frameworks. Among the ones compared, Rails is one of the most favourite and production efficient. GWT and GRAILS also are on par with RAILS.&lt;br /&gt;
&lt;br /&gt;
[[File:Stats.JPG|25 px|upright=0.85|center|frame|alt=Puzzle globe logo|center| Fig 3:Comparison of Agile Web Frameworks]]&lt;br /&gt;
'''''Weights Explained'''''&lt;br /&gt;
:*''Components'': Reusable components accelerate development&lt;br /&gt;
:*''Templating'': Rating based on the number of UI templating options are available for the framework&lt;br /&gt;
:*''Plugins and Add-ons'': Rating based on if they framework has a plugin architecture and how many plugins are available&lt;br /&gt;
:*''Scalability'': Rating based on how much the framework relies on session state for functionality&lt;br /&gt;
:*''REST Support'': Does the framework have the ability to produce JSON and XML instead of simply returning HTML? Can it consume JSON and XML as well?&lt;br /&gt;
:*''Degree of Risk'': This rating is mostly for businesses. If the framework is new, there’s inherently some risk in choosing it for your applications&lt;br /&gt;
:*''Testing'': Tools for testing allow to find errors faster&lt;br /&gt;
&lt;br /&gt;
=='''Future of Agile in Rails'''&amp;lt;ref&amp;gt; http://www.richappsconsulting.com/blog/blog-detail/agile-web-development-with-rails-an-overview/ &amp;lt;/ref&amp;gt;==&lt;br /&gt;
Ruby on Rails is a framework that makes it easier to develop, deploy and maintain web applications. Soon after its initial release, Rails went from being an unfamiliar tool to being a wide-reaching phenomenon. It has become the framework of choice for the implementation of a wide range of Web 2.0 applications as it is both simple and subtle. Rails is often utilized by web developers for its suitability for short, client-driven projects. Many entrepreneurs and businesses have chosen Ruby on Rails to create their web application. Here are few well known web services that are run on Ruby on Rails:&lt;br /&gt;
&lt;br /&gt;
* [https://twitter.com Twitter]&lt;br /&gt;
* [http://www.groupon.com Groupon]&lt;br /&gt;
* [https://soundcloud.com SoundCloud]&lt;br /&gt;
* [https://github.com/ GitHub]&lt;br /&gt;
* [http://www.yellow.com YellowPages]&lt;br /&gt;
* [http://www.shopify.com Shopify]&lt;br /&gt;
&lt;br /&gt;
Due to its simple nature and easy to use features as well as the speed of project completion, Rails is an ideal platform for Agile development practices. Keeping in view its accordance with the Agile Manifesto, it is not hard to predict that Rails will be the future of Agile development.&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Sayenga</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/ch1_1w39_as&amp;diff=80049</id>
		<title>CSC/ECE 517 Fall 2013/ch1 1w39 as</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/ch1_1w39_as&amp;diff=80049"/>
		<updated>2013-10-08T03:21:15Z</updated>

		<summary type="html">&lt;p&gt;Sayenga: /* Speedy and Effective Development */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article focuses on how Rails enables ’agile development&lt;br /&gt;
practices’ and the characteristics of Rails that support specific agile methodologies.&lt;br /&gt;
&lt;br /&gt;
{{TOC limit}}&lt;br /&gt;
&lt;br /&gt;
== '''Agile development''' ==&lt;br /&gt;
==='' What is Agile development? ''=== &lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Agile_software_development Agile development]&amp;lt;ref&amp;gt; http://en.wikipedia.org/wiki/Agile_software_development &amp;lt;/ref&amp;gt; is a methodology where requirements and solutions are developed based on [http://en.wikipedia.org/wiki/Iterative_and_incremental_development iterative and incremental development] &amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Iterative_and_incremental_development&amp;lt;/ref&amp;gt; through collaboration between self-organizing, cross-functional teams. Using agile development methodology, a high quality software can be developed by programmers in a minimal amount of time. By involving continuous planning, testing, integration, and other forms of continuous evolution of both the project and the software, it focuses on empowering people to collaborate and make decisions together quickly and effectively. Some of the process under agile development includes adaptive planning, evolutionary development and delivery, a time-boxed iterative approach, and encourages rapid and flexible response to change. It is a conceptual framework that promotes foreseen interactions throughout the development cycle.&lt;br /&gt;
&lt;br /&gt;
===''Why do we need Agile development?''===&lt;br /&gt;
&lt;br /&gt;
:*Visibility through active customer involvement&lt;br /&gt;
:*Flexibility/Agility - ability to accept changes&lt;br /&gt;
:*Quality - testing integrated throughout the lifecycle&lt;br /&gt;
:*Speedy delivery&lt;br /&gt;
:*Customer satisfaction - feeling of a right product&lt;br /&gt;
&lt;br /&gt;
[[File:agl39.jpg|center|alt=Agile development| Fig 1: Agile development]]&lt;br /&gt;
&lt;br /&gt;
===''Principles of agile development'' &amp;lt;ref&amp;gt; http://ruby.about.com/od/rubyonrails/a/agile.htm &amp;lt;/ref&amp;gt; ===&lt;br /&gt;
:*Iterative Development: Iterative development allows the clients to direct the development process in order to get the software features they want. Working software is delivered to the client at regular, short intervals. Client feedback is used to make changes to the software specifications at any stage in the development.&lt;br /&gt;
&lt;br /&gt;
:*Open Collaboration: Open, unrestricted communication between programmers and clients are driving force behind agile development. The programming team must work closely with the customer and also communicate freely with each other. Face to face communication is preferred over specification documents, so working in an open office with no cubicles is ideal.&lt;br /&gt;
&lt;br /&gt;
:*Adaptability: In agile development, changes to the software specifications are welcome even in late stages of development. Principles like Don't Repeat Yourself (DRY) are used to facilitate this. Customers gets hands-on experience with the development of the product, hence they will be able to better communicate their needs. Hence, changes in the market or company structure can be accomodated in the software at any time of the development cycle.&lt;br /&gt;
&lt;br /&gt;
===''Some well known agile development methods''===&lt;br /&gt;
 &lt;br /&gt;
Well-known agile software development methods include:&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Specification_by_example Acceptance Test Driven Development (ATDD)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Dynamic_systems_development_method Dynamic Systems Development Method (DSDM)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Extreme_programming Extreme Programming (XP)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Feature-driven_development Feature Driven Development (FDD)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Lean_software_development Lean software development]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Scrum_(software_development) Scrum]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Story-driven_modeling Story-driven modeling]&lt;br /&gt;
&lt;br /&gt;
=='''Why Use Ruby on Rails for Agile?'''==&lt;br /&gt;
===''Speedy and Effective Development''===&lt;br /&gt;
:* Rails provides a very fast mode to write code in a multitude of languages such as html, http://en.wikipedia.org/wiki/JavaScript&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/JavaScript&amp;lt;/ref&amp;gt;, ruby, css, etc that are used to build a web-application by providing preconfigured environments and wire-framed models.&lt;br /&gt;
:* Smoother pace of work, thus putting less pressure on the debugger when it comes to debugging.&lt;br /&gt;
:* Without investing much resources, it can build business models and deliver functionalities, giving scope to customers to innovate and input faster.&lt;br /&gt;
&lt;br /&gt;
===''Open Source''===&lt;br /&gt;
:* The frequently used features and common functionalities can be implemented easily as they are available as Ruby gems.&lt;br /&gt;
:* Provides developers the flexibility to customize and thus encouraging them to make large contributions.&lt;br /&gt;
===''Convention over Configuration''&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Convention_over_configuration&amp;lt;/ref&amp;gt;=== &lt;br /&gt;
:* By following this design paradigm, rails makes it simple for the developer as he need not specify or waste time to decide conventional aspects. &lt;br /&gt;
:* On agreeing to implement simple and common things in a single way, it makes it easy for any new developer to work immediately on an existing project. &lt;br /&gt;
:* This also rules out the need for explicit configuration ( except for unconventional/ customizable aspects).&lt;br /&gt;
&lt;br /&gt;
=='''How Rails supports Agile Methodologies'''==&lt;br /&gt;
===''Generators and Scaffolds''===&lt;br /&gt;
:* The command “rails generate” uses templates to create models, controllers, views, databases, etc which helps to setup a test application.&lt;br /&gt;
   rails generate controller sample index&lt;br /&gt;
::The above command generates controllers sample_controller, views sample/index, assets, tests and other helpers with the route 'get' sample/index &lt;br /&gt;
:* The scaffolding can be easily done to deploy any basic web -application, and developers can extend them to implement their functionalities. This overcomes the initial hurdle.&lt;br /&gt;
   rails generate scaffold Exam course:string score:float&lt;br /&gt;
::It generates all the required directories for an MVC application for a model Exam and also creates db migration CreateExams&lt;br /&gt;
&lt;br /&gt;
===''Ready Setup for Multi-environment''===&lt;br /&gt;
:* Rails application provides development, production and testing environments with built-in configurations setup and thus is a huge time saver for an application which is required to be deployed in multiple environments.&lt;br /&gt;
:* The built-in rails web-server has the development environment as the default environment. &lt;br /&gt;
:* Simple deployment allows developers to have face-face client meetings and thus make instantaneous changes based on the client requirements.&lt;br /&gt;
&lt;br /&gt;
'''Built in configuration of DB in database.yml in development environment'''&lt;br /&gt;
  development:&lt;br /&gt;
  adapter: sqlite3&lt;br /&gt;
  database: db/development.sqlite3&lt;br /&gt;
  pool: 5&lt;br /&gt;
  timeout: 5000&lt;br /&gt;
&lt;br /&gt;
===''Test-Driven Development''===&lt;br /&gt;
:* Built in mocking and stubbing frameworks are available which assists “how to write code”. This follows a red, green and refactor which is an important aspect of agile development.&lt;br /&gt;
:* RSpec is one of the famous testing framework tools used with rails. &lt;br /&gt;
:* Other testing tools can also be swapped in.&lt;br /&gt;
&lt;br /&gt;
[[File:tdd39.jpg|center|alt=Test driven development| Fig 2: TDD cycle]]&lt;br /&gt;
&lt;br /&gt;
Below is an example code for test driven development.&lt;br /&gt;
&lt;br /&gt;
 describe &amp;quot;Static pages&amp;quot; do&lt;br /&gt;
  describe &amp;quot;Home page&amp;quot; do&lt;br /&gt;
    before { visit root_path }&lt;br /&gt;
    it &amp;quot;should have the words 'Backchannel App' in it&amp;quot; do&lt;br /&gt;
      expect(page).to have_content('Back Channel App')&lt;br /&gt;
  end&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
===''Don’t Repeat Yourself (DRY)''===&lt;br /&gt;
:* Repeated code is written in helpers and libraries, making a single destination and thus updations become simpler by updating at just one place.&lt;br /&gt;
:* Partials are a way of rendering repeated HTML code. Rails understand a file which starts with an underscore, say, _partial.html as a partial to be included in the shared html file which renders it.&lt;br /&gt;
'''Using partials''':&lt;br /&gt;
:'''new.html.erb'''&lt;br /&gt;
&lt;br /&gt;
   New Venture&lt;br /&gt;
   &amp;lt;%= error_messages_for :venture%&amp;gt;&lt;br /&gt;
   &amp;lt;%= render partial: &amp;quot;form&amp;quot;, locals: {venture: @venture} %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:'''_form.html.erb'''&lt;br /&gt;
   &amp;lt;%= form_for(venture) do |f| %&amp;gt;   &lt;br /&gt;
      Venture name&lt;br /&gt;
      &amp;lt;%= f.text_field :name %&amp;gt;&lt;br /&gt;
      &amp;lt;%= f.submit %&amp;gt;    &lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===''Dependency Management''===&lt;br /&gt;
:* Rails acts more than a web framework by providing the necessary utility and support tools and adding dependencies to individual projects in a jiffy using the “bundler”. &lt;br /&gt;
:* This bundler installs all the relevant gem files and also can be updated when more dependencies are added. No need to search for packages or jars.&lt;br /&gt;
===''Easy Migration''===&lt;br /&gt;
:* Rails helps you to keep easy track of database changes with the help of Migration Objects. It gives the flexibility to rollback and update.&lt;br /&gt;
:* It also allows you to maintain various versions of database for the multi-environment. On running rake db::migrate, the desired database is migrated and deployed with the working rails server.&lt;br /&gt;
:* New technologies such as Coffeescript can also be easily embedded by installing the relevant gems thus adapting to the changing technology.&lt;br /&gt;
===''Assets Pipeline''===&lt;br /&gt;
:* The assets pipeline is a new feature embedded in rails ( which is now extracted into sprockets-rails gem), concatenates and compresses javascript and css files.&lt;br /&gt;
:* This renders a web page with reduced number of requests from the browser as files are grouped and whitespaces are trimmed.&lt;br /&gt;
:* Precompiled files can also be attached.&lt;br /&gt;
&lt;br /&gt;
=='''Comparison of Rails with other Agile Web Frameworks'''==&lt;br /&gt;
:* This graph shows some of Rabies matrix weights to compare rails with other agile web frameworks. Among the ones compared, Rails is one of the most favourite and production efficient. GWT and GRAILS also are on par with RAILS.&lt;br /&gt;
&lt;br /&gt;
[[File:Stats.JPG|25 px|upright=0.85|center|frame|alt=Puzzle globe logo|center| Fig 3:Comparison of Agile Web Frameworks]]&lt;br /&gt;
'''''Weights Explained'''''&lt;br /&gt;
:*''Components'': Reusable components accelerate development&lt;br /&gt;
:*''Templating'': Rating based on the number of UI templating options are available for the framework&lt;br /&gt;
:*''Plugins and Add-ons'': Rating based on if they framework has a plugin architecture and how many plugins are available&lt;br /&gt;
:*''Scalability'': Rating based on how much the framework relies on session state for functionality&lt;br /&gt;
:*''REST Support'': Does the framework have the ability to produce JSON and XML instead of simply returning HTML? Can it consume JSON and XML as well?&lt;br /&gt;
:*''Degree of Risk'': This rating is mostly for businesses. If the framework is new, there’s inherently some risk in choosing it for your applications&lt;br /&gt;
:*''Testing'': Tools for testing allow to find errors faster&lt;br /&gt;
&lt;br /&gt;
=='''Future of Agile in Rails'''&amp;lt;ref&amp;gt; http://www.richappsconsulting.com/blog/blog-detail/agile-web-development-with-rails-an-overview/ &amp;lt;/ref&amp;gt;==&lt;br /&gt;
Ruby on Rails is a framework that makes it easier to develop, deploy and maintain web applications. Soon after its initial release, Rails went from being an unfamiliar tool to being a wide-reaching phenomenon. It has become the framework of choice for the implementation of a wide range of Web 2.0 applications as it is both simple and subtle. Rails is often utilized by web developers for its suitability for short, client-driven projects. Many entrepreneurs and businesses have chosen Ruby on Rails to create their web application. Here are few well known web services that are run on Ruby on Rails:&lt;br /&gt;
&lt;br /&gt;
* [https://twitter.com Twitter]&lt;br /&gt;
* [http://www.groupon.com Groupon]&lt;br /&gt;
* [https://soundcloud.com SoundCloud]&lt;br /&gt;
* [https://github.com/ GitHub]&lt;br /&gt;
* [http://www.yellow.com YellowPages]&lt;br /&gt;
* [http://www.shopify.com Shopify]&lt;br /&gt;
&lt;br /&gt;
Due to its simple nature and easy to use features as well as the speed of project completion, Rails is an ideal platform for Agile development practices. Keeping in view its accordance with the Agile Manifesto, it is not hard to predict that Rails will be the future of Agile development.&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Sayenga</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/ch1_1w39_as&amp;diff=80047</id>
		<title>CSC/ECE 517 Fall 2013/ch1 1w39 as</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/ch1_1w39_as&amp;diff=80047"/>
		<updated>2013-10-08T03:20:55Z</updated>

		<summary type="html">&lt;p&gt;Sayenga: /* Speedy and Effective Development */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article focuses on how Rails enables ’agile development&lt;br /&gt;
practices’ and the characteristics of Rails that support specific agile methodologies.&lt;br /&gt;
&lt;br /&gt;
{{TOC limit}}&lt;br /&gt;
&lt;br /&gt;
== '''Agile development''' ==&lt;br /&gt;
==='' What is Agile development? ''=== &lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Agile_software_development Agile development]&amp;lt;ref&amp;gt; http://en.wikipedia.org/wiki/Agile_software_development &amp;lt;/ref&amp;gt; is a methodology where requirements and solutions are developed based on [http://en.wikipedia.org/wiki/Iterative_and_incremental_development iterative and incremental development] &amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Iterative_and_incremental_development&amp;lt;/ref&amp;gt; through collaboration between self-organizing, cross-functional teams. Using agile development methodology, a high quality software can be developed by programmers in a minimal amount of time. By involving continuous planning, testing, integration, and other forms of continuous evolution of both the project and the software, it focuses on empowering people to collaborate and make decisions together quickly and effectively. Some of the process under agile development includes adaptive planning, evolutionary development and delivery, a time-boxed iterative approach, and encourages rapid and flexible response to change. It is a conceptual framework that promotes foreseen interactions throughout the development cycle.&lt;br /&gt;
&lt;br /&gt;
===''Why do we need Agile development?''===&lt;br /&gt;
&lt;br /&gt;
:*Visibility through active customer involvement&lt;br /&gt;
:*Flexibility/Agility - ability to accept changes&lt;br /&gt;
:*Quality - testing integrated throughout the lifecycle&lt;br /&gt;
:*Speedy delivery&lt;br /&gt;
:*Customer satisfaction - feeling of a right product&lt;br /&gt;
&lt;br /&gt;
[[File:agl39.jpg|center|alt=Agile development| Fig 1: Agile development]]&lt;br /&gt;
&lt;br /&gt;
===''Principles of agile development'' &amp;lt;ref&amp;gt; http://ruby.about.com/od/rubyonrails/a/agile.htm &amp;lt;/ref&amp;gt; ===&lt;br /&gt;
:*Iterative Development: Iterative development allows the clients to direct the development process in order to get the software features they want. Working software is delivered to the client at regular, short intervals. Client feedback is used to make changes to the software specifications at any stage in the development.&lt;br /&gt;
&lt;br /&gt;
:*Open Collaboration: Open, unrestricted communication between programmers and clients are driving force behind agile development. The programming team must work closely with the customer and also communicate freely with each other. Face to face communication is preferred over specification documents, so working in an open office with no cubicles is ideal.&lt;br /&gt;
&lt;br /&gt;
:*Adaptability: In agile development, changes to the software specifications are welcome even in late stages of development. Principles like Don't Repeat Yourself (DRY) are used to facilitate this. Customers gets hands-on experience with the development of the product, hence they will be able to better communicate their needs. Hence, changes in the market or company structure can be accomodated in the software at any time of the development cycle.&lt;br /&gt;
&lt;br /&gt;
===''Some well known agile development methods''===&lt;br /&gt;
 &lt;br /&gt;
Well-known agile software development methods include:&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Specification_by_example Acceptance Test Driven Development (ATDD)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Dynamic_systems_development_method Dynamic Systems Development Method (DSDM)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Extreme_programming Extreme Programming (XP)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Feature-driven_development Feature Driven Development (FDD)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Lean_software_development Lean software development]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Scrum_(software_development) Scrum]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Story-driven_modeling Story-driven modeling]&lt;br /&gt;
&lt;br /&gt;
=='''Why Use Ruby on Rails for Agile?'''==&lt;br /&gt;
===''Speedy and Effective Development''===&lt;br /&gt;
:* Rails provides a very fast mode to write code in a multitude of languages such as html, [http://en.wikipedia.org/wiki/JavaScript]&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/JavaScript&amp;lt;/ref&amp;gt;, ruby, css, etc that are used to build a web-application by providing preconfigured environments and wire-framed models.&lt;br /&gt;
:* Smoother pace of work, thus putting less pressure on the debugger when it comes to debugging.&lt;br /&gt;
:* Without investing much resources, it can build business models and deliver functionalities, giving scope to customers to innovate and input faster.&lt;br /&gt;
&lt;br /&gt;
===''Open Source''===&lt;br /&gt;
:* The frequently used features and common functionalities can be implemented easily as they are available as Ruby gems.&lt;br /&gt;
:* Provides developers the flexibility to customize and thus encouraging them to make large contributions.&lt;br /&gt;
===''Convention over Configuration''&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Convention_over_configuration&amp;lt;/ref&amp;gt;=== &lt;br /&gt;
:* By following this design paradigm, rails makes it simple for the developer as he need not specify or waste time to decide conventional aspects. &lt;br /&gt;
:* On agreeing to implement simple and common things in a single way, it makes it easy for any new developer to work immediately on an existing project. &lt;br /&gt;
:* This also rules out the need for explicit configuration ( except for unconventional/ customizable aspects).&lt;br /&gt;
&lt;br /&gt;
=='''How Rails supports Agile Methodologies'''==&lt;br /&gt;
===''Generators and Scaffolds''===&lt;br /&gt;
:* The command “rails generate” uses templates to create models, controllers, views, databases, etc which helps to setup a test application.&lt;br /&gt;
   rails generate controller sample index&lt;br /&gt;
::The above command generates controllers sample_controller, views sample/index, assets, tests and other helpers with the route 'get' sample/index &lt;br /&gt;
:* The scaffolding can be easily done to deploy any basic web -application, and developers can extend them to implement their functionalities. This overcomes the initial hurdle.&lt;br /&gt;
   rails generate scaffold Exam course:string score:float&lt;br /&gt;
::It generates all the required directories for an MVC application for a model Exam and also creates db migration CreateExams&lt;br /&gt;
&lt;br /&gt;
===''Ready Setup for Multi-environment''===&lt;br /&gt;
:* Rails application provides development, production and testing environments with built-in configurations setup and thus is a huge time saver for an application which is required to be deployed in multiple environments.&lt;br /&gt;
:* The built-in rails web-server has the development environment as the default environment. &lt;br /&gt;
:* Simple deployment allows developers to have face-face client meetings and thus make instantaneous changes based on the client requirements.&lt;br /&gt;
&lt;br /&gt;
'''Built in configuration of DB in database.yml in development environment'''&lt;br /&gt;
  development:&lt;br /&gt;
  adapter: sqlite3&lt;br /&gt;
  database: db/development.sqlite3&lt;br /&gt;
  pool: 5&lt;br /&gt;
  timeout: 5000&lt;br /&gt;
&lt;br /&gt;
===''Test-Driven Development''===&lt;br /&gt;
:* Built in mocking and stubbing frameworks are available which assists “how to write code”. This follows a red, green and refactor which is an important aspect of agile development.&lt;br /&gt;
:* RSpec is one of the famous testing framework tools used with rails. &lt;br /&gt;
:* Other testing tools can also be swapped in.&lt;br /&gt;
&lt;br /&gt;
[[File:tdd39.jpg|center|alt=Test driven development| Fig 2: TDD cycle]]&lt;br /&gt;
&lt;br /&gt;
Below is an example code for test driven development.&lt;br /&gt;
&lt;br /&gt;
 describe &amp;quot;Static pages&amp;quot; do&lt;br /&gt;
  describe &amp;quot;Home page&amp;quot; do&lt;br /&gt;
    before { visit root_path }&lt;br /&gt;
    it &amp;quot;should have the words 'Backchannel App' in it&amp;quot; do&lt;br /&gt;
      expect(page).to have_content('Back Channel App')&lt;br /&gt;
  end&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
===''Don’t Repeat Yourself (DRY)''===&lt;br /&gt;
:* Repeated code is written in helpers and libraries, making a single destination and thus updations become simpler by updating at just one place.&lt;br /&gt;
:* Partials are a way of rendering repeated HTML code. Rails understand a file which starts with an underscore, say, _partial.html as a partial to be included in the shared html file which renders it.&lt;br /&gt;
'''Using partials''':&lt;br /&gt;
:'''new.html.erb'''&lt;br /&gt;
&lt;br /&gt;
   New Venture&lt;br /&gt;
   &amp;lt;%= error_messages_for :venture%&amp;gt;&lt;br /&gt;
   &amp;lt;%= render partial: &amp;quot;form&amp;quot;, locals: {venture: @venture} %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:'''_form.html.erb'''&lt;br /&gt;
   &amp;lt;%= form_for(venture) do |f| %&amp;gt;   &lt;br /&gt;
      Venture name&lt;br /&gt;
      &amp;lt;%= f.text_field :name %&amp;gt;&lt;br /&gt;
      &amp;lt;%= f.submit %&amp;gt;    &lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===''Dependency Management''===&lt;br /&gt;
:* Rails acts more than a web framework by providing the necessary utility and support tools and adding dependencies to individual projects in a jiffy using the “bundler”. &lt;br /&gt;
:* This bundler installs all the relevant gem files and also can be updated when more dependencies are added. No need to search for packages or jars.&lt;br /&gt;
===''Easy Migration''===&lt;br /&gt;
:* Rails helps you to keep easy track of database changes with the help of Migration Objects. It gives the flexibility to rollback and update.&lt;br /&gt;
:* It also allows you to maintain various versions of database for the multi-environment. On running rake db::migrate, the desired database is migrated and deployed with the working rails server.&lt;br /&gt;
:* New technologies such as Coffeescript can also be easily embedded by installing the relevant gems thus adapting to the changing technology.&lt;br /&gt;
===''Assets Pipeline''===&lt;br /&gt;
:* The assets pipeline is a new feature embedded in rails ( which is now extracted into sprockets-rails gem), concatenates and compresses javascript and css files.&lt;br /&gt;
:* This renders a web page with reduced number of requests from the browser as files are grouped and whitespaces are trimmed.&lt;br /&gt;
:* Precompiled files can also be attached.&lt;br /&gt;
&lt;br /&gt;
=='''Comparison of Rails with other Agile Web Frameworks'''==&lt;br /&gt;
:* This graph shows some of Rabies matrix weights to compare rails with other agile web frameworks. Among the ones compared, Rails is one of the most favourite and production efficient. GWT and GRAILS also are on par with RAILS.&lt;br /&gt;
&lt;br /&gt;
[[File:Stats.JPG|25 px|upright=0.85|center|frame|alt=Puzzle globe logo|center| Fig 3:Comparison of Agile Web Frameworks]]&lt;br /&gt;
'''''Weights Explained'''''&lt;br /&gt;
:*''Components'': Reusable components accelerate development&lt;br /&gt;
:*''Templating'': Rating based on the number of UI templating options are available for the framework&lt;br /&gt;
:*''Plugins and Add-ons'': Rating based on if they framework has a plugin architecture and how many plugins are available&lt;br /&gt;
:*''Scalability'': Rating based on how much the framework relies on session state for functionality&lt;br /&gt;
:*''REST Support'': Does the framework have the ability to produce JSON and XML instead of simply returning HTML? Can it consume JSON and XML as well?&lt;br /&gt;
:*''Degree of Risk'': This rating is mostly for businesses. If the framework is new, there’s inherently some risk in choosing it for your applications&lt;br /&gt;
:*''Testing'': Tools for testing allow to find errors faster&lt;br /&gt;
&lt;br /&gt;
=='''Future of Agile in Rails'''&amp;lt;ref&amp;gt; http://www.richappsconsulting.com/blog/blog-detail/agile-web-development-with-rails-an-overview/ &amp;lt;/ref&amp;gt;==&lt;br /&gt;
Ruby on Rails is a framework that makes it easier to develop, deploy and maintain web applications. Soon after its initial release, Rails went from being an unfamiliar tool to being a wide-reaching phenomenon. It has become the framework of choice for the implementation of a wide range of Web 2.0 applications as it is both simple and subtle. Rails is often utilized by web developers for its suitability for short, client-driven projects. Many entrepreneurs and businesses have chosen Ruby on Rails to create their web application. Here are few well known web services that are run on Ruby on Rails:&lt;br /&gt;
&lt;br /&gt;
* [https://twitter.com Twitter]&lt;br /&gt;
* [http://www.groupon.com Groupon]&lt;br /&gt;
* [https://soundcloud.com SoundCloud]&lt;br /&gt;
* [https://github.com/ GitHub]&lt;br /&gt;
* YellowPages&lt;br /&gt;
* Shopify&lt;br /&gt;
&lt;br /&gt;
Due to its simple nature and easy to use features as well as the speed of project completion, Rails is an ideal platform for Agile development practices. Keeping in view its accordance with the Agile Manifesto, it is not hard to predict that Rails will be the future of Agile development.&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Sayenga</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/ch1_1w39_as&amp;diff=80045</id>
		<title>CSC/ECE 517 Fall 2013/ch1 1w39 as</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/ch1_1w39_as&amp;diff=80045"/>
		<updated>2013-10-08T03:20:13Z</updated>

		<summary type="html">&lt;p&gt;Sayenga: /* Why Use Ruby on Rails for Agile? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article focuses on how Rails enables ’agile development&lt;br /&gt;
practices’ and the characteristics of Rails that support specific agile methodologies.&lt;br /&gt;
&lt;br /&gt;
{{TOC limit}}&lt;br /&gt;
&lt;br /&gt;
== '''Agile development''' ==&lt;br /&gt;
==='' What is Agile development? ''=== &lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Agile_software_development Agile development]&amp;lt;ref&amp;gt; http://en.wikipedia.org/wiki/Agile_software_development &amp;lt;/ref&amp;gt; is a methodology where requirements and solutions are developed based on [http://en.wikipedia.org/wiki/Iterative_and_incremental_development iterative and incremental development] &amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Iterative_and_incremental_development&amp;lt;/ref&amp;gt; through collaboration between self-organizing, cross-functional teams. Using agile development methodology, a high quality software can be developed by programmers in a minimal amount of time. By involving continuous planning, testing, integration, and other forms of continuous evolution of both the project and the software, it focuses on empowering people to collaborate and make decisions together quickly and effectively. Some of the process under agile development includes adaptive planning, evolutionary development and delivery, a time-boxed iterative approach, and encourages rapid and flexible response to change. It is a conceptual framework that promotes foreseen interactions throughout the development cycle.&lt;br /&gt;
&lt;br /&gt;
===''Why do we need Agile development?''===&lt;br /&gt;
&lt;br /&gt;
:*Visibility through active customer involvement&lt;br /&gt;
:*Flexibility/Agility - ability to accept changes&lt;br /&gt;
:*Quality - testing integrated throughout the lifecycle&lt;br /&gt;
:*Speedy delivery&lt;br /&gt;
:*Customer satisfaction - feeling of a right product&lt;br /&gt;
&lt;br /&gt;
[[File:agl39.jpg|center|alt=Agile development| Fig 1: Agile development]]&lt;br /&gt;
&lt;br /&gt;
===''Principles of agile development'' &amp;lt;ref&amp;gt; http://ruby.about.com/od/rubyonrails/a/agile.htm &amp;lt;/ref&amp;gt; ===&lt;br /&gt;
:*Iterative Development: Iterative development allows the clients to direct the development process in order to get the software features they want. Working software is delivered to the client at regular, short intervals. Client feedback is used to make changes to the software specifications at any stage in the development.&lt;br /&gt;
&lt;br /&gt;
:*Open Collaboration: Open, unrestricted communication between programmers and clients are driving force behind agile development. The programming team must work closely with the customer and also communicate freely with each other. Face to face communication is preferred over specification documents, so working in an open office with no cubicles is ideal.&lt;br /&gt;
&lt;br /&gt;
:*Adaptability: In agile development, changes to the software specifications are welcome even in late stages of development. Principles like Don't Repeat Yourself (DRY) are used to facilitate this. Customers gets hands-on experience with the development of the product, hence they will be able to better communicate their needs. Hence, changes in the market or company structure can be accomodated in the software at any time of the development cycle.&lt;br /&gt;
&lt;br /&gt;
===''Some well known agile development methods''===&lt;br /&gt;
 &lt;br /&gt;
Well-known agile software development methods include:&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Specification_by_example Acceptance Test Driven Development (ATDD)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Dynamic_systems_development_method Dynamic Systems Development Method (DSDM)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Extreme_programming Extreme Programming (XP)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Feature-driven_development Feature Driven Development (FDD)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Lean_software_development Lean software development]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Scrum_(software_development) Scrum]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Story-driven_modeling Story-driven modeling]&lt;br /&gt;
&lt;br /&gt;
=='''Why Use Ruby on Rails for Agile?'''==&lt;br /&gt;
===''Speedy and Effective Development''===&lt;br /&gt;
:* Rails provides a very fast mode to write code in a multitude of languages such as html, javascript, ruby, css, etc that are used to build a web-application by providing preconfigured environments and wire-framed models.&lt;br /&gt;
:* Smoother pace of work, thus putting less pressure on the debugger when it comes to debugging.&lt;br /&gt;
:* Without investing much resources, it can build business models and deliver functionalities, giving scope to customers to innovate and input faster.&lt;br /&gt;
===''Open Source''===&lt;br /&gt;
:* The frequently used features and common functionalities can be implemented easily as they are available as Ruby gems.&lt;br /&gt;
:* Provides developers the flexibility to customize and thus encouraging them to make large contributions.&lt;br /&gt;
===''Convention over Configuration''&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Convention_over_configuration&amp;lt;/ref&amp;gt;=== &lt;br /&gt;
:* By following this design paradigm, rails makes it simple for the developer as he need not specify or waste time to decide conventional aspects. &lt;br /&gt;
:* On agreeing to implement simple and common things in a single way, it makes it easy for any new developer to work immediately on an existing project. &lt;br /&gt;
:* This also rules out the need for explicit configuration ( except for unconventional/ customizable aspects).&lt;br /&gt;
&lt;br /&gt;
=='''How Rails supports Agile Methodologies'''==&lt;br /&gt;
===''Generators and Scaffolds''===&lt;br /&gt;
:* The command “rails generate” uses templates to create models, controllers, views, databases, etc which helps to setup a test application.&lt;br /&gt;
   rails generate controller sample index&lt;br /&gt;
::The above command generates controllers sample_controller, views sample/index, assets, tests and other helpers with the route 'get' sample/index &lt;br /&gt;
:* The scaffolding can be easily done to deploy any basic web -application, and developers can extend them to implement their functionalities. This overcomes the initial hurdle.&lt;br /&gt;
   rails generate scaffold Exam course:string score:float&lt;br /&gt;
::It generates all the required directories for an MVC application for a model Exam and also creates db migration CreateExams&lt;br /&gt;
&lt;br /&gt;
===''Ready Setup for Multi-environment''===&lt;br /&gt;
:* Rails application provides development, production and testing environments with built-in configurations setup and thus is a huge time saver for an application which is required to be deployed in multiple environments.&lt;br /&gt;
:* The built-in rails web-server has the development environment as the default environment. &lt;br /&gt;
:* Simple deployment allows developers to have face-face client meetings and thus make instantaneous changes based on the client requirements.&lt;br /&gt;
&lt;br /&gt;
'''Built in configuration of DB in database.yml in development environment'''&lt;br /&gt;
  development:&lt;br /&gt;
  adapter: sqlite3&lt;br /&gt;
  database: db/development.sqlite3&lt;br /&gt;
  pool: 5&lt;br /&gt;
  timeout: 5000&lt;br /&gt;
&lt;br /&gt;
===''Test-Driven Development''===&lt;br /&gt;
:* Built in mocking and stubbing frameworks are available which assists “how to write code”. This follows a red, green and refactor which is an important aspect of agile development.&lt;br /&gt;
:* RSpec is one of the famous testing framework tools used with rails. &lt;br /&gt;
:* Other testing tools can also be swapped in.&lt;br /&gt;
&lt;br /&gt;
[[File:tdd39.jpg|center|alt=Test driven development| Fig 2: TDD cycle]]&lt;br /&gt;
&lt;br /&gt;
Below is an example code for test driven development.&lt;br /&gt;
&lt;br /&gt;
 describe &amp;quot;Static pages&amp;quot; do&lt;br /&gt;
  describe &amp;quot;Home page&amp;quot; do&lt;br /&gt;
    before { visit root_path }&lt;br /&gt;
    it &amp;quot;should have the words 'Backchannel App' in it&amp;quot; do&lt;br /&gt;
      expect(page).to have_content('Back Channel App')&lt;br /&gt;
  end&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
===''Don’t Repeat Yourself (DRY)''===&lt;br /&gt;
:* Repeated code is written in helpers and libraries, making a single destination and thus updations become simpler by updating at just one place.&lt;br /&gt;
:* Partials are a way of rendering repeated HTML code. Rails understand a file which starts with an underscore, say, _partial.html as a partial to be included in the shared html file which renders it.&lt;br /&gt;
'''Using partials''':&lt;br /&gt;
:'''new.html.erb'''&lt;br /&gt;
&lt;br /&gt;
   New Venture&lt;br /&gt;
   &amp;lt;%= error_messages_for :venture%&amp;gt;&lt;br /&gt;
   &amp;lt;%= render partial: &amp;quot;form&amp;quot;, locals: {venture: @venture} %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:'''_form.html.erb'''&lt;br /&gt;
   &amp;lt;%= form_for(venture) do |f| %&amp;gt;   &lt;br /&gt;
      Venture name&lt;br /&gt;
      &amp;lt;%= f.text_field :name %&amp;gt;&lt;br /&gt;
      &amp;lt;%= f.submit %&amp;gt;    &lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===''Dependency Management''===&lt;br /&gt;
:* Rails acts more than a web framework by providing the necessary utility and support tools and adding dependencies to individual projects in a jiffy using the “bundler”. &lt;br /&gt;
:* This bundler installs all the relevant gem files and also can be updated when more dependencies are added. No need to search for packages or jars.&lt;br /&gt;
===''Easy Migration''===&lt;br /&gt;
:* Rails helps you to keep easy track of database changes with the help of Migration Objects. It gives the flexibility to rollback and update.&lt;br /&gt;
:* It also allows you to maintain various versions of database for the multi-environment. On running rake db::migrate, the desired database is migrated and deployed with the working rails server.&lt;br /&gt;
:* New technologies such as Coffeescript can also be easily embedded by installing the relevant gems thus adapting to the changing technology.&lt;br /&gt;
===''Assets Pipeline''===&lt;br /&gt;
:* The assets pipeline is a new feature embedded in rails ( which is now extracted into sprockets-rails gem), concatenates and compresses javascript and css files.&lt;br /&gt;
:* This renders a web page with reduced number of requests from the browser as files are grouped and whitespaces are trimmed.&lt;br /&gt;
:* Precompiled files can also be attached.&lt;br /&gt;
&lt;br /&gt;
=='''Comparison of Rails with other Agile Web Frameworks'''==&lt;br /&gt;
:* This graph shows some of Rabies matrix weights to compare rails with other agile web frameworks. Among the ones compared, Rails is one of the most favourite and production efficient. GWT and GRAILS also are on par with RAILS.&lt;br /&gt;
&lt;br /&gt;
[[File:Stats.JPG|25 px|upright=0.85|center|frame|alt=Puzzle globe logo|center| Fig 3:Comparison of Agile Web Frameworks]]&lt;br /&gt;
'''''Weights Explained'''''&lt;br /&gt;
:*''Components'': Reusable components accelerate development&lt;br /&gt;
:*''Templating'': Rating based on the number of UI templating options are available for the framework&lt;br /&gt;
:*''Plugins and Add-ons'': Rating based on if they framework has a plugin architecture and how many plugins are available&lt;br /&gt;
:*''Scalability'': Rating based on how much the framework relies on session state for functionality&lt;br /&gt;
:*''REST Support'': Does the framework have the ability to produce JSON and XML instead of simply returning HTML? Can it consume JSON and XML as well?&lt;br /&gt;
:*''Degree of Risk'': This rating is mostly for businesses. If the framework is new, there’s inherently some risk in choosing it for your applications&lt;br /&gt;
:*''Testing'': Tools for testing allow to find errors faster&lt;br /&gt;
&lt;br /&gt;
=='''Future of Agile in Rails'''&amp;lt;ref&amp;gt; http://www.richappsconsulting.com/blog/blog-detail/agile-web-development-with-rails-an-overview/ &amp;lt;/ref&amp;gt;==&lt;br /&gt;
Ruby on Rails is a framework that makes it easier to develop, deploy and maintain web applications. Soon after its initial release, Rails went from being an unfamiliar tool to being a wide-reaching phenomenon. It has become the framework of choice for the implementation of a wide range of Web 2.0 applications as it is both simple and subtle. Rails is often utilized by web developers for its suitability for short, client-driven projects. Many entrepreneurs and businesses have chosen Ruby on Rails to create their web application. Here are few well known web services that are run on Ruby on Rails:&lt;br /&gt;
&lt;br /&gt;
* [https://twitter.com Twitter]&lt;br /&gt;
* [http://www.groupon.com Groupon]&lt;br /&gt;
* [https://soundcloud.com SoundCloud]&lt;br /&gt;
* [https://github.com/ GitHub]&lt;br /&gt;
* YellowPages&lt;br /&gt;
* Shopify&lt;br /&gt;
&lt;br /&gt;
Due to its simple nature and easy to use features as well as the speed of project completion, Rails is an ideal platform for Agile development practices. Keeping in view its accordance with the Agile Manifesto, it is not hard to predict that Rails will be the future of Agile development.&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Sayenga</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/ch1_1w39_as&amp;diff=80043</id>
		<title>CSC/ECE 517 Fall 2013/ch1 1w39 as</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/ch1_1w39_as&amp;diff=80043"/>
		<updated>2013-10-08T03:19:26Z</updated>

		<summary type="html">&lt;p&gt;Sayenga: /* Why Use Ruby on Rails for Agile? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article focuses on how Rails enables ’agile development&lt;br /&gt;
practices’ and the characteristics of Rails that support specific agile methodologies.&lt;br /&gt;
&lt;br /&gt;
{{TOC limit}}&lt;br /&gt;
&lt;br /&gt;
== '''Agile development''' ==&lt;br /&gt;
==='' What is Agile development? ''=== &lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Agile_software_development Agile development]&amp;lt;ref&amp;gt; http://en.wikipedia.org/wiki/Agile_software_development &amp;lt;/ref&amp;gt; is a methodology where requirements and solutions are developed based on [http://en.wikipedia.org/wiki/Iterative_and_incremental_development iterative and incremental development] &amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Iterative_and_incremental_development&amp;lt;/ref&amp;gt; through collaboration between self-organizing, cross-functional teams. Using agile development methodology, a high quality software can be developed by programmers in a minimal amount of time. By involving continuous planning, testing, integration, and other forms of continuous evolution of both the project and the software, it focuses on empowering people to collaborate and make decisions together quickly and effectively. Some of the process under agile development includes adaptive planning, evolutionary development and delivery, a time-boxed iterative approach, and encourages rapid and flexible response to change. It is a conceptual framework that promotes foreseen interactions throughout the development cycle.&lt;br /&gt;
&lt;br /&gt;
===''Why do we need Agile development?''===&lt;br /&gt;
&lt;br /&gt;
:*Visibility through active customer involvement&lt;br /&gt;
:*Flexibility/Agility - ability to accept changes&lt;br /&gt;
:*Quality - testing integrated throughout the lifecycle&lt;br /&gt;
:*Speedy delivery&lt;br /&gt;
:*Customer satisfaction - feeling of a right product&lt;br /&gt;
&lt;br /&gt;
[[File:agl39.jpg|center|alt=Agile development| Fig 1: Agile development]]&lt;br /&gt;
&lt;br /&gt;
===''Principles of agile development'' &amp;lt;ref&amp;gt; http://ruby.about.com/od/rubyonrails/a/agile.htm &amp;lt;/ref&amp;gt; ===&lt;br /&gt;
:*Iterative Development: Iterative development allows the clients to direct the development process in order to get the software features they want. Working software is delivered to the client at regular, short intervals. Client feedback is used to make changes to the software specifications at any stage in the development.&lt;br /&gt;
&lt;br /&gt;
:*Open Collaboration: Open, unrestricted communication between programmers and clients are driving force behind agile development. The programming team must work closely with the customer and also communicate freely with each other. Face to face communication is preferred over specification documents, so working in an open office with no cubicles is ideal.&lt;br /&gt;
&lt;br /&gt;
:*Adaptability: In agile development, changes to the software specifications are welcome even in late stages of development. Principles like Don't Repeat Yourself (DRY) are used to facilitate this. Customers gets hands-on experience with the development of the product, hence they will be able to better communicate their needs. Hence, changes in the market or company structure can be accomodated in the software at any time of the development cycle.&lt;br /&gt;
&lt;br /&gt;
===''Some well known agile development methods''===&lt;br /&gt;
 &lt;br /&gt;
Well-known agile software development methods include:&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Specification_by_example Acceptance Test Driven Development (ATDD)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Dynamic_systems_development_method Dynamic Systems Development Method (DSDM)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Extreme_programming Extreme Programming (XP)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Feature-driven_development Feature Driven Development (FDD)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Lean_software_development Lean software development]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Scrum_(software_development) Scrum]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Story-driven_modeling Story-driven modeling]&lt;br /&gt;
&lt;br /&gt;
=='''Why Use Ruby on Rails for Agile?'''==&lt;br /&gt;
===''Speedy and Effective Development''===&lt;br /&gt;
:* Rails provides a very fast mode to write code in a multitude of languages such as html, javascript, ruby, css, etc that are used to build a web-application by providing preconfigured environments and wire-framed models.&lt;br /&gt;
:* Smoother pace of work, thus putting less pressure on the debugger when it comes to debugging.&lt;br /&gt;
:* Without investing much resources, it can build business models and deliver functionalities, giving scope to customers to innovate and input faster.&lt;br /&gt;
===''Open Source''===&lt;br /&gt;
:* The frequently used features and common functionalities can be implemented easily as they are available as Ruby gems.&lt;br /&gt;
:* Provides developers the flexibility to customize and thus encouraging them to make large contributions.&lt;br /&gt;
===''Convention over Configuration''=== &amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Convention_over_configuration&amp;lt;/ref&amp;gt;&lt;br /&gt;
:* By following this design paradigm, rails makes it simple for the developer as he need not specify or waste time to decide conventional aspects. &lt;br /&gt;
:* On agreeing to implement simple and common things in a single way, it makes it easy for any new developer to work immediately on an existing project. &lt;br /&gt;
:* This also rules out the need for explicit configuration ( except for unconventional/ customizable aspects).&lt;br /&gt;
&lt;br /&gt;
=='''How Rails supports Agile Methodologies'''==&lt;br /&gt;
===''Generators and Scaffolds''===&lt;br /&gt;
:* The command “rails generate” uses templates to create models, controllers, views, databases, etc which helps to setup a test application.&lt;br /&gt;
   rails generate controller sample index&lt;br /&gt;
::The above command generates controllers sample_controller, views sample/index, assets, tests and other helpers with the route 'get' sample/index &lt;br /&gt;
:* The scaffolding can be easily done to deploy any basic web -application, and developers can extend them to implement their functionalities. This overcomes the initial hurdle.&lt;br /&gt;
   rails generate scaffold Exam course:string score:float&lt;br /&gt;
::It generates all the required directories for an MVC application for a model Exam and also creates db migration CreateExams&lt;br /&gt;
&lt;br /&gt;
===''Ready Setup for Multi-environment''===&lt;br /&gt;
:* Rails application provides development, production and testing environments with built-in configurations setup and thus is a huge time saver for an application which is required to be deployed in multiple environments.&lt;br /&gt;
:* The built-in rails web-server has the development environment as the default environment. &lt;br /&gt;
:* Simple deployment allows developers to have face-face client meetings and thus make instantaneous changes based on the client requirements.&lt;br /&gt;
&lt;br /&gt;
'''Built in configuration of DB in database.yml in development environment'''&lt;br /&gt;
  development:&lt;br /&gt;
  adapter: sqlite3&lt;br /&gt;
  database: db/development.sqlite3&lt;br /&gt;
  pool: 5&lt;br /&gt;
  timeout: 5000&lt;br /&gt;
&lt;br /&gt;
===''Test-Driven Development''===&lt;br /&gt;
:* Built in mocking and stubbing frameworks are available which assists “how to write code”. This follows a red, green and refactor which is an important aspect of agile development.&lt;br /&gt;
:* RSpec is one of the famous testing framework tools used with rails. &lt;br /&gt;
:* Other testing tools can also be swapped in.&lt;br /&gt;
&lt;br /&gt;
[[File:tdd39.jpg|center|alt=Test driven development| Fig 2: TDD cycle]]&lt;br /&gt;
&lt;br /&gt;
Below is an example code for test driven development.&lt;br /&gt;
&lt;br /&gt;
 describe &amp;quot;Static pages&amp;quot; do&lt;br /&gt;
  describe &amp;quot;Home page&amp;quot; do&lt;br /&gt;
    before { visit root_path }&lt;br /&gt;
    it &amp;quot;should have the words 'Backchannel App' in it&amp;quot; do&lt;br /&gt;
      expect(page).to have_content('Back Channel App')&lt;br /&gt;
  end&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
===''Don’t Repeat Yourself (DRY)''===&lt;br /&gt;
:* Repeated code is written in helpers and libraries, making a single destination and thus updations become simpler by updating at just one place.&lt;br /&gt;
:* Partials are a way of rendering repeated HTML code. Rails understand a file which starts with an underscore, say, _partial.html as a partial to be included in the shared html file which renders it.&lt;br /&gt;
'''Using partials''':&lt;br /&gt;
:'''new.html.erb'''&lt;br /&gt;
&lt;br /&gt;
   New Venture&lt;br /&gt;
   &amp;lt;%= error_messages_for :venture%&amp;gt;&lt;br /&gt;
   &amp;lt;%= render partial: &amp;quot;form&amp;quot;, locals: {venture: @venture} %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:'''_form.html.erb'''&lt;br /&gt;
   &amp;lt;%= form_for(venture) do |f| %&amp;gt;   &lt;br /&gt;
      Venture name&lt;br /&gt;
      &amp;lt;%= f.text_field :name %&amp;gt;&lt;br /&gt;
      &amp;lt;%= f.submit %&amp;gt;    &lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===''Dependency Management''===&lt;br /&gt;
:* Rails acts more than a web framework by providing the necessary utility and support tools and adding dependencies to individual projects in a jiffy using the “bundler”. &lt;br /&gt;
:* This bundler installs all the relevant gem files and also can be updated when more dependencies are added. No need to search for packages or jars.&lt;br /&gt;
===''Easy Migration''===&lt;br /&gt;
:* Rails helps you to keep easy track of database changes with the help of Migration Objects. It gives the flexibility to rollback and update.&lt;br /&gt;
:* It also allows you to maintain various versions of database for the multi-environment. On running rake db::migrate, the desired database is migrated and deployed with the working rails server.&lt;br /&gt;
:* New technologies such as Coffeescript can also be easily embedded by installing the relevant gems thus adapting to the changing technology.&lt;br /&gt;
===''Assets Pipeline''===&lt;br /&gt;
:* The assets pipeline is a new feature embedded in rails ( which is now extracted into sprockets-rails gem), concatenates and compresses javascript and css files.&lt;br /&gt;
:* This renders a web page with reduced number of requests from the browser as files are grouped and whitespaces are trimmed.&lt;br /&gt;
:* Precompiled files can also be attached.&lt;br /&gt;
&lt;br /&gt;
=='''Comparison of Rails with other Agile Web Frameworks'''==&lt;br /&gt;
:* This graph shows some of Rabies matrix weights to compare rails with other agile web frameworks. Among the ones compared, Rails is one of the most favourite and production efficient. GWT and GRAILS also are on par with RAILS.&lt;br /&gt;
&lt;br /&gt;
[[File:Stats.JPG|25 px|upright=0.85|center|frame|alt=Puzzle globe logo|center| Fig 3:Comparison of Agile Web Frameworks]]&lt;br /&gt;
'''''Weights Explained'''''&lt;br /&gt;
:*''Components'': Reusable components accelerate development&lt;br /&gt;
:*''Templating'': Rating based on the number of UI templating options are available for the framework&lt;br /&gt;
:*''Plugins and Add-ons'': Rating based on if they framework has a plugin architecture and how many plugins are available&lt;br /&gt;
:*''Scalability'': Rating based on how much the framework relies on session state for functionality&lt;br /&gt;
:*''REST Support'': Does the framework have the ability to produce JSON and XML instead of simply returning HTML? Can it consume JSON and XML as well?&lt;br /&gt;
:*''Degree of Risk'': This rating is mostly for businesses. If the framework is new, there’s inherently some risk in choosing it for your applications&lt;br /&gt;
:*''Testing'': Tools for testing allow to find errors faster&lt;br /&gt;
&lt;br /&gt;
=='''Future of Agile in Rails'''&amp;lt;ref&amp;gt; http://www.richappsconsulting.com/blog/blog-detail/agile-web-development-with-rails-an-overview/ &amp;lt;/ref&amp;gt;==&lt;br /&gt;
Ruby on Rails is a framework that makes it easier to develop, deploy and maintain web applications. Soon after its initial release, Rails went from being an unfamiliar tool to being a wide-reaching phenomenon. It has become the framework of choice for the implementation of a wide range of Web 2.0 applications as it is both simple and subtle. Rails is often utilized by web developers for its suitability for short, client-driven projects. Many entrepreneurs and businesses have chosen Ruby on Rails to create their web application. Here are few well known web services that are run on Ruby on Rails:&lt;br /&gt;
&lt;br /&gt;
* Twitter&lt;br /&gt;
* Groupon&lt;br /&gt;
* SoundCloud&lt;br /&gt;
* GitHub&lt;br /&gt;
* YellowPages&lt;br /&gt;
* Shopify&lt;br /&gt;
&lt;br /&gt;
Due to its simple nature and easy to use features as well as the speed of project completion, Rails is an ideal platform for Agile development practices. Keeping in view its accordance with the Agile Manifesto, it is not hard to predict that Rails will be the future of Agile development.&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Sayenga</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/ch1_1w39_as&amp;diff=80042</id>
		<title>CSC/ECE 517 Fall 2013/ch1 1w39 as</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2013/ch1_1w39_as&amp;diff=80042"/>
		<updated>2013-10-08T03:18:48Z</updated>

		<summary type="html">&lt;p&gt;Sayenga: /* Convention over Configuration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This article focuses on how Rails enables ’agile development&lt;br /&gt;
practices’ and the characteristics of Rails that support specific agile methodologies.&lt;br /&gt;
&lt;br /&gt;
{{TOC limit}}&lt;br /&gt;
&lt;br /&gt;
== '''Agile development''' ==&lt;br /&gt;
==='' What is Agile development? ''=== &lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Agile_software_development Agile development]&amp;lt;ref&amp;gt; http://en.wikipedia.org/wiki/Agile_software_development &amp;lt;/ref&amp;gt; is a methodology where requirements and solutions are developed based on [http://en.wikipedia.org/wiki/Iterative_and_incremental_development iterative and incremental development] &amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Iterative_and_incremental_development&amp;lt;/ref&amp;gt; through collaboration between self-organizing, cross-functional teams. Using agile development methodology, a high quality software can be developed by programmers in a minimal amount of time. By involving continuous planning, testing, integration, and other forms of continuous evolution of both the project and the software, it focuses on empowering people to collaborate and make decisions together quickly and effectively. Some of the process under agile development includes adaptive planning, evolutionary development and delivery, a time-boxed iterative approach, and encourages rapid and flexible response to change. It is a conceptual framework that promotes foreseen interactions throughout the development cycle.&lt;br /&gt;
&lt;br /&gt;
===''Why do we need Agile development?''===&lt;br /&gt;
&lt;br /&gt;
:*Visibility through active customer involvement&lt;br /&gt;
:*Flexibility/Agility - ability to accept changes&lt;br /&gt;
:*Quality - testing integrated throughout the lifecycle&lt;br /&gt;
:*Speedy delivery&lt;br /&gt;
:*Customer satisfaction - feeling of a right product&lt;br /&gt;
&lt;br /&gt;
[[File:agl39.jpg|center|alt=Agile development| Fig 1: Agile development]]&lt;br /&gt;
&lt;br /&gt;
===''Principles of agile development'' &amp;lt;ref&amp;gt; http://ruby.about.com/od/rubyonrails/a/agile.htm &amp;lt;/ref&amp;gt; ===&lt;br /&gt;
:*Iterative Development: Iterative development allows the clients to direct the development process in order to get the software features they want. Working software is delivered to the client at regular, short intervals. Client feedback is used to make changes to the software specifications at any stage in the development.&lt;br /&gt;
&lt;br /&gt;
:*Open Collaboration: Open, unrestricted communication between programmers and clients are driving force behind agile development. The programming team must work closely with the customer and also communicate freely with each other. Face to face communication is preferred over specification documents, so working in an open office with no cubicles is ideal.&lt;br /&gt;
&lt;br /&gt;
:*Adaptability: In agile development, changes to the software specifications are welcome even in late stages of development. Principles like Don't Repeat Yourself (DRY) are used to facilitate this. Customers gets hands-on experience with the development of the product, hence they will be able to better communicate their needs. Hence, changes in the market or company structure can be accomodated in the software at any time of the development cycle.&lt;br /&gt;
&lt;br /&gt;
===''Some well known agile development methods''===&lt;br /&gt;
 &lt;br /&gt;
Well-known agile software development methods include:&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Specification_by_example Acceptance Test Driven Development (ATDD)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Dynamic_systems_development_method Dynamic Systems Development Method (DSDM)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Extreme_programming Extreme Programming (XP)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Feature-driven_development Feature Driven Development (FDD)]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Lean_software_development Lean software development]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Scrum_(software_development) Scrum]&lt;br /&gt;
:* [http://en.wikipedia.org/wiki/Story-driven_modeling Story-driven modeling]&lt;br /&gt;
&lt;br /&gt;
=='''Why Use Ruby on Rails for Agile?'''==&lt;br /&gt;
===''Speedy and Effective Development''===&lt;br /&gt;
:* Rails provides a very fast mode to write code in a multitude of languages such as html, javascript, ruby, css, etc that are used to build a web-application by providing preconfigured environments and wire-framed models.&lt;br /&gt;
:* Smoother pace of work, thus putting less pressure on the debugger when it comes to debugging.&lt;br /&gt;
:* Without investing much resources, it can build business models and deliver functionalities, giving scope to customers to innovate and input faster.&lt;br /&gt;
===''Open Source''===&lt;br /&gt;
:* The frequently used features and common functionalities can be implemented easily as they are available as Ruby gems.&lt;br /&gt;
:* Provides developers the flexibility to customize and thus encouraging them to make large contributions.&lt;br /&gt;
===''Convention over Configuration''===&amp;lt;ref&amp;gt;http://en.wikipedia.org/wiki/Convention_over_configuration&amp;lt;/ref&amp;gt;&lt;br /&gt;
:* By following this design paradigm, rails makes it simple for the developer as he need not specify or waste time to decide conventional aspects. &lt;br /&gt;
:* On agreeing to implement simple and common things in a single way, it makes it easy for any new developer to work immediately on an existing project. &lt;br /&gt;
:* This also rules out the need for explicit configuration ( except for unconventional/ customizable aspects).&lt;br /&gt;
&lt;br /&gt;
=='''How Rails supports Agile Methodologies'''==&lt;br /&gt;
===''Generators and Scaffolds''===&lt;br /&gt;
:* The command “rails generate” uses templates to create models, controllers, views, databases, etc which helps to setup a test application.&lt;br /&gt;
   rails generate controller sample index&lt;br /&gt;
::The above command generates controllers sample_controller, views sample/index, assets, tests and other helpers with the route 'get' sample/index &lt;br /&gt;
:* The scaffolding can be easily done to deploy any basic web -application, and developers can extend them to implement their functionalities. This overcomes the initial hurdle.&lt;br /&gt;
   rails generate scaffold Exam course:string score:float&lt;br /&gt;
::It generates all the required directories for an MVC application for a model Exam and also creates db migration CreateExams&lt;br /&gt;
&lt;br /&gt;
===''Ready Setup for Multi-environment''===&lt;br /&gt;
:* Rails application provides development, production and testing environments with built-in configurations setup and thus is a huge time saver for an application which is required to be deployed in multiple environments.&lt;br /&gt;
:* The built-in rails web-server has the development environment as the default environment. &lt;br /&gt;
:* Simple deployment allows developers to have face-face client meetings and thus make instantaneous changes based on the client requirements.&lt;br /&gt;
&lt;br /&gt;
'''Built in configuration of DB in database.yml in development environment'''&lt;br /&gt;
  development:&lt;br /&gt;
  adapter: sqlite3&lt;br /&gt;
  database: db/development.sqlite3&lt;br /&gt;
  pool: 5&lt;br /&gt;
  timeout: 5000&lt;br /&gt;
&lt;br /&gt;
===''Test-Driven Development''===&lt;br /&gt;
:* Built in mocking and stubbing frameworks are available which assists “how to write code”. This follows a red, green and refactor which is an important aspect of agile development.&lt;br /&gt;
:* RSpec is one of the famous testing framework tools used with rails. &lt;br /&gt;
:* Other testing tools can also be swapped in.&lt;br /&gt;
&lt;br /&gt;
[[File:tdd39.jpg|center|alt=Test driven development| Fig 2: TDD cycle]]&lt;br /&gt;
&lt;br /&gt;
Below is an example code for test driven development.&lt;br /&gt;
&lt;br /&gt;
 describe &amp;quot;Static pages&amp;quot; do&lt;br /&gt;
  describe &amp;quot;Home page&amp;quot; do&lt;br /&gt;
    before { visit root_path }&lt;br /&gt;
    it &amp;quot;should have the words 'Backchannel App' in it&amp;quot; do&lt;br /&gt;
      expect(page).to have_content('Back Channel App')&lt;br /&gt;
  end&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
===''Don’t Repeat Yourself (DRY)''===&lt;br /&gt;
:* Repeated code is written in helpers and libraries, making a single destination and thus updations become simpler by updating at just one place.&lt;br /&gt;
:* Partials are a way of rendering repeated HTML code. Rails understand a file which starts with an underscore, say, _partial.html as a partial to be included in the shared html file which renders it.&lt;br /&gt;
'''Using partials''':&lt;br /&gt;
:'''new.html.erb'''&lt;br /&gt;
&lt;br /&gt;
   New Venture&lt;br /&gt;
   &amp;lt;%= error_messages_for :venture%&amp;gt;&lt;br /&gt;
   &amp;lt;%= render partial: &amp;quot;form&amp;quot;, locals: {venture: @venture} %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:'''_form.html.erb'''&lt;br /&gt;
   &amp;lt;%= form_for(venture) do |f| %&amp;gt;   &lt;br /&gt;
      Venture name&lt;br /&gt;
      &amp;lt;%= f.text_field :name %&amp;gt;&lt;br /&gt;
      &amp;lt;%= f.submit %&amp;gt;    &lt;br /&gt;
    &amp;lt;% end %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===''Dependency Management''===&lt;br /&gt;
:* Rails acts more than a web framework by providing the necessary utility and support tools and adding dependencies to individual projects in a jiffy using the “bundler”. &lt;br /&gt;
:* This bundler installs all the relevant gem files and also can be updated when more dependencies are added. No need to search for packages or jars.&lt;br /&gt;
===''Easy Migration''===&lt;br /&gt;
:* Rails helps you to keep easy track of database changes with the help of Migration Objects. It gives the flexibility to rollback and update.&lt;br /&gt;
:* It also allows you to maintain various versions of database for the multi-environment. On running rake db::migrate, the desired database is migrated and deployed with the working rails server.&lt;br /&gt;
:* New technologies such as Coffeescript can also be easily embedded by installing the relevant gems thus adapting to the changing technology.&lt;br /&gt;
===''Assets Pipeline''===&lt;br /&gt;
:* The assets pipeline is a new feature embedded in rails ( which is now extracted into sprockets-rails gem), concatenates and compresses javascript and css files.&lt;br /&gt;
:* This renders a web page with reduced number of requests from the browser as files are grouped and whitespaces are trimmed.&lt;br /&gt;
:* Precompiled files can also be attached.&lt;br /&gt;
&lt;br /&gt;
=='''Comparison of Rails with other Agile Web Frameworks'''==&lt;br /&gt;
:* This graph shows some of Rabies matrix weights to compare rails with other agile web frameworks. Among the ones compared, Rails is one of the most favourite and production efficient. GWT and GRAILS also are on par with RAILS.&lt;br /&gt;
&lt;br /&gt;
[[File:Stats.JPG|25 px|upright=0.85|center|frame|alt=Puzzle globe logo|center| Fig 3:Comparison of Agile Web Frameworks]]&lt;br /&gt;
'''''Weights Explained'''''&lt;br /&gt;
:*''Components'': Reusable components accelerate development&lt;br /&gt;
:*''Templating'': Rating based on the number of UI templating options are available for the framework&lt;br /&gt;
:*''Plugins and Add-ons'': Rating based on if they framework has a plugin architecture and how many plugins are available&lt;br /&gt;
:*''Scalability'': Rating based on how much the framework relies on session state for functionality&lt;br /&gt;
:*''REST Support'': Does the framework have the ability to produce JSON and XML instead of simply returning HTML? Can it consume JSON and XML as well?&lt;br /&gt;
:*''Degree of Risk'': This rating is mostly for businesses. If the framework is new, there’s inherently some risk in choosing it for your applications&lt;br /&gt;
:*''Testing'': Tools for testing allow to find errors faster&lt;br /&gt;
&lt;br /&gt;
=='''Future of Agile in Rails'''&amp;lt;ref&amp;gt; http://www.richappsconsulting.com/blog/blog-detail/agile-web-development-with-rails-an-overview/ &amp;lt;/ref&amp;gt;==&lt;br /&gt;
Ruby on Rails is a framework that makes it easier to develop, deploy and maintain web applications. Soon after its initial release, Rails went from being an unfamiliar tool to being a wide-reaching phenomenon. It has become the framework of choice for the implementation of a wide range of Web 2.0 applications as it is both simple and subtle. Rails is often utilized by web developers for its suitability for short, client-driven projects. Many entrepreneurs and businesses have chosen Ruby on Rails to create their web application. Here are few well known web services that are run on Ruby on Rails:&lt;br /&gt;
&lt;br /&gt;
* Twitter&lt;br /&gt;
* Groupon&lt;br /&gt;
* SoundCloud&lt;br /&gt;
* GitHub&lt;br /&gt;
* YellowPages&lt;br /&gt;
* Shopify&lt;br /&gt;
&lt;br /&gt;
Due to its simple nature and easy to use features as well as the speed of project completion, Rails is an ideal platform for Agile development practices. Keeping in view its accordance with the Agile Manifesto, it is not hard to predict that Rails will be the future of Agile development.&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Sayenga</name></author>
	</entry>
</feed>