<?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=Los+Bravo</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=Los+Bravo"/>
	<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Special:Contributions/Los_Bravo"/>
	<updated>2026-08-18T18:36:46Z</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_2009/wiki2_13_StaticDynamic&amp;diff=23386</id>
		<title>CSC/ECE 517 Fall 2009/wiki2 13 StaticDynamic</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_13_StaticDynamic&amp;diff=23386"/>
		<updated>2009-10-09T02:41:02Z</updated>

		<summary type="html">&lt;p&gt;Los Bravo: /* Example */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Design Patterns from a Static/Dynamic Point of View'''&lt;br /&gt;
&lt;br /&gt;
Clearly, Ruby offers more concise realizations of certain design patterns than Java does. Is this typical of dynamic o-o languages? Are there design patterns that any dynamically typed language can realize better than a statically typed language? Are there instances when a &amp;lt;em&amp;gt;different&amp;lt;/em&amp;gt; pattern should be used in a dynamic language than a static language?&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
=== Design Pattern ===&lt;br /&gt;
A design pattern is a general reusable solution to a commonly occurring problem in software design. A design pattern is not a finished design that can be transformed directly into code. It is a description or template for how to solve a problem that can be used in many different situations. Object-oriented design patterns typically show relationships and interactions between classes or objects, without specifying the final application classes or objects that are involved.&lt;br /&gt;
&lt;br /&gt;
[http://www.dofactory.com/Patterns/Patterns.aspx [1]]&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| Creational Patterns&lt;br /&gt;
|-&lt;br /&gt;
| Abstract Factory 	  || Creates an instance of several families of classes&lt;br /&gt;
|-&lt;br /&gt;
| Builder 	  || Separates object construction from its representation&lt;br /&gt;
|-&lt;br /&gt;
| Factory Method 	  || Creates an instance of several derived classes&lt;br /&gt;
|-&lt;br /&gt;
| Prototype 	  || A fully initialized instance to be copied or cloned&lt;br /&gt;
|-&lt;br /&gt;
| Singleton 	  || A class of which only a single instance can exist&lt;br /&gt;
|-&lt;br /&gt;
| Structural Patterns&lt;br /&gt;
|-&lt;br /&gt;
| Adapter 	  || Match interfaces of different classes&lt;br /&gt;
|-&lt;br /&gt;
| Bridge 	  || Separates an object’s interface from its implementation&lt;br /&gt;
|-&lt;br /&gt;
| Composite 	  || A tree structure of simple and composite objects&lt;br /&gt;
|-&lt;br /&gt;
| Decorator 	  || Add responsibilities to objects dynamically&lt;br /&gt;
|-&lt;br /&gt;
| Facade 	  || A single class that represents an entire subsystem&lt;br /&gt;
|-&lt;br /&gt;
| Flyweight 	  || A fine-grained instance used for efficient sharing&lt;br /&gt;
|-&lt;br /&gt;
| Proxy 	  || An object representing another object&lt;br /&gt;
|-&lt;br /&gt;
|  Behavioral Patterns&lt;br /&gt;
|-&lt;br /&gt;
| Chain of Resp. 	  || A way of passing a request between a chain of objects&lt;br /&gt;
|-&lt;br /&gt;
| Command 	  || Encapsulate a command request as an object&lt;br /&gt;
|-&lt;br /&gt;
| Interpreter 	  || A way to include language elements in a program&lt;br /&gt;
|-&lt;br /&gt;
| Iterator 	  || Sequentially access the elements of a collection&lt;br /&gt;
|-&lt;br /&gt;
| Mediator 	  || Defines simplified communication between classes&lt;br /&gt;
|-&lt;br /&gt;
| Memento 	  || Capture and restore an object's internal state&lt;br /&gt;
|-&lt;br /&gt;
| Observer 	  || A way of notifying change to a number of classes&lt;br /&gt;
|-&lt;br /&gt;
| State 	  || Alter an object's behavior when its state changes&lt;br /&gt;
|-&lt;br /&gt;
| Strategy 	  || Encapsulates an algorithm inside a class&lt;br /&gt;
|-&lt;br /&gt;
| Template Method 	  || Defer the exact steps of an algorithm to a subclass&lt;br /&gt;
|-&lt;br /&gt;
| Visitor 	  || Defines a new operation to a class without change&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Static/Dynamic Type Languages ===&lt;br /&gt;
Types usually have associations either with values in memory or with objects such as variables. Because any value simply consists of a sequence of bits in a computer, hardware makes no distinction even between memory addresses, instruction code, characters, integers and floating-point numbers. Assignment to a type informs programs and programmers how those bit collections should be treated.&lt;br /&gt;
&lt;br /&gt;
Major functions provided by type systems include:&lt;br /&gt;
&lt;br /&gt;
* Safety - Use of types may allow a compiler to detect meaningless or probably invalid code. For example, we can identify an expression &amp;quot;Hello, World&amp;quot; as invalid because the rules of arithmetic do not specify how to divide an integer by a string. As discussed below, strong typing offers more safety, but generally does not guarantee complete safety (see type-safety for more information).&lt;br /&gt;
* Optimization - Static type-checking may provide useful compile-time information. For example, if a type requires that a value must align in memory at a multiple of 4 bytes, the compiler may be able to use more efficient machine instructions.&lt;br /&gt;
* Documentation - In more expressive type systems, types can serve as a form of documentation, since they can illustrate the intent of the programmer. For instance, timestamps may be represented as integers—but if a programmer declares a function as returning a timestamp type rather than merely an integer type, this documents part of the meaning of the function.&lt;br /&gt;
* Abstraction (or modularity) - Types allow programmers to think about programs at a higher level than the bit or byte, not bothering with low-level implementation. For example, programmers can think of a string as a collection of character values instead of as a mere array of bytes. Or, types can allow programmers to express the interface between two subsystems. This helps localize the definitions required for interoperability of the subsystems and prevents inconsistencies when those subsystems communicate.&lt;br /&gt;
&lt;br /&gt;
==== Static Type Languages ====&lt;br /&gt;
A programming language is said to use static typing when type checking is performed during compile-time as opposed to run-time.&lt;br /&gt;
&lt;br /&gt;
C++, C#, Java&lt;br /&gt;
&lt;br /&gt;
==== Dynamic Type Languages ====&lt;br /&gt;
A programming language is said to be dynamically typed, or just 'dynamic', when the majority of its type checking is performed at run-time as opposed to at compile-time.&lt;br /&gt;
&lt;br /&gt;
Ruby, Python&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://i.cmpnet.com/ddj/ddj/images/ddj9708d/9708df6.gif [2]]&lt;br /&gt;
Many software designers view patterns as a form of language-independent design. Pattern-Oriented Software Architectures: A System of Patterns, edited by Frank Buschmann (John Wiley &amp;amp; Sons, 1996), for instance, divides patterns into three main groups -- architectural patterns, design patterns, and idioms. Only the idioms (defined as &amp;quot;low-level patterns specific to a program language&amp;quot;) are language dependent -- the other patterns (and the implicit pattern language) rise above the level of programming language, much as the unified modeling language (UML) provides a common way to express designs.&lt;br /&gt;
&lt;br /&gt;
This idea of language independence is seductive. It is also misleading. While patterns are language independent, language choice limits the patterns that are possible, easily supported, and useful. Language also affects how applications are structured.&lt;br /&gt;
&lt;br /&gt;
To illustrate, we'll examine a pattern often used with Objective-C, but not usually used (or used differently) with C++. Both languages are object-oriented extensions of C. The main difference between them is that C++ has compile-time binding and fairly strong typing while Objective-C uses the Smalltalk object model of dynamic binding and weak typing. We'll be examining facade, commonly found in Objective-C programming. While simple, facade illustrates some of the key Objective-C programming techniques &lt;br /&gt;
&lt;br /&gt;
====The Facade Pattern====&lt;br /&gt;
&lt;br /&gt;
Lets examine a commonly used architectural pattern that describes a way to structure applications to take advantage of this flexibility.&lt;br /&gt;
&lt;br /&gt;
Previously with structured programming, saving an application's state was simple. Programs were divided into data and functions, and saving consisted of calling the function that wrote the data to some storage area. In object-oriented applications, things become a little more difficult. To the extent that you practice information hiding, object serialization is the natural approach to take.&lt;br /&gt;
&lt;br /&gt;
Unfortunately, if m is the number of object references and n is the number of objects, serialization is O(mlog(n)). This is far too slow for serialization to be the saving mechanism in many applications.&lt;br /&gt;
&lt;br /&gt;
But an Objective-C program that uses the four previous patterns will almost certainly use lots of facades as well. Notice here[http://i.cmpnet.com/ddj/ddj/images/ddj9708d/9708df6.gif [3]]that Facades look a lot like cut points in the object graph. This leads to the natural Objective-C solution to the speed problem for object serialization: Serialize each facade to a separate Serializer (make each facade responsible for serializing the subsystem it abstracts).&lt;br /&gt;
&lt;br /&gt;
This can get complicated. If an object outside a subsystem bypasses a facade (and messages an object in a subsystem directly), then extra care must be taken during serialization (to avoid serializing objects to more than one location). And, deserializing (opening) becomes trickier as well -- objects that bypass a facade will need to find objects within the subsystem. In practice, this comes down to making the facades used in serialization Singletons and making certain that all connections to objects in the subsystem are mediated by the facade (so that, during deserialization, the connection can be restored).&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
There are various levels of design recognition for generating repeatable solutions to commonly occurring programming problems in software design.  Design patterns in this case have been met with criticism in whether it negates the agile product development process.  From our example above we have shown that when implementing patterns across various languages of varying type systems a design pattern may not always resolve common problems efficiently.  Thus, the idea of a language independent pattern recognition solution must be evaluated thoroughly when in considering from a static and dynamic point of view.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
All sources used to create this wiki are linked in the above text.&lt;/div&gt;</summary>
		<author><name>Los Bravo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_13_StaticDynamic&amp;diff=23366</id>
		<title>CSC/ECE 517 Fall 2009/wiki2 13 StaticDynamic</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_13_StaticDynamic&amp;diff=23366"/>
		<updated>2009-10-09T02:26:55Z</updated>

		<summary type="html">&lt;p&gt;Los Bravo: /* Example */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Design Patterns from a Static/Dynamic Point of View'''&lt;br /&gt;
&lt;br /&gt;
Clearly, Ruby offers more concise realizations of certain design patterns than Java does. Is this typical of dynamic o-o languages? Are there design patterns that any dynamically typed language can realize better than a statically typed language? Are there instances when a &amp;lt;em&amp;gt;different&amp;lt;/em&amp;gt; pattern should be used in a dynamic language than a static language?&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
=== Design Pattern ===&lt;br /&gt;
A design pattern is a general reusable solution to a commonly occurring problem in software design. A design pattern is not a finished design that can be transformed directly into code. It is a description or template for how to solve a problem that can be used in many different situations. Object-oriented design patterns typically show relationships and interactions between classes or objects, without specifying the final application classes or objects that are involved.&lt;br /&gt;
&lt;br /&gt;
[http://www.dofactory.com/Patterns/Patterns.aspx [1]]&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| Creational Patterns&lt;br /&gt;
|-&lt;br /&gt;
| Abstract Factory 	  || Creates an instance of several families of classes&lt;br /&gt;
|-&lt;br /&gt;
| Builder 	  || Separates object construction from its representation&lt;br /&gt;
|-&lt;br /&gt;
| Factory Method 	  || Creates an instance of several derived classes&lt;br /&gt;
|-&lt;br /&gt;
| Prototype 	  || A fully initialized instance to be copied or cloned&lt;br /&gt;
|-&lt;br /&gt;
| Singleton 	  || A class of which only a single instance can exist&lt;br /&gt;
|-&lt;br /&gt;
| Structural Patterns&lt;br /&gt;
|-&lt;br /&gt;
| Adapter 	  || Match interfaces of different classes&lt;br /&gt;
|-&lt;br /&gt;
| Bridge 	  || Separates an object’s interface from its implementation&lt;br /&gt;
|-&lt;br /&gt;
| Composite 	  || A tree structure of simple and composite objects&lt;br /&gt;
|-&lt;br /&gt;
| Decorator 	  || Add responsibilities to objects dynamically&lt;br /&gt;
|-&lt;br /&gt;
| Facade 	  || A single class that represents an entire subsystem&lt;br /&gt;
|-&lt;br /&gt;
| Flyweight 	  || A fine-grained instance used for efficient sharing&lt;br /&gt;
|-&lt;br /&gt;
| Proxy 	  || An object representing another object&lt;br /&gt;
|-&lt;br /&gt;
|  Behavioral Patterns&lt;br /&gt;
|-&lt;br /&gt;
| Chain of Resp. 	  || A way of passing a request between a chain of objects&lt;br /&gt;
|-&lt;br /&gt;
| Command 	  || Encapsulate a command request as an object&lt;br /&gt;
|-&lt;br /&gt;
| Interpreter 	  || A way to include language elements in a program&lt;br /&gt;
|-&lt;br /&gt;
| Iterator 	  || Sequentially access the elements of a collection&lt;br /&gt;
|-&lt;br /&gt;
| Mediator 	  || Defines simplified communication between classes&lt;br /&gt;
|-&lt;br /&gt;
| Memento 	  || Capture and restore an object's internal state&lt;br /&gt;
|-&lt;br /&gt;
| Observer 	  || A way of notifying change to a number of classes&lt;br /&gt;
|-&lt;br /&gt;
| State 	  || Alter an object's behavior when its state changes&lt;br /&gt;
|-&lt;br /&gt;
| Strategy 	  || Encapsulates an algorithm inside a class&lt;br /&gt;
|-&lt;br /&gt;
| Template Method 	  || Defer the exact steps of an algorithm to a subclass&lt;br /&gt;
|-&lt;br /&gt;
| Visitor 	  || Defines a new operation to a class without change&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Static/Dynamic Type Languages ===&lt;br /&gt;
Types usually have associations either with values in memory or with objects such as variables. Because any value simply consists of a sequence of bits in a computer, hardware makes no distinction even between memory addresses, instruction code, characters, integers and floating-point numbers. Assignment to a type informs programs and programmers how those bit collections should be treated.&lt;br /&gt;
&lt;br /&gt;
Major functions provided by type systems include:&lt;br /&gt;
&lt;br /&gt;
* Safety - Use of types may allow a compiler to detect meaningless or probably invalid code. For example, we can identify an expression &amp;quot;Hello, World&amp;quot; as invalid because the rules of arithmetic do not specify how to divide an integer by a string. As discussed below, strong typing offers more safety, but generally does not guarantee complete safety (see type-safety for more information).&lt;br /&gt;
* Optimization - Static type-checking may provide useful compile-time information. For example, if a type requires that a value must align in memory at a multiple of 4 bytes, the compiler may be able to use more efficient machine instructions.&lt;br /&gt;
* Documentation - In more expressive type systems, types can serve as a form of documentation, since they can illustrate the intent of the programmer. For instance, timestamps may be represented as integers—but if a programmer declares a function as returning a timestamp type rather than merely an integer type, this documents part of the meaning of the function.&lt;br /&gt;
* Abstraction (or modularity) - Types allow programmers to think about programs at a higher level than the bit or byte, not bothering with low-level implementation. For example, programmers can think of a string as a collection of character values instead of as a mere array of bytes. Or, types can allow programmers to express the interface between two subsystems. This helps localize the definitions required for interoperability of the subsystems and prevents inconsistencies when those subsystems communicate.&lt;br /&gt;
&lt;br /&gt;
==== Static Type Languages ====&lt;br /&gt;
A programming language is said to use static typing when type checking is performed during compile-time as opposed to run-time.&lt;br /&gt;
&lt;br /&gt;
C++, C#, Java&lt;br /&gt;
&lt;br /&gt;
==== Dynamic Type Languages ====&lt;br /&gt;
A programming language is said to be dynamically typed, or just 'dynamic', when the majority of its type checking is performed at run-time as opposed to at compile-time.&lt;br /&gt;
&lt;br /&gt;
Ruby, Python&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://i.cmpnet.com/ddj/ddj/images/ddj9708d/9708df6.gif [2]]&lt;br /&gt;
Many software designers view patterns as a form of language-independent design. Pattern-Oriented Software Architectures: A System of Patterns, edited by Frank Buschmann (John Wiley &amp;amp; Sons, 1996), for instance, divides patterns into three main groups -- architectural patterns, design patterns, and idioms. Only the idioms (defined as &amp;quot;low-level patterns specific to a program language&amp;quot;) are language dependent -- the other patterns (and the implicit pattern language) rise above the level of programming language, much as the unified modeling language (UML) provides a common way to express designs.&lt;br /&gt;
&lt;br /&gt;
This idea of language independence is seductive. It is also misleading. While patterns are language independent, language choice limits the patterns that are possible, easily supported, and useful. Language also affects how applications are structured.&lt;br /&gt;
&lt;br /&gt;
To illustrate, we'll examine a pattern often used with Objective-C, but not usually used (or used differently) with C++. Both languages are object-oriented extensions of C. The main difference between them is that C++ has compile-time binding and fairly strong typing while Objective-C uses the Smalltalk object model of dynamic binding and weak typing. We'll examining facade, commonly found in Objective-C programming. While simple, facade illustrates some of the key Objective-C programming techniques (although I use NextStep classes and frameworks to illustrate points, what I say also holds true for more generic Objective-C environments). &lt;br /&gt;
&lt;br /&gt;
====The Facade Pattern====&lt;br /&gt;
&lt;br /&gt;
Lets examine a commonly used architectural pattern that describes a way to structure applications to take advantage of this flexibility.&lt;br /&gt;
&lt;br /&gt;
Previously with structured programming, saving an application's state was simple. Programs were divided into data and functions, and saving consisted of calling the function that wrote the data to some storage area. In object-oriented applications, things become a little more difficult. To the extent that you practice information hiding, object serialization is the natural approach to take.&lt;br /&gt;
&lt;br /&gt;
Unfortunately, if m is the number of object references and n is the number of objects, serialization is O(mlog(n)). This is far too slow for serialization to be the saving mechanism in many applications.&lt;br /&gt;
&lt;br /&gt;
But an Objective-C program that uses the four previous patterns will almost certainly use lots of facades as well. Notice here[http://i.cmpnet.com/ddj/ddj/images/ddj9708d/9708df6.gif [3]]that Facades look a lot like cut points in the object graph. This leads to the natural Objective-C solution to the speed problem for object serialization: Serialize each facade to a separate Serializer (make each facade responsible for serializing the subsystem it abstracts).&lt;br /&gt;
&lt;br /&gt;
This can get complicated. If an object outside a subsystem bypasses a facade (and messages an object in a subsystem directly), then extra care must be taken during serialization (to avoid serializing objects to more than one location). And, deserializing (opening) becomes trickier as well -- objects that bypass a facade will need to find objects within the subsystem. In practice, this comes down to making the facades used in serialization Singletons and making certain that all connections to objects in the subsystem are mediated by the facade (so that, during deserialization, the connection can be restored).&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
There are various levels of design recognition for generating repeatable solutions to commonly occurring programming problems in software design.  Design patterns in this case have been met with criticism in whether it negates the agile product development process.  From our example above we have shown that when implementing patterns across various languages of varying type systems a design pattern may not always resolve common problems efficiently.  Thus, the idea of a language independent pattern recognition solution must be evaluated thoroughly when in considering from a static and dynamic point of view.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
All sources used to create this wiki are linked in the above text.&lt;/div&gt;</summary>
		<author><name>Los Bravo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_13_StaticDynamic&amp;diff=23334</id>
		<title>CSC/ECE 517 Fall 2009/wiki2 13 StaticDynamic</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_13_StaticDynamic&amp;diff=23334"/>
		<updated>2009-10-09T02:10:15Z</updated>

		<summary type="html">&lt;p&gt;Los Bravo: /* The Facade Pattern */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Design Patterns from a Static/Dynamic Point of View'''&lt;br /&gt;
&lt;br /&gt;
Clearly, Ruby offers more concise realizations of certain design patterns than Java does. Is this typical of dynamic o-o languages? Are there design patterns that any dynamically typed language can realize better than a statically typed language? Are there instances when a &amp;lt;em&amp;gt;different&amp;lt;/em&amp;gt; pattern should be used in a dynamic language than a static language?&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
=== Design Pattern ===&lt;br /&gt;
A design pattern is a general reusable solution to a commonly occurring problem in software design. A design pattern is not a finished design that can be transformed directly into code. It is a description or template for how to solve a problem that can be used in many different situations. Object-oriented design patterns typically show relationships and interactions between classes or objects, without specifying the final application classes or objects that are involved.&lt;br /&gt;
&lt;br /&gt;
[http://www.dofactory.com/Patterns/Patterns.aspx [1]]&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| Creational Patterns&lt;br /&gt;
|-&lt;br /&gt;
| Abstract Factory 	  || Creates an instance of several families of classes&lt;br /&gt;
|-&lt;br /&gt;
| Builder 	  || Separates object construction from its representation&lt;br /&gt;
|-&lt;br /&gt;
| Factory Method 	  || Creates an instance of several derived classes&lt;br /&gt;
|-&lt;br /&gt;
| Prototype 	  || A fully initialized instance to be copied or cloned&lt;br /&gt;
|-&lt;br /&gt;
| Singleton 	  || A class of which only a single instance can exist&lt;br /&gt;
|-&lt;br /&gt;
| Structural Patterns&lt;br /&gt;
|-&lt;br /&gt;
| Adapter 	  || Match interfaces of different classes&lt;br /&gt;
|-&lt;br /&gt;
| Bridge 	  || Separates an object’s interface from its implementation&lt;br /&gt;
|-&lt;br /&gt;
| Composite 	  || A tree structure of simple and composite objects&lt;br /&gt;
|-&lt;br /&gt;
| Decorator 	  || Add responsibilities to objects dynamically&lt;br /&gt;
|-&lt;br /&gt;
| Facade 	  || A single class that represents an entire subsystem&lt;br /&gt;
|-&lt;br /&gt;
| Flyweight 	  || A fine-grained instance used for efficient sharing&lt;br /&gt;
|-&lt;br /&gt;
| Proxy 	  || An object representing another object&lt;br /&gt;
|-&lt;br /&gt;
|  Behavioral Patterns&lt;br /&gt;
|-&lt;br /&gt;
| Chain of Resp. 	  || A way of passing a request between a chain of objects&lt;br /&gt;
|-&lt;br /&gt;
| Command 	  || Encapsulate a command request as an object&lt;br /&gt;
|-&lt;br /&gt;
| Interpreter 	  || A way to include language elements in a program&lt;br /&gt;
|-&lt;br /&gt;
| Iterator 	  || Sequentially access the elements of a collection&lt;br /&gt;
|-&lt;br /&gt;
| Mediator 	  || Defines simplified communication between classes&lt;br /&gt;
|-&lt;br /&gt;
| Memento 	  || Capture and restore an object's internal state&lt;br /&gt;
|-&lt;br /&gt;
| Observer 	  || A way of notifying change to a number of classes&lt;br /&gt;
|-&lt;br /&gt;
| State 	  || Alter an object's behavior when its state changes&lt;br /&gt;
|-&lt;br /&gt;
| Strategy 	  || Encapsulates an algorithm inside a class&lt;br /&gt;
|-&lt;br /&gt;
| Template Method 	  || Defer the exact steps of an algorithm to a subclass&lt;br /&gt;
|-&lt;br /&gt;
| Visitor 	  || Defines a new operation to a class without change&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Static/Dynamic Type Languages ===&lt;br /&gt;
Types usually have associations either with values in memory or with objects such as variables. Because any value simply consists of a sequence of bits in a computer, hardware makes no distinction even between memory addresses, instruction code, characters, integers and floating-point numbers. Assignment to a type informs programs and programmers how those bit collections should be treated.&lt;br /&gt;
&lt;br /&gt;
Major functions provided by type systems include:&lt;br /&gt;
&lt;br /&gt;
* Safety - Use of types may allow a compiler to detect meaningless or probably invalid code. For example, we can identify an expression &amp;quot;Hello, World&amp;quot; as invalid because the rules of arithmetic do not specify how to divide an integer by a string. As discussed below, strong typing offers more safety, but generally does not guarantee complete safety (see type-safety for more information).&lt;br /&gt;
* Optimization - Static type-checking may provide useful compile-time information. For example, if a type requires that a value must align in memory at a multiple of 4 bytes, the compiler may be able to use more efficient machine instructions.&lt;br /&gt;
* Documentation - In more expressive type systems, types can serve as a form of documentation, since they can illustrate the intent of the programmer. For instance, timestamps may be represented as integers—but if a programmer declares a function as returning a timestamp type rather than merely an integer type, this documents part of the meaning of the function.&lt;br /&gt;
* Abstraction (or modularity) - Types allow programmers to think about programs at a higher level than the bit or byte, not bothering with low-level implementation. For example, programmers can think of a string as a collection of character values instead of as a mere array of bytes. Or, types can allow programmers to express the interface between two subsystems. This helps localize the definitions required for interoperability of the subsystems and prevents inconsistencies when those subsystems communicate.&lt;br /&gt;
&lt;br /&gt;
==== Static Type Languages ====&lt;br /&gt;
A programming language is said to use static typing when type checking is performed during compile-time as opposed to run-time.&lt;br /&gt;
&lt;br /&gt;
C++, C#, Java&lt;br /&gt;
&lt;br /&gt;
==== Dynamic Type Languages ====&lt;br /&gt;
A programming language is said to be dynamically typed, or just 'dynamic', when the majority of its type checking is performed at run-time as opposed to at compile-time.&lt;br /&gt;
&lt;br /&gt;
Ruby, Python&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://i.cmpnet.com/ddj/ddj/images/ddj9708d/9708df6.gif [2]]&lt;br /&gt;
Many software designers view patterns as a form of language-independent design. Pattern-Oriented Software Architectures: A System of Patterns, edited by Frank Buschmann (John Wiley &amp;amp; Sons, 1996), for instance, divides patterns into three main groups -- architectural patterns, design patterns, and idioms. Only the idioms (defined as &amp;quot;low-level patterns specific to a program language&amp;quot;) are language dependent -- the other patterns (and the implicit pattern language) rise above the level of programming language, much as the unified modeling language (UML) provides a common way to express designs.&lt;br /&gt;
&lt;br /&gt;
This idea of language independence is seductive. It is also misleading. While patterns are language independent, language choice limits the patterns that are possible, easily supported, and useful. Language also affects how applications are structured.&lt;br /&gt;
&lt;br /&gt;
To illustrate, I'll examine some patterns often used with Objective-C, but not usually used (or used differently) with C++. Both languages are object-oriented extensions of C. The main difference between them is that C++ has compile-time binding and fairly strong typing while Objective-C uses the Smalltalk object model of dynamic binding and weak typing. I'll start by examining two idioms commonly found in Objective-C programming. While simple, these idioms illustrate some of the key Objective-C programming techniques (although I use NextStep classes and frameworks to illustrate points, what I say also holds true for more generic Objective-C environments). I'll also examine how three standard design patterns -- Visitor, Command, and Facade -- are implemented in Objective-C.&lt;br /&gt;
&lt;br /&gt;
====The Facade Pattern====&lt;br /&gt;
&lt;br /&gt;
Lets examine a commonly used architectural pattern that describes a way to structure applications to take advantage of this flexibility.&lt;br /&gt;
&lt;br /&gt;
Previously with structured programming, saving an application's state was simple. Programs were divided into data and functions, and saving consisted of calling the function that wrote the data to some storage area. In object-oriented applications, things become a little more difficult. To the extent that you practice information hiding, object serialization is the natural approach to take.&lt;br /&gt;
&lt;br /&gt;
Unfortunately, if m is the number of object references and n is the number of objects, serialization is O(mlog(n)). This is far too slow for serialization to be the saving mechanism in many applications.&lt;br /&gt;
&lt;br /&gt;
But an Objective-C program that uses the four previous patterns will almost certainly use lots of facades as well. Notice here[http://i.cmpnet.com/ddj/ddj/images/ddj9708d/9708df6.gif [3]]that Facades look a lot like cut points in the object graph. This leads to the natural Objective-C solution to the speed problem for object serialization: Serialize each facade to a separate Serializer (make each facade responsible for serializing the subsystem it abstracts).&lt;br /&gt;
&lt;br /&gt;
This can get complicated. If an object outside a subsystem bypasses a facade (and messages an object in a subsystem directly), then extra care must be taken during serialization (to avoid serializing objects to more than one location). And, deserializing (opening) becomes trickier as well -- objects that bypass a facade will need to find objects within the subsystem. In practice, this comes down to making the facades used in serialization Singletons and making certain that all connections to objects in the subsystem are mediated by the facade (so that, during deserialization, the connection can be restored).&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
There are various levels of design recognition for generating repeatable solutions to commonly occurring programming problems in software design.  Design patterns in this case have been met with criticism in whether it negates the agile product development process.  From our example above we have shown that when implementing patterns across various languages of varying type systems a design pattern may not always resolve common problems efficiently.  Thus, the idea of a language independent pattern recognition solution must be evaluated thoroughly when in considering from a static and dynamic point of view.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
All sources used to create this wiki are linked in the above text.&lt;/div&gt;</summary>
		<author><name>Los Bravo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_13_StaticDynamic&amp;diff=23333</id>
		<title>CSC/ECE 517 Fall 2009/wiki2 13 StaticDynamic</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_13_StaticDynamic&amp;diff=23333"/>
		<updated>2009-10-09T02:08:14Z</updated>

		<summary type="html">&lt;p&gt;Los Bravo: /* Objective- C Idiom 1 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Design Patterns from a Static/Dynamic Point of View'''&lt;br /&gt;
&lt;br /&gt;
Clearly, Ruby offers more concise realizations of certain design patterns than Java does. Is this typical of dynamic o-o languages? Are there design patterns that any dynamically typed language can realize better than a statically typed language? Are there instances when a &amp;lt;em&amp;gt;different&amp;lt;/em&amp;gt; pattern should be used in a dynamic language than a static language?&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
=== Design Pattern ===&lt;br /&gt;
A design pattern is a general reusable solution to a commonly occurring problem in software design. A design pattern is not a finished design that can be transformed directly into code. It is a description or template for how to solve a problem that can be used in many different situations. Object-oriented design patterns typically show relationships and interactions between classes or objects, without specifying the final application classes or objects that are involved.&lt;br /&gt;
&lt;br /&gt;
[http://www.dofactory.com/Patterns/Patterns.aspx [1]]&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| Creational Patterns&lt;br /&gt;
|-&lt;br /&gt;
| Abstract Factory 	  || Creates an instance of several families of classes&lt;br /&gt;
|-&lt;br /&gt;
| Builder 	  || Separates object construction from its representation&lt;br /&gt;
|-&lt;br /&gt;
| Factory Method 	  || Creates an instance of several derived classes&lt;br /&gt;
|-&lt;br /&gt;
| Prototype 	  || A fully initialized instance to be copied or cloned&lt;br /&gt;
|-&lt;br /&gt;
| Singleton 	  || A class of which only a single instance can exist&lt;br /&gt;
|-&lt;br /&gt;
| Structural Patterns&lt;br /&gt;
|-&lt;br /&gt;
| Adapter 	  || Match interfaces of different classes&lt;br /&gt;
|-&lt;br /&gt;
| Bridge 	  || Separates an object’s interface from its implementation&lt;br /&gt;
|-&lt;br /&gt;
| Composite 	  || A tree structure of simple and composite objects&lt;br /&gt;
|-&lt;br /&gt;
| Decorator 	  || Add responsibilities to objects dynamically&lt;br /&gt;
|-&lt;br /&gt;
| Facade 	  || A single class that represents an entire subsystem&lt;br /&gt;
|-&lt;br /&gt;
| Flyweight 	  || A fine-grained instance used for efficient sharing&lt;br /&gt;
|-&lt;br /&gt;
| Proxy 	  || An object representing another object&lt;br /&gt;
|-&lt;br /&gt;
|  Behavioral Patterns&lt;br /&gt;
|-&lt;br /&gt;
| Chain of Resp. 	  || A way of passing a request between a chain of objects&lt;br /&gt;
|-&lt;br /&gt;
| Command 	  || Encapsulate a command request as an object&lt;br /&gt;
|-&lt;br /&gt;
| Interpreter 	  || A way to include language elements in a program&lt;br /&gt;
|-&lt;br /&gt;
| Iterator 	  || Sequentially access the elements of a collection&lt;br /&gt;
|-&lt;br /&gt;
| Mediator 	  || Defines simplified communication between classes&lt;br /&gt;
|-&lt;br /&gt;
| Memento 	  || Capture and restore an object's internal state&lt;br /&gt;
|-&lt;br /&gt;
| Observer 	  || A way of notifying change to a number of classes&lt;br /&gt;
|-&lt;br /&gt;
| State 	  || Alter an object's behavior when its state changes&lt;br /&gt;
|-&lt;br /&gt;
| Strategy 	  || Encapsulates an algorithm inside a class&lt;br /&gt;
|-&lt;br /&gt;
| Template Method 	  || Defer the exact steps of an algorithm to a subclass&lt;br /&gt;
|-&lt;br /&gt;
| Visitor 	  || Defines a new operation to a class without change&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Static/Dynamic Type Languages ===&lt;br /&gt;
Types usually have associations either with values in memory or with objects such as variables. Because any value simply consists of a sequence of bits in a computer, hardware makes no distinction even between memory addresses, instruction code, characters, integers and floating-point numbers. Assignment to a type informs programs and programmers how those bit collections should be treated.&lt;br /&gt;
&lt;br /&gt;
Major functions provided by type systems include:&lt;br /&gt;
&lt;br /&gt;
* Safety - Use of types may allow a compiler to detect meaningless or probably invalid code. For example, we can identify an expression &amp;quot;Hello, World&amp;quot; as invalid because the rules of arithmetic do not specify how to divide an integer by a string. As discussed below, strong typing offers more safety, but generally does not guarantee complete safety (see type-safety for more information).&lt;br /&gt;
* Optimization - Static type-checking may provide useful compile-time information. For example, if a type requires that a value must align in memory at a multiple of 4 bytes, the compiler may be able to use more efficient machine instructions.&lt;br /&gt;
* Documentation - In more expressive type systems, types can serve as a form of documentation, since they can illustrate the intent of the programmer. For instance, timestamps may be represented as integers—but if a programmer declares a function as returning a timestamp type rather than merely an integer type, this documents part of the meaning of the function.&lt;br /&gt;
* Abstraction (or modularity) - Types allow programmers to think about programs at a higher level than the bit or byte, not bothering with low-level implementation. For example, programmers can think of a string as a collection of character values instead of as a mere array of bytes. Or, types can allow programmers to express the interface between two subsystems. This helps localize the definitions required for interoperability of the subsystems and prevents inconsistencies when those subsystems communicate.&lt;br /&gt;
&lt;br /&gt;
==== Static Type Languages ====&lt;br /&gt;
A programming language is said to use static typing when type checking is performed during compile-time as opposed to run-time.&lt;br /&gt;
&lt;br /&gt;
C++, C#, Java&lt;br /&gt;
&lt;br /&gt;
==== Dynamic Type Languages ====&lt;br /&gt;
A programming language is said to be dynamically typed, or just 'dynamic', when the majority of its type checking is performed at run-time as opposed to at compile-time.&lt;br /&gt;
&lt;br /&gt;
Ruby, Python&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://i.cmpnet.com/ddj/ddj/images/ddj9708d/9708df6.gif [2]]&lt;br /&gt;
Many software designers view patterns as a form of language-independent design. Pattern-Oriented Software Architectures: A System of Patterns, edited by Frank Buschmann (John Wiley &amp;amp; Sons, 1996), for instance, divides patterns into three main groups -- architectural patterns, design patterns, and idioms. Only the idioms (defined as &amp;quot;low-level patterns specific to a program language&amp;quot;) are language dependent -- the other patterns (and the implicit pattern language) rise above the level of programming language, much as the unified modeling language (UML) provides a common way to express designs.&lt;br /&gt;
&lt;br /&gt;
This idea of language independence is seductive. It is also misleading. While patterns are language independent, language choice limits the patterns that are possible, easily supported, and useful. Language also affects how applications are structured.&lt;br /&gt;
&lt;br /&gt;
To illustrate, I'll examine some patterns often used with Objective-C, but not usually used (or used differently) with C++. Both languages are object-oriented extensions of C. The main difference between them is that C++ has compile-time binding and fairly strong typing while Objective-C uses the Smalltalk object model of dynamic binding and weak typing. I'll start by examining two idioms commonly found in Objective-C programming. While simple, these idioms illustrate some of the key Objective-C programming techniques (although I use NextStep classes and frameworks to illustrate points, what I say also holds true for more generic Objective-C environments). I'll also examine how three standard design patterns -- Visitor, Command, and Facade -- are implemented in Objective-C.&lt;br /&gt;
&lt;br /&gt;
====The Facade Pattern====&lt;br /&gt;
&lt;br /&gt;
You might have noticed a common thread in the patterns just discussed. Both of the idioms involve ways to break out pieces of code and put them in shared libraries or bundles. The design patterns show how to decouple objects from each other for maximal flexibility. I'll now examine a commonly used architectural pattern that describes a way to structure applications to take advantage of this flexibility.&lt;br /&gt;
&lt;br /&gt;
In the good old days of structured programming, saving an application's state was simple. Programs were divided into data and functions, and saving consisted of calling the function that wrote the data to some storage area. In object-oriented applications, things become a little more difficult. To the extent that you practice information hiding, object serialization is the natural approach to take.&lt;br /&gt;
&lt;br /&gt;
Unfortunately, if m is the number of object references and n is the number of objects, serialization is O(mlog(n)). This is far too slow for serialization to be the saving mechanism in many applications.&lt;br /&gt;
&lt;br /&gt;
But an Objective-C program that uses the four previous patterns will almost certainly use lots of facades as well. Notice in Figure 6 that Facades look a lot like cut points in the object graph. This leads to the natural Objective-C solution to the speed problem for object serialization: Serialize each facade to a separate Serializer (make each facade responsible for serializing the subsystem it abstracts).&lt;br /&gt;
&lt;br /&gt;
This can get complicated. If an object outside a subsystem bypasses a facade (and messages an object in a subsystem directly), then extra care must be taken during serialization (to avoid serializing objects to more than one location). And, deserializing (opening) becomes trickier as well -- objects that bypass a facade will need to find objects within the subsystem. In practice, this comes down to making the facades used in serialization Singletons and making certain that all connections to objects in the subsystem are mediated by the facade (so that, during deserialization, the connection can be restored).&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
There are various levels of design recognition for generating repeatable solutions to commonly occurring programming problems in software design.  Design patterns in this case have been met with criticism in whether it negates the agile product development process.  From our example above we have shown that when implementing patterns across various languages of varying type systems a design pattern may not always resolve common problems efficiently.  Thus, the idea of a language independent pattern recognition solution must be evaluated thoroughly when in considering from a static and dynamic point of view.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
All sources used to create this wiki are linked in the above text.&lt;/div&gt;</summary>
		<author><name>Los Bravo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_13_StaticDynamic&amp;diff=23330</id>
		<title>CSC/ECE 517 Fall 2009/wiki2 13 StaticDynamic</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_13_StaticDynamic&amp;diff=23330"/>
		<updated>2009-10-09T01:59:26Z</updated>

		<summary type="html">&lt;p&gt;Los Bravo: /* References */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Design Patterns from a Static/Dynamic Point of View'''&lt;br /&gt;
&lt;br /&gt;
Clearly, Ruby offers more concise realizations of certain design patterns than Java does. Is this typical of dynamic o-o languages? Are there design patterns that any dynamically typed language can realize better than a statically typed language? Are there instances when a &amp;lt;em&amp;gt;different&amp;lt;/em&amp;gt; pattern should be used in a dynamic language than a static language?&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
=== Design Pattern ===&lt;br /&gt;
A design pattern is a general reusable solution to a commonly occurring problem in software design. A design pattern is not a finished design that can be transformed directly into code. It is a description or template for how to solve a problem that can be used in many different situations. Object-oriented design patterns typically show relationships and interactions between classes or objects, without specifying the final application classes or objects that are involved.&lt;br /&gt;
&lt;br /&gt;
[http://www.dofactory.com/Patterns/Patterns.aspx [1]]&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| Creational Patterns&lt;br /&gt;
|-&lt;br /&gt;
| Abstract Factory 	  || Creates an instance of several families of classes&lt;br /&gt;
|-&lt;br /&gt;
| Builder 	  || Separates object construction from its representation&lt;br /&gt;
|-&lt;br /&gt;
| Factory Method 	  || Creates an instance of several derived classes&lt;br /&gt;
|-&lt;br /&gt;
| Prototype 	  || A fully initialized instance to be copied or cloned&lt;br /&gt;
|-&lt;br /&gt;
| Singleton 	  || A class of which only a single instance can exist&lt;br /&gt;
|-&lt;br /&gt;
| Structural Patterns&lt;br /&gt;
|-&lt;br /&gt;
| Adapter 	  || Match interfaces of different classes&lt;br /&gt;
|-&lt;br /&gt;
| Bridge 	  || Separates an object’s interface from its implementation&lt;br /&gt;
|-&lt;br /&gt;
| Composite 	  || A tree structure of simple and composite objects&lt;br /&gt;
|-&lt;br /&gt;
| Decorator 	  || Add responsibilities to objects dynamically&lt;br /&gt;
|-&lt;br /&gt;
| Facade 	  || A single class that represents an entire subsystem&lt;br /&gt;
|-&lt;br /&gt;
| Flyweight 	  || A fine-grained instance used for efficient sharing&lt;br /&gt;
|-&lt;br /&gt;
| Proxy 	  || An object representing another object&lt;br /&gt;
|-&lt;br /&gt;
|  Behavioral Patterns&lt;br /&gt;
|-&lt;br /&gt;
| Chain of Resp. 	  || A way of passing a request between a chain of objects&lt;br /&gt;
|-&lt;br /&gt;
| Command 	  || Encapsulate a command request as an object&lt;br /&gt;
|-&lt;br /&gt;
| Interpreter 	  || A way to include language elements in a program&lt;br /&gt;
|-&lt;br /&gt;
| Iterator 	  || Sequentially access the elements of a collection&lt;br /&gt;
|-&lt;br /&gt;
| Mediator 	  || Defines simplified communication between classes&lt;br /&gt;
|-&lt;br /&gt;
| Memento 	  || Capture and restore an object's internal state&lt;br /&gt;
|-&lt;br /&gt;
| Observer 	  || A way of notifying change to a number of classes&lt;br /&gt;
|-&lt;br /&gt;
| State 	  || Alter an object's behavior when its state changes&lt;br /&gt;
|-&lt;br /&gt;
| Strategy 	  || Encapsulates an algorithm inside a class&lt;br /&gt;
|-&lt;br /&gt;
| Template Method 	  || Defer the exact steps of an algorithm to a subclass&lt;br /&gt;
|-&lt;br /&gt;
| Visitor 	  || Defines a new operation to a class without change&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Static/Dynamic Type Languages ===&lt;br /&gt;
Types usually have associations either with values in memory or with objects such as variables. Because any value simply consists of a sequence of bits in a computer, hardware makes no distinction even between memory addresses, instruction code, characters, integers and floating-point numbers. Assignment to a type informs programs and programmers how those bit collections should be treated.&lt;br /&gt;
&lt;br /&gt;
Major functions provided by type systems include:&lt;br /&gt;
&lt;br /&gt;
* Safety - Use of types may allow a compiler to detect meaningless or probably invalid code. For example, we can identify an expression &amp;quot;Hello, World&amp;quot; as invalid because the rules of arithmetic do not specify how to divide an integer by a string. As discussed below, strong typing offers more safety, but generally does not guarantee complete safety (see type-safety for more information).&lt;br /&gt;
* Optimization - Static type-checking may provide useful compile-time information. For example, if a type requires that a value must align in memory at a multiple of 4 bytes, the compiler may be able to use more efficient machine instructions.&lt;br /&gt;
* Documentation - In more expressive type systems, types can serve as a form of documentation, since they can illustrate the intent of the programmer. For instance, timestamps may be represented as integers—but if a programmer declares a function as returning a timestamp type rather than merely an integer type, this documents part of the meaning of the function.&lt;br /&gt;
* Abstraction (or modularity) - Types allow programmers to think about programs at a higher level than the bit or byte, not bothering with low-level implementation. For example, programmers can think of a string as a collection of character values instead of as a mere array of bytes. Or, types can allow programmers to express the interface between two subsystems. This helps localize the definitions required for interoperability of the subsystems and prevents inconsistencies when those subsystems communicate.&lt;br /&gt;
&lt;br /&gt;
==== Static Type Languages ====&lt;br /&gt;
A programming language is said to use static typing when type checking is performed during compile-time as opposed to run-time.&lt;br /&gt;
&lt;br /&gt;
C++, C#, Java&lt;br /&gt;
&lt;br /&gt;
==== Dynamic Type Languages ====&lt;br /&gt;
A programming language is said to be dynamically typed, or just 'dynamic', when the majority of its type checking is performed at run-time as opposed to at compile-time.&lt;br /&gt;
&lt;br /&gt;
Ruby, Python&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://i.cmpnet.com/ddj/ddj/images/ddj9708d/9708df6.gif [2]]&lt;br /&gt;
Many software designers view patterns as a form of language-independent design. Pattern-Oriented Software Architectures: A System of Patterns, edited by Frank Buschmann (John Wiley &amp;amp; Sons, 1996), for instance, divides patterns into three main groups -- architectural patterns, design patterns, and idioms. Only the idioms (defined as &amp;quot;low-level patterns specific to a program language&amp;quot;) are language dependent -- the other patterns (and the implicit pattern language) rise above the level of programming language, much as the unified modeling language (UML) provides a common way to express designs.&lt;br /&gt;
&lt;br /&gt;
This idea of language independence is seductive. It is also misleading. While patterns are language independent, language choice limits the patterns that are possible, easily supported, and useful. Language also affects how applications are structured.&lt;br /&gt;
&lt;br /&gt;
To illustrate, I'll examine some patterns often used with Objective-C, but not usually used (or used differently) with C++. Both languages are object-oriented extensions of C. The main difference between them is that C++ has compile-time binding and fairly strong typing while Objective-C uses the Smalltalk object model of dynamic binding and weak typing. I'll start by examining two idioms commonly found in Objective-C programming. While simple, these idioms illustrate some of the key Objective-C programming techniques (although I use NextStep classes and frameworks to illustrate points, what I say also holds true for more generic Objective-C environments). I'll also examine how three standard design patterns -- Visitor, Command, and Facade -- are implemented in Objective-C.&lt;br /&gt;
&lt;br /&gt;
====Objective- C Idiom 1====&lt;br /&gt;
&lt;br /&gt;
Use Weakly Typed Delegation to Implement Secondary Roles of Framework Objects. A framework is a set of objects designed to help users create a specific type of application or a specific part of an application. For most problem domains, there is a set of core abstractions that are independent of the framework. For example, consider a framework that helps you create a GUI. Almost every such framework includes an &amp;quot;Application&amp;quot; object. In NextStep and it is an Application, in Delphi's VCL it is TApplication, but the basic abstraction is the same. Similarly, all such frameworks contain some form of &amp;quot;Window,&amp;quot; &amp;quot;Subview,&amp;quot; &amp;quot;Button,&amp;quot; and &amp;quot;Textfield.&amp;quot; These framework objects are often the leaves on the framework's object graph.&lt;br /&gt;
&lt;br /&gt;
Framework objects have a clearly defined role within any application. Application objects route events, and Window objects provide a place to draw. However, programmers often subclass objects to allow them to play a secondary role within an application. For example, Textfields are often subclassed within an application, giving them the ability to validate user input.&lt;br /&gt;
&lt;br /&gt;
Standard object-oriented design principles suggest that secondary roles be implemented via the Strategy pattern. Since frameworks are usually developed separately and implemented as shared libraries, using a strongly typed language results in Figure 1[http://i.cmpnet.com/ddj/ddj/images/ddj9708d/9708df1.gif [3]]. However, Figure 1[http://i.cmpnet.com/ddj/ddj/images/ddj9708d/9708df1.gif [3]] can cause problems over the application life cycle. NextStep's Application object, for example, acquired nine new delegate methods between versions 2.0 and 3.3 of the framework. These were gradual modifications brought about by changes in how people use computers, as well as changes made to remedy oversights in the original design. In Figure 1[http://i.cmpnet.com/ddj/ddj/images/ddj9708d/9708df1.gif [3]], each of these changes would have required a recompilation of the application and a new release. Moreover, existing copies of the application installed on users' machines would need to be updated.&lt;br /&gt;
&lt;br /&gt;
One solution to this problem is to implement a strict versioning system. For example, the Windows machine I use has three distinct versions of MSVCRT**.DLL, and five versions of MFC**.DLL. If I try to launch my copy of Visual Eiffel, an alert dialog tells me I have the wrong version of CT13D32.DLL.&lt;br /&gt;
&lt;br /&gt;
At best, strict versioning is a stop-gap solution. Depending on my applications, I might load all five versions of MFC**.DLL into memory, defeating the point of shared libraries. Additionally, older applications won't automatically inherit new functionality (or have bugs repaired) -- they still use the older version of the framework. Moreover, minor updates to an application can become complex; if you want to use a feature found in the new version of the framework, you must update every object that depends on the framework (including all the strategy objects).&lt;br /&gt;
&lt;br /&gt;
The Objective-C approach removes the abstract base class, giving the framework object a more complex setDelegate method. The framework object defines a set of strategic methods it will call if they are defined. Then, inside the setDelegate method, run-time type information (RTTI) determines which methods the delegate has implemented. If the delegate doesn't implement the strategic method, the framework object doesn't call it. This is illustrated in Listing One where the new delegate object is queried about each function. If the new delegate implements the function, the method pointer is obtained.&lt;br /&gt;
&lt;br /&gt;
This approach eliminates the versioning problem -- older applications work with new frameworks. For example, most applications compiled under NextStep 2.0 can run using the shared libraries of NextStep 3.3. If the application needs to be updated to take advantage of a new feature in the framework, the necessary code change is minimal because only the object getting updated needs to be modified.&lt;br /&gt;
&lt;br /&gt;
The essence of this idiom is the principle that the framework and application should evolve independently. It is not easy to see how to do this in a statically typed language.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
There are various levels of design recognition for generating repeatable solutions to commonly occurring programming problems in software design.  Design patterns in this case have been met with criticism in whether it negates the agile product development process.  From our example above we have shown that when implementing patterns across various languages of varying type systems a design pattern may not always resolve common problems efficiently.  Thus, the idea of a language independent pattern recognition solution must be evaluated thoroughly when in considering from a static and dynamic point of view.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
All sources used to create this wiki are linked in the above text.&lt;/div&gt;</summary>
		<author><name>Los Bravo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_13_StaticDynamic&amp;diff=23329</id>
		<title>CSC/ECE 517 Fall 2009/wiki2 13 StaticDynamic</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_13_StaticDynamic&amp;diff=23329"/>
		<updated>2009-10-09T01:57:00Z</updated>

		<summary type="html">&lt;p&gt;Los Bravo: /* Objective- C Idiom 1 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Design Patterns from a Static/Dynamic Point of View'''&lt;br /&gt;
&lt;br /&gt;
Clearly, Ruby offers more concise realizations of certain design patterns than Java does. Is this typical of dynamic o-o languages? Are there design patterns that any dynamically typed language can realize better than a statically typed language? Are there instances when a &amp;lt;em&amp;gt;different&amp;lt;/em&amp;gt; pattern should be used in a dynamic language than a static language?&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
=== Design Pattern ===&lt;br /&gt;
A design pattern is a general reusable solution to a commonly occurring problem in software design. A design pattern is not a finished design that can be transformed directly into code. It is a description or template for how to solve a problem that can be used in many different situations. Object-oriented design patterns typically show relationships and interactions between classes or objects, without specifying the final application classes or objects that are involved.&lt;br /&gt;
&lt;br /&gt;
[http://www.dofactory.com/Patterns/Patterns.aspx [1]]&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| Creational Patterns&lt;br /&gt;
|-&lt;br /&gt;
| Abstract Factory 	  || Creates an instance of several families of classes&lt;br /&gt;
|-&lt;br /&gt;
| Builder 	  || Separates object construction from its representation&lt;br /&gt;
|-&lt;br /&gt;
| Factory Method 	  || Creates an instance of several derived classes&lt;br /&gt;
|-&lt;br /&gt;
| Prototype 	  || A fully initialized instance to be copied or cloned&lt;br /&gt;
|-&lt;br /&gt;
| Singleton 	  || A class of which only a single instance can exist&lt;br /&gt;
|-&lt;br /&gt;
| Structural Patterns&lt;br /&gt;
|-&lt;br /&gt;
| Adapter 	  || Match interfaces of different classes&lt;br /&gt;
|-&lt;br /&gt;
| Bridge 	  || Separates an object’s interface from its implementation&lt;br /&gt;
|-&lt;br /&gt;
| Composite 	  || A tree structure of simple and composite objects&lt;br /&gt;
|-&lt;br /&gt;
| Decorator 	  || Add responsibilities to objects dynamically&lt;br /&gt;
|-&lt;br /&gt;
| Facade 	  || A single class that represents an entire subsystem&lt;br /&gt;
|-&lt;br /&gt;
| Flyweight 	  || A fine-grained instance used for efficient sharing&lt;br /&gt;
|-&lt;br /&gt;
| Proxy 	  || An object representing another object&lt;br /&gt;
|-&lt;br /&gt;
|  Behavioral Patterns&lt;br /&gt;
|-&lt;br /&gt;
| Chain of Resp. 	  || A way of passing a request between a chain of objects&lt;br /&gt;
|-&lt;br /&gt;
| Command 	  || Encapsulate a command request as an object&lt;br /&gt;
|-&lt;br /&gt;
| Interpreter 	  || A way to include language elements in a program&lt;br /&gt;
|-&lt;br /&gt;
| Iterator 	  || Sequentially access the elements of a collection&lt;br /&gt;
|-&lt;br /&gt;
| Mediator 	  || Defines simplified communication between classes&lt;br /&gt;
|-&lt;br /&gt;
| Memento 	  || Capture and restore an object's internal state&lt;br /&gt;
|-&lt;br /&gt;
| Observer 	  || A way of notifying change to a number of classes&lt;br /&gt;
|-&lt;br /&gt;
| State 	  || Alter an object's behavior when its state changes&lt;br /&gt;
|-&lt;br /&gt;
| Strategy 	  || Encapsulates an algorithm inside a class&lt;br /&gt;
|-&lt;br /&gt;
| Template Method 	  || Defer the exact steps of an algorithm to a subclass&lt;br /&gt;
|-&lt;br /&gt;
| Visitor 	  || Defines a new operation to a class without change&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Static/Dynamic Type Languages ===&lt;br /&gt;
Types usually have associations either with values in memory or with objects such as variables. Because any value simply consists of a sequence of bits in a computer, hardware makes no distinction even between memory addresses, instruction code, characters, integers and floating-point numbers. Assignment to a type informs programs and programmers how those bit collections should be treated.&lt;br /&gt;
&lt;br /&gt;
Major functions provided by type systems include:&lt;br /&gt;
&lt;br /&gt;
* Safety - Use of types may allow a compiler to detect meaningless or probably invalid code. For example, we can identify an expression &amp;quot;Hello, World&amp;quot; as invalid because the rules of arithmetic do not specify how to divide an integer by a string. As discussed below, strong typing offers more safety, but generally does not guarantee complete safety (see type-safety for more information).&lt;br /&gt;
* Optimization - Static type-checking may provide useful compile-time information. For example, if a type requires that a value must align in memory at a multiple of 4 bytes, the compiler may be able to use more efficient machine instructions.&lt;br /&gt;
* Documentation - In more expressive type systems, types can serve as a form of documentation, since they can illustrate the intent of the programmer. For instance, timestamps may be represented as integers—but if a programmer declares a function as returning a timestamp type rather than merely an integer type, this documents part of the meaning of the function.&lt;br /&gt;
* Abstraction (or modularity) - Types allow programmers to think about programs at a higher level than the bit or byte, not bothering with low-level implementation. For example, programmers can think of a string as a collection of character values instead of as a mere array of bytes. Or, types can allow programmers to express the interface between two subsystems. This helps localize the definitions required for interoperability of the subsystems and prevents inconsistencies when those subsystems communicate.&lt;br /&gt;
&lt;br /&gt;
==== Static Type Languages ====&lt;br /&gt;
A programming language is said to use static typing when type checking is performed during compile-time as opposed to run-time.&lt;br /&gt;
&lt;br /&gt;
C++, C#, Java&lt;br /&gt;
&lt;br /&gt;
==== Dynamic Type Languages ====&lt;br /&gt;
A programming language is said to be dynamically typed, or just 'dynamic', when the majority of its type checking is performed at run-time as opposed to at compile-time.&lt;br /&gt;
&lt;br /&gt;
Ruby, Python&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://i.cmpnet.com/ddj/ddj/images/ddj9708d/9708df6.gif [2]]&lt;br /&gt;
Many software designers view patterns as a form of language-independent design. Pattern-Oriented Software Architectures: A System of Patterns, edited by Frank Buschmann (John Wiley &amp;amp; Sons, 1996), for instance, divides patterns into three main groups -- architectural patterns, design patterns, and idioms. Only the idioms (defined as &amp;quot;low-level patterns specific to a program language&amp;quot;) are language dependent -- the other patterns (and the implicit pattern language) rise above the level of programming language, much as the unified modeling language (UML) provides a common way to express designs.&lt;br /&gt;
&lt;br /&gt;
This idea of language independence is seductive. It is also misleading. While patterns are language independent, language choice limits the patterns that are possible, easily supported, and useful. Language also affects how applications are structured.&lt;br /&gt;
&lt;br /&gt;
To illustrate, I'll examine some patterns often used with Objective-C, but not usually used (or used differently) with C++. Both languages are object-oriented extensions of C. The main difference between them is that C++ has compile-time binding and fairly strong typing while Objective-C uses the Smalltalk object model of dynamic binding and weak typing. I'll start by examining two idioms commonly found in Objective-C programming. While simple, these idioms illustrate some of the key Objective-C programming techniques (although I use NextStep classes and frameworks to illustrate points, what I say also holds true for more generic Objective-C environments). I'll also examine how three standard design patterns -- Visitor, Command, and Facade -- are implemented in Objective-C.&lt;br /&gt;
&lt;br /&gt;
====Objective- C Idiom 1====&lt;br /&gt;
&lt;br /&gt;
Use Weakly Typed Delegation to Implement Secondary Roles of Framework Objects. A framework is a set of objects designed to help users create a specific type of application or a specific part of an application. For most problem domains, there is a set of core abstractions that are independent of the framework. For example, consider a framework that helps you create a GUI. Almost every such framework includes an &amp;quot;Application&amp;quot; object. In NextStep and it is an Application, in Delphi's VCL it is TApplication, but the basic abstraction is the same. Similarly, all such frameworks contain some form of &amp;quot;Window,&amp;quot; &amp;quot;Subview,&amp;quot; &amp;quot;Button,&amp;quot; and &amp;quot;Textfield.&amp;quot; These framework objects are often the leaves on the framework's object graph.&lt;br /&gt;
&lt;br /&gt;
Framework objects have a clearly defined role within any application. Application objects route events, and Window objects provide a place to draw. However, programmers often subclass objects to allow them to play a secondary role within an application. For example, Textfields are often subclassed within an application, giving them the ability to validate user input.&lt;br /&gt;
&lt;br /&gt;
Standard object-oriented design principles suggest that secondary roles be implemented via the Strategy pattern. Since frameworks are usually developed separately and implemented as shared libraries, using a strongly typed language results in Figure 1[http://i.cmpnet.com/ddj/ddj/images/ddj9708d/9708df1.gif [3]]. However, Figure 1[http://i.cmpnet.com/ddj/ddj/images/ddj9708d/9708df1.gif [3]] can cause problems over the application life cycle. NextStep's Application object, for example, acquired nine new delegate methods between versions 2.0 and 3.3 of the framework. These were gradual modifications brought about by changes in how people use computers, as well as changes made to remedy oversights in the original design. In Figure 1[http://i.cmpnet.com/ddj/ddj/images/ddj9708d/9708df1.gif [3]], each of these changes would have required a recompilation of the application and a new release. Moreover, existing copies of the application installed on users' machines would need to be updated.&lt;br /&gt;
&lt;br /&gt;
One solution to this problem is to implement a strict versioning system. For example, the Windows machine I use has three distinct versions of MSVCRT**.DLL, and five versions of MFC**.DLL. If I try to launch my copy of Visual Eiffel, an alert dialog tells me I have the wrong version of CT13D32.DLL.&lt;br /&gt;
&lt;br /&gt;
At best, strict versioning is a stop-gap solution. Depending on my applications, I might load all five versions of MFC**.DLL into memory, defeating the point of shared libraries. Additionally, older applications won't automatically inherit new functionality (or have bugs repaired) -- they still use the older version of the framework. Moreover, minor updates to an application can become complex; if you want to use a feature found in the new version of the framework, you must update every object that depends on the framework (including all the strategy objects).&lt;br /&gt;
&lt;br /&gt;
The Objective-C approach removes the abstract base class, giving the framework object a more complex setDelegate method. The framework object defines a set of strategic methods it will call if they are defined. Then, inside the setDelegate method, run-time type information (RTTI) determines which methods the delegate has implemented. If the delegate doesn't implement the strategic method, the framework object doesn't call it. This is illustrated in Listing One where the new delegate object is queried about each function. If the new delegate implements the function, the method pointer is obtained.&lt;br /&gt;
&lt;br /&gt;
This approach eliminates the versioning problem -- older applications work with new frameworks. For example, most applications compiled under NextStep 2.0 can run using the shared libraries of NextStep 3.3. If the application needs to be updated to take advantage of a new feature in the framework, the necessary code change is minimal because only the object getting updated needs to be modified.&lt;br /&gt;
&lt;br /&gt;
The essence of this idiom is the principle that the framework and application should evolve independently. It is not easy to see how to do this in a statically typed language.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
There are various levels of design recognition for generating repeatable solutions to commonly occurring programming problems in software design.  Design patterns in this case have been met with criticism in whether it negates the agile product development process.  From our example above we have shown that when implementing patterns across various languages of varying type systems a design pattern may not always resolve common problems efficiently.  Thus, the idea of a language independent pattern recognition solution must be evaluated thoroughly when in considering from a static and dynamic point of view.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;/div&gt;</summary>
		<author><name>Los Bravo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_13_StaticDynamic&amp;diff=23328</id>
		<title>CSC/ECE 517 Fall 2009/wiki2 13 StaticDynamic</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_13_StaticDynamic&amp;diff=23328"/>
		<updated>2009-10-09T01:53:40Z</updated>

		<summary type="html">&lt;p&gt;Los Bravo: /* The Facade Pattern */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Design Patterns from a Static/Dynamic Point of View'''&lt;br /&gt;
&lt;br /&gt;
Clearly, Ruby offers more concise realizations of certain design patterns than Java does. Is this typical of dynamic o-o languages? Are there design patterns that any dynamically typed language can realize better than a statically typed language? Are there instances when a &amp;lt;em&amp;gt;different&amp;lt;/em&amp;gt; pattern should be used in a dynamic language than a static language?&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
=== Design Pattern ===&lt;br /&gt;
A design pattern is a general reusable solution to a commonly occurring problem in software design. A design pattern is not a finished design that can be transformed directly into code. It is a description or template for how to solve a problem that can be used in many different situations. Object-oriented design patterns typically show relationships and interactions between classes or objects, without specifying the final application classes or objects that are involved.&lt;br /&gt;
&lt;br /&gt;
[http://www.dofactory.com/Patterns/Patterns.aspx [1]]&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| Creational Patterns&lt;br /&gt;
|-&lt;br /&gt;
| Abstract Factory 	  || Creates an instance of several families of classes&lt;br /&gt;
|-&lt;br /&gt;
| Builder 	  || Separates object construction from its representation&lt;br /&gt;
|-&lt;br /&gt;
| Factory Method 	  || Creates an instance of several derived classes&lt;br /&gt;
|-&lt;br /&gt;
| Prototype 	  || A fully initialized instance to be copied or cloned&lt;br /&gt;
|-&lt;br /&gt;
| Singleton 	  || A class of which only a single instance can exist&lt;br /&gt;
|-&lt;br /&gt;
| Structural Patterns&lt;br /&gt;
|-&lt;br /&gt;
| Adapter 	  || Match interfaces of different classes&lt;br /&gt;
|-&lt;br /&gt;
| Bridge 	  || Separates an object’s interface from its implementation&lt;br /&gt;
|-&lt;br /&gt;
| Composite 	  || A tree structure of simple and composite objects&lt;br /&gt;
|-&lt;br /&gt;
| Decorator 	  || Add responsibilities to objects dynamically&lt;br /&gt;
|-&lt;br /&gt;
| Facade 	  || A single class that represents an entire subsystem&lt;br /&gt;
|-&lt;br /&gt;
| Flyweight 	  || A fine-grained instance used for efficient sharing&lt;br /&gt;
|-&lt;br /&gt;
| Proxy 	  || An object representing another object&lt;br /&gt;
|-&lt;br /&gt;
|  Behavioral Patterns&lt;br /&gt;
|-&lt;br /&gt;
| Chain of Resp. 	  || A way of passing a request between a chain of objects&lt;br /&gt;
|-&lt;br /&gt;
| Command 	  || Encapsulate a command request as an object&lt;br /&gt;
|-&lt;br /&gt;
| Interpreter 	  || A way to include language elements in a program&lt;br /&gt;
|-&lt;br /&gt;
| Iterator 	  || Sequentially access the elements of a collection&lt;br /&gt;
|-&lt;br /&gt;
| Mediator 	  || Defines simplified communication between classes&lt;br /&gt;
|-&lt;br /&gt;
| Memento 	  || Capture and restore an object's internal state&lt;br /&gt;
|-&lt;br /&gt;
| Observer 	  || A way of notifying change to a number of classes&lt;br /&gt;
|-&lt;br /&gt;
| State 	  || Alter an object's behavior when its state changes&lt;br /&gt;
|-&lt;br /&gt;
| Strategy 	  || Encapsulates an algorithm inside a class&lt;br /&gt;
|-&lt;br /&gt;
| Template Method 	  || Defer the exact steps of an algorithm to a subclass&lt;br /&gt;
|-&lt;br /&gt;
| Visitor 	  || Defines a new operation to a class without change&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Static/Dynamic Type Languages ===&lt;br /&gt;
Types usually have associations either with values in memory or with objects such as variables. Because any value simply consists of a sequence of bits in a computer, hardware makes no distinction even between memory addresses, instruction code, characters, integers and floating-point numbers. Assignment to a type informs programs and programmers how those bit collections should be treated.&lt;br /&gt;
&lt;br /&gt;
Major functions provided by type systems include:&lt;br /&gt;
&lt;br /&gt;
* Safety - Use of types may allow a compiler to detect meaningless or probably invalid code. For example, we can identify an expression &amp;quot;Hello, World&amp;quot; as invalid because the rules of arithmetic do not specify how to divide an integer by a string. As discussed below, strong typing offers more safety, but generally does not guarantee complete safety (see type-safety for more information).&lt;br /&gt;
* Optimization - Static type-checking may provide useful compile-time information. For example, if a type requires that a value must align in memory at a multiple of 4 bytes, the compiler may be able to use more efficient machine instructions.&lt;br /&gt;
* Documentation - In more expressive type systems, types can serve as a form of documentation, since they can illustrate the intent of the programmer. For instance, timestamps may be represented as integers—but if a programmer declares a function as returning a timestamp type rather than merely an integer type, this documents part of the meaning of the function.&lt;br /&gt;
* Abstraction (or modularity) - Types allow programmers to think about programs at a higher level than the bit or byte, not bothering with low-level implementation. For example, programmers can think of a string as a collection of character values instead of as a mere array of bytes. Or, types can allow programmers to express the interface between two subsystems. This helps localize the definitions required for interoperability of the subsystems and prevents inconsistencies when those subsystems communicate.&lt;br /&gt;
&lt;br /&gt;
==== Static Type Languages ====&lt;br /&gt;
A programming language is said to use static typing when type checking is performed during compile-time as opposed to run-time.&lt;br /&gt;
&lt;br /&gt;
C++, C#, Java&lt;br /&gt;
&lt;br /&gt;
==== Dynamic Type Languages ====&lt;br /&gt;
A programming language is said to be dynamically typed, or just 'dynamic', when the majority of its type checking is performed at run-time as opposed to at compile-time.&lt;br /&gt;
&lt;br /&gt;
Ruby, Python&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://i.cmpnet.com/ddj/ddj/images/ddj9708d/9708df6.gif [2]]&lt;br /&gt;
Many software designers view patterns as a form of language-independent design. Pattern-Oriented Software Architectures: A System of Patterns, edited by Frank Buschmann (John Wiley &amp;amp; Sons, 1996), for instance, divides patterns into three main groups -- architectural patterns, design patterns, and idioms. Only the idioms (defined as &amp;quot;low-level patterns specific to a program language&amp;quot;) are language dependent -- the other patterns (and the implicit pattern language) rise above the level of programming language, much as the unified modeling language (UML) provides a common way to express designs.&lt;br /&gt;
&lt;br /&gt;
This idea of language independence is seductive. It is also misleading. While patterns are language independent, language choice limits the patterns that are possible, easily supported, and useful. Language also affects how applications are structured.&lt;br /&gt;
&lt;br /&gt;
To illustrate, I'll examine some patterns often used with Objective-C, but not usually used (or used differently) with C++. Both languages are object-oriented extensions of C. The main difference between them is that C++ has compile-time binding and fairly strong typing while Objective-C uses the Smalltalk object model of dynamic binding and weak typing. I'll start by examining two idioms commonly found in Objective-C programming. While simple, these idioms illustrate some of the key Objective-C programming techniques (although I use NextStep classes and frameworks to illustrate points, what I say also holds true for more generic Objective-C environments). I'll also examine how three standard design patterns -- Visitor, Command, and Facade -- are implemented in Objective-C.&lt;br /&gt;
&lt;br /&gt;
====Objective- C Idiom 1====&lt;br /&gt;
&lt;br /&gt;
Use Weakly Typed Delegation to Implement Secondary Roles of Framework Objects. A framework is a set of objects designed to help users create a specific type of application or a specific part of an application. For most problem domains, there is a set of core abstractions that are independent of the framework. For example, consider a framework that helps you create a GUI. Almost every such framework includes an &amp;quot;Application&amp;quot; object. In NextStep and it is an Application, in Delphi's VCL it is TApplication, but the basic abstraction is the same. Similarly, all such frameworks contain some form of &amp;quot;Window,&amp;quot; &amp;quot;Subview,&amp;quot; &amp;quot;Button,&amp;quot; and &amp;quot;Textfield.&amp;quot; These framework objects are often the leaves on the framework's object graph.&lt;br /&gt;
&lt;br /&gt;
Framework objects have a clearly defined role within any application. Application objects route events, and Window objects provide a place to draw. However, programmers often subclass objects to allow them to play a secondary role within an application. For example, Textfields are often subclassed within an application, giving them the ability to validate user input.&lt;br /&gt;
&lt;br /&gt;
Standard object-oriented design principles suggest that secondary roles be implemented via the Strategy pattern. Since frameworks are usually developed separately and implemented as shared libraries, using a strongly typed language results in Figure 1. However, Figure 1 can cause problems over the application life cycle. NextStep's Application object, for example, acquired nine new delegate methods between versions 2.0 and 3.3 of the framework. These were gradual modifications brought about by changes in how people use computers, as well as changes made to remedy oversights in the original design. In Figure 1, each of these changes would have required a recompilation of the application and a new release. Moreover, existing copies of the application installed on users' machines would need to be updated.&lt;br /&gt;
&lt;br /&gt;
One solution to this problem is to implement a strict versioning system. For example, the Windows machine I use has three distinct versions of MSVCRT**.DLL, and five versions of MFC**.DLL. If I try to launch my copy of Visual Eiffel, an alert dialog tells me I have the wrong version of CT13D32.DLL.&lt;br /&gt;
&lt;br /&gt;
At best, strict versioning is a stop-gap solution. Depending on my applications, I might load all five versions of MFC**.DLL into memory, defeating the point of shared libraries. Additionally, older applications won't automatically inherit new functionality (or have bugs repaired) -- they still use the older version of the framework. Moreover, minor updates to an application can become complex; if you want to use a feature found in the new version of the framework, you must update every object that depends on the framework (including all the strategy objects).&lt;br /&gt;
&lt;br /&gt;
The Objective-C approach removes the abstract base class, giving the framework object a more complex setDelegate method. The framework object defines a set of strategic methods it will call if they are defined. Then, inside the setDelegate method, run-time type information (RTTI) determines which methods the delegate has implemented. If the delegate doesn't implement the strategic method, the framework object doesn't call it. This is illustrated in Listing One where the new delegate object is queried about each function. If the new delegate implements the function, the method pointer is obtained.&lt;br /&gt;
&lt;br /&gt;
This approach eliminates the versioning problem -- older applications work with new frameworks. For example, most applications compiled under NextStep 2.0 can run using the shared libraries of NextStep 3.3. If the application needs to be updated to take advantage of a new feature in the framework, the necessary code change is minimal because only the object getting updated needs to be modified.&lt;br /&gt;
&lt;br /&gt;
The essence of this idiom is the principle that the framework and application should evolve independently. It is not easy to see how to do this in a statically typed language.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
There are various levels of design recognition for generating repeatable solutions to commonly occurring programming problems in software design.  Design patterns in this case have been met with criticism in whether it negates the agile product development process.  From our example above we have shown that when implementing patterns across various languages of varying type systems a design pattern may not always resolve common problems efficiently.  Thus, the idea of a language independent pattern recognition solution must be evaluated thoroughly when in considering from a static and dynamic point of view.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;/div&gt;</summary>
		<author><name>Los Bravo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_13_StaticDynamic&amp;diff=23327</id>
		<title>CSC/ECE 517 Fall 2009/wiki2 13 StaticDynamic</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_13_StaticDynamic&amp;diff=23327"/>
		<updated>2009-10-09T01:45:08Z</updated>

		<summary type="html">&lt;p&gt;Los Bravo: /* Conclusion */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Design Patterns from a Static/Dynamic Point of View'''&lt;br /&gt;
&lt;br /&gt;
Clearly, Ruby offers more concise realizations of certain design patterns than Java does. Is this typical of dynamic o-o languages? Are there design patterns that any dynamically typed language can realize better than a statically typed language? Are there instances when a &amp;lt;em&amp;gt;different&amp;lt;/em&amp;gt; pattern should be used in a dynamic language than a static language?&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
=== Design Pattern ===&lt;br /&gt;
A design pattern is a general reusable solution to a commonly occurring problem in software design. A design pattern is not a finished design that can be transformed directly into code. It is a description or template for how to solve a problem that can be used in many different situations. Object-oriented design patterns typically show relationships and interactions between classes or objects, without specifying the final application classes or objects that are involved.&lt;br /&gt;
&lt;br /&gt;
[http://www.dofactory.com/Patterns/Patterns.aspx [1]]&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| Creational Patterns&lt;br /&gt;
|-&lt;br /&gt;
| Abstract Factory 	  || Creates an instance of several families of classes&lt;br /&gt;
|-&lt;br /&gt;
| Builder 	  || Separates object construction from its representation&lt;br /&gt;
|-&lt;br /&gt;
| Factory Method 	  || Creates an instance of several derived classes&lt;br /&gt;
|-&lt;br /&gt;
| Prototype 	  || A fully initialized instance to be copied or cloned&lt;br /&gt;
|-&lt;br /&gt;
| Singleton 	  || A class of which only a single instance can exist&lt;br /&gt;
|-&lt;br /&gt;
| Structural Patterns&lt;br /&gt;
|-&lt;br /&gt;
| Adapter 	  || Match interfaces of different classes&lt;br /&gt;
|-&lt;br /&gt;
| Bridge 	  || Separates an object’s interface from its implementation&lt;br /&gt;
|-&lt;br /&gt;
| Composite 	  || A tree structure of simple and composite objects&lt;br /&gt;
|-&lt;br /&gt;
| Decorator 	  || Add responsibilities to objects dynamically&lt;br /&gt;
|-&lt;br /&gt;
| Facade 	  || A single class that represents an entire subsystem&lt;br /&gt;
|-&lt;br /&gt;
| Flyweight 	  || A fine-grained instance used for efficient sharing&lt;br /&gt;
|-&lt;br /&gt;
| Proxy 	  || An object representing another object&lt;br /&gt;
|-&lt;br /&gt;
|  Behavioral Patterns&lt;br /&gt;
|-&lt;br /&gt;
| Chain of Resp. 	  || A way of passing a request between a chain of objects&lt;br /&gt;
|-&lt;br /&gt;
| Command 	  || Encapsulate a command request as an object&lt;br /&gt;
|-&lt;br /&gt;
| Interpreter 	  || A way to include language elements in a program&lt;br /&gt;
|-&lt;br /&gt;
| Iterator 	  || Sequentially access the elements of a collection&lt;br /&gt;
|-&lt;br /&gt;
| Mediator 	  || Defines simplified communication between classes&lt;br /&gt;
|-&lt;br /&gt;
| Memento 	  || Capture and restore an object's internal state&lt;br /&gt;
|-&lt;br /&gt;
| Observer 	  || A way of notifying change to a number of classes&lt;br /&gt;
|-&lt;br /&gt;
| State 	  || Alter an object's behavior when its state changes&lt;br /&gt;
|-&lt;br /&gt;
| Strategy 	  || Encapsulates an algorithm inside a class&lt;br /&gt;
|-&lt;br /&gt;
| Template Method 	  || Defer the exact steps of an algorithm to a subclass&lt;br /&gt;
|-&lt;br /&gt;
| Visitor 	  || Defines a new operation to a class without change&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Static/Dynamic Type Languages ===&lt;br /&gt;
Types usually have associations either with values in memory or with objects such as variables. Because any value simply consists of a sequence of bits in a computer, hardware makes no distinction even between memory addresses, instruction code, characters, integers and floating-point numbers. Assignment to a type informs programs and programmers how those bit collections should be treated.&lt;br /&gt;
&lt;br /&gt;
Major functions provided by type systems include:&lt;br /&gt;
&lt;br /&gt;
* Safety - Use of types may allow a compiler to detect meaningless or probably invalid code. For example, we can identify an expression &amp;quot;Hello, World&amp;quot; as invalid because the rules of arithmetic do not specify how to divide an integer by a string. As discussed below, strong typing offers more safety, but generally does not guarantee complete safety (see type-safety for more information).&lt;br /&gt;
* Optimization - Static type-checking may provide useful compile-time information. For example, if a type requires that a value must align in memory at a multiple of 4 bytes, the compiler may be able to use more efficient machine instructions.&lt;br /&gt;
* Documentation - In more expressive type systems, types can serve as a form of documentation, since they can illustrate the intent of the programmer. For instance, timestamps may be represented as integers—but if a programmer declares a function as returning a timestamp type rather than merely an integer type, this documents part of the meaning of the function.&lt;br /&gt;
* Abstraction (or modularity) - Types allow programmers to think about programs at a higher level than the bit or byte, not bothering with low-level implementation. For example, programmers can think of a string as a collection of character values instead of as a mere array of bytes. Or, types can allow programmers to express the interface between two subsystems. This helps localize the definitions required for interoperability of the subsystems and prevents inconsistencies when those subsystems communicate.&lt;br /&gt;
&lt;br /&gt;
==== Static Type Languages ====&lt;br /&gt;
A programming language is said to use static typing when type checking is performed during compile-time as opposed to run-time.&lt;br /&gt;
&lt;br /&gt;
C++, C#, Java&lt;br /&gt;
&lt;br /&gt;
==== Dynamic Type Languages ====&lt;br /&gt;
A programming language is said to be dynamically typed, or just 'dynamic', when the majority of its type checking is performed at run-time as opposed to at compile-time.&lt;br /&gt;
&lt;br /&gt;
Ruby, Python&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://i.cmpnet.com/ddj/ddj/images/ddj9708d/9708df6.gif [2]]&lt;br /&gt;
Many software designers view patterns as a form of language-independent design. Pattern-Oriented Software Architectures: A System of Patterns, edited by Frank Buschmann (John Wiley &amp;amp; Sons, 1996), for instance, divides patterns into three main groups -- architectural patterns, design patterns, and idioms. Only the idioms (defined as &amp;quot;low-level patterns specific to a program language&amp;quot;) are language dependent -- the other patterns (and the implicit pattern language) rise above the level of programming language, much as the unified modeling language (UML) provides a common way to express designs.&lt;br /&gt;
&lt;br /&gt;
This idea of language independence is seductive. It is also misleading. While patterns are language independent, language choice limits the patterns that are possible, easily supported, and useful. Language also affects how applications are structured.&lt;br /&gt;
&lt;br /&gt;
To illustrate, I'll examine some patterns often used with Objective-C, but not usually used (or used differently) with C++. Both languages are object-oriented extensions of C. The main difference between them is that C++ has compile-time binding and fairly strong typing while Objective-C uses the Smalltalk object model of dynamic binding and weak typing. I'll start by examining two idioms commonly found in Objective-C programming. While simple, these idioms illustrate some of the key Objective-C programming techniques (although I use NextStep classes and frameworks to illustrate points, what I say also holds true for more generic Objective-C environments). I'll also examine how three standard design patterns -- Visitor, Command, and Facade -- are implemented in Objective-C.&lt;br /&gt;
&lt;br /&gt;
====The Facade Pattern====&lt;br /&gt;
&lt;br /&gt;
You might have noticed a common thread in the patterns just discussed. Both of the idioms involve ways to break out pieces of code and put them in shared libraries or bundles. The design patterns show how to decouple objects from each other for maximal flexibility. I'll now examine a commonly used architectural pattern that describes a way to structure applications to take advantage of this flexibility.  In the good old days of structured programming, saving an application's state was simple. Programs were divided into data and functions, and saving consisted of calling the function that wrote the data to some storage area. In object-oriented applications, things become a little more difficult. To the extent that you practice information hiding, object serialization is the natural approach to take.  Unfortunately, if m is the number of object references and n is the number of objects, serialization is O(mlog(n)). This is far too slow for serialization to be the saving mechanism in many applications.&lt;br /&gt;
&lt;br /&gt;
But an Objective-C program that uses the four previous patterns will almost certainly use lots of facades as well. Notice here[http://www.ddj.com/184410252 [3]] that Facades look a lot like cut points in the object graph. This leads to the natural Objective-C solution to the speed problem for object serialization: Serialize each facade to a separate Serializer (make each facade responsible for serializing the subsystem it abstracts).  &lt;br /&gt;
&lt;br /&gt;
This can get complicated. If an object outside a subsystem bypasses a facade (and messages an object in a subsystem directly), then extra care must be taken during serialization (to avoid serializing objects to more than one location). And, deserializing (opening) becomes trickier as well -- objects that bypass a facade will need to find objects within the subsystem. In practice, this comes down to making the facades used in serialization Singletons and making certain that all connections to objects in the subsystem are mediated by the facade (so that, during deserialization, the connection can be restored).&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
There are various levels of design recognition for generating repeatable solutions to commonly occurring programming problems in software design.  Design patterns in this case have been met with criticism in whether it negates the agile product development process.  From our example above we have shown that when implementing patterns across various languages of varying type systems a design pattern may not always resolve common problems efficiently.  Thus, the idea of a language independent pattern recognition solution must be evaluated thoroughly when in considering from a static and dynamic point of view.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;/div&gt;</summary>
		<author><name>Los Bravo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_13_StaticDynamic&amp;diff=23325</id>
		<title>CSC/ECE 517 Fall 2009/wiki2 13 StaticDynamic</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_13_StaticDynamic&amp;diff=23325"/>
		<updated>2009-10-09T01:40:48Z</updated>

		<summary type="html">&lt;p&gt;Los Bravo: /* Conclusion */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Design Patterns from a Static/Dynamic Point of View'''&lt;br /&gt;
&lt;br /&gt;
Clearly, Ruby offers more concise realizations of certain design patterns than Java does. Is this typical of dynamic o-o languages? Are there design patterns that any dynamically typed language can realize better than a statically typed language? Are there instances when a &amp;lt;em&amp;gt;different&amp;lt;/em&amp;gt; pattern should be used in a dynamic language than a static language?&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
=== Design Pattern ===&lt;br /&gt;
A design pattern is a general reusable solution to a commonly occurring problem in software design. A design pattern is not a finished design that can be transformed directly into code. It is a description or template for how to solve a problem that can be used in many different situations. Object-oriented design patterns typically show relationships and interactions between classes or objects, without specifying the final application classes or objects that are involved.&lt;br /&gt;
&lt;br /&gt;
[http://www.dofactory.com/Patterns/Patterns.aspx [1]]&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| Creational Patterns&lt;br /&gt;
|-&lt;br /&gt;
| Abstract Factory 	  || Creates an instance of several families of classes&lt;br /&gt;
|-&lt;br /&gt;
| Builder 	  || Separates object construction from its representation&lt;br /&gt;
|-&lt;br /&gt;
| Factory Method 	  || Creates an instance of several derived classes&lt;br /&gt;
|-&lt;br /&gt;
| Prototype 	  || A fully initialized instance to be copied or cloned&lt;br /&gt;
|-&lt;br /&gt;
| Singleton 	  || A class of which only a single instance can exist&lt;br /&gt;
|-&lt;br /&gt;
| Structural Patterns&lt;br /&gt;
|-&lt;br /&gt;
| Adapter 	  || Match interfaces of different classes&lt;br /&gt;
|-&lt;br /&gt;
| Bridge 	  || Separates an object’s interface from its implementation&lt;br /&gt;
|-&lt;br /&gt;
| Composite 	  || A tree structure of simple and composite objects&lt;br /&gt;
|-&lt;br /&gt;
| Decorator 	  || Add responsibilities to objects dynamically&lt;br /&gt;
|-&lt;br /&gt;
| Facade 	  || A single class that represents an entire subsystem&lt;br /&gt;
|-&lt;br /&gt;
| Flyweight 	  || A fine-grained instance used for efficient sharing&lt;br /&gt;
|-&lt;br /&gt;
| Proxy 	  || An object representing another object&lt;br /&gt;
|-&lt;br /&gt;
|  Behavioral Patterns&lt;br /&gt;
|-&lt;br /&gt;
| Chain of Resp. 	  || A way of passing a request between a chain of objects&lt;br /&gt;
|-&lt;br /&gt;
| Command 	  || Encapsulate a command request as an object&lt;br /&gt;
|-&lt;br /&gt;
| Interpreter 	  || A way to include language elements in a program&lt;br /&gt;
|-&lt;br /&gt;
| Iterator 	  || Sequentially access the elements of a collection&lt;br /&gt;
|-&lt;br /&gt;
| Mediator 	  || Defines simplified communication between classes&lt;br /&gt;
|-&lt;br /&gt;
| Memento 	  || Capture and restore an object's internal state&lt;br /&gt;
|-&lt;br /&gt;
| Observer 	  || A way of notifying change to a number of classes&lt;br /&gt;
|-&lt;br /&gt;
| State 	  || Alter an object's behavior when its state changes&lt;br /&gt;
|-&lt;br /&gt;
| Strategy 	  || Encapsulates an algorithm inside a class&lt;br /&gt;
|-&lt;br /&gt;
| Template Method 	  || Defer the exact steps of an algorithm to a subclass&lt;br /&gt;
|-&lt;br /&gt;
| Visitor 	  || Defines a new operation to a class without change&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Static/Dynamic Type Languages ===&lt;br /&gt;
Types usually have associations either with values in memory or with objects such as variables. Because any value simply consists of a sequence of bits in a computer, hardware makes no distinction even between memory addresses, instruction code, characters, integers and floating-point numbers. Assignment to a type informs programs and programmers how those bit collections should be treated.&lt;br /&gt;
&lt;br /&gt;
Major functions provided by type systems include:&lt;br /&gt;
&lt;br /&gt;
* Safety - Use of types may allow a compiler to detect meaningless or probably invalid code. For example, we can identify an expression &amp;quot;Hello, World&amp;quot; as invalid because the rules of arithmetic do not specify how to divide an integer by a string. As discussed below, strong typing offers more safety, but generally does not guarantee complete safety (see type-safety for more information).&lt;br /&gt;
* Optimization - Static type-checking may provide useful compile-time information. For example, if a type requires that a value must align in memory at a multiple of 4 bytes, the compiler may be able to use more efficient machine instructions.&lt;br /&gt;
* Documentation - In more expressive type systems, types can serve as a form of documentation, since they can illustrate the intent of the programmer. For instance, timestamps may be represented as integers—but if a programmer declares a function as returning a timestamp type rather than merely an integer type, this documents part of the meaning of the function.&lt;br /&gt;
* Abstraction (or modularity) - Types allow programmers to think about programs at a higher level than the bit or byte, not bothering with low-level implementation. For example, programmers can think of a string as a collection of character values instead of as a mere array of bytes. Or, types can allow programmers to express the interface between two subsystems. This helps localize the definitions required for interoperability of the subsystems and prevents inconsistencies when those subsystems communicate.&lt;br /&gt;
&lt;br /&gt;
==== Static Type Languages ====&lt;br /&gt;
A programming language is said to use static typing when type checking is performed during compile-time as opposed to run-time.&lt;br /&gt;
&lt;br /&gt;
C++, C#, Java&lt;br /&gt;
&lt;br /&gt;
==== Dynamic Type Languages ====&lt;br /&gt;
A programming language is said to be dynamically typed, or just 'dynamic', when the majority of its type checking is performed at run-time as opposed to at compile-time.&lt;br /&gt;
&lt;br /&gt;
Ruby, Python&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://i.cmpnet.com/ddj/ddj/images/ddj9708d/9708df6.gif [2]]&lt;br /&gt;
Many software designers view patterns as a form of language-independent design. Pattern-Oriented Software Architectures: A System of Patterns, edited by Frank Buschmann (John Wiley &amp;amp; Sons, 1996), for instance, divides patterns into three main groups -- architectural patterns, design patterns, and idioms. Only the idioms (defined as &amp;quot;low-level patterns specific to a program language&amp;quot;) are language dependent -- the other patterns (and the implicit pattern language) rise above the level of programming language, much as the unified modeling language (UML) provides a common way to express designs.&lt;br /&gt;
&lt;br /&gt;
This idea of language independence is seductive. It is also misleading. While patterns are language independent, language choice limits the patterns that are possible, easily supported, and useful. Language also affects how applications are structured.&lt;br /&gt;
&lt;br /&gt;
To illustrate, I'll examine some patterns often used with Objective-C, but not usually used (or used differently) with C++. Both languages are object-oriented extensions of C. The main difference between them is that C++ has compile-time binding and fairly strong typing while Objective-C uses the Smalltalk object model of dynamic binding and weak typing. I'll start by examining two idioms commonly found in Objective-C programming. While simple, these idioms illustrate some of the key Objective-C programming techniques (although I use NextStep classes and frameworks to illustrate points, what I say also holds true for more generic Objective-C environments). I'll also examine how three standard design patterns -- Visitor, Command, and Facade -- are implemented in Objective-C.&lt;br /&gt;
&lt;br /&gt;
====The Facade Pattern====&lt;br /&gt;
&lt;br /&gt;
You might have noticed a common thread in the patterns just discussed. Both of the idioms involve ways to break out pieces of code and put them in shared libraries or bundles. The design patterns show how to decouple objects from each other for maximal flexibility. I'll now examine a commonly used architectural pattern that describes a way to structure applications to take advantage of this flexibility.  In the good old days of structured programming, saving an application's state was simple. Programs were divided into data and functions, and saving consisted of calling the function that wrote the data to some storage area. In object-oriented applications, things become a little more difficult. To the extent that you practice information hiding, object serialization is the natural approach to take.  Unfortunately, if m is the number of object references and n is the number of objects, serialization is O(mlog(n)). This is far too slow for serialization to be the saving mechanism in many applications.&lt;br /&gt;
&lt;br /&gt;
But an Objective-C program that uses the four previous patterns will almost certainly use lots of facades as well. Notice here[http://www.ddj.com/184410252 [3]] that Facades look a lot like cut points in the object graph. This leads to the natural Objective-C solution to the speed problem for object serialization: Serialize each facade to a separate Serializer (make each facade responsible for serializing the subsystem it abstracts).  &lt;br /&gt;
&lt;br /&gt;
This can get complicated. If an object outside a subsystem bypasses a facade (and messages an object in a subsystem directly), then extra care must be taken during serialization (to avoid serializing objects to more than one location). And, deserializing (opening) becomes trickier as well -- objects that bypass a facade will need to find objects within the subsystem. In practice, this comes down to making the facades used in serialization Singletons and making certain that all connections to objects in the subsystem are mediated by the facade (so that, during deserialization, the connection can be restored).&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
There are various levels of design recognition for generating repeatable solutions to commonly occurring programming problems in software design.  Design patterns in this case have been met with criticism in whether it negates the agile product development process.  The idea of a language independent pattern recognition solution must be evaluated thoroughly when in considering from a static and dynamic point of view.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;/div&gt;</summary>
		<author><name>Los Bravo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_13_StaticDynamic&amp;diff=23320</id>
		<title>CSC/ECE 517 Fall 2009/wiki2 13 StaticDynamic</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_13_StaticDynamic&amp;diff=23320"/>
		<updated>2009-10-09T01:23:40Z</updated>

		<summary type="html">&lt;p&gt;Los Bravo: /* The Facade Pattern */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Design Patterns from a Static/Dynamic Point of View'''&lt;br /&gt;
&lt;br /&gt;
Clearly, Ruby offers more concise realizations of certain design patterns than Java does. Is this typical of dynamic o-o languages? Are there design patterns that any dynamically typed language can realize better than a statically typed language? Are there instances when a &amp;lt;em&amp;gt;different&amp;lt;/em&amp;gt; pattern should be used in a dynamic language than a static language?&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
=== Design Pattern ===&lt;br /&gt;
A design pattern is a general reusable solution to a commonly occurring problem in software design. A design pattern is not a finished design that can be transformed directly into code. It is a description or template for how to solve a problem that can be used in many different situations. Object-oriented design patterns typically show relationships and interactions between classes or objects, without specifying the final application classes or objects that are involved.&lt;br /&gt;
&lt;br /&gt;
[http://www.dofactory.com/Patterns/Patterns.aspx [1]]&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| Creational Patterns&lt;br /&gt;
|-&lt;br /&gt;
| Abstract Factory 	  || Creates an instance of several families of classes&lt;br /&gt;
|-&lt;br /&gt;
| Builder 	  || Separates object construction from its representation&lt;br /&gt;
|-&lt;br /&gt;
| Factory Method 	  || Creates an instance of several derived classes&lt;br /&gt;
|-&lt;br /&gt;
| Prototype 	  || A fully initialized instance to be copied or cloned&lt;br /&gt;
|-&lt;br /&gt;
| Singleton 	  || A class of which only a single instance can exist&lt;br /&gt;
|-&lt;br /&gt;
| Structural Patterns&lt;br /&gt;
|-&lt;br /&gt;
| Adapter 	  || Match interfaces of different classes&lt;br /&gt;
|-&lt;br /&gt;
| Bridge 	  || Separates an object’s interface from its implementation&lt;br /&gt;
|-&lt;br /&gt;
| Composite 	  || A tree structure of simple and composite objects&lt;br /&gt;
|-&lt;br /&gt;
| Decorator 	  || Add responsibilities to objects dynamically&lt;br /&gt;
|-&lt;br /&gt;
| Facade 	  || A single class that represents an entire subsystem&lt;br /&gt;
|-&lt;br /&gt;
| Flyweight 	  || A fine-grained instance used for efficient sharing&lt;br /&gt;
|-&lt;br /&gt;
| Proxy 	  || An object representing another object&lt;br /&gt;
|-&lt;br /&gt;
|  Behavioral Patterns&lt;br /&gt;
|-&lt;br /&gt;
| Chain of Resp. 	  || A way of passing a request between a chain of objects&lt;br /&gt;
|-&lt;br /&gt;
| Command 	  || Encapsulate a command request as an object&lt;br /&gt;
|-&lt;br /&gt;
| Interpreter 	  || A way to include language elements in a program&lt;br /&gt;
|-&lt;br /&gt;
| Iterator 	  || Sequentially access the elements of a collection&lt;br /&gt;
|-&lt;br /&gt;
| Mediator 	  || Defines simplified communication between classes&lt;br /&gt;
|-&lt;br /&gt;
| Memento 	  || Capture and restore an object's internal state&lt;br /&gt;
|-&lt;br /&gt;
| Observer 	  || A way of notifying change to a number of classes&lt;br /&gt;
|-&lt;br /&gt;
| State 	  || Alter an object's behavior when its state changes&lt;br /&gt;
|-&lt;br /&gt;
| Strategy 	  || Encapsulates an algorithm inside a class&lt;br /&gt;
|-&lt;br /&gt;
| Template Method 	  || Defer the exact steps of an algorithm to a subclass&lt;br /&gt;
|-&lt;br /&gt;
| Visitor 	  || Defines a new operation to a class without change&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Static/Dynamic Type Languages ===&lt;br /&gt;
Types usually have associations either with values in memory or with objects such as variables. Because any value simply consists of a sequence of bits in a computer, hardware makes no distinction even between memory addresses, instruction code, characters, integers and floating-point numbers. Assignment to a type informs programs and programmers how those bit collections should be treated.&lt;br /&gt;
&lt;br /&gt;
Major functions provided by type systems include:&lt;br /&gt;
&lt;br /&gt;
* Safety - Use of types may allow a compiler to detect meaningless or probably invalid code. For example, we can identify an expression &amp;quot;Hello, World&amp;quot; as invalid because the rules of arithmetic do not specify how to divide an integer by a string. As discussed below, strong typing offers more safety, but generally does not guarantee complete safety (see type-safety for more information).&lt;br /&gt;
* Optimization - Static type-checking may provide useful compile-time information. For example, if a type requires that a value must align in memory at a multiple of 4 bytes, the compiler may be able to use more efficient machine instructions.&lt;br /&gt;
* Documentation - In more expressive type systems, types can serve as a form of documentation, since they can illustrate the intent of the programmer. For instance, timestamps may be represented as integers—but if a programmer declares a function as returning a timestamp type rather than merely an integer type, this documents part of the meaning of the function.&lt;br /&gt;
* Abstraction (or modularity) - Types allow programmers to think about programs at a higher level than the bit or byte, not bothering with low-level implementation. For example, programmers can think of a string as a collection of character values instead of as a mere array of bytes. Or, types can allow programmers to express the interface between two subsystems. This helps localize the definitions required for interoperability of the subsystems and prevents inconsistencies when those subsystems communicate.&lt;br /&gt;
&lt;br /&gt;
==== Static Type Languages ====&lt;br /&gt;
A programming language is said to use static typing when type checking is performed during compile-time as opposed to run-time.&lt;br /&gt;
&lt;br /&gt;
C++, C#, Java&lt;br /&gt;
&lt;br /&gt;
==== Dynamic Type Languages ====&lt;br /&gt;
A programming language is said to be dynamically typed, or just 'dynamic', when the majority of its type checking is performed at run-time as opposed to at compile-time.&lt;br /&gt;
&lt;br /&gt;
Ruby, Python&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://i.cmpnet.com/ddj/ddj/images/ddj9708d/9708df6.gif [2]]&lt;br /&gt;
Many software designers view patterns as a form of language-independent design. Pattern-Oriented Software Architectures: A System of Patterns, edited by Frank Buschmann (John Wiley &amp;amp; Sons, 1996), for instance, divides patterns into three main groups -- architectural patterns, design patterns, and idioms. Only the idioms (defined as &amp;quot;low-level patterns specific to a program language&amp;quot;) are language dependent -- the other patterns (and the implicit pattern language) rise above the level of programming language, much as the unified modeling language (UML) provides a common way to express designs.&lt;br /&gt;
&lt;br /&gt;
This idea of language independence is seductive. It is also misleading. While patterns are language independent, language choice limits the patterns that are possible, easily supported, and useful. Language also affects how applications are structured.&lt;br /&gt;
&lt;br /&gt;
To illustrate, I'll examine some patterns often used with Objective-C, but not usually used (or used differently) with C++. Both languages are object-oriented extensions of C. The main difference between them is that C++ has compile-time binding and fairly strong typing while Objective-C uses the Smalltalk object model of dynamic binding and weak typing. I'll start by examining two idioms commonly found in Objective-C programming. While simple, these idioms illustrate some of the key Objective-C programming techniques (although I use NextStep classes and frameworks to illustrate points, what I say also holds true for more generic Objective-C environments). I'll also examine how three standard design patterns -- Visitor, Command, and Facade -- are implemented in Objective-C.&lt;br /&gt;
&lt;br /&gt;
====The Facade Pattern====&lt;br /&gt;
&lt;br /&gt;
You might have noticed a common thread in the patterns just discussed. Both of the idioms involve ways to break out pieces of code and put them in shared libraries or bundles. The design patterns show how to decouple objects from each other for maximal flexibility. I'll now examine a commonly used architectural pattern that describes a way to structure applications to take advantage of this flexibility.  In the good old days of structured programming, saving an application's state was simple. Programs were divided into data and functions, and saving consisted of calling the function that wrote the data to some storage area. In object-oriented applications, things become a little more difficult. To the extent that you practice information hiding, object serialization is the natural approach to take.  Unfortunately, if m is the number of object references and n is the number of objects, serialization is O(mlog(n)). This is far too slow for serialization to be the saving mechanism in many applications.&lt;br /&gt;
&lt;br /&gt;
But an Objective-C program that uses the four previous patterns will almost certainly use lots of facades as well. Notice here[http://www.ddj.com/184410252 [3]] that Facades look a lot like cut points in the object graph. This leads to the natural Objective-C solution to the speed problem for object serialization: Serialize each facade to a separate Serializer (make each facade responsible for serializing the subsystem it abstracts).  &lt;br /&gt;
&lt;br /&gt;
This can get complicated. If an object outside a subsystem bypasses a facade (and messages an object in a subsystem directly), then extra care must be taken during serialization (to avoid serializing objects to more than one location). And, deserializing (opening) becomes trickier as well -- objects that bypass a facade will need to find objects within the subsystem. In practice, this comes down to making the facades used in serialization Singletons and making certain that all connections to objects in the subsystem are mediated by the facade (so that, during deserialization, the connection can be restored).&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
== References ==&lt;/div&gt;</summary>
		<author><name>Los Bravo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_13_StaticDynamic&amp;diff=23319</id>
		<title>CSC/ECE 517 Fall 2009/wiki2 13 StaticDynamic</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_13_StaticDynamic&amp;diff=23319"/>
		<updated>2009-10-09T01:22:32Z</updated>

		<summary type="html">&lt;p&gt;Los Bravo: /* Example */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Design Patterns from a Static/Dynamic Point of View'''&lt;br /&gt;
&lt;br /&gt;
Clearly, Ruby offers more concise realizations of certain design patterns than Java does. Is this typical of dynamic o-o languages? Are there design patterns that any dynamically typed language can realize better than a statically typed language? Are there instances when a &amp;lt;em&amp;gt;different&amp;lt;/em&amp;gt; pattern should be used in a dynamic language than a static language?&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
=== Design Pattern ===&lt;br /&gt;
A design pattern is a general reusable solution to a commonly occurring problem in software design. A design pattern is not a finished design that can be transformed directly into code. It is a description or template for how to solve a problem that can be used in many different situations. Object-oriented design patterns typically show relationships and interactions between classes or objects, without specifying the final application classes or objects that are involved.&lt;br /&gt;
&lt;br /&gt;
[http://www.dofactory.com/Patterns/Patterns.aspx [1]]&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| Creational Patterns&lt;br /&gt;
|-&lt;br /&gt;
| Abstract Factory 	  || Creates an instance of several families of classes&lt;br /&gt;
|-&lt;br /&gt;
| Builder 	  || Separates object construction from its representation&lt;br /&gt;
|-&lt;br /&gt;
| Factory Method 	  || Creates an instance of several derived classes&lt;br /&gt;
|-&lt;br /&gt;
| Prototype 	  || A fully initialized instance to be copied or cloned&lt;br /&gt;
|-&lt;br /&gt;
| Singleton 	  || A class of which only a single instance can exist&lt;br /&gt;
|-&lt;br /&gt;
| Structural Patterns&lt;br /&gt;
|-&lt;br /&gt;
| Adapter 	  || Match interfaces of different classes&lt;br /&gt;
|-&lt;br /&gt;
| Bridge 	  || Separates an object’s interface from its implementation&lt;br /&gt;
|-&lt;br /&gt;
| Composite 	  || A tree structure of simple and composite objects&lt;br /&gt;
|-&lt;br /&gt;
| Decorator 	  || Add responsibilities to objects dynamically&lt;br /&gt;
|-&lt;br /&gt;
| Facade 	  || A single class that represents an entire subsystem&lt;br /&gt;
|-&lt;br /&gt;
| Flyweight 	  || A fine-grained instance used for efficient sharing&lt;br /&gt;
|-&lt;br /&gt;
| Proxy 	  || An object representing another object&lt;br /&gt;
|-&lt;br /&gt;
|  Behavioral Patterns&lt;br /&gt;
|-&lt;br /&gt;
| Chain of Resp. 	  || A way of passing a request between a chain of objects&lt;br /&gt;
|-&lt;br /&gt;
| Command 	  || Encapsulate a command request as an object&lt;br /&gt;
|-&lt;br /&gt;
| Interpreter 	  || A way to include language elements in a program&lt;br /&gt;
|-&lt;br /&gt;
| Iterator 	  || Sequentially access the elements of a collection&lt;br /&gt;
|-&lt;br /&gt;
| Mediator 	  || Defines simplified communication between classes&lt;br /&gt;
|-&lt;br /&gt;
| Memento 	  || Capture and restore an object's internal state&lt;br /&gt;
|-&lt;br /&gt;
| Observer 	  || A way of notifying change to a number of classes&lt;br /&gt;
|-&lt;br /&gt;
| State 	  || Alter an object's behavior when its state changes&lt;br /&gt;
|-&lt;br /&gt;
| Strategy 	  || Encapsulates an algorithm inside a class&lt;br /&gt;
|-&lt;br /&gt;
| Template Method 	  || Defer the exact steps of an algorithm to a subclass&lt;br /&gt;
|-&lt;br /&gt;
| Visitor 	  || Defines a new operation to a class without change&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Static/Dynamic Type Languages ===&lt;br /&gt;
Types usually have associations either with values in memory or with objects such as variables. Because any value simply consists of a sequence of bits in a computer, hardware makes no distinction even between memory addresses, instruction code, characters, integers and floating-point numbers. Assignment to a type informs programs and programmers how those bit collections should be treated.&lt;br /&gt;
&lt;br /&gt;
Major functions provided by type systems include:&lt;br /&gt;
&lt;br /&gt;
* Safety - Use of types may allow a compiler to detect meaningless or probably invalid code. For example, we can identify an expression &amp;quot;Hello, World&amp;quot; as invalid because the rules of arithmetic do not specify how to divide an integer by a string. As discussed below, strong typing offers more safety, but generally does not guarantee complete safety (see type-safety for more information).&lt;br /&gt;
* Optimization - Static type-checking may provide useful compile-time information. For example, if a type requires that a value must align in memory at a multiple of 4 bytes, the compiler may be able to use more efficient machine instructions.&lt;br /&gt;
* Documentation - In more expressive type systems, types can serve as a form of documentation, since they can illustrate the intent of the programmer. For instance, timestamps may be represented as integers—but if a programmer declares a function as returning a timestamp type rather than merely an integer type, this documents part of the meaning of the function.&lt;br /&gt;
* Abstraction (or modularity) - Types allow programmers to think about programs at a higher level than the bit or byte, not bothering with low-level implementation. For example, programmers can think of a string as a collection of character values instead of as a mere array of bytes. Or, types can allow programmers to express the interface between two subsystems. This helps localize the definitions required for interoperability of the subsystems and prevents inconsistencies when those subsystems communicate.&lt;br /&gt;
&lt;br /&gt;
==== Static Type Languages ====&lt;br /&gt;
A programming language is said to use static typing when type checking is performed during compile-time as opposed to run-time.&lt;br /&gt;
&lt;br /&gt;
C++, C#, Java&lt;br /&gt;
&lt;br /&gt;
==== Dynamic Type Languages ====&lt;br /&gt;
A programming language is said to be dynamically typed, or just 'dynamic', when the majority of its type checking is performed at run-time as opposed to at compile-time.&lt;br /&gt;
&lt;br /&gt;
Ruby, Python&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://i.cmpnet.com/ddj/ddj/images/ddj9708d/9708df6.gif [2]]&lt;br /&gt;
Many software designers view patterns as a form of language-independent design. Pattern-Oriented Software Architectures: A System of Patterns, edited by Frank Buschmann (John Wiley &amp;amp; Sons, 1996), for instance, divides patterns into three main groups -- architectural patterns, design patterns, and idioms. Only the idioms (defined as &amp;quot;low-level patterns specific to a program language&amp;quot;) are language dependent -- the other patterns (and the implicit pattern language) rise above the level of programming language, much as the unified modeling language (UML) provides a common way to express designs.&lt;br /&gt;
&lt;br /&gt;
This idea of language independence is seductive. It is also misleading. While patterns are language independent, language choice limits the patterns that are possible, easily supported, and useful. Language also affects how applications are structured.&lt;br /&gt;
&lt;br /&gt;
To illustrate, I'll examine some patterns often used with Objective-C, but not usually used (or used differently) with C++. Both languages are object-oriented extensions of C. The main difference between them is that C++ has compile-time binding and fairly strong typing while Objective-C uses the Smalltalk object model of dynamic binding and weak typing. I'll start by examining two idioms commonly found in Objective-C programming. While simple, these idioms illustrate some of the key Objective-C programming techniques (although I use NextStep classes and frameworks to illustrate points, what I say also holds true for more generic Objective-C environments). I'll also examine how three standard design patterns -- Visitor, Command, and Facade -- are implemented in Objective-C.&lt;br /&gt;
&lt;br /&gt;
====The Facade Pattern====&lt;br /&gt;
&lt;br /&gt;
You might have noticed a common thread in the patterns just discussed. Both of the idioms involve ways to break out pieces of code and put them in shared libraries or bundles. The design patterns show how to decouple objects from each other for maximal flexibility. I'll now examine a commonly used architectural pattern that describes a way to structure applications to take advantage of this flexibility.  In the good old days of structured programming, saving an application's state was simple. Programs were divided into data and functions, and saving consisted of calling the function that wrote the data to some storage area. In object-oriented applications, things become a little more difficult. To the extent that you practice information hiding, object serialization is the natural approach to take.  Unfortunately, if m is the number of object references and n is the number of objects, serialization is O(mlog(n)). This is far too slow for serialization to be the saving mechanism in many applications.&lt;br /&gt;
&lt;br /&gt;
But an Objective-C program that uses the four previous patterns will almost certainly use lots of facades as well. Notice here[http://www.ddj.com/184410252 [3]] that Facades look a lot like cut points in the object graph. This leads to the natural Objective-C solution to the speed problem for object serialization: Serialize each facade to a separate Serializer (make each facade responsible for serializing the subsystem it abstracts).  This can get complicated. If an object outside a subsystem bypasses a facade (and messages an object in a subsystem directly), then extra care must be taken during serialization (to avoid serializing objects to more than one location). And, deserializing (opening) becomes trickier as well -- objects that bypass a facade will need to find objects within the subsystem. In practice, this comes down to making the facades used in serialization Singletons and making certain that all connections to objects in the subsystem are mediated by the facade (so that, during deserialization, the connection can be restored).&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
== References ==&lt;/div&gt;</summary>
		<author><name>Los Bravo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_13_StaticDynamic&amp;diff=23304</id>
		<title>CSC/ECE 517 Fall 2009/wiki2 13 StaticDynamic</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_13_StaticDynamic&amp;diff=23304"/>
		<updated>2009-10-09T01:06:38Z</updated>

		<summary type="html">&lt;p&gt;Los Bravo: /* Description */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Design Patterns from a Static/Dynamic Point of View'''&lt;br /&gt;
&lt;br /&gt;
Clearly, Ruby offers more concise realizations of certain design patterns than Java does. Is this typical of dynamic o-o languages? Are there design patterns that any dynamically typed language can realize better than a statically typed language? Are there instances when a &amp;lt;em&amp;gt;different&amp;lt;/em&amp;gt; pattern should be used in a dynamic language than a static language?&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
=== Design Pattern ===&lt;br /&gt;
A design pattern is a general reusable solution to a commonly occurring problem in software design. A design pattern is not a finished design that can be transformed directly into code. It is a description or template for how to solve a problem that can be used in many different situations. Object-oriented design patterns typically show relationships and interactions between classes or objects, without specifying the final application classes or objects that are involved.&lt;br /&gt;
&lt;br /&gt;
[http://www.dofactory.com/Patterns/Patterns.aspx [1]]&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| Creational Patterns&lt;br /&gt;
|-&lt;br /&gt;
| Abstract Factory 	  || Creates an instance of several families of classes&lt;br /&gt;
|-&lt;br /&gt;
| Builder 	  || Separates object construction from its representation&lt;br /&gt;
|-&lt;br /&gt;
| Factory Method 	  || Creates an instance of several derived classes&lt;br /&gt;
|-&lt;br /&gt;
| Prototype 	  || A fully initialized instance to be copied or cloned&lt;br /&gt;
|-&lt;br /&gt;
| Singleton 	  || A class of which only a single instance can exist&lt;br /&gt;
|-&lt;br /&gt;
| Structural Patterns&lt;br /&gt;
|-&lt;br /&gt;
| Adapter 	  || Match interfaces of different classes&lt;br /&gt;
|-&lt;br /&gt;
| Bridge 	  || Separates an object’s interface from its implementation&lt;br /&gt;
|-&lt;br /&gt;
| Composite 	  || A tree structure of simple and composite objects&lt;br /&gt;
|-&lt;br /&gt;
| Decorator 	  || Add responsibilities to objects dynamically&lt;br /&gt;
|-&lt;br /&gt;
| Facade 	  || A single class that represents an entire subsystem&lt;br /&gt;
|-&lt;br /&gt;
| Flyweight 	  || A fine-grained instance used for efficient sharing&lt;br /&gt;
|-&lt;br /&gt;
| Proxy 	  || An object representing another object&lt;br /&gt;
|-&lt;br /&gt;
|  Behavioral Patterns&lt;br /&gt;
|-&lt;br /&gt;
| Chain of Resp. 	  || A way of passing a request between a chain of objects&lt;br /&gt;
|-&lt;br /&gt;
| Command 	  || Encapsulate a command request as an object&lt;br /&gt;
|-&lt;br /&gt;
| Interpreter 	  || A way to include language elements in a program&lt;br /&gt;
|-&lt;br /&gt;
| Iterator 	  || Sequentially access the elements of a collection&lt;br /&gt;
|-&lt;br /&gt;
| Mediator 	  || Defines simplified communication between classes&lt;br /&gt;
|-&lt;br /&gt;
| Memento 	  || Capture and restore an object's internal state&lt;br /&gt;
|-&lt;br /&gt;
| Observer 	  || A way of notifying change to a number of classes&lt;br /&gt;
|-&lt;br /&gt;
| State 	  || Alter an object's behavior when its state changes&lt;br /&gt;
|-&lt;br /&gt;
| Strategy 	  || Encapsulates an algorithm inside a class&lt;br /&gt;
|-&lt;br /&gt;
| Template Method 	  || Defer the exact steps of an algorithm to a subclass&lt;br /&gt;
|-&lt;br /&gt;
| Visitor 	  || Defines a new operation to a class without change&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Static/Dynamic Type Languages ===&lt;br /&gt;
Types usually have associations either with values in memory or with objects such as variables. Because any value simply consists of a sequence of bits in a computer, hardware makes no distinction even between memory addresses, instruction code, characters, integers and floating-point numbers. Assignment to a type informs programs and programmers how those bit collections should be treated.&lt;br /&gt;
&lt;br /&gt;
Major functions provided by type systems include:&lt;br /&gt;
&lt;br /&gt;
* Safety - Use of types may allow a compiler to detect meaningless or probably invalid code. For example, we can identify an expression &amp;quot;Hello, World&amp;quot; as invalid because the rules of arithmetic do not specify how to divide an integer by a string. As discussed below, strong typing offers more safety, but generally does not guarantee complete safety (see type-safety for more information).&lt;br /&gt;
* Optimization - Static type-checking may provide useful compile-time information. For example, if a type requires that a value must align in memory at a multiple of 4 bytes, the compiler may be able to use more efficient machine instructions.&lt;br /&gt;
* Documentation - In more expressive type systems, types can serve as a form of documentation, since they can illustrate the intent of the programmer. For instance, timestamps may be represented as integers—but if a programmer declares a function as returning a timestamp type rather than merely an integer type, this documents part of the meaning of the function.&lt;br /&gt;
* Abstraction (or modularity) - Types allow programmers to think about programs at a higher level than the bit or byte, not bothering with low-level implementation. For example, programmers can think of a string as a collection of character values instead of as a mere array of bytes. Or, types can allow programmers to express the interface between two subsystems. This helps localize the definitions required for interoperability of the subsystems and prevents inconsistencies when those subsystems communicate.&lt;br /&gt;
&lt;br /&gt;
==== Static Type Languages ====&lt;br /&gt;
A programming language is said to use static typing when type checking is performed during compile-time as opposed to run-time.&lt;br /&gt;
&lt;br /&gt;
C++, C#, Java&lt;br /&gt;
&lt;br /&gt;
==== Dynamic Type Languages ====&lt;br /&gt;
A programming language is said to be dynamically typed, or just 'dynamic', when the majority of its type checking is performed at run-time as opposed to at compile-time.&lt;br /&gt;
&lt;br /&gt;
Ruby, Python&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://i.cmpnet.com/ddj/ddj/images/ddj9708d/9708df6.gif [2]]&lt;br /&gt;
Many software designers view patterns as a form of language-independent design. Pattern-Oriented Software Architectures: A System of Patterns, edited by Frank Buschmann (John Wiley &amp;amp; Sons, 1996), for instance, divides patterns into three main groups -- architectural patterns, design patterns, and idioms. Only the idioms (defined as &amp;quot;low-level patterns specific to a program language&amp;quot;) are language dependent -- the other patterns (and the implicit pattern language) rise above the level of programming language, much as the unified modeling language (UML) provides a common way to express designs.&lt;br /&gt;
&lt;br /&gt;
This idea of language independence is seductive. It is also misleading. While patterns are language independent, language choice limits the patterns that are possible, easily supported, and useful. Language also affects how applications are structured.&lt;br /&gt;
&lt;br /&gt;
To illustrate, I'll examine some patterns often used with Objective-C, but not usually used (or used differently) with C++. Both languages are object-oriented extensions of C. The main difference between them is that C++ has compile-time binding and fairly strong typing while Objective-C uses the Smalltalk object model of dynamic binding and weak typing. I'll start by examining two idioms commonly found in Objective-C programming. While simple, these idioms illustrate some of the key Objective-C programming techniques (although I use NextStep classes and frameworks to illustrate points, what I say also holds true for more generic Objective-C environments). I'll also examine how three standard design patterns -- Visitor, Command, and Facade -- are implemented in Objective-C.&lt;br /&gt;
&lt;br /&gt;
====The Facade Pattern====&lt;br /&gt;
&lt;br /&gt;
You might have noticed a common thread in the patterns just discussed. Both of the idioms involve ways to break out pieces of code and put them in shared libraries or bundles. The design patterns show how to decouple objects from each other for maximal flexibility. I'll now examine a commonly used architectural pattern that describes a way to structure applications to take advantage of this flexibility.  In the good old days of structured programming, saving an application's state was simple. Programs were divided into data and functions, and saving consisted of calling the function that wrote the data to some storage area. In object-oriented applications, things become a little more difficult. To the extent that you practice information hiding, object serialization is the natural approach to take.  Unfortunately, if m is the number of object references and n is the number of objects, serialization is O(mlog(n)). This is far too slow for serialization to be the saving mechanism in many applications.&lt;br /&gt;
&lt;br /&gt;
But an Objective-C program that uses the four previous patterns will almost certainly use lots of facades as well. Notice here that Facades look a lot like cut points in the object graph. This leads to the natural Objective-C solution to the speed problem for object serialization: Serialize each facade to a separate Serializer (make each facade responsible for serializing the subsystem it abstracts).  This can get complicated. If an object outside a subsystem bypasses a facade (and messages an object in a subsystem directly), then extra care must be taken during serialization (to avoid serializing objects to more than one location). And, deserializing (opening) becomes trickier as well -- objects that bypass a facade will need to find objects within the subsystem. In practice, this comes down to making the facades used in serialization Singletons and making certain that all connections to objects in the subsystem are mediated by the facade (so that, during deserialization, the connection can be restored).&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
== References ==&lt;/div&gt;</summary>
		<author><name>Los Bravo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_13_StaticDynamic&amp;diff=23302</id>
		<title>CSC/ECE 517 Fall 2009/wiki2 13 StaticDynamic</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_13_StaticDynamic&amp;diff=23302"/>
		<updated>2009-10-09T01:05:23Z</updated>

		<summary type="html">&lt;p&gt;Los Bravo: /* Example */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Design Patterns from a Static/Dynamic Point of View'''&lt;br /&gt;
&lt;br /&gt;
Clearly, Ruby offers more concise realizations of certain design patterns than Java does. Is this typical of dynamic o-o languages? Are there design patterns that any dynamically typed language can realize better than a statically typed language? Are there instances when a &amp;lt;em&amp;gt;different&amp;lt;/em&amp;gt; pattern should be used in a dynamic language than a static language?&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
=== Design Pattern ===&lt;br /&gt;
A design pattern is a general reusable solution to a commonly occurring problem in software design. A design pattern is not a finished design that can be transformed directly into code. It is a description or template for how to solve a problem that can be used in many different situations. Object-oriented design patterns typically show relationships and interactions between classes or objects, without specifying the final application classes or objects that are involved.&lt;br /&gt;
&lt;br /&gt;
[http://www.dofactory.com/Patterns/Patterns.aspx [1]]&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| Creational Patterns&lt;br /&gt;
|-&lt;br /&gt;
| Abstract Factory 	  || Creates an instance of several families of classes&lt;br /&gt;
|-&lt;br /&gt;
| Builder 	  || Separates object construction from its representation&lt;br /&gt;
|-&lt;br /&gt;
| Factory Method 	  || Creates an instance of several derived classes&lt;br /&gt;
|-&lt;br /&gt;
| Prototype 	  || A fully initialized instance to be copied or cloned&lt;br /&gt;
|-&lt;br /&gt;
| Singleton 	  || A class of which only a single instance can exist&lt;br /&gt;
|-&lt;br /&gt;
| Structural Patterns&lt;br /&gt;
|-&lt;br /&gt;
| Adapter 	  || Match interfaces of different classes&lt;br /&gt;
|-&lt;br /&gt;
| Bridge 	  || Separates an object’s interface from its implementation&lt;br /&gt;
|-&lt;br /&gt;
| Composite 	  || A tree structure of simple and composite objects&lt;br /&gt;
|-&lt;br /&gt;
| Decorator 	  || Add responsibilities to objects dynamically&lt;br /&gt;
|-&lt;br /&gt;
| Facade 	  || A single class that represents an entire subsystem&lt;br /&gt;
|-&lt;br /&gt;
| Flyweight 	  || A fine-grained instance used for efficient sharing&lt;br /&gt;
|-&lt;br /&gt;
| Proxy 	  || An object representing another object&lt;br /&gt;
|-&lt;br /&gt;
|  Behavioral Patterns&lt;br /&gt;
|-&lt;br /&gt;
| Chain of Resp. 	  || A way of passing a request between a chain of objects&lt;br /&gt;
|-&lt;br /&gt;
| Command 	  || Encapsulate a command request as an object&lt;br /&gt;
|-&lt;br /&gt;
| Interpreter 	  || A way to include language elements in a program&lt;br /&gt;
|-&lt;br /&gt;
| Iterator 	  || Sequentially access the elements of a collection&lt;br /&gt;
|-&lt;br /&gt;
| Mediator 	  || Defines simplified communication between classes&lt;br /&gt;
|-&lt;br /&gt;
| Memento 	  || Capture and restore an object's internal state&lt;br /&gt;
|-&lt;br /&gt;
| Observer 	  || A way of notifying change to a number of classes&lt;br /&gt;
|-&lt;br /&gt;
| State 	  || Alter an object's behavior when its state changes&lt;br /&gt;
|-&lt;br /&gt;
| Strategy 	  || Encapsulates an algorithm inside a class&lt;br /&gt;
|-&lt;br /&gt;
| Template Method 	  || Defer the exact steps of an algorithm to a subclass&lt;br /&gt;
|-&lt;br /&gt;
| Visitor 	  || Defines a new operation to a class without change&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Static/Dynamic Type Languages ===&lt;br /&gt;
Types usually have associations either with values in memory or with objects such as variables. Because any value simply consists of a sequence of bits in a computer, hardware makes no distinction even between memory addresses, instruction code, characters, integers and floating-point numbers. Assignment to a type informs programs and programmers how those bit collections should be treated.&lt;br /&gt;
&lt;br /&gt;
Major functions provided by type systems include:&lt;br /&gt;
&lt;br /&gt;
* Safety - Use of types may allow a compiler to detect meaningless or probably invalid code. For example, we can identify an expression &amp;quot;Hello, World&amp;quot; as invalid because the rules of arithmetic do not specify how to divide an integer by a string. As discussed below, strong typing offers more safety, but generally does not guarantee complete safety (see type-safety for more information).&lt;br /&gt;
* Optimization - Static type-checking may provide useful compile-time information. For example, if a type requires that a value must align in memory at a multiple of 4 bytes, the compiler may be able to use more efficient machine instructions.&lt;br /&gt;
* Documentation - In more expressive type systems, types can serve as a form of documentation, since they can illustrate the intent of the programmer. For instance, timestamps may be represented as integers—but if a programmer declares a function as returning a timestamp type rather than merely an integer type, this documents part of the meaning of the function.&lt;br /&gt;
* Abstraction (or modularity) - Types allow programmers to think about programs at a higher level than the bit or byte, not bothering with low-level implementation. For example, programmers can think of a string as a collection of character values instead of as a mere array of bytes. Or, types can allow programmers to express the interface between two subsystems. This helps localize the definitions required for interoperability of the subsystems and prevents inconsistencies when those subsystems communicate.&lt;br /&gt;
&lt;br /&gt;
==== Static Type Languages ====&lt;br /&gt;
A programming language is said to use static typing when type checking is performed during compile-time as opposed to run-time.&lt;br /&gt;
&lt;br /&gt;
C++, C#, Java&lt;br /&gt;
&lt;br /&gt;
==== Dynamic Type Languages ====&lt;br /&gt;
A programming language is said to be dynamically typed, or just 'dynamic', when the majority of its type checking is performed at run-time as opposed to at compile-time.&lt;br /&gt;
&lt;br /&gt;
Ruby, Python&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
&lt;br /&gt;
=Description=&lt;br /&gt;
[http://i.cmpnet.com/ddj/ddj/images/ddj9708d/9708df6.gif [2]]&lt;br /&gt;
Many software designers view patterns as a form of language-independent design. Pattern-Oriented Software Architectures: A System of Patterns, edited by Frank Buschmann (John Wiley &amp;amp; Sons, 1996), for instance, divides patterns into three main groups -- architectural patterns, design patterns, and idioms. Only the idioms (defined as &amp;quot;low-level patterns specific to a program language&amp;quot;) are language dependent -- the other patterns (and the implicit pattern language) rise above the level of programming language, much as the unified modeling language (UML) provides a common way to express designs.&lt;br /&gt;
&lt;br /&gt;
This idea of language independence is seductive. It is also misleading. While patterns are language independent, language choice limits the patterns that are possible, easily supported, and useful. Language also affects how applications are structured.&lt;br /&gt;
&lt;br /&gt;
To illustrate, I'll examine some patterns often used with Objective-C, but not usually used (or used differently) with C++. Both languages are object-oriented extensions of C. The main difference between them is that C++ has compile-time binding and fairly strong typing while Objective-C uses the Smalltalk object model of dynamic binding and weak typing. I'll start by examining two idioms commonly found in Objective-C programming. While simple, these idioms illustrate some of the key Objective-C programming techniques (although I use NextStep classes and frameworks to illustrate points, what I say also holds true for more generic Objective-C environments). I'll also examine how three standard design patterns -- Visitor, Command, and Facade -- are implemented in Objective-C.&lt;br /&gt;
&lt;br /&gt;
The Facade Pattern&lt;br /&gt;
&lt;br /&gt;
You might have noticed a common thread in the patterns just discussed. Both of the idioms involve ways to break out pieces of code and put them in shared libraries or bundles. The design patterns show how to decouple objects from each other for maximal flexibility. I'll now examine a commonly used architectural pattern that describes a way to structure applications to take advantage of this flexibility.  In the good old days of structured programming, saving an application's state was simple. Programs were divided into data and functions, and saving consisted of calling the function that wrote the data to some storage area. In object-oriented applications, things become a little more difficult. To the extent that you practice information hiding, object serialization is the natural approach to take.  Unfortunately, if m is the number of object references and n is the number of objects, serialization is O(mlog(n)). This is far too slow for serialization to be the saving mechanism in many applications.&lt;br /&gt;
&lt;br /&gt;
But an Objective-C program that uses the four previous patterns will almost certainly use lots of facades as well. Notice here that Facades look a lot like cut points in the object graph. This leads to the natural Objective-C solution to the speed problem for object serialization: Serialize each facade to a separate Serializer (make each facade responsible for serializing the subsystem it abstracts).  This can get complicated. If an object outside a subsystem bypasses a facade (and messages an object in a subsystem directly), then extra care must be taken during serialization (to avoid serializing objects to more than one location). And, deserializing (opening) becomes trickier as well -- objects that bypass a facade will need to find objects within the subsystem. In practice, this comes down to making the facades used in serialization Singletons and making certain that all connections to objects in the subsystem are mediated by the facade (so that, during deserialization, the connection can be restored).&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
== References ==&lt;/div&gt;</summary>
		<author><name>Los Bravo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_13_StaticDynamic&amp;diff=23301</id>
		<title>CSC/ECE 517 Fall 2009/wiki2 13 StaticDynamic</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki2_13_StaticDynamic&amp;diff=23301"/>
		<updated>2009-10-09T01:01:55Z</updated>

		<summary type="html">&lt;p&gt;Los Bravo: /* Example */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Design Patterns from a Static/Dynamic Point of View'''&lt;br /&gt;
&lt;br /&gt;
Clearly, Ruby offers more concise realizations of certain design patterns than Java does. Is this typical of dynamic o-o languages? Are there design patterns that any dynamically typed language can realize better than a statically typed language? Are there instances when a &amp;lt;em&amp;gt;different&amp;lt;/em&amp;gt; pattern should be used in a dynamic language than a static language?&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
=== Design Pattern ===&lt;br /&gt;
A design pattern is a general reusable solution to a commonly occurring problem in software design. A design pattern is not a finished design that can be transformed directly into code. It is a description or template for how to solve a problem that can be used in many different situations. Object-oriented design patterns typically show relationships and interactions between classes or objects, without specifying the final application classes or objects that are involved.&lt;br /&gt;
&lt;br /&gt;
[http://www.dofactory.com/Patterns/Patterns.aspx [1]]&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| Creational Patterns&lt;br /&gt;
|-&lt;br /&gt;
| Abstract Factory 	  || Creates an instance of several families of classes&lt;br /&gt;
|-&lt;br /&gt;
| Builder 	  || Separates object construction from its representation&lt;br /&gt;
|-&lt;br /&gt;
| Factory Method 	  || Creates an instance of several derived classes&lt;br /&gt;
|-&lt;br /&gt;
| Prototype 	  || A fully initialized instance to be copied or cloned&lt;br /&gt;
|-&lt;br /&gt;
| Singleton 	  || A class of which only a single instance can exist&lt;br /&gt;
|-&lt;br /&gt;
| Structural Patterns&lt;br /&gt;
|-&lt;br /&gt;
| Adapter 	  || Match interfaces of different classes&lt;br /&gt;
|-&lt;br /&gt;
| Bridge 	  || Separates an object’s interface from its implementation&lt;br /&gt;
|-&lt;br /&gt;
| Composite 	  || A tree structure of simple and composite objects&lt;br /&gt;
|-&lt;br /&gt;
| Decorator 	  || Add responsibilities to objects dynamically&lt;br /&gt;
|-&lt;br /&gt;
| Facade 	  || A single class that represents an entire subsystem&lt;br /&gt;
|-&lt;br /&gt;
| Flyweight 	  || A fine-grained instance used for efficient sharing&lt;br /&gt;
|-&lt;br /&gt;
| Proxy 	  || An object representing another object&lt;br /&gt;
|-&lt;br /&gt;
|  Behavioral Patterns&lt;br /&gt;
|-&lt;br /&gt;
| Chain of Resp. 	  || A way of passing a request between a chain of objects&lt;br /&gt;
|-&lt;br /&gt;
| Command 	  || Encapsulate a command request as an object&lt;br /&gt;
|-&lt;br /&gt;
| Interpreter 	  || A way to include language elements in a program&lt;br /&gt;
|-&lt;br /&gt;
| Iterator 	  || Sequentially access the elements of a collection&lt;br /&gt;
|-&lt;br /&gt;
| Mediator 	  || Defines simplified communication between classes&lt;br /&gt;
|-&lt;br /&gt;
| Memento 	  || Capture and restore an object's internal state&lt;br /&gt;
|-&lt;br /&gt;
| Observer 	  || A way of notifying change to a number of classes&lt;br /&gt;
|-&lt;br /&gt;
| State 	  || Alter an object's behavior when its state changes&lt;br /&gt;
|-&lt;br /&gt;
| Strategy 	  || Encapsulates an algorithm inside a class&lt;br /&gt;
|-&lt;br /&gt;
| Template Method 	  || Defer the exact steps of an algorithm to a subclass&lt;br /&gt;
|-&lt;br /&gt;
| Visitor 	  || Defines a new operation to a class without change&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Static/Dynamic Type Languages ===&lt;br /&gt;
Types usually have associations either with values in memory or with objects such as variables. Because any value simply consists of a sequence of bits in a computer, hardware makes no distinction even between memory addresses, instruction code, characters, integers and floating-point numbers. Assignment to a type informs programs and programmers how those bit collections should be treated.&lt;br /&gt;
&lt;br /&gt;
Major functions provided by type systems include:&lt;br /&gt;
&lt;br /&gt;
* Safety - Use of types may allow a compiler to detect meaningless or probably invalid code. For example, we can identify an expression &amp;quot;Hello, World&amp;quot; as invalid because the rules of arithmetic do not specify how to divide an integer by a string. As discussed below, strong typing offers more safety, but generally does not guarantee complete safety (see type-safety for more information).&lt;br /&gt;
* Optimization - Static type-checking may provide useful compile-time information. For example, if a type requires that a value must align in memory at a multiple of 4 bytes, the compiler may be able to use more efficient machine instructions.&lt;br /&gt;
* Documentation - In more expressive type systems, types can serve as a form of documentation, since they can illustrate the intent of the programmer. For instance, timestamps may be represented as integers—but if a programmer declares a function as returning a timestamp type rather than merely an integer type, this documents part of the meaning of the function.&lt;br /&gt;
* Abstraction (or modularity) - Types allow programmers to think about programs at a higher level than the bit or byte, not bothering with low-level implementation. For example, programmers can think of a string as a collection of character values instead of as a mere array of bytes. Or, types can allow programmers to express the interface between two subsystems. This helps localize the definitions required for interoperability of the subsystems and prevents inconsistencies when those subsystems communicate.&lt;br /&gt;
&lt;br /&gt;
==== Static Type Languages ====&lt;br /&gt;
A programming language is said to use static typing when type checking is performed during compile-time as opposed to run-time.&lt;br /&gt;
&lt;br /&gt;
C++, C#, Java&lt;br /&gt;
&lt;br /&gt;
==== Dynamic Type Languages ====&lt;br /&gt;
A programming language is said to be dynamically typed, or just 'dynamic', when the majority of its type checking is performed at run-time as opposed to at compile-time.&lt;br /&gt;
&lt;br /&gt;
Ruby, Python&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
&lt;br /&gt;
Many software designers view patterns as a form of language-independent design. Pattern-Oriented Software Architectures: A System of Patterns, edited by Frank Buschmann (John Wiley &amp;amp; Sons, 1996), for instance, divides patterns into three main groups -- architectural patterns, design patterns, and idioms. Only the idioms (defined as &amp;quot;low-level patterns specific to a program language&amp;quot;) are language dependent -- the other patterns (and the implicit pattern language) rise above the level of programming language, much as the unified modeling language (UML) provides a common way to express designs.&lt;br /&gt;
&lt;br /&gt;
This idea of language independence is seductive. It is also misleading. While patterns are language independent, language choice limits the patterns that are possible, easily supported, and useful. Language also affects how applications are structured.&lt;br /&gt;
&lt;br /&gt;
To illustrate, I'll examine some patterns often used with Objective-C, but not usually used (or used differently) with C++. Both languages are object-oriented extensions of C. The main difference between them is that C++ has compile-time binding and fairly strong typing while Objective-C uses the Smalltalk object model of dynamic binding and weak typing. I'll start by examining two idioms commonly found in Objective-C programming. While simple, these idioms illustrate some of the key Objective-C programming techniques (although I use NextStep classes and frameworks to illustrate points, what I say also holds true for more generic Objective-C environments). I'll also examine how three standard design patterns -- Visitor, Command, and Facade -- are implemented in Objective-C.&lt;br /&gt;
&lt;br /&gt;
The Facade Pattern&lt;br /&gt;
&lt;br /&gt;
You might have noticed a common thread in the patterns just discussed. Both of the idioms involve ways to break out pieces of code and put them in shared libraries or bundles. The design patterns show how to decouple objects from each other for maximal flexibility. I'll now examine a commonly used architectural pattern that describes a way to structure applications to take advantage of this flexibility.  In the good old days of structured programming, saving an application's state was simple. Programs were divided into data and functions, and saving consisted of calling the function that wrote the data to some storage area. In object-oriented applications, things become a little more difficult. To the extent that you practice information hiding, object serialization is the natural approach to take.  Unfortunately, if m is the number of object references and n is the number of objects, serialization is O(mlog(n)). This is far too slow for serialization to be the saving mechanism in many applications.&lt;br /&gt;
&lt;br /&gt;
But an Objective-C program that uses the four previous patterns will almost certainly use lots of facades as well. Notice here that Facades look a lot like cut points in the object graph. This leads to the natural Objective-C solution to the speed problem for object serialization: Serialize each facade to a separate Serializer (make each facade responsible for serializing the subsystem it abstracts).  This can get complicated. If an object outside a subsystem bypasses a facade (and messages an object in a subsystem directly), then extra care must be taken during serialization (to avoid serializing objects to more than one location). And, deserializing (opening) becomes trickier as well -- objects that bypass a facade will need to find objects within the subsystem. In practice, this comes down to making the facades used in serialization Singletons and making certain that all connections to objects in the subsystem are mediated by the facade (so that, during deserialization, the connection can be restored).&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
== References ==&lt;/div&gt;</summary>
		<author><name>Los Bravo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_team1&amp;diff=22181</id>
		<title>CSC/ECE 517 Fall 2009/wiki1b team1</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_team1&amp;diff=22181"/>
		<updated>2009-09-28T20:12:11Z</updated>

		<summary type="html">&lt;p&gt;Los Bravo: /* TDD: Test Driven Development */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;CSC/ECE 517 Fall 2009&lt;br /&gt;
&lt;br /&gt;
'''&lt;br /&gt;
== Resources for Rails (other than IDEs) ==&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
IDEs are a valuable resource for Rails development, however there are many other resources and tools&lt;br /&gt;
that can either replace or supplement IDEs.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Resources for Rails other than IDEs&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails API''''' - http://api.rubyonrails.org/&lt;br /&gt;
&lt;br /&gt;
	This site documents Rails files, classes and methods that can be used to build a Rails application.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Forum''''' - http://railsforum.com/&lt;br /&gt;
&lt;br /&gt;
	A discussion forum covering all aspects of Rails for beginners and experts including planning, &lt;br /&gt;
	programming, extensions and production.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Introducing Ruby on Rails''''' &lt;br /&gt;
&lt;br /&gt;
Part 1 http://www.softwaredeveloper.com/features/intro-to-ruby-on-rails-042507/&lt;br /&gt;
&lt;br /&gt;
Part 2 http://www.softwaredeveloper.com/features/intro-to-ruby-on-rails-part-two-043007/&lt;br /&gt;
&lt;br /&gt;
An excellent introduction to Rails for novices&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Installers'''&lt;br /&gt;
''&lt;br /&gt;
	&lt;br /&gt;
Windows: InstantRails - http://instantrails.rubyforge.org/wiki/wiki.pl&lt;br /&gt;
&lt;br /&gt;
		An all in one, single click installer for Windows that includes a Rails server.&lt;br /&gt;
&lt;br /&gt;
	Mac: Locomotive - http://locomotive.raaum.org/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Projects''''' - http://www.workingwithrails.com/&lt;br /&gt;
&lt;br /&gt;
	A Database of Rails projects, programmers and websites&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails plugins''''' - http://agilewebdevelopment.com/&lt;br /&gt;
&lt;br /&gt;
	A collection of Rails open source plugins, searchable by category or keyword.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Sample Rails''''' - http://snippets.dzone.com/tag/rails&lt;br /&gt;
&lt;br /&gt;
	A collection of Rails code snippets.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Agile Rails book''''' - http://www.amazon.com/gp/product/097669400X/002-0481267-8083260?v=glance&amp;amp;n=283155&lt;br /&gt;
&lt;br /&gt;
	An excellent resource for learning how to apply Agile programming concepts to Rails.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails cheatsheet''''' - http://www.blainekendall.com/uploads/RubyOnRails-Cheatsheet-BlaineKendall.pdf&lt;br /&gt;
&lt;br /&gt;
	One user's list of best practices, gotchas and quirks of developing with Rails.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails best practices''''' - http://www.therailsway.com/&lt;br /&gt;
&lt;br /&gt;
	An official best practices list for programming in Rails.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Advanced Rails''''' - http://webonrails.com/&lt;br /&gt;
&lt;br /&gt;
	A resource for the advanced Rails programmer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Blog''''' - http://weblog.rubyonrails.org/&lt;br /&gt;
&lt;br /&gt;
	An online community of updates about current happenings with the Rails platform.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Guides''''' - http://guides.rubyonrails.org/&lt;br /&gt;
&lt;br /&gt;
	An all in one resource for learning Rails including Howtos, security and contributing to the Rails community.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Authoring Rails plugins''''' - http://nubyonrails.com/articles/2006/05/04/the-complete-guide-to-rails-plugins-part-i&lt;br /&gt;
&lt;br /&gt;
	A complete guide to authoring your own Rails plugins.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
== '''Tools for Rails (other than IDEs)''' ==&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
'''Test Unit'''&lt;br /&gt;
The Rails stack uses Test::Unit, known as the default Ruby unit testing framework shipping with Ruby.  There are various plugins and extension that could be used with Rails built-in Test::Unit to extend its functionality for support of TDD and BDD testing practices.&lt;br /&gt;
&lt;br /&gt;
[http://wiki.rubyonrails.org/addons/testing]&lt;br /&gt;
The link provides additional information in the form of supporting resources, whitepapers, examples, and plug-in documentation&lt;br /&gt;
&lt;br /&gt;
'''Example'''&lt;br /&gt;
[http://wiki.rubyonrails.org/testing/test-unitrequire] &lt;br /&gt;
&lt;br /&gt;
 Image:class CalculatorTest &amp;lt; Test::Unit::TestCase &lt;br /&gt;
  def test_add_two_numbers_for_the_sum &lt;br /&gt;
    calculator = Calculator.new &lt;br /&gt;
    assert_equal 4, calculator.sum(2, 2)&lt;br /&gt;
  end &lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
== TDD: Test Driven Development ==&lt;br /&gt;
 	&lt;br /&gt;
Test Driven Development is a combination of refactoring and test first development, a form of development where the test is &lt;br /&gt;
&lt;br /&gt;
written prior to completed production code.  The goal of TDD is the specification of requirements and not the validation of &lt;br /&gt;
&lt;br /&gt;
requirements.  There are a few testing frameworks that are used to implement the TDD programming technique.  &lt;br /&gt;
&lt;br /&gt;
[http://ruby.about.com/b/2009/01/28/test-driven-development-with-rails.htm]&lt;br /&gt;
This link provides a comprehensive overview of test driven development practices and available resources for implementation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''RSpec'''&lt;br /&gt;
RSpec is a testing framework for Behavior Driven Development, complete with its own expectations, matchers and mocking and &lt;br /&gt;
&lt;br /&gt;
stubbing facilities. It goes along hand in hand with Cucumber, though it plays nicely with many other testing frameworks as well.&lt;br /&gt;
&lt;br /&gt;
''Example:''&lt;br /&gt;
&lt;br /&gt;
The following code will fail during execution.  ''Expresses some basic desired behavior''[http://rspec.info/]&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; bowling_spec.rb&lt;br /&gt;
 require ‘bowling’&lt;br /&gt;
  describe Bowling do&lt;br /&gt;
   it &amp;quot;should score 0 for gutter game&amp;quot; do&lt;br /&gt;
   bowling = Bowling.new&lt;br /&gt;
   20.times { bowling.hit(0) }&lt;br /&gt;
   bowling.score.should == 0&lt;br /&gt;
  end&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following code pass execution.  ''Just enough code to make it pass.''[http://rspec.info/] &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; bowling.rb&lt;br /&gt;
 class Bowling&lt;br /&gt;
   def hit(pins)&lt;br /&gt;
   end&lt;br /&gt;
   def score&lt;br /&gt;
     0&lt;br /&gt;
   end&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://www.ibm.com/developerworks/web/library/wa-rspec/]&lt;br /&gt;
The link provides a brief overview of RSpec with a comprehensive series of examples and a conceptual view of Rpecs step by step &lt;br /&gt;
&lt;br /&gt;
implementation process&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Cucumber'''&lt;br /&gt;
Cucumber is used with TDD and BDD within other testing frameworks such as RSpec by letting software development teams describe how &lt;br /&gt;
&lt;br /&gt;
software should behave in plain text. The text is written in a business-readable domain-specific language and serves as &lt;br /&gt;
&lt;br /&gt;
documentation, automated tests and development-aid - all rolled into one format.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''Cucumber Example:''&lt;br /&gt;
 Feature: Log in and out&lt;br /&gt;
  As an administrator&lt;br /&gt;
  I want to restrict access to certain portions of my site&lt;br /&gt;
  In order to prevent users from changing the content&lt;br /&gt;
  Scenario: Logging in&lt;br /&gt;
    Given I am not logged in as an administrator&lt;br /&gt;
    When I go to the administrative page&lt;br /&gt;
    And I fill in the fields&lt;br /&gt;
      | Username | admin  |&lt;br /&gt;
      | Password | secret |&lt;br /&gt;
    And I press &amp;quot;Log in&amp;quot;&lt;br /&gt;
    Then I should be on the administrative page&lt;br /&gt;
    And I should see &amp;quot;Log out&amp;quot;&lt;br /&gt;
  Scenario: Logging out&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
[http://cukes.info/]&lt;br /&gt;
The link provides a detail decription, definition, and examples of Cucumber implementation best practices and supported &lt;br /&gt;
&lt;br /&gt;
frameworks.&lt;br /&gt;
&lt;br /&gt;
''Another Cucumber Example:''&lt;br /&gt;
Scenario: See all vendors&lt;br /&gt;
    Given I am logged in as a user in the administrator role&lt;br /&gt;
    And There are 3 vendors&lt;br /&gt;
    When I go to the manage vendors page&lt;br /&gt;
    Then I should see the first 3 vendor names&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Shoulda''' &lt;br /&gt;
An extension to Test::Unit with additional helpers, macros, and assertions.&lt;br /&gt;
 &lt;br /&gt;
[http://www.thoughtbot.com/projects/shoulda]&lt;br /&gt;
The link provides a more conclusive definition of Shoulda along with installation facts and working examples of the Shoulda &lt;br /&gt;
&lt;br /&gt;
testing framework within Ruby's built in Test::Unit&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''Shoulda Example with Test::Unit''[http://robots.thoughtbot.com/post/159805987/speculating-with-shoulda]&lt;br /&gt;
&lt;br /&gt;
 class UserTest &amp;lt; ActiveRecord::TestCase&lt;br /&gt;
  should_belong_to :account&lt;br /&gt;
  should_have_many :posts&lt;br /&gt;
  should_validate_presence_of :email&lt;br /&gt;
  should_allow_values_for :email, &amp;quot;test@example.com&amp;quot;&lt;br /&gt;
  should_not_allow_values_for :email, &amp;quot;test&amp;quot;&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
== BDD: Behavior Driven Development ==&lt;br /&gt;
	[http://eggsonbread.com/2009/07/22/behavior-driven-development-in-a-nutshell/]&lt;br /&gt;
Behavior driven development was born from the concepts behind the implementation of TDD.  It brings together strands from &lt;br /&gt;
&lt;br /&gt;
TestDrivenDevelopment and DomainDrivenDesign into an integrated whole, making the relationship between these two powerful &lt;br /&gt;
&lt;br /&gt;
approaches to software development more evident.  Most test driven development testing frameworks such as RSpec and Cucumber also support behavior driven development testing. &lt;br /&gt;
&lt;br /&gt;
[http://behaviour-driven.org/]&lt;br /&gt;
The link supports BDDs definition with additional links to more viable behavior driven development resources.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Other Test Tool Resources'''&lt;br /&gt;
&lt;br /&gt;
''Watir:'' is an open-source library for automating web browsers. It allows you to write tests that are easy to read and maintain. It &lt;br /&gt;
&lt;br /&gt;
is simple and flexible.  &lt;br /&gt;
[http://wtr.rubyforge.org/]&lt;br /&gt;
The link provides an overview of Watir with installation specifications, examples, and supported platforms&lt;br /&gt;
&lt;br /&gt;
''NullDB:'' [http://avdi.org/projects/nulldb/]&lt;br /&gt;
a way to speed up testing by avoiding database use.&lt;br /&gt;
&lt;br /&gt;
''Bleakhouse:'' memory leak detection&lt;br /&gt;
[http://www.rubyinside.com/bleakhouse-tool-to-find-memory-leaks-in-your-rails-applications-470.html]&lt;br /&gt;
The link gives additional information on Bleakhouse profiling for memory leaks&lt;br /&gt;
&lt;br /&gt;
''ruby-debug:'' &lt;br /&gt;
Other than the extensive use of breakpoints Rails provides little to streamline the debugging process. Ruby-debug provides Rails with a plug-in extending the functionality of Rails built in debugger. &lt;br /&gt;
&lt;br /&gt;
[http://rubyforge.org/softwaremap/trove_list.php?form_cat=47]&lt;br /&gt;
The link provides twenty additional debug resources available for RoR&lt;br /&gt;
&lt;br /&gt;
== '''Conclusion''' ==&lt;br /&gt;
&lt;br /&gt;
Rails is a very comprehensive development environment for Ruby with numerous extensions, plugins, and other resources outside of IDEs to strengthen the functionality of the open source web application framework.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
''All sources used to create this wiki are linked in the above text.''&lt;/div&gt;</summary>
		<author><name>Los Bravo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_team1&amp;diff=22180</id>
		<title>CSC/ECE 517 Fall 2009/wiki1b team1</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_team1&amp;diff=22180"/>
		<updated>2009-09-28T20:11:32Z</updated>

		<summary type="html">&lt;p&gt;Los Bravo: /* TDD: Test Driven Development */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;CSC/ECE 517 Fall 2009&lt;br /&gt;
&lt;br /&gt;
'''&lt;br /&gt;
== Resources for Rails (other than IDEs) ==&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
IDEs are a valuable resource for Rails development, however there are many other resources and tools&lt;br /&gt;
that can either replace or supplement IDEs.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Resources for Rails other than IDEs&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails API''''' - http://api.rubyonrails.org/&lt;br /&gt;
&lt;br /&gt;
	This site documents Rails files, classes and methods that can be used to build a Rails application.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Forum''''' - http://railsforum.com/&lt;br /&gt;
&lt;br /&gt;
	A discussion forum covering all aspects of Rails for beginners and experts including planning, &lt;br /&gt;
	programming, extensions and production.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Introducing Ruby on Rails''''' &lt;br /&gt;
&lt;br /&gt;
Part 1 http://www.softwaredeveloper.com/features/intro-to-ruby-on-rails-042507/&lt;br /&gt;
&lt;br /&gt;
Part 2 http://www.softwaredeveloper.com/features/intro-to-ruby-on-rails-part-two-043007/&lt;br /&gt;
&lt;br /&gt;
An excellent introduction to Rails for novices&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Installers'''&lt;br /&gt;
''&lt;br /&gt;
	&lt;br /&gt;
Windows: InstantRails - http://instantrails.rubyforge.org/wiki/wiki.pl&lt;br /&gt;
&lt;br /&gt;
		An all in one, single click installer for Windows that includes a Rails server.&lt;br /&gt;
&lt;br /&gt;
	Mac: Locomotive - http://locomotive.raaum.org/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Projects''''' - http://www.workingwithrails.com/&lt;br /&gt;
&lt;br /&gt;
	A Database of Rails projects, programmers and websites&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails plugins''''' - http://agilewebdevelopment.com/&lt;br /&gt;
&lt;br /&gt;
	A collection of Rails open source plugins, searchable by category or keyword.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Sample Rails''''' - http://snippets.dzone.com/tag/rails&lt;br /&gt;
&lt;br /&gt;
	A collection of Rails code snippets.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Agile Rails book''''' - http://www.amazon.com/gp/product/097669400X/002-0481267-8083260?v=glance&amp;amp;n=283155&lt;br /&gt;
&lt;br /&gt;
	An excellent resource for learning how to apply Agile programming concepts to Rails.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails cheatsheet''''' - http://www.blainekendall.com/uploads/RubyOnRails-Cheatsheet-BlaineKendall.pdf&lt;br /&gt;
&lt;br /&gt;
	One user's list of best practices, gotchas and quirks of developing with Rails.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails best practices''''' - http://www.therailsway.com/&lt;br /&gt;
&lt;br /&gt;
	An official best practices list for programming in Rails.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Advanced Rails''''' - http://webonrails.com/&lt;br /&gt;
&lt;br /&gt;
	A resource for the advanced Rails programmer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Blog''''' - http://weblog.rubyonrails.org/&lt;br /&gt;
&lt;br /&gt;
	An online community of updates about current happenings with the Rails platform.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Guides''''' - http://guides.rubyonrails.org/&lt;br /&gt;
&lt;br /&gt;
	An all in one resource for learning Rails including Howtos, security and contributing to the Rails community.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Authoring Rails plugins''''' - http://nubyonrails.com/articles/2006/05/04/the-complete-guide-to-rails-plugins-part-i&lt;br /&gt;
&lt;br /&gt;
	A complete guide to authoring your own Rails plugins.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
== '''Tools for Rails (other than IDEs)''' ==&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
'''Test Unit'''&lt;br /&gt;
The Rails stack uses Test::Unit, known as the default Ruby unit testing framework shipping with Ruby.  There are various plugins and extension that could be used with Rails built-in Test::Unit to extend its functionality for support of TDD and BDD testing practices.&lt;br /&gt;
&lt;br /&gt;
[http://wiki.rubyonrails.org/addons/testing]&lt;br /&gt;
The link provides additional information in the form of supporting resources, whitepapers, examples, and plug-in documentation&lt;br /&gt;
&lt;br /&gt;
'''Example'''&lt;br /&gt;
[http://wiki.rubyonrails.org/testing/test-unitrequire] &lt;br /&gt;
&lt;br /&gt;
 Image:class CalculatorTest &amp;lt; Test::Unit::TestCase &lt;br /&gt;
  def test_add_two_numbers_for_the_sum &lt;br /&gt;
    calculator = Calculator.new &lt;br /&gt;
    assert_equal 4, calculator.sum(2, 2)&lt;br /&gt;
  end &lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
== TDD: Test Driven Development ==&lt;br /&gt;
 	&lt;br /&gt;
Test Driven Development is a combination of refactoring and test first development, a form of development where the test is &lt;br /&gt;
&lt;br /&gt;
written prior to completed production code.  The goal of TDD is the specification of requirements and not the validation of &lt;br /&gt;
&lt;br /&gt;
requirements.  There are a few testing frameworks that are used to implement the TDD programming technique.  &lt;br /&gt;
&lt;br /&gt;
[http://ruby.about.com/b/2009/01/28/test-driven-development-with-rails.htm]&lt;br /&gt;
This link provides a comprehensive overview of test driven development practices and available resources for implementation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''RSpec'''&lt;br /&gt;
RSpec is a testing framework for Behavior Driven Development, complete with its own expectations, matchers and mocking and &lt;br /&gt;
&lt;br /&gt;
stubbing facilities. It goes along hand in hand with Cucumber, though it plays nicely with many other testing frameworks as well.&lt;br /&gt;
&lt;br /&gt;
''Example:''&lt;br /&gt;
&lt;br /&gt;
The following code will fail during execution.  ''Expresses some basic desired behavior''[http://rspec.info/]&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; bowling_spec.rb&lt;br /&gt;
 require ‘bowling’&lt;br /&gt;
  describe Bowling do&lt;br /&gt;
   it &amp;quot;should score 0 for gutter game&amp;quot; do&lt;br /&gt;
   bowling = Bowling.new&lt;br /&gt;
   20.times { bowling.hit(0) }&lt;br /&gt;
   bowling.score.should == 0&lt;br /&gt;
  end&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following code pass execution.  ''Just enough code to make it pass.''[http://rspec.info/] &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; bowling.rb&lt;br /&gt;
 class Bowling&lt;br /&gt;
   def hit(pins)&lt;br /&gt;
   end&lt;br /&gt;
   def score&lt;br /&gt;
     0&lt;br /&gt;
   end&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://www.ibm.com/developerworks/web/library/wa-rspec/]&lt;br /&gt;
The link provides a brief overview of RSpec with a comprehensive series of examples and a conceptual view of Rpecs step by step &lt;br /&gt;
&lt;br /&gt;
implementation process&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Cucumber'''&lt;br /&gt;
Cucumber is used with TDD and BDD within other testing frameworks such as RSpec by letting software development teams describe how &lt;br /&gt;
&lt;br /&gt;
software should behave in plain text. The text is written in a business-readable domain-specific language and serves as &lt;br /&gt;
&lt;br /&gt;
documentation, automated tests and development-aid - all rolled into one format.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''Cucumber Example:''&lt;br /&gt;
 Feature: Log in and out&lt;br /&gt;
  As an administrator&lt;br /&gt;
  I want to restrict access to certain portions of my site&lt;br /&gt;
  In order to prevent users from changing the content&lt;br /&gt;
  Scenario: Logging in&lt;br /&gt;
    Given I am not logged in as an administrator&lt;br /&gt;
    When I go to the administrative page&lt;br /&gt;
    And I fill in the fields&lt;br /&gt;
      | Username | admin  |&lt;br /&gt;
      | Password | secret |&lt;br /&gt;
    And I press &amp;quot;Log in&amp;quot;&lt;br /&gt;
    Then I should be on the administrative page&lt;br /&gt;
    And I should see &amp;quot;Log out&amp;quot;&lt;br /&gt;
  Scenario: Logging out&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
[http://cukes.info/]&lt;br /&gt;
The link provides a detail decription, definition, and examples of Cucumber implementation best practices and supported &lt;br /&gt;
&lt;br /&gt;
frameworks.&lt;br /&gt;
&lt;br /&gt;
''Another Cucumber Example:''&lt;br /&gt;
Scenario: See all vendors&lt;br /&gt;
    Given I am logged in as a user in the administrator role&lt;br /&gt;
    And There are 3 vendors&lt;br /&gt;
    When I go to the manage vendors page&lt;br /&gt;
    Then I should see the first 3 vendor names&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Shoulda''' &lt;br /&gt;
An extension to Test::Unit with additional helpers, macros, and assertions.&lt;br /&gt;
 &lt;br /&gt;
[http://www.thoughtbot.com/projects/shoulda]&lt;br /&gt;
The link provides a more conclusive definition of Shoulda along with installation facts and working examples of the Shoulda &lt;br /&gt;
&lt;br /&gt;
testing framework within Ruby's built in Test::Unit&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''Shoulda Example with Test::Unit''&lt;br /&gt;
&lt;br /&gt;
 class UserTest &amp;lt; ActiveRecord::TestCase&lt;br /&gt;
  should_belong_to :account&lt;br /&gt;
  should_have_many :posts&lt;br /&gt;
  should_validate_presence_of :email&lt;br /&gt;
  should_allow_values_for :email, &amp;quot;test@example.com&amp;quot;&lt;br /&gt;
  should_not_allow_values_for :email, &amp;quot;test&amp;quot;&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
== BDD: Behavior Driven Development ==&lt;br /&gt;
	[http://eggsonbread.com/2009/07/22/behavior-driven-development-in-a-nutshell/]&lt;br /&gt;
Behavior driven development was born from the concepts behind the implementation of TDD.  It brings together strands from &lt;br /&gt;
&lt;br /&gt;
TestDrivenDevelopment and DomainDrivenDesign into an integrated whole, making the relationship between these two powerful &lt;br /&gt;
&lt;br /&gt;
approaches to software development more evident.  Most test driven development testing frameworks such as RSpec and Cucumber also support behavior driven development testing. &lt;br /&gt;
&lt;br /&gt;
[http://behaviour-driven.org/]&lt;br /&gt;
The link supports BDDs definition with additional links to more viable behavior driven development resources.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Other Test Tool Resources'''&lt;br /&gt;
&lt;br /&gt;
''Watir:'' is an open-source library for automating web browsers. It allows you to write tests that are easy to read and maintain. It &lt;br /&gt;
&lt;br /&gt;
is simple and flexible.  &lt;br /&gt;
[http://wtr.rubyforge.org/]&lt;br /&gt;
The link provides an overview of Watir with installation specifications, examples, and supported platforms&lt;br /&gt;
&lt;br /&gt;
''NullDB:'' [http://avdi.org/projects/nulldb/]&lt;br /&gt;
a way to speed up testing by avoiding database use.&lt;br /&gt;
&lt;br /&gt;
''Bleakhouse:'' memory leak detection&lt;br /&gt;
[http://www.rubyinside.com/bleakhouse-tool-to-find-memory-leaks-in-your-rails-applications-470.html]&lt;br /&gt;
The link gives additional information on Bleakhouse profiling for memory leaks&lt;br /&gt;
&lt;br /&gt;
''ruby-debug:'' &lt;br /&gt;
Other than the extensive use of breakpoints Rails provides little to streamline the debugging process. Ruby-debug provides Rails with a plug-in extending the functionality of Rails built in debugger. &lt;br /&gt;
&lt;br /&gt;
[http://rubyforge.org/softwaremap/trove_list.php?form_cat=47]&lt;br /&gt;
The link provides twenty additional debug resources available for RoR&lt;br /&gt;
&lt;br /&gt;
== '''Conclusion''' ==&lt;br /&gt;
&lt;br /&gt;
Rails is a very comprehensive development environment for Ruby with numerous extensions, plugins, and other resources outside of IDEs to strengthen the functionality of the open source web application framework.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
''All sources used to create this wiki are linked in the above text.''&lt;/div&gt;</summary>
		<author><name>Los Bravo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_team1&amp;diff=22179</id>
		<title>CSC/ECE 517 Fall 2009/wiki1b team1</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_team1&amp;diff=22179"/>
		<updated>2009-09-28T20:09:03Z</updated>

		<summary type="html">&lt;p&gt;Los Bravo: /* TDD: Test Driven Development */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;CSC/ECE 517 Fall 2009&lt;br /&gt;
&lt;br /&gt;
'''&lt;br /&gt;
== Resources for Rails (other than IDEs) ==&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
IDEs are a valuable resource for Rails development, however there are many other resources and tools&lt;br /&gt;
that can either replace or supplement IDEs.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Resources for Rails other than IDEs&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails API''''' - http://api.rubyonrails.org/&lt;br /&gt;
&lt;br /&gt;
	This site documents Rails files, classes and methods that can be used to build a Rails application.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Forum''''' - http://railsforum.com/&lt;br /&gt;
&lt;br /&gt;
	A discussion forum covering all aspects of Rails for beginners and experts including planning, &lt;br /&gt;
	programming, extensions and production.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Introducing Ruby on Rails''''' &lt;br /&gt;
&lt;br /&gt;
Part 1 http://www.softwaredeveloper.com/features/intro-to-ruby-on-rails-042507/&lt;br /&gt;
&lt;br /&gt;
Part 2 http://www.softwaredeveloper.com/features/intro-to-ruby-on-rails-part-two-043007/&lt;br /&gt;
&lt;br /&gt;
An excellent introduction to Rails for novices&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Installers'''&lt;br /&gt;
''&lt;br /&gt;
	&lt;br /&gt;
Windows: InstantRails - http://instantrails.rubyforge.org/wiki/wiki.pl&lt;br /&gt;
&lt;br /&gt;
		An all in one, single click installer for Windows that includes a Rails server.&lt;br /&gt;
&lt;br /&gt;
	Mac: Locomotive - http://locomotive.raaum.org/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Projects''''' - http://www.workingwithrails.com/&lt;br /&gt;
&lt;br /&gt;
	A Database of Rails projects, programmers and websites&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails plugins''''' - http://agilewebdevelopment.com/&lt;br /&gt;
&lt;br /&gt;
	A collection of Rails open source plugins, searchable by category or keyword.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Sample Rails''''' - http://snippets.dzone.com/tag/rails&lt;br /&gt;
&lt;br /&gt;
	A collection of Rails code snippets.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Agile Rails book''''' - http://www.amazon.com/gp/product/097669400X/002-0481267-8083260?v=glance&amp;amp;n=283155&lt;br /&gt;
&lt;br /&gt;
	An excellent resource for learning how to apply Agile programming concepts to Rails.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails cheatsheet''''' - http://www.blainekendall.com/uploads/RubyOnRails-Cheatsheet-BlaineKendall.pdf&lt;br /&gt;
&lt;br /&gt;
	One user's list of best practices, gotchas and quirks of developing with Rails.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails best practices''''' - http://www.therailsway.com/&lt;br /&gt;
&lt;br /&gt;
	An official best practices list for programming in Rails.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Advanced Rails''''' - http://webonrails.com/&lt;br /&gt;
&lt;br /&gt;
	A resource for the advanced Rails programmer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Blog''''' - http://weblog.rubyonrails.org/&lt;br /&gt;
&lt;br /&gt;
	An online community of updates about current happenings with the Rails platform.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Guides''''' - http://guides.rubyonrails.org/&lt;br /&gt;
&lt;br /&gt;
	An all in one resource for learning Rails including Howtos, security and contributing to the Rails community.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Authoring Rails plugins''''' - http://nubyonrails.com/articles/2006/05/04/the-complete-guide-to-rails-plugins-part-i&lt;br /&gt;
&lt;br /&gt;
	A complete guide to authoring your own Rails plugins.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
== '''Tools for Rails (other than IDEs)''' ==&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
'''Test Unit'''&lt;br /&gt;
The Rails stack uses Test::Unit, known as the default Ruby unit testing framework shipping with Ruby.  There are various plugins and extension that could be used with Rails built-in Test::Unit to extend its functionality for support of TDD and BDD testing practices.&lt;br /&gt;
&lt;br /&gt;
[http://wiki.rubyonrails.org/addons/testing]&lt;br /&gt;
The link provides additional information in the form of supporting resources, whitepapers, examples, and plug-in documentation&lt;br /&gt;
&lt;br /&gt;
'''Example'''&lt;br /&gt;
[http://wiki.rubyonrails.org/testing/test-unitrequire] &lt;br /&gt;
&lt;br /&gt;
 Image:class CalculatorTest &amp;lt; Test::Unit::TestCase &lt;br /&gt;
  def test_add_two_numbers_for_the_sum &lt;br /&gt;
    calculator = Calculator.new &lt;br /&gt;
    assert_equal 4, calculator.sum(2, 2)&lt;br /&gt;
  end &lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
== TDD: Test Driven Development ==&lt;br /&gt;
 	&lt;br /&gt;
Test Driven Development is a combination of refactoring and test first development, a form of development where the test is &lt;br /&gt;
&lt;br /&gt;
written prior to completed production code.  The goal of TDD is the specification of requirements and not the validation of &lt;br /&gt;
&lt;br /&gt;
requirements.  There are a few testing frameworks that are used to implement the TDD programming technique.  &lt;br /&gt;
&lt;br /&gt;
[http://ruby.about.com/b/2009/01/28/test-driven-development-with-rails.htm]&lt;br /&gt;
This link provides a comprehensive overview of test driven development practices and available resources for implementation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''RSpec'''&lt;br /&gt;
RSpec is a testing framework for Behavior Driven Development, complete with its own expectations, matchers and mocking and &lt;br /&gt;
&lt;br /&gt;
stubbing facilities. It goes along hand in hand with Cucumber, though it plays nicely with many other testing frameworks as well.&lt;br /&gt;
&lt;br /&gt;
''Example:''&lt;br /&gt;
&lt;br /&gt;
The following code will fail during execution.  ''Expresses some basic desired behavior''[http://rspec.info/]&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; bowling_spec.rb&lt;br /&gt;
 require ‘bowling’&lt;br /&gt;
  describe Bowling do&lt;br /&gt;
   it &amp;quot;should score 0 for gutter game&amp;quot; do&lt;br /&gt;
   bowling = Bowling.new&lt;br /&gt;
   20.times { bowling.hit(0) }&lt;br /&gt;
   bowling.score.should == 0&lt;br /&gt;
  end&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following code pass execution.  ''Just enough code to make it pass.''[http://rspec.info/] &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; bowling.rb&lt;br /&gt;
 class Bowling&lt;br /&gt;
   def hit(pins)&lt;br /&gt;
   end&lt;br /&gt;
   def score&lt;br /&gt;
     0&lt;br /&gt;
   end&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://www.ibm.com/developerworks/web/library/wa-rspec/]&lt;br /&gt;
The link provides a brief overview of RSpec with a comprehensive series of examples and a conceptual view of Rpecs step by step &lt;br /&gt;
&lt;br /&gt;
implementation process&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Cucumber'''&lt;br /&gt;
Cucumber is used with TDD and BDD within other testing frameworks such as RSpec by letting software development teams describe how &lt;br /&gt;
&lt;br /&gt;
software should behave in plain text. The text is written in a business-readable domain-specific language and serves as &lt;br /&gt;
&lt;br /&gt;
documentation, automated tests and development-aid - all rolled into one format.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''Cucumber Example:''&lt;br /&gt;
 Feature: Log in and out&lt;br /&gt;
  As an administrator&lt;br /&gt;
  I want to restrict access to certain portions of my site&lt;br /&gt;
  In order to prevent users from changing the content&lt;br /&gt;
  Scenario: Logging in&lt;br /&gt;
    Given I am not logged in as an administrator&lt;br /&gt;
    When I go to the administrative page&lt;br /&gt;
    And I fill in the fields&lt;br /&gt;
      | Username | admin  |&lt;br /&gt;
      | Password | secret |&lt;br /&gt;
    And I press &amp;quot;Log in&amp;quot;&lt;br /&gt;
    Then I should be on the administrative page&lt;br /&gt;
    And I should see &amp;quot;Log out&amp;quot;&lt;br /&gt;
  Scenario: Logging out&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
[http://cukes.info/]&lt;br /&gt;
The link provides a detail decription, definition, and examples of Cucumber implementation best practices and supported &lt;br /&gt;
&lt;br /&gt;
frameworks.&lt;br /&gt;
&lt;br /&gt;
''Another Cucumber Example:''&lt;br /&gt;
Scenario: See all vendors&lt;br /&gt;
    Given I am logged in as a user in the administrator role&lt;br /&gt;
    And There are 3 vendors&lt;br /&gt;
    When I go to the manage vendors page&lt;br /&gt;
    Then I should see the first 3 vendor names&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Shoulda''' &lt;br /&gt;
An extension to Test::Unit with additional helpers, macros, and assertions.&lt;br /&gt;
 &lt;br /&gt;
[http://www.thoughtbot.com/projects/shoulda]&lt;br /&gt;
The link provides a more conclusive definition of Shoulda along with installation facts and working examples of the Shoulda &lt;br /&gt;
&lt;br /&gt;
testing framework within Ruby's built in Test::Unit&lt;br /&gt;
&lt;br /&gt;
== BDD: Behavior Driven Development ==&lt;br /&gt;
	[http://eggsonbread.com/2009/07/22/behavior-driven-development-in-a-nutshell/]&lt;br /&gt;
Behavior driven development was born from the concepts behind the implementation of TDD.  It brings together strands from &lt;br /&gt;
&lt;br /&gt;
TestDrivenDevelopment and DomainDrivenDesign into an integrated whole, making the relationship between these two powerful &lt;br /&gt;
&lt;br /&gt;
approaches to software development more evident.  Most test driven development testing frameworks such as RSpec and Cucumber also support behavior driven development testing. &lt;br /&gt;
&lt;br /&gt;
[http://behaviour-driven.org/]&lt;br /&gt;
The link supports BDDs definition with additional links to more viable behavior driven development resources.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Other Test Tool Resources'''&lt;br /&gt;
&lt;br /&gt;
''Watir:'' is an open-source library for automating web browsers. It allows you to write tests that are easy to read and maintain. It &lt;br /&gt;
&lt;br /&gt;
is simple and flexible.  &lt;br /&gt;
[http://wtr.rubyforge.org/]&lt;br /&gt;
The link provides an overview of Watir with installation specifications, examples, and supported platforms&lt;br /&gt;
&lt;br /&gt;
''NullDB:'' [http://avdi.org/projects/nulldb/]&lt;br /&gt;
a way to speed up testing by avoiding database use.&lt;br /&gt;
&lt;br /&gt;
''Bleakhouse:'' memory leak detection&lt;br /&gt;
[http://www.rubyinside.com/bleakhouse-tool-to-find-memory-leaks-in-your-rails-applications-470.html]&lt;br /&gt;
The link gives additional information on Bleakhouse profiling for memory leaks&lt;br /&gt;
&lt;br /&gt;
''ruby-debug:'' &lt;br /&gt;
Other than the extensive use of breakpoints Rails provides little to streamline the debugging process. Ruby-debug provides Rails with a plug-in extending the functionality of Rails built in debugger. &lt;br /&gt;
&lt;br /&gt;
[http://rubyforge.org/softwaremap/trove_list.php?form_cat=47]&lt;br /&gt;
The link provides twenty additional debug resources available for RoR&lt;br /&gt;
&lt;br /&gt;
== '''Conclusion''' ==&lt;br /&gt;
&lt;br /&gt;
Rails is a very comprehensive development environment for Ruby with numerous extensions, plugins, and other resources outside of IDEs to strengthen the functionality of the open source web application framework.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
''All sources used to create this wiki are linked in the above text.''&lt;/div&gt;</summary>
		<author><name>Los Bravo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_team1&amp;diff=22178</id>
		<title>CSC/ECE 517 Fall 2009/wiki1b team1</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_team1&amp;diff=22178"/>
		<updated>2009-09-28T20:08:29Z</updated>

		<summary type="html">&lt;p&gt;Los Bravo: /* TDD: Test Driven Development */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;CSC/ECE 517 Fall 2009&lt;br /&gt;
&lt;br /&gt;
'''&lt;br /&gt;
== Resources for Rails (other than IDEs) ==&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
IDEs are a valuable resource for Rails development, however there are many other resources and tools&lt;br /&gt;
that can either replace or supplement IDEs.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Resources for Rails other than IDEs&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails API''''' - http://api.rubyonrails.org/&lt;br /&gt;
&lt;br /&gt;
	This site documents Rails files, classes and methods that can be used to build a Rails application.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Forum''''' - http://railsforum.com/&lt;br /&gt;
&lt;br /&gt;
	A discussion forum covering all aspects of Rails for beginners and experts including planning, &lt;br /&gt;
	programming, extensions and production.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Introducing Ruby on Rails''''' &lt;br /&gt;
&lt;br /&gt;
Part 1 http://www.softwaredeveloper.com/features/intro-to-ruby-on-rails-042507/&lt;br /&gt;
&lt;br /&gt;
Part 2 http://www.softwaredeveloper.com/features/intro-to-ruby-on-rails-part-two-043007/&lt;br /&gt;
&lt;br /&gt;
An excellent introduction to Rails for novices&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Installers'''&lt;br /&gt;
''&lt;br /&gt;
	&lt;br /&gt;
Windows: InstantRails - http://instantrails.rubyforge.org/wiki/wiki.pl&lt;br /&gt;
&lt;br /&gt;
		An all in one, single click installer for Windows that includes a Rails server.&lt;br /&gt;
&lt;br /&gt;
	Mac: Locomotive - http://locomotive.raaum.org/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Projects''''' - http://www.workingwithrails.com/&lt;br /&gt;
&lt;br /&gt;
	A Database of Rails projects, programmers and websites&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails plugins''''' - http://agilewebdevelopment.com/&lt;br /&gt;
&lt;br /&gt;
	A collection of Rails open source plugins, searchable by category or keyword.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Sample Rails''''' - http://snippets.dzone.com/tag/rails&lt;br /&gt;
&lt;br /&gt;
	A collection of Rails code snippets.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Agile Rails book''''' - http://www.amazon.com/gp/product/097669400X/002-0481267-8083260?v=glance&amp;amp;n=283155&lt;br /&gt;
&lt;br /&gt;
	An excellent resource for learning how to apply Agile programming concepts to Rails.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails cheatsheet''''' - http://www.blainekendall.com/uploads/RubyOnRails-Cheatsheet-BlaineKendall.pdf&lt;br /&gt;
&lt;br /&gt;
	One user's list of best practices, gotchas and quirks of developing with Rails.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails best practices''''' - http://www.therailsway.com/&lt;br /&gt;
&lt;br /&gt;
	An official best practices list for programming in Rails.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Advanced Rails''''' - http://webonrails.com/&lt;br /&gt;
&lt;br /&gt;
	A resource for the advanced Rails programmer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Blog''''' - http://weblog.rubyonrails.org/&lt;br /&gt;
&lt;br /&gt;
	An online community of updates about current happenings with the Rails platform.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Guides''''' - http://guides.rubyonrails.org/&lt;br /&gt;
&lt;br /&gt;
	An all in one resource for learning Rails including Howtos, security and contributing to the Rails community.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Authoring Rails plugins''''' - http://nubyonrails.com/articles/2006/05/04/the-complete-guide-to-rails-plugins-part-i&lt;br /&gt;
&lt;br /&gt;
	A complete guide to authoring your own Rails plugins.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
== '''Tools for Rails (other than IDEs)''' ==&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
'''Test Unit'''&lt;br /&gt;
The Rails stack uses Test::Unit, known as the default Ruby unit testing framework shipping with Ruby.  There are various plugins and extension that could be used with Rails built-in Test::Unit to extend its functionality for support of TDD and BDD testing practices.&lt;br /&gt;
&lt;br /&gt;
[http://wiki.rubyonrails.org/addons/testing]&lt;br /&gt;
The link provides additional information in the form of supporting resources, whitepapers, examples, and plug-in documentation&lt;br /&gt;
&lt;br /&gt;
'''Example'''&lt;br /&gt;
[http://wiki.rubyonrails.org/testing/test-unitrequire] &lt;br /&gt;
&lt;br /&gt;
 Image:class CalculatorTest &amp;lt; Test::Unit::TestCase &lt;br /&gt;
  def test_add_two_numbers_for_the_sum &lt;br /&gt;
    calculator = Calculator.new &lt;br /&gt;
    assert_equal 4, calculator.sum(2, 2)&lt;br /&gt;
  end &lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
== TDD: Test Driven Development ==&lt;br /&gt;
 	&lt;br /&gt;
Test Driven Development is a combination of refactoring and test first development, a form of development where the test is &lt;br /&gt;
&lt;br /&gt;
written prior to completed production code.  The goal of TDD is the specification of requirements and not the validation of &lt;br /&gt;
&lt;br /&gt;
requirements.  There are a few testing frameworks that are used to implement the TDD programming technique.  &lt;br /&gt;
&lt;br /&gt;
[http://ruby.about.com/b/2009/01/28/test-driven-development-with-rails.htm]&lt;br /&gt;
This link provides a comprehensive overview of test driven development practices and available resources for implementation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''RSpec'''&lt;br /&gt;
RSpec is a testing framework for Behavior Driven Development, complete with its own expectations, matchers and mocking and &lt;br /&gt;
&lt;br /&gt;
stubbing facilities. It goes along hand in hand with Cucumber, though it plays nicely with many other testing frameworks as well.&lt;br /&gt;
&lt;br /&gt;
''Example''&lt;br /&gt;
&lt;br /&gt;
The following code will fail during execution.  ''Expresses some basic desired behavior''[http://rspec.info/]&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; bowling_spec.rb&lt;br /&gt;
 require ‘bowling’&lt;br /&gt;
  describe Bowling do&lt;br /&gt;
   it &amp;quot;should score 0 for gutter game&amp;quot; do&lt;br /&gt;
   bowling = Bowling.new&lt;br /&gt;
   20.times { bowling.hit(0) }&lt;br /&gt;
   bowling.score.should == 0&lt;br /&gt;
  end&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following code pass execution.  ''Just enough code to make it pass.''[http://rspec.info/] &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; bowling.rb&lt;br /&gt;
 class Bowling&lt;br /&gt;
   def hit(pins)&lt;br /&gt;
   end&lt;br /&gt;
   def score&lt;br /&gt;
     0&lt;br /&gt;
   end&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://www.ibm.com/developerworks/web/library/wa-rspec/]&lt;br /&gt;
The link provides a brief overview of RSpec with a comprehensive series of examples and a conceptual view of Rpecs step by step &lt;br /&gt;
&lt;br /&gt;
implementation process&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Cucumber'''&lt;br /&gt;
Cucumber is used with TDD and BDD within other testing frameworks such as RSpec by letting software development teams describe how &lt;br /&gt;
&lt;br /&gt;
software should behave in plain text. The text is written in a business-readable domain-specific language and serves as &lt;br /&gt;
&lt;br /&gt;
documentation, automated tests and development-aid - all rolled into one format.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Another Cucumber Example:'''&lt;br /&gt;
 Feature: Log in and out&lt;br /&gt;
  As an administrator&lt;br /&gt;
  I want to restrict access to certain portions of my site&lt;br /&gt;
  In order to prevent users from changing the content&lt;br /&gt;
  Scenario: Logging in&lt;br /&gt;
    Given I am not logged in as an administrator&lt;br /&gt;
    When I go to the administrative page&lt;br /&gt;
    And I fill in the fields&lt;br /&gt;
      | Username | admin  |&lt;br /&gt;
      | Password | secret |&lt;br /&gt;
    And I press &amp;quot;Log in&amp;quot;&lt;br /&gt;
    Then I should be on the administrative page&lt;br /&gt;
    And I should see &amp;quot;Log out&amp;quot;&lt;br /&gt;
  Scenario: Logging out&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
[http://cukes.info/]&lt;br /&gt;
The link provides a detail decription, definition, and examples of Cucumber implementation best practices and supported &lt;br /&gt;
&lt;br /&gt;
frameworks.&lt;br /&gt;
&lt;br /&gt;
'''Another Cucumber Example:'''&lt;br /&gt;
Scenario: See all vendors&lt;br /&gt;
    Given I am logged in as a user in the administrator role&lt;br /&gt;
    And There are 3 vendors&lt;br /&gt;
    When I go to the manage vendors page&lt;br /&gt;
    Then I should see the first 3 vendor names&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Shoulda''' &lt;br /&gt;
An extension to Test::Unit with additional helpers, macros, and assertions.&lt;br /&gt;
 &lt;br /&gt;
[http://www.thoughtbot.com/projects/shoulda]&lt;br /&gt;
The link provides a more conclusive definition of Shoulda along with installation facts and working examples of the Shoulda &lt;br /&gt;
&lt;br /&gt;
testing framework within Ruby's built in Test::Unit&lt;br /&gt;
&lt;br /&gt;
== BDD: Behavior Driven Development ==&lt;br /&gt;
	[http://eggsonbread.com/2009/07/22/behavior-driven-development-in-a-nutshell/]&lt;br /&gt;
Behavior driven development was born from the concepts behind the implementation of TDD.  It brings together strands from &lt;br /&gt;
&lt;br /&gt;
TestDrivenDevelopment and DomainDrivenDesign into an integrated whole, making the relationship between these two powerful &lt;br /&gt;
&lt;br /&gt;
approaches to software development more evident.  Most test driven development testing frameworks such as RSpec and Cucumber also support behavior driven development testing. &lt;br /&gt;
&lt;br /&gt;
[http://behaviour-driven.org/]&lt;br /&gt;
The link supports BDDs definition with additional links to more viable behavior driven development resources.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Other Test Tool Resources'''&lt;br /&gt;
&lt;br /&gt;
''Watir:'' is an open-source library for automating web browsers. It allows you to write tests that are easy to read and maintain. It &lt;br /&gt;
&lt;br /&gt;
is simple and flexible.  &lt;br /&gt;
[http://wtr.rubyforge.org/]&lt;br /&gt;
The link provides an overview of Watir with installation specifications, examples, and supported platforms&lt;br /&gt;
&lt;br /&gt;
''NullDB:'' [http://avdi.org/projects/nulldb/]&lt;br /&gt;
a way to speed up testing by avoiding database use.&lt;br /&gt;
&lt;br /&gt;
''Bleakhouse:'' memory leak detection&lt;br /&gt;
[http://www.rubyinside.com/bleakhouse-tool-to-find-memory-leaks-in-your-rails-applications-470.html]&lt;br /&gt;
The link gives additional information on Bleakhouse profiling for memory leaks&lt;br /&gt;
&lt;br /&gt;
''ruby-debug:'' &lt;br /&gt;
Other than the extensive use of breakpoints Rails provides little to streamline the debugging process. Ruby-debug provides Rails with a plug-in extending the functionality of Rails built in debugger. &lt;br /&gt;
&lt;br /&gt;
[http://rubyforge.org/softwaremap/trove_list.php?form_cat=47]&lt;br /&gt;
The link provides twenty additional debug resources available for RoR&lt;br /&gt;
&lt;br /&gt;
== '''Conclusion''' ==&lt;br /&gt;
&lt;br /&gt;
Rails is a very comprehensive development environment for Ruby with numerous extensions, plugins, and other resources outside of IDEs to strengthen the functionality of the open source web application framework.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
''All sources used to create this wiki are linked in the above text.''&lt;/div&gt;</summary>
		<author><name>Los Bravo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_team1&amp;diff=22177</id>
		<title>CSC/ECE 517 Fall 2009/wiki1b team1</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_team1&amp;diff=22177"/>
		<updated>2009-09-28T20:07:47Z</updated>

		<summary type="html">&lt;p&gt;Los Bravo: /* TDD: Test Driven Development */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;CSC/ECE 517 Fall 2009&lt;br /&gt;
&lt;br /&gt;
'''&lt;br /&gt;
== Resources for Rails (other than IDEs) ==&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
IDEs are a valuable resource for Rails development, however there are many other resources and tools&lt;br /&gt;
that can either replace or supplement IDEs.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Resources for Rails other than IDEs&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails API''''' - http://api.rubyonrails.org/&lt;br /&gt;
&lt;br /&gt;
	This site documents Rails files, classes and methods that can be used to build a Rails application.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Forum''''' - http://railsforum.com/&lt;br /&gt;
&lt;br /&gt;
	A discussion forum covering all aspects of Rails for beginners and experts including planning, &lt;br /&gt;
	programming, extensions and production.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Introducing Ruby on Rails''''' &lt;br /&gt;
&lt;br /&gt;
Part 1 http://www.softwaredeveloper.com/features/intro-to-ruby-on-rails-042507/&lt;br /&gt;
&lt;br /&gt;
Part 2 http://www.softwaredeveloper.com/features/intro-to-ruby-on-rails-part-two-043007/&lt;br /&gt;
&lt;br /&gt;
An excellent introduction to Rails for novices&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Installers'''&lt;br /&gt;
''&lt;br /&gt;
	&lt;br /&gt;
Windows: InstantRails - http://instantrails.rubyforge.org/wiki/wiki.pl&lt;br /&gt;
&lt;br /&gt;
		An all in one, single click installer for Windows that includes a Rails server.&lt;br /&gt;
&lt;br /&gt;
	Mac: Locomotive - http://locomotive.raaum.org/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Projects''''' - http://www.workingwithrails.com/&lt;br /&gt;
&lt;br /&gt;
	A Database of Rails projects, programmers and websites&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails plugins''''' - http://agilewebdevelopment.com/&lt;br /&gt;
&lt;br /&gt;
	A collection of Rails open source plugins, searchable by category or keyword.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Sample Rails''''' - http://snippets.dzone.com/tag/rails&lt;br /&gt;
&lt;br /&gt;
	A collection of Rails code snippets.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Agile Rails book''''' - http://www.amazon.com/gp/product/097669400X/002-0481267-8083260?v=glance&amp;amp;n=283155&lt;br /&gt;
&lt;br /&gt;
	An excellent resource for learning how to apply Agile programming concepts to Rails.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails cheatsheet''''' - http://www.blainekendall.com/uploads/RubyOnRails-Cheatsheet-BlaineKendall.pdf&lt;br /&gt;
&lt;br /&gt;
	One user's list of best practices, gotchas and quirks of developing with Rails.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails best practices''''' - http://www.therailsway.com/&lt;br /&gt;
&lt;br /&gt;
	An official best practices list for programming in Rails.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Advanced Rails''''' - http://webonrails.com/&lt;br /&gt;
&lt;br /&gt;
	A resource for the advanced Rails programmer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Blog''''' - http://weblog.rubyonrails.org/&lt;br /&gt;
&lt;br /&gt;
	An online community of updates about current happenings with the Rails platform.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Guides''''' - http://guides.rubyonrails.org/&lt;br /&gt;
&lt;br /&gt;
	An all in one resource for learning Rails including Howtos, security and contributing to the Rails community.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Authoring Rails plugins''''' - http://nubyonrails.com/articles/2006/05/04/the-complete-guide-to-rails-plugins-part-i&lt;br /&gt;
&lt;br /&gt;
	A complete guide to authoring your own Rails plugins.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
== '''Tools for Rails (other than IDEs)''' ==&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
'''Test Unit'''&lt;br /&gt;
The Rails stack uses Test::Unit, known as the default Ruby unit testing framework shipping with Ruby.  There are various plugins and extension that could be used with Rails built-in Test::Unit to extend its functionality for support of TDD and BDD testing practices.&lt;br /&gt;
&lt;br /&gt;
[http://wiki.rubyonrails.org/addons/testing]&lt;br /&gt;
The link provides additional information in the form of supporting resources, whitepapers, examples, and plug-in documentation&lt;br /&gt;
&lt;br /&gt;
'''Example'''&lt;br /&gt;
[http://wiki.rubyonrails.org/testing/test-unitrequire] &lt;br /&gt;
&lt;br /&gt;
 Image:class CalculatorTest &amp;lt; Test::Unit::TestCase &lt;br /&gt;
  def test_add_two_numbers_for_the_sum &lt;br /&gt;
    calculator = Calculator.new &lt;br /&gt;
    assert_equal 4, calculator.sum(2, 2)&lt;br /&gt;
  end &lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
== TDD: Test Driven Development ==&lt;br /&gt;
 	&lt;br /&gt;
Test Driven Development is a combination of refactoring and test first development, a form of development where the test is &lt;br /&gt;
&lt;br /&gt;
written prior to completed production code.  The goal of TDD is the specification of requirements and not the validation of &lt;br /&gt;
&lt;br /&gt;
requirements.  There are a few testing frameworks that are used to implement the TDD programming technique.  &lt;br /&gt;
&lt;br /&gt;
[http://ruby.about.com/b/2009/01/28/test-driven-development-with-rails.htm]&lt;br /&gt;
This link provides a comprehensive overview of test driven development practices and available resources for implementation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''RSpec'''&lt;br /&gt;
RSpec is a testing framework for Behavior Driven Development, complete with its own expectations, matchers and mocking and &lt;br /&gt;
&lt;br /&gt;
stubbing facilities. It goes along hand in hand with Cucumber, though it plays nicely with many other testing frameworks as well.&lt;br /&gt;
&lt;br /&gt;
''Example''&lt;br /&gt;
&lt;br /&gt;
The following code will fail during execution.  ''Expresses some basic desired behavior''[http://rspec.info/]&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; bowling_spec.rb&lt;br /&gt;
 require ‘bowling’&lt;br /&gt;
  describe Bowling do&lt;br /&gt;
   it &amp;quot;should score 0 for gutter game&amp;quot; do&lt;br /&gt;
   bowling = Bowling.new&lt;br /&gt;
   20.times { bowling.hit(0) }&lt;br /&gt;
   bowling.score.should == 0&lt;br /&gt;
  end&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following code pass execution.  ''Just enough code to make it pass.''[http://rspec.info/] &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; bowling.rb&lt;br /&gt;
 class Bowling&lt;br /&gt;
   def hit(pins)&lt;br /&gt;
   end&lt;br /&gt;
   def score&lt;br /&gt;
     0&lt;br /&gt;
   end&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://www.ibm.com/developerworks/web/library/wa-rspec/]&lt;br /&gt;
The link provides a brief overview of RSpec with a comprehensive series of examples and a conceptual view of Rpecs step by step &lt;br /&gt;
&lt;br /&gt;
implementation process&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Cucumber'''&lt;br /&gt;
Cucumber is used with TDD and BDD within other testing frameworks such as RSpec by letting software development teams describe how &lt;br /&gt;
&lt;br /&gt;
software should behave in plain text. The text is written in a business-readable domain-specific language and serves as &lt;br /&gt;
&lt;br /&gt;
documentation, automated tests and development-aid - all rolled into one format.&lt;br /&gt;
&lt;br /&gt;
 Feature: Log in and out&lt;br /&gt;
  As an administrator&lt;br /&gt;
  I want to restrict access to certain portions of my site&lt;br /&gt;
  In order to prevent users from changing the content&lt;br /&gt;
  Scenario: Logging in&lt;br /&gt;
    Given I am not logged in as an administrator&lt;br /&gt;
    When I go to the administrative page&lt;br /&gt;
    And I fill in the fields&lt;br /&gt;
      | Username | admin  |&lt;br /&gt;
      | Password | secret |&lt;br /&gt;
    And I press &amp;quot;Log in&amp;quot;&lt;br /&gt;
    Then I should be on the administrative page&lt;br /&gt;
    And I should see &amp;quot;Log out&amp;quot;&lt;br /&gt;
  Scenario: Logging out&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
[http://cukes.info/]&lt;br /&gt;
The link provides a detail decription, definition, and examples of Cucumber implementation best practices and supported &lt;br /&gt;
&lt;br /&gt;
frameworks.&lt;br /&gt;
&lt;br /&gt;
'''Cucumber Example:'''&lt;br /&gt;
Scenario: See all vendors&lt;br /&gt;
    Given I am logged in as a user in the administrator role&lt;br /&gt;
    And There are 3 vendors&lt;br /&gt;
    When I go to the manage vendors page&lt;br /&gt;
    Then I should see the first 3 vendor names&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Shoulda''' &lt;br /&gt;
An extension to Test::Unit with additional helpers, macros, and assertions.&lt;br /&gt;
 &lt;br /&gt;
[http://www.thoughtbot.com/projects/shoulda]&lt;br /&gt;
The link provides a more conclusive definition of Shoulda along with installation facts and working examples of the Shoulda &lt;br /&gt;
&lt;br /&gt;
testing framework within Ruby's built in Test::Unit&lt;br /&gt;
&lt;br /&gt;
== BDD: Behavior Driven Development ==&lt;br /&gt;
	[http://eggsonbread.com/2009/07/22/behavior-driven-development-in-a-nutshell/]&lt;br /&gt;
Behavior driven development was born from the concepts behind the implementation of TDD.  It brings together strands from &lt;br /&gt;
&lt;br /&gt;
TestDrivenDevelopment and DomainDrivenDesign into an integrated whole, making the relationship between these two powerful &lt;br /&gt;
&lt;br /&gt;
approaches to software development more evident.  Most test driven development testing frameworks such as RSpec and Cucumber also support behavior driven development testing. &lt;br /&gt;
&lt;br /&gt;
[http://behaviour-driven.org/]&lt;br /&gt;
The link supports BDDs definition with additional links to more viable behavior driven development resources.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Other Test Tool Resources'''&lt;br /&gt;
&lt;br /&gt;
''Watir:'' is an open-source library for automating web browsers. It allows you to write tests that are easy to read and maintain. It &lt;br /&gt;
&lt;br /&gt;
is simple and flexible.  &lt;br /&gt;
[http://wtr.rubyforge.org/]&lt;br /&gt;
The link provides an overview of Watir with installation specifications, examples, and supported platforms&lt;br /&gt;
&lt;br /&gt;
''NullDB:'' [http://avdi.org/projects/nulldb/]&lt;br /&gt;
a way to speed up testing by avoiding database use.&lt;br /&gt;
&lt;br /&gt;
''Bleakhouse:'' memory leak detection&lt;br /&gt;
[http://www.rubyinside.com/bleakhouse-tool-to-find-memory-leaks-in-your-rails-applications-470.html]&lt;br /&gt;
The link gives additional information on Bleakhouse profiling for memory leaks&lt;br /&gt;
&lt;br /&gt;
''ruby-debug:'' &lt;br /&gt;
Other than the extensive use of breakpoints Rails provides little to streamline the debugging process. Ruby-debug provides Rails with a plug-in extending the functionality of Rails built in debugger. &lt;br /&gt;
&lt;br /&gt;
[http://rubyforge.org/softwaremap/trove_list.php?form_cat=47]&lt;br /&gt;
The link provides twenty additional debug resources available for RoR&lt;br /&gt;
&lt;br /&gt;
== '''Conclusion''' ==&lt;br /&gt;
&lt;br /&gt;
Rails is a very comprehensive development environment for Ruby with numerous extensions, plugins, and other resources outside of IDEs to strengthen the functionality of the open source web application framework.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
''All sources used to create this wiki are linked in the above text.''&lt;/div&gt;</summary>
		<author><name>Los Bravo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_team1&amp;diff=22176</id>
		<title>CSC/ECE 517 Fall 2009/wiki1b team1</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_team1&amp;diff=22176"/>
		<updated>2009-09-28T20:06:16Z</updated>

		<summary type="html">&lt;p&gt;Los Bravo: /* TDD: Test Driven Development */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;CSC/ECE 517 Fall 2009&lt;br /&gt;
&lt;br /&gt;
'''&lt;br /&gt;
== Resources for Rails (other than IDEs) ==&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
IDEs are a valuable resource for Rails development, however there are many other resources and tools&lt;br /&gt;
that can either replace or supplement IDEs.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Resources for Rails other than IDEs&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails API''''' - http://api.rubyonrails.org/&lt;br /&gt;
&lt;br /&gt;
	This site documents Rails files, classes and methods that can be used to build a Rails application.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Forum''''' - http://railsforum.com/&lt;br /&gt;
&lt;br /&gt;
	A discussion forum covering all aspects of Rails for beginners and experts including planning, &lt;br /&gt;
	programming, extensions and production.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Introducing Ruby on Rails''''' &lt;br /&gt;
&lt;br /&gt;
Part 1 http://www.softwaredeveloper.com/features/intro-to-ruby-on-rails-042507/&lt;br /&gt;
&lt;br /&gt;
Part 2 http://www.softwaredeveloper.com/features/intro-to-ruby-on-rails-part-two-043007/&lt;br /&gt;
&lt;br /&gt;
An excellent introduction to Rails for novices&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Installers'''&lt;br /&gt;
''&lt;br /&gt;
	&lt;br /&gt;
Windows: InstantRails - http://instantrails.rubyforge.org/wiki/wiki.pl&lt;br /&gt;
&lt;br /&gt;
		An all in one, single click installer for Windows that includes a Rails server.&lt;br /&gt;
&lt;br /&gt;
	Mac: Locomotive - http://locomotive.raaum.org/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Projects''''' - http://www.workingwithrails.com/&lt;br /&gt;
&lt;br /&gt;
	A Database of Rails projects, programmers and websites&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails plugins''''' - http://agilewebdevelopment.com/&lt;br /&gt;
&lt;br /&gt;
	A collection of Rails open source plugins, searchable by category or keyword.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Sample Rails''''' - http://snippets.dzone.com/tag/rails&lt;br /&gt;
&lt;br /&gt;
	A collection of Rails code snippets.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Agile Rails book''''' - http://www.amazon.com/gp/product/097669400X/002-0481267-8083260?v=glance&amp;amp;n=283155&lt;br /&gt;
&lt;br /&gt;
	An excellent resource for learning how to apply Agile programming concepts to Rails.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails cheatsheet''''' - http://www.blainekendall.com/uploads/RubyOnRails-Cheatsheet-BlaineKendall.pdf&lt;br /&gt;
&lt;br /&gt;
	One user's list of best practices, gotchas and quirks of developing with Rails.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails best practices''''' - http://www.therailsway.com/&lt;br /&gt;
&lt;br /&gt;
	An official best practices list for programming in Rails.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Advanced Rails''''' - http://webonrails.com/&lt;br /&gt;
&lt;br /&gt;
	A resource for the advanced Rails programmer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Blog''''' - http://weblog.rubyonrails.org/&lt;br /&gt;
&lt;br /&gt;
	An online community of updates about current happenings with the Rails platform.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Guides''''' - http://guides.rubyonrails.org/&lt;br /&gt;
&lt;br /&gt;
	An all in one resource for learning Rails including Howtos, security and contributing to the Rails community.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Authoring Rails plugins''''' - http://nubyonrails.com/articles/2006/05/04/the-complete-guide-to-rails-plugins-part-i&lt;br /&gt;
&lt;br /&gt;
	A complete guide to authoring your own Rails plugins.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
== '''Tools for Rails (other than IDEs)''' ==&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
'''Test Unit'''&lt;br /&gt;
The Rails stack uses Test::Unit, known as the default Ruby unit testing framework shipping with Ruby.  There are various plugins and extension that could be used with Rails built-in Test::Unit to extend its functionality for support of TDD and BDD testing practices.&lt;br /&gt;
&lt;br /&gt;
[http://wiki.rubyonrails.org/addons/testing]&lt;br /&gt;
The link provides additional information in the form of supporting resources, whitepapers, examples, and plug-in documentation&lt;br /&gt;
&lt;br /&gt;
'''Example'''&lt;br /&gt;
[http://wiki.rubyonrails.org/testing/test-unitrequire] &lt;br /&gt;
&lt;br /&gt;
 Image:class CalculatorTest &amp;lt; Test::Unit::TestCase &lt;br /&gt;
  def test_add_two_numbers_for_the_sum &lt;br /&gt;
    calculator = Calculator.new &lt;br /&gt;
    assert_equal 4, calculator.sum(2, 2)&lt;br /&gt;
  end &lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
== TDD: Test Driven Development ==&lt;br /&gt;
 	&lt;br /&gt;
Test Driven Development is a combination of refactoring and test first development, a form of development where the test is &lt;br /&gt;
&lt;br /&gt;
written prior to completed production code.  The goal of TDD is the specification of requirements and not the validation of &lt;br /&gt;
&lt;br /&gt;
requirements.  There are a few testing frameworks that are used to implement the TDD programming technique.  &lt;br /&gt;
&lt;br /&gt;
[http://ruby.about.com/b/2009/01/28/test-driven-development-with-rails.htm]&lt;br /&gt;
This link provides a comprehensive overview of test driven development practices and available resources for implementation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''RSpec'''&lt;br /&gt;
RSpec is a testing framework for Behavior Driven Development, complete with its own expectations, matchers and mocking and &lt;br /&gt;
&lt;br /&gt;
stubbing facilities. It goes along hand in hand with Cucumber, though it plays nicely with many other testing frameworks as well.&lt;br /&gt;
&lt;br /&gt;
''Example''&lt;br /&gt;
&lt;br /&gt;
The following code will fail during execution.  ''Expresses some basic desired behavior''[http://rspec.info/]&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; bowling_spec.rb&lt;br /&gt;
 require ‘bowling’&lt;br /&gt;
 describe Bowling do&lt;br /&gt;
 it &amp;quot;should score 0 for gutter game&amp;quot; do&lt;br /&gt;
 bowling = Bowling.new&lt;br /&gt;
 20.times { bowling.hit(0) }&lt;br /&gt;
 bowling.score.should == 0&lt;br /&gt;
 end&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following code pass execution.  ''Just enough code to make it pass.''[http://rspec.info/] &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; bowling.rb&lt;br /&gt;
 class Bowling&lt;br /&gt;
 def hit(pins)&lt;br /&gt;
 end&lt;br /&gt;
 def score&lt;br /&gt;
 0&lt;br /&gt;
 end&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://www.ibm.com/developerworks/web/library/wa-rspec/]&lt;br /&gt;
The link provides a brief overview of RSpec with a comprehensive series of examples and a conceptual view of Rpecs step by step &lt;br /&gt;
&lt;br /&gt;
implementation process&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Cucumber'''&lt;br /&gt;
Cucumber is used with TDD and BDD within other testing frameworks such as RSpec by letting software development teams describe how &lt;br /&gt;
&lt;br /&gt;
software should behave in plain text. The text is written in a business-readable domain-specific language and serves as &lt;br /&gt;
&lt;br /&gt;
documentation, automated tests and development-aid - all rolled into one format.&lt;br /&gt;
&lt;br /&gt;
 Feature: Log in and out&lt;br /&gt;
  As an administrator&lt;br /&gt;
  I want to restrict access to certain portions of my site&lt;br /&gt;
  In order to prevent users from changing the content&lt;br /&gt;
&lt;br /&gt;
  Scenario: Logging in&lt;br /&gt;
    Given I am not logged in as an administrator&lt;br /&gt;
    When I go to the administrative page&lt;br /&gt;
    And I fill in the fields&lt;br /&gt;
      | Username | admin  |&lt;br /&gt;
      | Password | secret |&lt;br /&gt;
    And I press &amp;quot;Log in&amp;quot;&lt;br /&gt;
    Then I should be on the administrative page&lt;br /&gt;
    And I should see &amp;quot;Log out&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  Scenario: Logging out&lt;br /&gt;
    ...&lt;br /&gt;
&lt;br /&gt;
[http://cukes.info/]&lt;br /&gt;
The link provides a detail decription, definition, and examples of Cucumber implementation best practices and supported &lt;br /&gt;
&lt;br /&gt;
frameworks.&lt;br /&gt;
&lt;br /&gt;
'''Cucumber Example:'''&lt;br /&gt;
Scenario: See all vendors&lt;br /&gt;
    Given I am logged in as a user in the administrator role&lt;br /&gt;
    And There are 3 vendors&lt;br /&gt;
    When I go to the manage vendors page&lt;br /&gt;
    Then I should see the first 3 vendor names&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Shoulda''' &lt;br /&gt;
An extension to Test::Unit with additional helpers, macros, and assertions.&lt;br /&gt;
 &lt;br /&gt;
[http://www.thoughtbot.com/projects/shoulda]&lt;br /&gt;
The link provides a more conclusive definition of Shoulda along with installation facts and working examples of the Shoulda &lt;br /&gt;
&lt;br /&gt;
testing framework within Ruby's built in Test::Unit&lt;br /&gt;
&lt;br /&gt;
== BDD: Behavior Driven Development ==&lt;br /&gt;
	[http://eggsonbread.com/2009/07/22/behavior-driven-development-in-a-nutshell/]&lt;br /&gt;
Behavior driven development was born from the concepts behind the implementation of TDD.  It brings together strands from &lt;br /&gt;
&lt;br /&gt;
TestDrivenDevelopment and DomainDrivenDesign into an integrated whole, making the relationship between these two powerful &lt;br /&gt;
&lt;br /&gt;
approaches to software development more evident.  Most test driven development testing frameworks such as RSpec and Cucumber also support behavior driven development testing. &lt;br /&gt;
&lt;br /&gt;
[http://behaviour-driven.org/]&lt;br /&gt;
The link supports BDDs definition with additional links to more viable behavior driven development resources.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Other Test Tool Resources'''&lt;br /&gt;
&lt;br /&gt;
''Watir:'' is an open-source library for automating web browsers. It allows you to write tests that are easy to read and maintain. It &lt;br /&gt;
&lt;br /&gt;
is simple and flexible.  &lt;br /&gt;
[http://wtr.rubyforge.org/]&lt;br /&gt;
The link provides an overview of Watir with installation specifications, examples, and supported platforms&lt;br /&gt;
&lt;br /&gt;
''NullDB:'' [http://avdi.org/projects/nulldb/]&lt;br /&gt;
a way to speed up testing by avoiding database use.&lt;br /&gt;
&lt;br /&gt;
''Bleakhouse:'' memory leak detection&lt;br /&gt;
[http://www.rubyinside.com/bleakhouse-tool-to-find-memory-leaks-in-your-rails-applications-470.html]&lt;br /&gt;
The link gives additional information on Bleakhouse profiling for memory leaks&lt;br /&gt;
&lt;br /&gt;
''ruby-debug:'' &lt;br /&gt;
Other than the extensive use of breakpoints Rails provides little to streamline the debugging process. Ruby-debug provides Rails with a plug-in extending the functionality of Rails built in debugger. &lt;br /&gt;
&lt;br /&gt;
[http://rubyforge.org/softwaremap/trove_list.php?form_cat=47]&lt;br /&gt;
The link provides twenty additional debug resources available for RoR&lt;br /&gt;
&lt;br /&gt;
== '''Conclusion''' ==&lt;br /&gt;
&lt;br /&gt;
Rails is a very comprehensive development environment for Ruby with numerous extensions, plugins, and other resources outside of IDEs to strengthen the functionality of the open source web application framework.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
''All sources used to create this wiki are linked in the above text.''&lt;/div&gt;</summary>
		<author><name>Los Bravo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_team1&amp;diff=22175</id>
		<title>CSC/ECE 517 Fall 2009/wiki1b team1</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_team1&amp;diff=22175"/>
		<updated>2009-09-28T20:02:41Z</updated>

		<summary type="html">&lt;p&gt;Los Bravo: /* TDD: Test Driven Development */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;CSC/ECE 517 Fall 2009&lt;br /&gt;
&lt;br /&gt;
'''&lt;br /&gt;
== Resources for Rails (other than IDEs) ==&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
IDEs are a valuable resource for Rails development, however there are many other resources and tools&lt;br /&gt;
that can either replace or supplement IDEs.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Resources for Rails other than IDEs&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails API''''' - http://api.rubyonrails.org/&lt;br /&gt;
&lt;br /&gt;
	This site documents Rails files, classes and methods that can be used to build a Rails application.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Forum''''' - http://railsforum.com/&lt;br /&gt;
&lt;br /&gt;
	A discussion forum covering all aspects of Rails for beginners and experts including planning, &lt;br /&gt;
	programming, extensions and production.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Introducing Ruby on Rails''''' &lt;br /&gt;
&lt;br /&gt;
Part 1 http://www.softwaredeveloper.com/features/intro-to-ruby-on-rails-042507/&lt;br /&gt;
&lt;br /&gt;
Part 2 http://www.softwaredeveloper.com/features/intro-to-ruby-on-rails-part-two-043007/&lt;br /&gt;
&lt;br /&gt;
An excellent introduction to Rails for novices&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Installers'''&lt;br /&gt;
''&lt;br /&gt;
	&lt;br /&gt;
Windows: InstantRails - http://instantrails.rubyforge.org/wiki/wiki.pl&lt;br /&gt;
&lt;br /&gt;
		An all in one, single click installer for Windows that includes a Rails server.&lt;br /&gt;
&lt;br /&gt;
	Mac: Locomotive - http://locomotive.raaum.org/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Projects''''' - http://www.workingwithrails.com/&lt;br /&gt;
&lt;br /&gt;
	A Database of Rails projects, programmers and websites&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails plugins''''' - http://agilewebdevelopment.com/&lt;br /&gt;
&lt;br /&gt;
	A collection of Rails open source plugins, searchable by category or keyword.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Sample Rails''''' - http://snippets.dzone.com/tag/rails&lt;br /&gt;
&lt;br /&gt;
	A collection of Rails code snippets.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Agile Rails book''''' - http://www.amazon.com/gp/product/097669400X/002-0481267-8083260?v=glance&amp;amp;n=283155&lt;br /&gt;
&lt;br /&gt;
	An excellent resource for learning how to apply Agile programming concepts to Rails.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails cheatsheet''''' - http://www.blainekendall.com/uploads/RubyOnRails-Cheatsheet-BlaineKendall.pdf&lt;br /&gt;
&lt;br /&gt;
	One user's list of best practices, gotchas and quirks of developing with Rails.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails best practices''''' - http://www.therailsway.com/&lt;br /&gt;
&lt;br /&gt;
	An official best practices list for programming in Rails.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Advanced Rails''''' - http://webonrails.com/&lt;br /&gt;
&lt;br /&gt;
	A resource for the advanced Rails programmer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Blog''''' - http://weblog.rubyonrails.org/&lt;br /&gt;
&lt;br /&gt;
	An online community of updates about current happenings with the Rails platform.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Guides''''' - http://guides.rubyonrails.org/&lt;br /&gt;
&lt;br /&gt;
	An all in one resource for learning Rails including Howtos, security and contributing to the Rails community.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Authoring Rails plugins''''' - http://nubyonrails.com/articles/2006/05/04/the-complete-guide-to-rails-plugins-part-i&lt;br /&gt;
&lt;br /&gt;
	A complete guide to authoring your own Rails plugins.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
== '''Tools for Rails (other than IDEs)''' ==&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
'''Test Unit'''&lt;br /&gt;
The Rails stack uses Test::Unit, known as the default Ruby unit testing framework shipping with Ruby.  There are various plugins and extension that could be used with Rails built-in Test::Unit to extend its functionality for support of TDD and BDD testing practices.&lt;br /&gt;
&lt;br /&gt;
[http://wiki.rubyonrails.org/addons/testing]&lt;br /&gt;
The link provides additional information in the form of supporting resources, whitepapers, examples, and plug-in documentation&lt;br /&gt;
&lt;br /&gt;
'''Example'''&lt;br /&gt;
[http://wiki.rubyonrails.org/testing/test-unitrequire] &lt;br /&gt;
&lt;br /&gt;
 Image:class CalculatorTest &amp;lt; Test::Unit::TestCase &lt;br /&gt;
  def test_add_two_numbers_for_the_sum &lt;br /&gt;
    calculator = Calculator.new &lt;br /&gt;
    assert_equal 4, calculator.sum(2, 2)&lt;br /&gt;
  end &lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
== TDD: Test Driven Development ==&lt;br /&gt;
 	&lt;br /&gt;
Test Driven Development is a combination of refactoring and test first development, a form of development where the test is &lt;br /&gt;
&lt;br /&gt;
written prior to completed production code.  The goal of TDD is the specification of requirements and not the validation of &lt;br /&gt;
&lt;br /&gt;
requirements.  There are a few testing frameworks that are used to implement the TDD programming technique.  &lt;br /&gt;
&lt;br /&gt;
[http://ruby.about.com/b/2009/01/28/test-driven-development-with-rails.htm]&lt;br /&gt;
This link provides a comprehensive overview of test driven development practices and available resources for implementation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''RSpec'''&lt;br /&gt;
RSpec is a testing framework for Behavior Driven Development, complete with its own expectations, matchers and mocking and &lt;br /&gt;
&lt;br /&gt;
stubbing facilities. It goes along hand in hand with Cucumber, though it plays nicely with many other testing frameworks as well.&lt;br /&gt;
&lt;br /&gt;
''Example''&lt;br /&gt;
&lt;br /&gt;
The following code will fail during execution.  ''Expresses some basic desired behavior''[http://rspec.info/]&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; bowling_spec.rb&lt;br /&gt;
 require ‘bowling’&lt;br /&gt;
 describe Bowling do&lt;br /&gt;
 it &amp;quot;should score 0 for gutter game&amp;quot; do&lt;br /&gt;
 bowling = Bowling.new&lt;br /&gt;
 20.times { bowling.hit(0) }&lt;br /&gt;
 bowling.score.should == 0&lt;br /&gt;
 end&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following code pass execution.  ''Just enough code to make it pass.''[http://rspec.info/] &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; bowling.rb&lt;br /&gt;
 class Bowling&lt;br /&gt;
 def hit(pins)&lt;br /&gt;
 end&lt;br /&gt;
 def score&lt;br /&gt;
 0&lt;br /&gt;
 end&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
'''Model Examples'''&lt;br /&gt;
These are the equivalent of unit tests in Rails’ built in testing. Ironically&lt;br /&gt;
(for the traditional TDD’er) these are the only specs that we feel should actually interact&lt;br /&gt;
with the database.&lt;br /&gt;
&lt;br /&gt;
'''Controller Examples'''&lt;br /&gt;
These align somewhat with functional tests in rails, except&lt;br /&gt;
that they do not actually render views (though you can force rendering of views&lt;br /&gt;
if you prefer). Instead of setting expectations about what goes on a page, you&lt;br /&gt;
set expectations about what templates get rendered. &lt;br /&gt;
&lt;br /&gt;
'''View Examples'''&lt;br /&gt;
This is the other half of Rails’ functional testing. View specs allow&lt;br /&gt;
you to set up assigns (thanks to ZenTest).&lt;br /&gt;
&lt;br /&gt;
'''Helper Examples'''&lt;br /&gt;
let you specify directly methods that live in your helpers.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://www.ibm.com/developerworks/web/library/wa-rspec/]&lt;br /&gt;
The link provides a brief overview of RSpec with a comprehensive series of examples and a conceptual view of Rpecs step by step &lt;br /&gt;
&lt;br /&gt;
implementation process&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Cucumber'''&lt;br /&gt;
Cucumber is used with TDD and BDD within other testing frameworks such as RSpec by letting software development teams describe how &lt;br /&gt;
&lt;br /&gt;
software should behave in plain text. The text is written in a business-readable domain-specific language and serves as &lt;br /&gt;
&lt;br /&gt;
documentation, automated tests and development-aid - all rolled into one format.&lt;br /&gt;
&lt;br /&gt;
[http://cukes.info/]&lt;br /&gt;
The link provides a detail decription, definition, and examples of Cucumber implementation best practices and supported &lt;br /&gt;
&lt;br /&gt;
frameworks.&lt;br /&gt;
&lt;br /&gt;
'''Cucumber Example:'''&lt;br /&gt;
Scenario: See all vendors&lt;br /&gt;
    Given I am logged in as a user in the administrator role&lt;br /&gt;
    And There are 3 vendors&lt;br /&gt;
    When I go to the manage vendors page&lt;br /&gt;
    Then I should see the first 3 vendor names&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Shoulda''' &lt;br /&gt;
An extension to Test::Unit with additional helpers, macros, and assertions.&lt;br /&gt;
 &lt;br /&gt;
[http://www.thoughtbot.com/projects/shoulda]&lt;br /&gt;
The link provides a more conclusive definition of Shoulda along with installation facts and working examples of the Shoulda &lt;br /&gt;
&lt;br /&gt;
testing framework within Ruby's built in Test::Unit&lt;br /&gt;
&lt;br /&gt;
== BDD: Behavior Driven Development ==&lt;br /&gt;
	[http://eggsonbread.com/2009/07/22/behavior-driven-development-in-a-nutshell/]&lt;br /&gt;
Behavior driven development was born from the concepts behind the implementation of TDD.  It brings together strands from &lt;br /&gt;
&lt;br /&gt;
TestDrivenDevelopment and DomainDrivenDesign into an integrated whole, making the relationship between these two powerful &lt;br /&gt;
&lt;br /&gt;
approaches to software development more evident.  Most test driven development testing frameworks such as RSpec and Cucumber also support behavior driven development testing. &lt;br /&gt;
&lt;br /&gt;
[http://behaviour-driven.org/]&lt;br /&gt;
The link supports BDDs definition with additional links to more viable behavior driven development resources.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Other Test Tool Resources'''&lt;br /&gt;
&lt;br /&gt;
''Watir:'' is an open-source library for automating web browsers. It allows you to write tests that are easy to read and maintain. It &lt;br /&gt;
&lt;br /&gt;
is simple and flexible.  &lt;br /&gt;
[http://wtr.rubyforge.org/]&lt;br /&gt;
The link provides an overview of Watir with installation specifications, examples, and supported platforms&lt;br /&gt;
&lt;br /&gt;
''NullDB:'' [http://avdi.org/projects/nulldb/]&lt;br /&gt;
a way to speed up testing by avoiding database use.&lt;br /&gt;
&lt;br /&gt;
''Bleakhouse:'' memory leak detection&lt;br /&gt;
[http://www.rubyinside.com/bleakhouse-tool-to-find-memory-leaks-in-your-rails-applications-470.html]&lt;br /&gt;
The link gives additional information on Bleakhouse profiling for memory leaks&lt;br /&gt;
&lt;br /&gt;
''ruby-debug:'' &lt;br /&gt;
Other than the extensive use of breakpoints Rails provides little to streamline the debugging process. Ruby-debug provides Rails with a plug-in extending the functionality of Rails built in debugger. &lt;br /&gt;
&lt;br /&gt;
[http://rubyforge.org/softwaremap/trove_list.php?form_cat=47]&lt;br /&gt;
The link provides twenty additional debug resources available for RoR&lt;br /&gt;
&lt;br /&gt;
== '''Conclusion''' ==&lt;br /&gt;
&lt;br /&gt;
Rails is a very comprehensive development environment for Ruby with numerous extensions, plugins, and other resources outside of IDEs to strengthen the functionality of the open source web application framework.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
''All sources used to create this wiki are linked in the above text.''&lt;/div&gt;</summary>
		<author><name>Los Bravo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_team1&amp;diff=22174</id>
		<title>CSC/ECE 517 Fall 2009/wiki1b team1</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_team1&amp;diff=22174"/>
		<updated>2009-09-28T20:02:11Z</updated>

		<summary type="html">&lt;p&gt;Los Bravo: /* TDD: Test Driven Development */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;CSC/ECE 517 Fall 2009&lt;br /&gt;
&lt;br /&gt;
'''&lt;br /&gt;
== Resources for Rails (other than IDEs) ==&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
IDEs are a valuable resource for Rails development, however there are many other resources and tools&lt;br /&gt;
that can either replace or supplement IDEs.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Resources for Rails other than IDEs&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails API''''' - http://api.rubyonrails.org/&lt;br /&gt;
&lt;br /&gt;
	This site documents Rails files, classes and methods that can be used to build a Rails application.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Forum''''' - http://railsforum.com/&lt;br /&gt;
&lt;br /&gt;
	A discussion forum covering all aspects of Rails for beginners and experts including planning, &lt;br /&gt;
	programming, extensions and production.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Introducing Ruby on Rails''''' &lt;br /&gt;
&lt;br /&gt;
Part 1 http://www.softwaredeveloper.com/features/intro-to-ruby-on-rails-042507/&lt;br /&gt;
&lt;br /&gt;
Part 2 http://www.softwaredeveloper.com/features/intro-to-ruby-on-rails-part-two-043007/&lt;br /&gt;
&lt;br /&gt;
An excellent introduction to Rails for novices&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Installers'''&lt;br /&gt;
''&lt;br /&gt;
	&lt;br /&gt;
Windows: InstantRails - http://instantrails.rubyforge.org/wiki/wiki.pl&lt;br /&gt;
&lt;br /&gt;
		An all in one, single click installer for Windows that includes a Rails server.&lt;br /&gt;
&lt;br /&gt;
	Mac: Locomotive - http://locomotive.raaum.org/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Projects''''' - http://www.workingwithrails.com/&lt;br /&gt;
&lt;br /&gt;
	A Database of Rails projects, programmers and websites&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails plugins''''' - http://agilewebdevelopment.com/&lt;br /&gt;
&lt;br /&gt;
	A collection of Rails open source plugins, searchable by category or keyword.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Sample Rails''''' - http://snippets.dzone.com/tag/rails&lt;br /&gt;
&lt;br /&gt;
	A collection of Rails code snippets.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Agile Rails book''''' - http://www.amazon.com/gp/product/097669400X/002-0481267-8083260?v=glance&amp;amp;n=283155&lt;br /&gt;
&lt;br /&gt;
	An excellent resource for learning how to apply Agile programming concepts to Rails.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails cheatsheet''''' - http://www.blainekendall.com/uploads/RubyOnRails-Cheatsheet-BlaineKendall.pdf&lt;br /&gt;
&lt;br /&gt;
	One user's list of best practices, gotchas and quirks of developing with Rails.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails best practices''''' - http://www.therailsway.com/&lt;br /&gt;
&lt;br /&gt;
	An official best practices list for programming in Rails.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Advanced Rails''''' - http://webonrails.com/&lt;br /&gt;
&lt;br /&gt;
	A resource for the advanced Rails programmer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Blog''''' - http://weblog.rubyonrails.org/&lt;br /&gt;
&lt;br /&gt;
	An online community of updates about current happenings with the Rails platform.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Guides''''' - http://guides.rubyonrails.org/&lt;br /&gt;
&lt;br /&gt;
	An all in one resource for learning Rails including Howtos, security and contributing to the Rails community.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Authoring Rails plugins''''' - http://nubyonrails.com/articles/2006/05/04/the-complete-guide-to-rails-plugins-part-i&lt;br /&gt;
&lt;br /&gt;
	A complete guide to authoring your own Rails plugins.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
== '''Tools for Rails (other than IDEs)''' ==&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
'''Test Unit'''&lt;br /&gt;
The Rails stack uses Test::Unit, known as the default Ruby unit testing framework shipping with Ruby.  There are various plugins and extension that could be used with Rails built-in Test::Unit to extend its functionality for support of TDD and BDD testing practices.&lt;br /&gt;
&lt;br /&gt;
[http://wiki.rubyonrails.org/addons/testing]&lt;br /&gt;
The link provides additional information in the form of supporting resources, whitepapers, examples, and plug-in documentation&lt;br /&gt;
&lt;br /&gt;
'''Example'''&lt;br /&gt;
[http://wiki.rubyonrails.org/testing/test-unitrequire] &lt;br /&gt;
&lt;br /&gt;
 Image:class CalculatorTest &amp;lt; Test::Unit::TestCase &lt;br /&gt;
  def test_add_two_numbers_for_the_sum &lt;br /&gt;
    calculator = Calculator.new &lt;br /&gt;
    assert_equal 4, calculator.sum(2, 2)&lt;br /&gt;
  end &lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
== TDD: Test Driven Development ==&lt;br /&gt;
 	&lt;br /&gt;
Test Driven Development is a combination of refactoring and test first development, a form of development where the test is &lt;br /&gt;
&lt;br /&gt;
written prior to completed production code.  The goal of TDD is the specification of requirements and not the validation of &lt;br /&gt;
&lt;br /&gt;
requirements.  There are a few testing frameworks that are used to implement the TDD programming technique.  &lt;br /&gt;
&lt;br /&gt;
[http://ruby.about.com/b/2009/01/28/test-driven-development-with-rails.htm]&lt;br /&gt;
This link provides a comprehensive overview of test driven development practices and available resources for implementation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''RSpec'''&lt;br /&gt;
RSpec is a testing framework for Behavior Driven Development, complete with its own expectations, matchers and mocking and &lt;br /&gt;
&lt;br /&gt;
stubbing facilities. It goes along hand in hand with Cucumber, though it plays nicely with many other testing frameworks as well.&lt;br /&gt;
&lt;br /&gt;
''Example''[http://rspec.info/]&lt;br /&gt;
&lt;br /&gt;
The following code will fail during execution.  ''Expresses some basic desired behavior''[http://rspec.info/]&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; bowling_spec.rb&lt;br /&gt;
 require ‘bowling’&lt;br /&gt;
 describe Bowling do&lt;br /&gt;
 it &amp;quot;should score 0 for gutter game&amp;quot; do&lt;br /&gt;
 bowling = Bowling.new&lt;br /&gt;
 20.times { bowling.hit(0) }&lt;br /&gt;
 bowling.score.should == 0&lt;br /&gt;
 end&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following code pass execution.   ''Just enough code to make it pass.'' &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; bowling.rb&lt;br /&gt;
 class Bowling&lt;br /&gt;
 def hit(pins)&lt;br /&gt;
 end&lt;br /&gt;
 def score&lt;br /&gt;
 0&lt;br /&gt;
 end&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
'''Model Examples'''&lt;br /&gt;
These are the equivalent of unit tests in Rails’ built in testing. Ironically&lt;br /&gt;
(for the traditional TDD’er) these are the only specs that we feel should actually interact&lt;br /&gt;
with the database.&lt;br /&gt;
&lt;br /&gt;
'''Controller Examples'''&lt;br /&gt;
These align somewhat with functional tests in rails, except&lt;br /&gt;
that they do not actually render views (though you can force rendering of views&lt;br /&gt;
if you prefer). Instead of setting expectations about what goes on a page, you&lt;br /&gt;
set expectations about what templates get rendered. &lt;br /&gt;
&lt;br /&gt;
'''View Examples'''&lt;br /&gt;
This is the other half of Rails’ functional testing. View specs allow&lt;br /&gt;
you to set up assigns (thanks to ZenTest).&lt;br /&gt;
&lt;br /&gt;
'''Helper Examples'''&lt;br /&gt;
let you specify directly methods that live in your helpers.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://www.ibm.com/developerworks/web/library/wa-rspec/]&lt;br /&gt;
The link provides a brief overview of RSpec with a comprehensive series of examples and a conceptual view of Rpecs step by step &lt;br /&gt;
&lt;br /&gt;
implementation process&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Cucumber'''&lt;br /&gt;
Cucumber is used with TDD and BDD within other testing frameworks such as RSpec by letting software development teams describe how &lt;br /&gt;
&lt;br /&gt;
software should behave in plain text. The text is written in a business-readable domain-specific language and serves as &lt;br /&gt;
&lt;br /&gt;
documentation, automated tests and development-aid - all rolled into one format.&lt;br /&gt;
&lt;br /&gt;
[http://cukes.info/]&lt;br /&gt;
The link provides a detail decription, definition, and examples of Cucumber implementation best practices and supported &lt;br /&gt;
&lt;br /&gt;
frameworks.&lt;br /&gt;
&lt;br /&gt;
'''Cucumber Example:'''&lt;br /&gt;
Scenario: See all vendors&lt;br /&gt;
    Given I am logged in as a user in the administrator role&lt;br /&gt;
    And There are 3 vendors&lt;br /&gt;
    When I go to the manage vendors page&lt;br /&gt;
    Then I should see the first 3 vendor names&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Shoulda''' &lt;br /&gt;
An extension to Test::Unit with additional helpers, macros, and assertions.&lt;br /&gt;
 &lt;br /&gt;
[http://www.thoughtbot.com/projects/shoulda]&lt;br /&gt;
The link provides a more conclusive definition of Shoulda along with installation facts and working examples of the Shoulda &lt;br /&gt;
&lt;br /&gt;
testing framework within Ruby's built in Test::Unit&lt;br /&gt;
&lt;br /&gt;
== BDD: Behavior Driven Development ==&lt;br /&gt;
	[http://eggsonbread.com/2009/07/22/behavior-driven-development-in-a-nutshell/]&lt;br /&gt;
Behavior driven development was born from the concepts behind the implementation of TDD.  It brings together strands from &lt;br /&gt;
&lt;br /&gt;
TestDrivenDevelopment and DomainDrivenDesign into an integrated whole, making the relationship between these two powerful &lt;br /&gt;
&lt;br /&gt;
approaches to software development more evident.  Most test driven development testing frameworks such as RSpec and Cucumber also support behavior driven development testing. &lt;br /&gt;
&lt;br /&gt;
[http://behaviour-driven.org/]&lt;br /&gt;
The link supports BDDs definition with additional links to more viable behavior driven development resources.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Other Test Tool Resources'''&lt;br /&gt;
&lt;br /&gt;
''Watir:'' is an open-source library for automating web browsers. It allows you to write tests that are easy to read and maintain. It &lt;br /&gt;
&lt;br /&gt;
is simple and flexible.  &lt;br /&gt;
[http://wtr.rubyforge.org/]&lt;br /&gt;
The link provides an overview of Watir with installation specifications, examples, and supported platforms&lt;br /&gt;
&lt;br /&gt;
''NullDB:'' [http://avdi.org/projects/nulldb/]&lt;br /&gt;
a way to speed up testing by avoiding database use.&lt;br /&gt;
&lt;br /&gt;
''Bleakhouse:'' memory leak detection&lt;br /&gt;
[http://www.rubyinside.com/bleakhouse-tool-to-find-memory-leaks-in-your-rails-applications-470.html]&lt;br /&gt;
The link gives additional information on Bleakhouse profiling for memory leaks&lt;br /&gt;
&lt;br /&gt;
''ruby-debug:'' &lt;br /&gt;
Other than the extensive use of breakpoints Rails provides little to streamline the debugging process. Ruby-debug provides Rails with a plug-in extending the functionality of Rails built in debugger. &lt;br /&gt;
&lt;br /&gt;
[http://rubyforge.org/softwaremap/trove_list.php?form_cat=47]&lt;br /&gt;
The link provides twenty additional debug resources available for RoR&lt;br /&gt;
&lt;br /&gt;
== '''Conclusion''' ==&lt;br /&gt;
&lt;br /&gt;
Rails is a very comprehensive development environment for Ruby with numerous extensions, plugins, and other resources outside of IDEs to strengthen the functionality of the open source web application framework.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
''All sources used to create this wiki are linked in the above text.''&lt;/div&gt;</summary>
		<author><name>Los Bravo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_team1&amp;diff=22173</id>
		<title>CSC/ECE 517 Fall 2009/wiki1b team1</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_team1&amp;diff=22173"/>
		<updated>2009-09-28T20:00:49Z</updated>

		<summary type="html">&lt;p&gt;Los Bravo: /* TDD: Test Driven Development */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;CSC/ECE 517 Fall 2009&lt;br /&gt;
&lt;br /&gt;
'''&lt;br /&gt;
== Resources for Rails (other than IDEs) ==&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
IDEs are a valuable resource for Rails development, however there are many other resources and tools&lt;br /&gt;
that can either replace or supplement IDEs.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Resources for Rails other than IDEs&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails API''''' - http://api.rubyonrails.org/&lt;br /&gt;
&lt;br /&gt;
	This site documents Rails files, classes and methods that can be used to build a Rails application.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Forum''''' - http://railsforum.com/&lt;br /&gt;
&lt;br /&gt;
	A discussion forum covering all aspects of Rails for beginners and experts including planning, &lt;br /&gt;
	programming, extensions and production.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Introducing Ruby on Rails''''' &lt;br /&gt;
&lt;br /&gt;
Part 1 http://www.softwaredeveloper.com/features/intro-to-ruby-on-rails-042507/&lt;br /&gt;
&lt;br /&gt;
Part 2 http://www.softwaredeveloper.com/features/intro-to-ruby-on-rails-part-two-043007/&lt;br /&gt;
&lt;br /&gt;
An excellent introduction to Rails for novices&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Installers'''&lt;br /&gt;
''&lt;br /&gt;
	&lt;br /&gt;
Windows: InstantRails - http://instantrails.rubyforge.org/wiki/wiki.pl&lt;br /&gt;
&lt;br /&gt;
		An all in one, single click installer for Windows that includes a Rails server.&lt;br /&gt;
&lt;br /&gt;
	Mac: Locomotive - http://locomotive.raaum.org/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Projects''''' - http://www.workingwithrails.com/&lt;br /&gt;
&lt;br /&gt;
	A Database of Rails projects, programmers and websites&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails plugins''''' - http://agilewebdevelopment.com/&lt;br /&gt;
&lt;br /&gt;
	A collection of Rails open source plugins, searchable by category or keyword.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Sample Rails''''' - http://snippets.dzone.com/tag/rails&lt;br /&gt;
&lt;br /&gt;
	A collection of Rails code snippets.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Agile Rails book''''' - http://www.amazon.com/gp/product/097669400X/002-0481267-8083260?v=glance&amp;amp;n=283155&lt;br /&gt;
&lt;br /&gt;
	An excellent resource for learning how to apply Agile programming concepts to Rails.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails cheatsheet''''' - http://www.blainekendall.com/uploads/RubyOnRails-Cheatsheet-BlaineKendall.pdf&lt;br /&gt;
&lt;br /&gt;
	One user's list of best practices, gotchas and quirks of developing with Rails.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails best practices''''' - http://www.therailsway.com/&lt;br /&gt;
&lt;br /&gt;
	An official best practices list for programming in Rails.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Advanced Rails''''' - http://webonrails.com/&lt;br /&gt;
&lt;br /&gt;
	A resource for the advanced Rails programmer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Blog''''' - http://weblog.rubyonrails.org/&lt;br /&gt;
&lt;br /&gt;
	An online community of updates about current happenings with the Rails platform.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Guides''''' - http://guides.rubyonrails.org/&lt;br /&gt;
&lt;br /&gt;
	An all in one resource for learning Rails including Howtos, security and contributing to the Rails community.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Authoring Rails plugins''''' - http://nubyonrails.com/articles/2006/05/04/the-complete-guide-to-rails-plugins-part-i&lt;br /&gt;
&lt;br /&gt;
	A complete guide to authoring your own Rails plugins.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
== '''Tools for Rails (other than IDEs)''' ==&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
'''Test Unit'''&lt;br /&gt;
The Rails stack uses Test::Unit, known as the default Ruby unit testing framework shipping with Ruby.  There are various plugins and extension that could be used with Rails built-in Test::Unit to extend its functionality for support of TDD and BDD testing practices.&lt;br /&gt;
&lt;br /&gt;
[http://wiki.rubyonrails.org/addons/testing]&lt;br /&gt;
The link provides additional information in the form of supporting resources, whitepapers, examples, and plug-in documentation&lt;br /&gt;
&lt;br /&gt;
'''Example'''&lt;br /&gt;
[http://wiki.rubyonrails.org/testing/test-unitrequire] &lt;br /&gt;
&lt;br /&gt;
 Image:class CalculatorTest &amp;lt; Test::Unit::TestCase &lt;br /&gt;
  def test_add_two_numbers_for_the_sum &lt;br /&gt;
    calculator = Calculator.new &lt;br /&gt;
    assert_equal 4, calculator.sum(2, 2)&lt;br /&gt;
  end &lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
== TDD: Test Driven Development ==&lt;br /&gt;
 	&lt;br /&gt;
Test Driven Development is a combination of refactoring and test first development, a form of development where the test is &lt;br /&gt;
&lt;br /&gt;
written prior to completed production code.  The goal of TDD is the specification of requirements and not the validation of &lt;br /&gt;
&lt;br /&gt;
requirements.  There are a few testing frameworks that are used to implement the TDD programming technique.  &lt;br /&gt;
&lt;br /&gt;
[http://ruby.about.com/b/2009/01/28/test-driven-development-with-rails.htm]&lt;br /&gt;
This link provides a comprehensive overview of test driven development practices and available resources for implementation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''RSpec'''&lt;br /&gt;
RSpec is a testing framework for Behavior Driven Development, complete with its own expectations, matchers and mocking and &lt;br /&gt;
&lt;br /&gt;
stubbing facilities. It goes along hand in hand with Cucumber, though it plays nicely with many other testing frameworks as well.&lt;br /&gt;
&lt;br /&gt;
''Example expresses some basic desired behavior''[http://rspec.info/]&lt;br /&gt;
&lt;br /&gt;
The following code will fail during execution.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; bowling_spec.rb&lt;br /&gt;
 require ‘bowling’&lt;br /&gt;
 describe Bowling do&lt;br /&gt;
 it &amp;quot;should score 0 for gutter game&amp;quot; do&lt;br /&gt;
 bowling = Bowling.new&lt;br /&gt;
 20.times { bowling.hit(0) }&lt;br /&gt;
 bowling.score.should == 0&lt;br /&gt;
 end&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
''Just enough code to make it pass.''&lt;br /&gt;
&lt;br /&gt;
The following code pass execution.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; bowling.rb&lt;br /&gt;
 class Bowling&lt;br /&gt;
 def hit(pins)&lt;br /&gt;
 end&lt;br /&gt;
 def score&lt;br /&gt;
 0&lt;br /&gt;
 end&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
'''Model Examples'''&lt;br /&gt;
These are the equivalent of unit tests in Rails’ built in testing. Ironically&lt;br /&gt;
(for the traditional TDD’er) these are the only specs that we feel should actually interact&lt;br /&gt;
with the database.&lt;br /&gt;
&lt;br /&gt;
'''Controller Examples'''&lt;br /&gt;
These align somewhat with functional tests in rails, except&lt;br /&gt;
that they do not actually render views (though you can force rendering of views&lt;br /&gt;
if you prefer). Instead of setting expectations about what goes on a page, you&lt;br /&gt;
set expectations about what templates get rendered. &lt;br /&gt;
&lt;br /&gt;
'''View Examples'''&lt;br /&gt;
This is the other half of Rails’ functional testing. View specs allow&lt;br /&gt;
you to set up assigns (thanks to ZenTest).&lt;br /&gt;
&lt;br /&gt;
'''Helper Examples'''&lt;br /&gt;
let you specify directly methods that live in your helpers.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://www.ibm.com/developerworks/web/library/wa-rspec/]&lt;br /&gt;
The link provides a brief overview of RSpec with a comprehensive series of examples and a conceptual view of Rpecs step by step &lt;br /&gt;
&lt;br /&gt;
implementation process&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Cucumber'''&lt;br /&gt;
Cucumber is used with TDD and BDD within other testing frameworks such as RSpec by letting software development teams describe how &lt;br /&gt;
&lt;br /&gt;
software should behave in plain text. The text is written in a business-readable domain-specific language and serves as &lt;br /&gt;
&lt;br /&gt;
documentation, automated tests and development-aid - all rolled into one format.&lt;br /&gt;
&lt;br /&gt;
[http://cukes.info/]&lt;br /&gt;
The link provides a detail decription, definition, and examples of Cucumber implementation best practices and supported &lt;br /&gt;
&lt;br /&gt;
frameworks.&lt;br /&gt;
&lt;br /&gt;
'''Cucumber Example:'''&lt;br /&gt;
Scenario: See all vendors&lt;br /&gt;
    Given I am logged in as a user in the administrator role&lt;br /&gt;
    And There are 3 vendors&lt;br /&gt;
    When I go to the manage vendors page&lt;br /&gt;
    Then I should see the first 3 vendor names&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Shoulda''' &lt;br /&gt;
An extension to Test::Unit with additional helpers, macros, and assertions.&lt;br /&gt;
 &lt;br /&gt;
[http://www.thoughtbot.com/projects/shoulda]&lt;br /&gt;
The link provides a more conclusive definition of Shoulda along with installation facts and working examples of the Shoulda &lt;br /&gt;
&lt;br /&gt;
testing framework within Ruby's built in Test::Unit&lt;br /&gt;
&lt;br /&gt;
== BDD: Behavior Driven Development ==&lt;br /&gt;
	[http://eggsonbread.com/2009/07/22/behavior-driven-development-in-a-nutshell/]&lt;br /&gt;
Behavior driven development was born from the concepts behind the implementation of TDD.  It brings together strands from &lt;br /&gt;
&lt;br /&gt;
TestDrivenDevelopment and DomainDrivenDesign into an integrated whole, making the relationship between these two powerful &lt;br /&gt;
&lt;br /&gt;
approaches to software development more evident.  Most test driven development testing frameworks such as RSpec and Cucumber also support behavior driven development testing. &lt;br /&gt;
&lt;br /&gt;
[http://behaviour-driven.org/]&lt;br /&gt;
The link supports BDDs definition with additional links to more viable behavior driven development resources.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Other Test Tool Resources'''&lt;br /&gt;
&lt;br /&gt;
''Watir:'' is an open-source library for automating web browsers. It allows you to write tests that are easy to read and maintain. It &lt;br /&gt;
&lt;br /&gt;
is simple and flexible.  &lt;br /&gt;
[http://wtr.rubyforge.org/]&lt;br /&gt;
The link provides an overview of Watir with installation specifications, examples, and supported platforms&lt;br /&gt;
&lt;br /&gt;
''NullDB:'' [http://avdi.org/projects/nulldb/]&lt;br /&gt;
a way to speed up testing by avoiding database use.&lt;br /&gt;
&lt;br /&gt;
''Bleakhouse:'' memory leak detection&lt;br /&gt;
[http://www.rubyinside.com/bleakhouse-tool-to-find-memory-leaks-in-your-rails-applications-470.html]&lt;br /&gt;
The link gives additional information on Bleakhouse profiling for memory leaks&lt;br /&gt;
&lt;br /&gt;
''ruby-debug:'' &lt;br /&gt;
Other than the extensive use of breakpoints Rails provides little to streamline the debugging process. Ruby-debug provides Rails with a plug-in extending the functionality of Rails built in debugger. &lt;br /&gt;
&lt;br /&gt;
[http://rubyforge.org/softwaremap/trove_list.php?form_cat=47]&lt;br /&gt;
The link provides twenty additional debug resources available for RoR&lt;br /&gt;
&lt;br /&gt;
== '''Conclusion''' ==&lt;br /&gt;
&lt;br /&gt;
Rails is a very comprehensive development environment for Ruby with numerous extensions, plugins, and other resources outside of IDEs to strengthen the functionality of the open source web application framework.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
''All sources used to create this wiki are linked in the above text.''&lt;/div&gt;</summary>
		<author><name>Los Bravo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_team1&amp;diff=22172</id>
		<title>CSC/ECE 517 Fall 2009/wiki1b team1</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_team1&amp;diff=22172"/>
		<updated>2009-09-28T20:00:18Z</updated>

		<summary type="html">&lt;p&gt;Los Bravo: /* TDD: Test Driven Development */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;CSC/ECE 517 Fall 2009&lt;br /&gt;
&lt;br /&gt;
'''&lt;br /&gt;
== Resources for Rails (other than IDEs) ==&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
IDEs are a valuable resource for Rails development, however there are many other resources and tools&lt;br /&gt;
that can either replace or supplement IDEs.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Resources for Rails other than IDEs&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails API''''' - http://api.rubyonrails.org/&lt;br /&gt;
&lt;br /&gt;
	This site documents Rails files, classes and methods that can be used to build a Rails application.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Forum''''' - http://railsforum.com/&lt;br /&gt;
&lt;br /&gt;
	A discussion forum covering all aspects of Rails for beginners and experts including planning, &lt;br /&gt;
	programming, extensions and production.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Introducing Ruby on Rails''''' &lt;br /&gt;
&lt;br /&gt;
Part 1 http://www.softwaredeveloper.com/features/intro-to-ruby-on-rails-042507/&lt;br /&gt;
&lt;br /&gt;
Part 2 http://www.softwaredeveloper.com/features/intro-to-ruby-on-rails-part-two-043007/&lt;br /&gt;
&lt;br /&gt;
An excellent introduction to Rails for novices&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Installers'''&lt;br /&gt;
''&lt;br /&gt;
	&lt;br /&gt;
Windows: InstantRails - http://instantrails.rubyforge.org/wiki/wiki.pl&lt;br /&gt;
&lt;br /&gt;
		An all in one, single click installer for Windows that includes a Rails server.&lt;br /&gt;
&lt;br /&gt;
	Mac: Locomotive - http://locomotive.raaum.org/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Projects''''' - http://www.workingwithrails.com/&lt;br /&gt;
&lt;br /&gt;
	A Database of Rails projects, programmers and websites&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails plugins''''' - http://agilewebdevelopment.com/&lt;br /&gt;
&lt;br /&gt;
	A collection of Rails open source plugins, searchable by category or keyword.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Sample Rails''''' - http://snippets.dzone.com/tag/rails&lt;br /&gt;
&lt;br /&gt;
	A collection of Rails code snippets.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Agile Rails book''''' - http://www.amazon.com/gp/product/097669400X/002-0481267-8083260?v=glance&amp;amp;n=283155&lt;br /&gt;
&lt;br /&gt;
	An excellent resource for learning how to apply Agile programming concepts to Rails.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails cheatsheet''''' - http://www.blainekendall.com/uploads/RubyOnRails-Cheatsheet-BlaineKendall.pdf&lt;br /&gt;
&lt;br /&gt;
	One user's list of best practices, gotchas and quirks of developing with Rails.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails best practices''''' - http://www.therailsway.com/&lt;br /&gt;
&lt;br /&gt;
	An official best practices list for programming in Rails.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Advanced Rails''''' - http://webonrails.com/&lt;br /&gt;
&lt;br /&gt;
	A resource for the advanced Rails programmer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Blog''''' - http://weblog.rubyonrails.org/&lt;br /&gt;
&lt;br /&gt;
	An online community of updates about current happenings with the Rails platform.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Guides''''' - http://guides.rubyonrails.org/&lt;br /&gt;
&lt;br /&gt;
	An all in one resource for learning Rails including Howtos, security and contributing to the Rails community.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Authoring Rails plugins''''' - http://nubyonrails.com/articles/2006/05/04/the-complete-guide-to-rails-plugins-part-i&lt;br /&gt;
&lt;br /&gt;
	A complete guide to authoring your own Rails plugins.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
== '''Tools for Rails (other than IDEs)''' ==&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
'''Test Unit'''&lt;br /&gt;
The Rails stack uses Test::Unit, known as the default Ruby unit testing framework shipping with Ruby.  There are various plugins and extension that could be used with Rails built-in Test::Unit to extend its functionality for support of TDD and BDD testing practices.&lt;br /&gt;
&lt;br /&gt;
[http://wiki.rubyonrails.org/addons/testing]&lt;br /&gt;
The link provides additional information in the form of supporting resources, whitepapers, examples, and plug-in documentation&lt;br /&gt;
&lt;br /&gt;
'''Example'''&lt;br /&gt;
[http://wiki.rubyonrails.org/testing/test-unitrequire] &lt;br /&gt;
&lt;br /&gt;
 Image:class CalculatorTest &amp;lt; Test::Unit::TestCase &lt;br /&gt;
  def test_add_two_numbers_for_the_sum &lt;br /&gt;
    calculator = Calculator.new &lt;br /&gt;
    assert_equal 4, calculator.sum(2, 2)&lt;br /&gt;
  end &lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
== TDD: Test Driven Development ==&lt;br /&gt;
 	&lt;br /&gt;
Test Driven Development is a combination of refactoring and test first development, a form of development where the test is &lt;br /&gt;
&lt;br /&gt;
written prior to completed production code.  The goal of TDD is the specification of requirements and not the validation of &lt;br /&gt;
&lt;br /&gt;
requirements.  There are a few testing frameworks that are used to implement the TDD programming technique.  &lt;br /&gt;
&lt;br /&gt;
[http://ruby.about.com/b/2009/01/28/test-driven-development-with-rails.htm]&lt;br /&gt;
This link provides a comprehensive overview of test driven development practices and available resources for implementation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''RSpec'''&lt;br /&gt;
RSpec is a testing framework for Behavior Driven Development, complete with its own expectations, matchers and mocking and &lt;br /&gt;
&lt;br /&gt;
stubbing facilities. It goes along hand in hand with Cucumber, though it plays nicely with many other testing frameworks as well.&lt;br /&gt;
&lt;br /&gt;
''Example expresses some basic desired behavior''[http://rspec.info/]&lt;br /&gt;
The following code will fail during execution.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; bowling_spec.rb&lt;br /&gt;
 require ‘bowling’&lt;br /&gt;
 describe Bowling do&lt;br /&gt;
 it &amp;quot;should score 0 for gutter game&amp;quot; do&lt;br /&gt;
 bowling = Bowling.new&lt;br /&gt;
 20.times { bowling.hit(0) }&lt;br /&gt;
 bowling.score.should == 0&lt;br /&gt;
 end&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
''Just enough code to make it pass.''&lt;br /&gt;
The following code pass execution.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; bowling.rb&lt;br /&gt;
 class Bowling&lt;br /&gt;
 def hit(pins)&lt;br /&gt;
 end&lt;br /&gt;
 def score&lt;br /&gt;
 0&lt;br /&gt;
 end&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
'''Model Examples'''&lt;br /&gt;
These are the equivalent of unit tests in Rails’ built in testing. Ironically&lt;br /&gt;
(for the traditional TDD’er) these are the only specs that we feel should actually interact&lt;br /&gt;
with the database.&lt;br /&gt;
&lt;br /&gt;
'''Controller Examples'''&lt;br /&gt;
These align somewhat with functional tests in rails, except&lt;br /&gt;
that they do not actually render views (though you can force rendering of views&lt;br /&gt;
if you prefer). Instead of setting expectations about what goes on a page, you&lt;br /&gt;
set expectations about what templates get rendered. &lt;br /&gt;
&lt;br /&gt;
'''View Examples'''&lt;br /&gt;
This is the other half of Rails’ functional testing. View specs allow&lt;br /&gt;
you to set up assigns (thanks to ZenTest).&lt;br /&gt;
&lt;br /&gt;
'''Helper Examples'''&lt;br /&gt;
let you specify directly methods that live in your helpers.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://www.ibm.com/developerworks/web/library/wa-rspec/]&lt;br /&gt;
The link provides a brief overview of RSpec with a comprehensive series of examples and a conceptual view of Rpecs step by step &lt;br /&gt;
&lt;br /&gt;
implementation process&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Cucumber'''&lt;br /&gt;
Cucumber is used with TDD and BDD within other testing frameworks such as RSpec by letting software development teams describe how &lt;br /&gt;
&lt;br /&gt;
software should behave in plain text. The text is written in a business-readable domain-specific language and serves as &lt;br /&gt;
&lt;br /&gt;
documentation, automated tests and development-aid - all rolled into one format.&lt;br /&gt;
&lt;br /&gt;
[http://cukes.info/]&lt;br /&gt;
The link provides a detail decription, definition, and examples of Cucumber implementation best practices and supported &lt;br /&gt;
&lt;br /&gt;
frameworks.&lt;br /&gt;
&lt;br /&gt;
'''Cucumber Example:'''&lt;br /&gt;
Scenario: See all vendors&lt;br /&gt;
    Given I am logged in as a user in the administrator role&lt;br /&gt;
    And There are 3 vendors&lt;br /&gt;
    When I go to the manage vendors page&lt;br /&gt;
    Then I should see the first 3 vendor names&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Shoulda''' &lt;br /&gt;
An extension to Test::Unit with additional helpers, macros, and assertions.&lt;br /&gt;
 &lt;br /&gt;
[http://www.thoughtbot.com/projects/shoulda]&lt;br /&gt;
The link provides a more conclusive definition of Shoulda along with installation facts and working examples of the Shoulda &lt;br /&gt;
&lt;br /&gt;
testing framework within Ruby's built in Test::Unit&lt;br /&gt;
&lt;br /&gt;
== BDD: Behavior Driven Development ==&lt;br /&gt;
	[http://eggsonbread.com/2009/07/22/behavior-driven-development-in-a-nutshell/]&lt;br /&gt;
Behavior driven development was born from the concepts behind the implementation of TDD.  It brings together strands from &lt;br /&gt;
&lt;br /&gt;
TestDrivenDevelopment and DomainDrivenDesign into an integrated whole, making the relationship between these two powerful &lt;br /&gt;
&lt;br /&gt;
approaches to software development more evident.  Most test driven development testing frameworks such as RSpec and Cucumber also support behavior driven development testing. &lt;br /&gt;
&lt;br /&gt;
[http://behaviour-driven.org/]&lt;br /&gt;
The link supports BDDs definition with additional links to more viable behavior driven development resources.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Other Test Tool Resources'''&lt;br /&gt;
&lt;br /&gt;
''Watir:'' is an open-source library for automating web browsers. It allows you to write tests that are easy to read and maintain. It &lt;br /&gt;
&lt;br /&gt;
is simple and flexible.  &lt;br /&gt;
[http://wtr.rubyforge.org/]&lt;br /&gt;
The link provides an overview of Watir with installation specifications, examples, and supported platforms&lt;br /&gt;
&lt;br /&gt;
''NullDB:'' [http://avdi.org/projects/nulldb/]&lt;br /&gt;
a way to speed up testing by avoiding database use.&lt;br /&gt;
&lt;br /&gt;
''Bleakhouse:'' memory leak detection&lt;br /&gt;
[http://www.rubyinside.com/bleakhouse-tool-to-find-memory-leaks-in-your-rails-applications-470.html]&lt;br /&gt;
The link gives additional information on Bleakhouse profiling for memory leaks&lt;br /&gt;
&lt;br /&gt;
''ruby-debug:'' &lt;br /&gt;
Other than the extensive use of breakpoints Rails provides little to streamline the debugging process. Ruby-debug provides Rails with a plug-in extending the functionality of Rails built in debugger. &lt;br /&gt;
&lt;br /&gt;
[http://rubyforge.org/softwaremap/trove_list.php?form_cat=47]&lt;br /&gt;
The link provides twenty additional debug resources available for RoR&lt;br /&gt;
&lt;br /&gt;
== '''Conclusion''' ==&lt;br /&gt;
&lt;br /&gt;
Rails is a very comprehensive development environment for Ruby with numerous extensions, plugins, and other resources outside of IDEs to strengthen the functionality of the open source web application framework.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
''All sources used to create this wiki are linked in the above text.''&lt;/div&gt;</summary>
		<author><name>Los Bravo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_team1&amp;diff=22171</id>
		<title>CSC/ECE 517 Fall 2009/wiki1b team1</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_team1&amp;diff=22171"/>
		<updated>2009-09-28T19:57:24Z</updated>

		<summary type="html">&lt;p&gt;Los Bravo: /* TDD: Test Driven Development */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;CSC/ECE 517 Fall 2009&lt;br /&gt;
&lt;br /&gt;
'''&lt;br /&gt;
== Resources for Rails (other than IDEs) ==&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
IDEs are a valuable resource for Rails development, however there are many other resources and tools&lt;br /&gt;
that can either replace or supplement IDEs.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Resources for Rails other than IDEs&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails API''''' - http://api.rubyonrails.org/&lt;br /&gt;
&lt;br /&gt;
	This site documents Rails files, classes and methods that can be used to build a Rails application.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Forum''''' - http://railsforum.com/&lt;br /&gt;
&lt;br /&gt;
	A discussion forum covering all aspects of Rails for beginners and experts including planning, &lt;br /&gt;
	programming, extensions and production.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Introducing Ruby on Rails''''' &lt;br /&gt;
&lt;br /&gt;
Part 1 http://www.softwaredeveloper.com/features/intro-to-ruby-on-rails-042507/&lt;br /&gt;
&lt;br /&gt;
Part 2 http://www.softwaredeveloper.com/features/intro-to-ruby-on-rails-part-two-043007/&lt;br /&gt;
&lt;br /&gt;
An excellent introduction to Rails for novices&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Installers'''&lt;br /&gt;
''&lt;br /&gt;
	&lt;br /&gt;
Windows: InstantRails - http://instantrails.rubyforge.org/wiki/wiki.pl&lt;br /&gt;
&lt;br /&gt;
		An all in one, single click installer for Windows that includes a Rails server.&lt;br /&gt;
&lt;br /&gt;
	Mac: Locomotive - http://locomotive.raaum.org/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Projects''''' - http://www.workingwithrails.com/&lt;br /&gt;
&lt;br /&gt;
	A Database of Rails projects, programmers and websites&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails plugins''''' - http://agilewebdevelopment.com/&lt;br /&gt;
&lt;br /&gt;
	A collection of Rails open source plugins, searchable by category or keyword.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Sample Rails''''' - http://snippets.dzone.com/tag/rails&lt;br /&gt;
&lt;br /&gt;
	A collection of Rails code snippets.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Agile Rails book''''' - http://www.amazon.com/gp/product/097669400X/002-0481267-8083260?v=glance&amp;amp;n=283155&lt;br /&gt;
&lt;br /&gt;
	An excellent resource for learning how to apply Agile programming concepts to Rails.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails cheatsheet''''' - http://www.blainekendall.com/uploads/RubyOnRails-Cheatsheet-BlaineKendall.pdf&lt;br /&gt;
&lt;br /&gt;
	One user's list of best practices, gotchas and quirks of developing with Rails.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails best practices''''' - http://www.therailsway.com/&lt;br /&gt;
&lt;br /&gt;
	An official best practices list for programming in Rails.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Advanced Rails''''' - http://webonrails.com/&lt;br /&gt;
&lt;br /&gt;
	A resource for the advanced Rails programmer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Blog''''' - http://weblog.rubyonrails.org/&lt;br /&gt;
&lt;br /&gt;
	An online community of updates about current happenings with the Rails platform.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Guides''''' - http://guides.rubyonrails.org/&lt;br /&gt;
&lt;br /&gt;
	An all in one resource for learning Rails including Howtos, security and contributing to the Rails community.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Authoring Rails plugins''''' - http://nubyonrails.com/articles/2006/05/04/the-complete-guide-to-rails-plugins-part-i&lt;br /&gt;
&lt;br /&gt;
	A complete guide to authoring your own Rails plugins.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
== '''Tools for Rails (other than IDEs)''' ==&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
'''Test Unit'''&lt;br /&gt;
The Rails stack uses Test::Unit, known as the default Ruby unit testing framework shipping with Ruby.  There are various plugins and extension that could be used with Rails built-in Test::Unit to extend its functionality for support of TDD and BDD testing practices.&lt;br /&gt;
&lt;br /&gt;
[http://wiki.rubyonrails.org/addons/testing]&lt;br /&gt;
The link provides additional information in the form of supporting resources, whitepapers, examples, and plug-in documentation&lt;br /&gt;
&lt;br /&gt;
'''Example'''&lt;br /&gt;
[http://wiki.rubyonrails.org/testing/test-unitrequire] &lt;br /&gt;
&lt;br /&gt;
 Image:class CalculatorTest &amp;lt; Test::Unit::TestCase &lt;br /&gt;
  def test_add_two_numbers_for_the_sum &lt;br /&gt;
    calculator = Calculator.new &lt;br /&gt;
    assert_equal 4, calculator.sum(2, 2)&lt;br /&gt;
  end &lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
== TDD: Test Driven Development ==&lt;br /&gt;
 	&lt;br /&gt;
Test Driven Development is a combination of refactoring and test first development, a form of development where the test is &lt;br /&gt;
&lt;br /&gt;
written prior to completed production code.  The goal of TDD is the specification of requirements and not the validation of &lt;br /&gt;
&lt;br /&gt;
requirements.  There are a few testing frameworks that are used to implement the TDD programming technique.  &lt;br /&gt;
&lt;br /&gt;
[http://ruby.about.com/b/2009/01/28/test-driven-development-with-rails.htm]&lt;br /&gt;
This link provides a comprehensive overview of test driven development practices and available resources for implementation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''RSpec'''&lt;br /&gt;
RSpec is a testing framework for Behavior Driven Development, complete with its own expectations, matchers and mocking and &lt;br /&gt;
&lt;br /&gt;
stubbing facilities. It goes along hand in hand with Cucumber, though it plays nicely with many other testing frameworks as well.&lt;br /&gt;
&lt;br /&gt;
''Example expresses some basic desired behavior''[http://rspec.info/]&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; bowling_spec.rb&lt;br /&gt;
 require ‘bowling’&lt;br /&gt;
 describe Bowling do&lt;br /&gt;
 it &amp;quot;should score 0 for gutter game&amp;quot; do&lt;br /&gt;
 bowling = Bowling.new&lt;br /&gt;
 20.times { bowling.hit(0) }&lt;br /&gt;
 bowling.score.should == 0&lt;br /&gt;
 end&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
''Just enough code to make it pass.''&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; bowling.rb&lt;br /&gt;
 class Bowling&lt;br /&gt;
 def hit(pins)&lt;br /&gt;
 end&lt;br /&gt;
 def score&lt;br /&gt;
 0&lt;br /&gt;
 end&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
'''Model Examples'''&lt;br /&gt;
These are the equivalent of unit tests in Rails’ built in testing. Ironically&lt;br /&gt;
(for the traditional TDD’er) these are the only specs that we feel should actually interact&lt;br /&gt;
with the database.&lt;br /&gt;
&lt;br /&gt;
'''Controller Examples'''&lt;br /&gt;
These align somewhat with functional tests in rails, except&lt;br /&gt;
that they do not actually render views (though you can force rendering of views&lt;br /&gt;
if you prefer). Instead of setting expectations about what goes on a page, you&lt;br /&gt;
set expectations about what templates get rendered. &lt;br /&gt;
&lt;br /&gt;
'''View Examples'''&lt;br /&gt;
This is the other half of Rails’ functional testing. View specs allow&lt;br /&gt;
you to set up assigns (thanks to ZenTest).&lt;br /&gt;
&lt;br /&gt;
'''Helper Examples'''&lt;br /&gt;
let you specify directly methods that live in your helpers.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://www.ibm.com/developerworks/web/library/wa-rspec/]&lt;br /&gt;
The link provides a brief overview of RSpec with a comprehensive series of examples and a conceptual view of Rpecs step by step &lt;br /&gt;
&lt;br /&gt;
implementation process&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Cucumber'''&lt;br /&gt;
Cucumber is used with TDD and BDD within other testing frameworks such as RSpec by letting software development teams describe how &lt;br /&gt;
&lt;br /&gt;
software should behave in plain text. The text is written in a business-readable domain-specific language and serves as &lt;br /&gt;
&lt;br /&gt;
documentation, automated tests and development-aid - all rolled into one format.&lt;br /&gt;
&lt;br /&gt;
[http://cukes.info/]&lt;br /&gt;
The link provides a detail decription, definition, and examples of Cucumber implementation best practices and supported &lt;br /&gt;
&lt;br /&gt;
frameworks.&lt;br /&gt;
&lt;br /&gt;
'''Cucumber Example:'''&lt;br /&gt;
Scenario: See all vendors&lt;br /&gt;
    Given I am logged in as a user in the administrator role&lt;br /&gt;
    And There are 3 vendors&lt;br /&gt;
    When I go to the manage vendors page&lt;br /&gt;
    Then I should see the first 3 vendor names&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Shoulda''' &lt;br /&gt;
An extension to Test::Unit with additional helpers, macros, and assertions.&lt;br /&gt;
 &lt;br /&gt;
[http://www.thoughtbot.com/projects/shoulda]&lt;br /&gt;
The link provides a more conclusive definition of Shoulda along with installation facts and working examples of the Shoulda &lt;br /&gt;
&lt;br /&gt;
testing framework within Ruby's built in Test::Unit&lt;br /&gt;
&lt;br /&gt;
== BDD: Behavior Driven Development ==&lt;br /&gt;
	[http://eggsonbread.com/2009/07/22/behavior-driven-development-in-a-nutshell/]&lt;br /&gt;
Behavior driven development was born from the concepts behind the implementation of TDD.  It brings together strands from &lt;br /&gt;
&lt;br /&gt;
TestDrivenDevelopment and DomainDrivenDesign into an integrated whole, making the relationship between these two powerful &lt;br /&gt;
&lt;br /&gt;
approaches to software development more evident.  Most test driven development testing frameworks such as RSpec and Cucumber also support behavior driven development testing. &lt;br /&gt;
&lt;br /&gt;
[http://behaviour-driven.org/]&lt;br /&gt;
The link supports BDDs definition with additional links to more viable behavior driven development resources.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Other Test Tool Resources'''&lt;br /&gt;
&lt;br /&gt;
''Watir:'' is an open-source library for automating web browsers. It allows you to write tests that are easy to read and maintain. It &lt;br /&gt;
&lt;br /&gt;
is simple and flexible.  &lt;br /&gt;
[http://wtr.rubyforge.org/]&lt;br /&gt;
The link provides an overview of Watir with installation specifications, examples, and supported platforms&lt;br /&gt;
&lt;br /&gt;
''NullDB:'' [http://avdi.org/projects/nulldb/]&lt;br /&gt;
a way to speed up testing by avoiding database use.&lt;br /&gt;
&lt;br /&gt;
''Bleakhouse:'' memory leak detection&lt;br /&gt;
[http://www.rubyinside.com/bleakhouse-tool-to-find-memory-leaks-in-your-rails-applications-470.html]&lt;br /&gt;
The link gives additional information on Bleakhouse profiling for memory leaks&lt;br /&gt;
&lt;br /&gt;
''ruby-debug:'' &lt;br /&gt;
Other than the extensive use of breakpoints Rails provides little to streamline the debugging process. Ruby-debug provides Rails with a plug-in extending the functionality of Rails built in debugger. &lt;br /&gt;
&lt;br /&gt;
[http://rubyforge.org/softwaremap/trove_list.php?form_cat=47]&lt;br /&gt;
The link provides twenty additional debug resources available for RoR&lt;br /&gt;
&lt;br /&gt;
== '''Conclusion''' ==&lt;br /&gt;
&lt;br /&gt;
Rails is a very comprehensive development environment for Ruby with numerous extensions, plugins, and other resources outside of IDEs to strengthen the functionality of the open source web application framework.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
''All sources used to create this wiki are linked in the above text.''&lt;/div&gt;</summary>
		<author><name>Los Bravo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_team1&amp;diff=22170</id>
		<title>CSC/ECE 517 Fall 2009/wiki1b team1</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_team1&amp;diff=22170"/>
		<updated>2009-09-28T19:56:32Z</updated>

		<summary type="html">&lt;p&gt;Los Bravo: /* TDD: Test Driven Development */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;CSC/ECE 517 Fall 2009&lt;br /&gt;
&lt;br /&gt;
'''&lt;br /&gt;
== Resources for Rails (other than IDEs) ==&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
IDEs are a valuable resource for Rails development, however there are many other resources and tools&lt;br /&gt;
that can either replace or supplement IDEs.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Resources for Rails other than IDEs&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails API''''' - http://api.rubyonrails.org/&lt;br /&gt;
&lt;br /&gt;
	This site documents Rails files, classes and methods that can be used to build a Rails application.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Forum''''' - http://railsforum.com/&lt;br /&gt;
&lt;br /&gt;
	A discussion forum covering all aspects of Rails for beginners and experts including planning, &lt;br /&gt;
	programming, extensions and production.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Introducing Ruby on Rails''''' &lt;br /&gt;
&lt;br /&gt;
Part 1 http://www.softwaredeveloper.com/features/intro-to-ruby-on-rails-042507/&lt;br /&gt;
&lt;br /&gt;
Part 2 http://www.softwaredeveloper.com/features/intro-to-ruby-on-rails-part-two-043007/&lt;br /&gt;
&lt;br /&gt;
An excellent introduction to Rails for novices&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Installers'''&lt;br /&gt;
''&lt;br /&gt;
	&lt;br /&gt;
Windows: InstantRails - http://instantrails.rubyforge.org/wiki/wiki.pl&lt;br /&gt;
&lt;br /&gt;
		An all in one, single click installer for Windows that includes a Rails server.&lt;br /&gt;
&lt;br /&gt;
	Mac: Locomotive - http://locomotive.raaum.org/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Projects''''' - http://www.workingwithrails.com/&lt;br /&gt;
&lt;br /&gt;
	A Database of Rails projects, programmers and websites&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails plugins''''' - http://agilewebdevelopment.com/&lt;br /&gt;
&lt;br /&gt;
	A collection of Rails open source plugins, searchable by category or keyword.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Sample Rails''''' - http://snippets.dzone.com/tag/rails&lt;br /&gt;
&lt;br /&gt;
	A collection of Rails code snippets.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Agile Rails book''''' - http://www.amazon.com/gp/product/097669400X/002-0481267-8083260?v=glance&amp;amp;n=283155&lt;br /&gt;
&lt;br /&gt;
	An excellent resource for learning how to apply Agile programming concepts to Rails.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails cheatsheet''''' - http://www.blainekendall.com/uploads/RubyOnRails-Cheatsheet-BlaineKendall.pdf&lt;br /&gt;
&lt;br /&gt;
	One user's list of best practices, gotchas and quirks of developing with Rails.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails best practices''''' - http://www.therailsway.com/&lt;br /&gt;
&lt;br /&gt;
	An official best practices list for programming in Rails.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Advanced Rails''''' - http://webonrails.com/&lt;br /&gt;
&lt;br /&gt;
	A resource for the advanced Rails programmer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Blog''''' - http://weblog.rubyonrails.org/&lt;br /&gt;
&lt;br /&gt;
	An online community of updates about current happenings with the Rails platform.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Guides''''' - http://guides.rubyonrails.org/&lt;br /&gt;
&lt;br /&gt;
	An all in one resource for learning Rails including Howtos, security and contributing to the Rails community.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Authoring Rails plugins''''' - http://nubyonrails.com/articles/2006/05/04/the-complete-guide-to-rails-plugins-part-i&lt;br /&gt;
&lt;br /&gt;
	A complete guide to authoring your own Rails plugins.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
== '''Tools for Rails (other than IDEs)''' ==&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
'''Test Unit'''&lt;br /&gt;
The Rails stack uses Test::Unit, known as the default Ruby unit testing framework shipping with Ruby.  There are various plugins and extension that could be used with Rails built-in Test::Unit to extend its functionality for support of TDD and BDD testing practices.&lt;br /&gt;
&lt;br /&gt;
[http://wiki.rubyonrails.org/addons/testing]&lt;br /&gt;
The link provides additional information in the form of supporting resources, whitepapers, examples, and plug-in documentation&lt;br /&gt;
&lt;br /&gt;
'''Example'''&lt;br /&gt;
[http://wiki.rubyonrails.org/testing/test-unitrequire] &lt;br /&gt;
&lt;br /&gt;
 Image:class CalculatorTest &amp;lt; Test::Unit::TestCase &lt;br /&gt;
  def test_add_two_numbers_for_the_sum &lt;br /&gt;
    calculator = Calculator.new &lt;br /&gt;
    assert_equal 4, calculator.sum(2, 2)&lt;br /&gt;
  end &lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
== TDD: Test Driven Development ==&lt;br /&gt;
 	&lt;br /&gt;
Test Driven Development is a combination of refactoring and test first development, a form of development where the test is &lt;br /&gt;
&lt;br /&gt;
written prior to completed production code.  The goal of TDD is the specification of requirements and not the validation of &lt;br /&gt;
&lt;br /&gt;
requirements.  There are a few testing frameworks that are used to implement the TDD programming technique.  &lt;br /&gt;
&lt;br /&gt;
[http://ruby.about.com/b/2009/01/28/test-driven-development-with-rails.htm]&lt;br /&gt;
This link provides a comprehensive overview of test driven development practices and available resources for implementation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''RSpec'''&lt;br /&gt;
RSpec is a testing framework for Behavior Driven Development, complete with its own expectations, matchers and mocking and &lt;br /&gt;
&lt;br /&gt;
stubbing facilities. It goes along hand in hand with Cucumber, though it plays nicely with many other testing frameworks as well.&lt;br /&gt;
&lt;br /&gt;
''Example expresses some basic desired behavior''[http://rspec.info/]&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; bowling_spec.rb&lt;br /&gt;
 require ‘bowling’&lt;br /&gt;
 describe Bowling do&lt;br /&gt;
 it &amp;quot;should score 0 for gutter game&amp;quot; do&lt;br /&gt;
 bowling = Bowling.new&lt;br /&gt;
 20.times { bowling.hit(0) }&lt;br /&gt;
 bowling.score.should == 0&lt;br /&gt;
 end&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt; bowling.rb&lt;br /&gt;
 class Bowling&lt;br /&gt;
 def hit(pins)&lt;br /&gt;
 end&lt;br /&gt;
 def score&lt;br /&gt;
 0&lt;br /&gt;
 end&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
'''Model Examples'''&lt;br /&gt;
These are the equivalent of unit tests in Rails’ built in testing. Ironically&lt;br /&gt;
(for the traditional TDD’er) these are the only specs that we feel should actually interact&lt;br /&gt;
with the database.&lt;br /&gt;
&lt;br /&gt;
'''Controller Examples'''&lt;br /&gt;
These align somewhat with functional tests in rails, except&lt;br /&gt;
that they do not actually render views (though you can force rendering of views&lt;br /&gt;
if you prefer). Instead of setting expectations about what goes on a page, you&lt;br /&gt;
set expectations about what templates get rendered. &lt;br /&gt;
&lt;br /&gt;
'''View Examples'''&lt;br /&gt;
This is the other half of Rails’ functional testing. View specs allow&lt;br /&gt;
you to set up assigns (thanks to ZenTest).&lt;br /&gt;
&lt;br /&gt;
'''Helper Examples'''&lt;br /&gt;
let you specify directly methods that live in your helpers.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://www.ibm.com/developerworks/web/library/wa-rspec/]&lt;br /&gt;
The link provides a brief overview of RSpec with a comprehensive series of examples and a conceptual view of Rpecs step by step &lt;br /&gt;
&lt;br /&gt;
implementation process&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Cucumber'''&lt;br /&gt;
Cucumber is used with TDD and BDD within other testing frameworks such as RSpec by letting software development teams describe how &lt;br /&gt;
&lt;br /&gt;
software should behave in plain text. The text is written in a business-readable domain-specific language and serves as &lt;br /&gt;
&lt;br /&gt;
documentation, automated tests and development-aid - all rolled into one format.&lt;br /&gt;
&lt;br /&gt;
[http://cukes.info/]&lt;br /&gt;
The link provides a detail decription, definition, and examples of Cucumber implementation best practices and supported &lt;br /&gt;
&lt;br /&gt;
frameworks.&lt;br /&gt;
&lt;br /&gt;
'''Cucumber Example:'''&lt;br /&gt;
Scenario: See all vendors&lt;br /&gt;
    Given I am logged in as a user in the administrator role&lt;br /&gt;
    And There are 3 vendors&lt;br /&gt;
    When I go to the manage vendors page&lt;br /&gt;
    Then I should see the first 3 vendor names&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Shoulda''' &lt;br /&gt;
An extension to Test::Unit with additional helpers, macros, and assertions.&lt;br /&gt;
 &lt;br /&gt;
[http://www.thoughtbot.com/projects/shoulda]&lt;br /&gt;
The link provides a more conclusive definition of Shoulda along with installation facts and working examples of the Shoulda &lt;br /&gt;
&lt;br /&gt;
testing framework within Ruby's built in Test::Unit&lt;br /&gt;
&lt;br /&gt;
== BDD: Behavior Driven Development ==&lt;br /&gt;
	[http://eggsonbread.com/2009/07/22/behavior-driven-development-in-a-nutshell/]&lt;br /&gt;
Behavior driven development was born from the concepts behind the implementation of TDD.  It brings together strands from &lt;br /&gt;
&lt;br /&gt;
TestDrivenDevelopment and DomainDrivenDesign into an integrated whole, making the relationship between these two powerful &lt;br /&gt;
&lt;br /&gt;
approaches to software development more evident.  Most test driven development testing frameworks such as RSpec and Cucumber also support behavior driven development testing. &lt;br /&gt;
&lt;br /&gt;
[http://behaviour-driven.org/]&lt;br /&gt;
The link supports BDDs definition with additional links to more viable behavior driven development resources.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Other Test Tool Resources'''&lt;br /&gt;
&lt;br /&gt;
''Watir:'' is an open-source library for automating web browsers. It allows you to write tests that are easy to read and maintain. It &lt;br /&gt;
&lt;br /&gt;
is simple and flexible.  &lt;br /&gt;
[http://wtr.rubyforge.org/]&lt;br /&gt;
The link provides an overview of Watir with installation specifications, examples, and supported platforms&lt;br /&gt;
&lt;br /&gt;
''NullDB:'' [http://avdi.org/projects/nulldb/]&lt;br /&gt;
a way to speed up testing by avoiding database use.&lt;br /&gt;
&lt;br /&gt;
''Bleakhouse:'' memory leak detection&lt;br /&gt;
[http://www.rubyinside.com/bleakhouse-tool-to-find-memory-leaks-in-your-rails-applications-470.html]&lt;br /&gt;
The link gives additional information on Bleakhouse profiling for memory leaks&lt;br /&gt;
&lt;br /&gt;
''ruby-debug:'' &lt;br /&gt;
Other than the extensive use of breakpoints Rails provides little to streamline the debugging process. Ruby-debug provides Rails with a plug-in extending the functionality of Rails built in debugger. &lt;br /&gt;
&lt;br /&gt;
[http://rubyforge.org/softwaremap/trove_list.php?form_cat=47]&lt;br /&gt;
The link provides twenty additional debug resources available for RoR&lt;br /&gt;
&lt;br /&gt;
== '''Conclusion''' ==&lt;br /&gt;
&lt;br /&gt;
Rails is a very comprehensive development environment for Ruby with numerous extensions, plugins, and other resources outside of IDEs to strengthen the functionality of the open source web application framework.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
''All sources used to create this wiki are linked in the above text.''&lt;/div&gt;</summary>
		<author><name>Los Bravo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_team1&amp;diff=22169</id>
		<title>CSC/ECE 517 Fall 2009/wiki1b team1</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_team1&amp;diff=22169"/>
		<updated>2009-09-28T19:55:19Z</updated>

		<summary type="html">&lt;p&gt;Los Bravo: /* TDD: Test Driven Development */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;CSC/ECE 517 Fall 2009&lt;br /&gt;
&lt;br /&gt;
'''&lt;br /&gt;
== Resources for Rails (other than IDEs) ==&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
IDEs are a valuable resource for Rails development, however there are many other resources and tools&lt;br /&gt;
that can either replace or supplement IDEs.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Resources for Rails other than IDEs&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails API''''' - http://api.rubyonrails.org/&lt;br /&gt;
&lt;br /&gt;
	This site documents Rails files, classes and methods that can be used to build a Rails application.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Forum''''' - http://railsforum.com/&lt;br /&gt;
&lt;br /&gt;
	A discussion forum covering all aspects of Rails for beginners and experts including planning, &lt;br /&gt;
	programming, extensions and production.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Introducing Ruby on Rails''''' &lt;br /&gt;
&lt;br /&gt;
Part 1 http://www.softwaredeveloper.com/features/intro-to-ruby-on-rails-042507/&lt;br /&gt;
&lt;br /&gt;
Part 2 http://www.softwaredeveloper.com/features/intro-to-ruby-on-rails-part-two-043007/&lt;br /&gt;
&lt;br /&gt;
An excellent introduction to Rails for novices&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Installers'''&lt;br /&gt;
''&lt;br /&gt;
	&lt;br /&gt;
Windows: InstantRails - http://instantrails.rubyforge.org/wiki/wiki.pl&lt;br /&gt;
&lt;br /&gt;
		An all in one, single click installer for Windows that includes a Rails server.&lt;br /&gt;
&lt;br /&gt;
	Mac: Locomotive - http://locomotive.raaum.org/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Projects''''' - http://www.workingwithrails.com/&lt;br /&gt;
&lt;br /&gt;
	A Database of Rails projects, programmers and websites&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails plugins''''' - http://agilewebdevelopment.com/&lt;br /&gt;
&lt;br /&gt;
	A collection of Rails open source plugins, searchable by category or keyword.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Sample Rails''''' - http://snippets.dzone.com/tag/rails&lt;br /&gt;
&lt;br /&gt;
	A collection of Rails code snippets.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Agile Rails book''''' - http://www.amazon.com/gp/product/097669400X/002-0481267-8083260?v=glance&amp;amp;n=283155&lt;br /&gt;
&lt;br /&gt;
	An excellent resource for learning how to apply Agile programming concepts to Rails.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails cheatsheet''''' - http://www.blainekendall.com/uploads/RubyOnRails-Cheatsheet-BlaineKendall.pdf&lt;br /&gt;
&lt;br /&gt;
	One user's list of best practices, gotchas and quirks of developing with Rails.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails best practices''''' - http://www.therailsway.com/&lt;br /&gt;
&lt;br /&gt;
	An official best practices list for programming in Rails.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Advanced Rails''''' - http://webonrails.com/&lt;br /&gt;
&lt;br /&gt;
	A resource for the advanced Rails programmer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Blog''''' - http://weblog.rubyonrails.org/&lt;br /&gt;
&lt;br /&gt;
	An online community of updates about current happenings with the Rails platform.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Guides''''' - http://guides.rubyonrails.org/&lt;br /&gt;
&lt;br /&gt;
	An all in one resource for learning Rails including Howtos, security and contributing to the Rails community.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Authoring Rails plugins''''' - http://nubyonrails.com/articles/2006/05/04/the-complete-guide-to-rails-plugins-part-i&lt;br /&gt;
&lt;br /&gt;
	A complete guide to authoring your own Rails plugins.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
== '''Tools for Rails (other than IDEs)''' ==&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
'''Test Unit'''&lt;br /&gt;
The Rails stack uses Test::Unit, known as the default Ruby unit testing framework shipping with Ruby.  There are various plugins and extension that could be used with Rails built-in Test::Unit to extend its functionality for support of TDD and BDD testing practices.&lt;br /&gt;
&lt;br /&gt;
[http://wiki.rubyonrails.org/addons/testing]&lt;br /&gt;
The link provides additional information in the form of supporting resources, whitepapers, examples, and plug-in documentation&lt;br /&gt;
&lt;br /&gt;
'''Example'''&lt;br /&gt;
[http://wiki.rubyonrails.org/testing/test-unitrequire] &lt;br /&gt;
&lt;br /&gt;
 Image:class CalculatorTest &amp;lt; Test::Unit::TestCase &lt;br /&gt;
  def test_add_two_numbers_for_the_sum &lt;br /&gt;
    calculator = Calculator.new &lt;br /&gt;
    assert_equal 4, calculator.sum(2, 2)&lt;br /&gt;
  end &lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
== TDD: Test Driven Development ==&lt;br /&gt;
 	&lt;br /&gt;
Test Driven Development is a combination of refactoring and test first development, a form of development where the test is &lt;br /&gt;
&lt;br /&gt;
written prior to completed production code.  The goal of TDD is the specification of requirements and not the validation of &lt;br /&gt;
&lt;br /&gt;
requirements.  There are a few testing frameworks that are used to implement the TDD programming technique.  &lt;br /&gt;
&lt;br /&gt;
[http://ruby.about.com/b/2009/01/28/test-driven-development-with-rails.htm]&lt;br /&gt;
This link provides a comprehensive overview of test driven development practices and available resources for implementation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''RSpec'''&lt;br /&gt;
RSpec is a testing framework for Behavior Driven Development, complete with its own expectations, matchers and mocking and &lt;br /&gt;
&lt;br /&gt;
stubbing facilities. It goes along hand in hand with Cucumber, though it plays nicely with many other testing frameworks as well.&lt;br /&gt;
&lt;br /&gt;
''Example expresses some basic desired behavior''[http://rspec.info/]&lt;br /&gt;
&lt;br /&gt;
 '#'bowling_spec.rb&lt;br /&gt;
 require ‘bowling’&lt;br /&gt;
 describe Bowling do&lt;br /&gt;
 it &amp;quot;should score 0 for gutter game&amp;quot; do&lt;br /&gt;
 bowling = Bowling.new&lt;br /&gt;
 20.times { bowling.hit(0) }&lt;br /&gt;
 bowling.score.should == 0&lt;br /&gt;
 end&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
# bowling.rb&lt;br /&gt;
class Bowling&lt;br /&gt;
def hit(pins)&lt;br /&gt;
end&lt;br /&gt;
def score&lt;br /&gt;
0&lt;br /&gt;
end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
'''Model Examples'''&lt;br /&gt;
These are the equivalent of unit tests in Rails’ built in testing. Ironically&lt;br /&gt;
(for the traditional TDD’er) these are the only specs that we feel should actually interact&lt;br /&gt;
with the database.&lt;br /&gt;
&lt;br /&gt;
'''Controller Examples'''&lt;br /&gt;
These align somewhat with functional tests in rails, except&lt;br /&gt;
that they do not actually render views (though you can force rendering of views&lt;br /&gt;
if you prefer). Instead of setting expectations about what goes on a page, you&lt;br /&gt;
set expectations about what templates get rendered. &lt;br /&gt;
&lt;br /&gt;
'''View Examples'''&lt;br /&gt;
This is the other half of Rails’ functional testing. View specs allow&lt;br /&gt;
you to set up assigns (thanks to ZenTest).&lt;br /&gt;
&lt;br /&gt;
'''Helper Examples'''&lt;br /&gt;
let you specify directly methods that live in your helpers.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://www.ibm.com/developerworks/web/library/wa-rspec/]&lt;br /&gt;
The link provides a brief overview of RSpec with a comprehensive series of examples and a conceptual view of Rpecs step by step &lt;br /&gt;
&lt;br /&gt;
implementation process&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Cucumber'''&lt;br /&gt;
Cucumber is used with TDD and BDD within other testing frameworks such as RSpec by letting software development teams describe how &lt;br /&gt;
&lt;br /&gt;
software should behave in plain text. The text is written in a business-readable domain-specific language and serves as &lt;br /&gt;
&lt;br /&gt;
documentation, automated tests and development-aid - all rolled into one format.&lt;br /&gt;
&lt;br /&gt;
[http://cukes.info/]&lt;br /&gt;
The link provides a detail decription, definition, and examples of Cucumber implementation best practices and supported &lt;br /&gt;
&lt;br /&gt;
frameworks.&lt;br /&gt;
&lt;br /&gt;
'''Cucumber Example:'''&lt;br /&gt;
Scenario: See all vendors&lt;br /&gt;
    Given I am logged in as a user in the administrator role&lt;br /&gt;
    And There are 3 vendors&lt;br /&gt;
    When I go to the manage vendors page&lt;br /&gt;
    Then I should see the first 3 vendor names&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Shoulda''' &lt;br /&gt;
An extension to Test::Unit with additional helpers, macros, and assertions.&lt;br /&gt;
 &lt;br /&gt;
[http://www.thoughtbot.com/projects/shoulda]&lt;br /&gt;
The link provides a more conclusive definition of Shoulda along with installation facts and working examples of the Shoulda &lt;br /&gt;
&lt;br /&gt;
testing framework within Ruby's built in Test::Unit&lt;br /&gt;
&lt;br /&gt;
== BDD: Behavior Driven Development ==&lt;br /&gt;
	[http://eggsonbread.com/2009/07/22/behavior-driven-development-in-a-nutshell/]&lt;br /&gt;
Behavior driven development was born from the concepts behind the implementation of TDD.  It brings together strands from &lt;br /&gt;
&lt;br /&gt;
TestDrivenDevelopment and DomainDrivenDesign into an integrated whole, making the relationship between these two powerful &lt;br /&gt;
&lt;br /&gt;
approaches to software development more evident.  Most test driven development testing frameworks such as RSpec and Cucumber also support behavior driven development testing. &lt;br /&gt;
&lt;br /&gt;
[http://behaviour-driven.org/]&lt;br /&gt;
The link supports BDDs definition with additional links to more viable behavior driven development resources.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Other Test Tool Resources'''&lt;br /&gt;
&lt;br /&gt;
''Watir:'' is an open-source library for automating web browsers. It allows you to write tests that are easy to read and maintain. It &lt;br /&gt;
&lt;br /&gt;
is simple and flexible.  &lt;br /&gt;
[http://wtr.rubyforge.org/]&lt;br /&gt;
The link provides an overview of Watir with installation specifications, examples, and supported platforms&lt;br /&gt;
&lt;br /&gt;
''NullDB:'' [http://avdi.org/projects/nulldb/]&lt;br /&gt;
a way to speed up testing by avoiding database use.&lt;br /&gt;
&lt;br /&gt;
''Bleakhouse:'' memory leak detection&lt;br /&gt;
[http://www.rubyinside.com/bleakhouse-tool-to-find-memory-leaks-in-your-rails-applications-470.html]&lt;br /&gt;
The link gives additional information on Bleakhouse profiling for memory leaks&lt;br /&gt;
&lt;br /&gt;
''ruby-debug:'' &lt;br /&gt;
Other than the extensive use of breakpoints Rails provides little to streamline the debugging process. Ruby-debug provides Rails with a plug-in extending the functionality of Rails built in debugger. &lt;br /&gt;
&lt;br /&gt;
[http://rubyforge.org/softwaremap/trove_list.php?form_cat=47]&lt;br /&gt;
The link provides twenty additional debug resources available for RoR&lt;br /&gt;
&lt;br /&gt;
== '''Conclusion''' ==&lt;br /&gt;
&lt;br /&gt;
Rails is a very comprehensive development environment for Ruby with numerous extensions, plugins, and other resources outside of IDEs to strengthen the functionality of the open source web application framework.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
''All sources used to create this wiki are linked in the above text.''&lt;/div&gt;</summary>
		<author><name>Los Bravo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_team1&amp;diff=22168</id>
		<title>CSC/ECE 517 Fall 2009/wiki1b team1</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_team1&amp;diff=22168"/>
		<updated>2009-09-28T19:53:33Z</updated>

		<summary type="html">&lt;p&gt;Los Bravo: /* TDD: Test Driven Development */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;CSC/ECE 517 Fall 2009&lt;br /&gt;
&lt;br /&gt;
'''&lt;br /&gt;
== Resources for Rails (other than IDEs) ==&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
IDEs are a valuable resource for Rails development, however there are many other resources and tools&lt;br /&gt;
that can either replace or supplement IDEs.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Resources for Rails other than IDEs&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails API''''' - http://api.rubyonrails.org/&lt;br /&gt;
&lt;br /&gt;
	This site documents Rails files, classes and methods that can be used to build a Rails application.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Forum''''' - http://railsforum.com/&lt;br /&gt;
&lt;br /&gt;
	A discussion forum covering all aspects of Rails for beginners and experts including planning, &lt;br /&gt;
	programming, extensions and production.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Introducing Ruby on Rails''''' &lt;br /&gt;
&lt;br /&gt;
Part 1 http://www.softwaredeveloper.com/features/intro-to-ruby-on-rails-042507/&lt;br /&gt;
&lt;br /&gt;
Part 2 http://www.softwaredeveloper.com/features/intro-to-ruby-on-rails-part-two-043007/&lt;br /&gt;
&lt;br /&gt;
An excellent introduction to Rails for novices&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Installers'''&lt;br /&gt;
''&lt;br /&gt;
	&lt;br /&gt;
Windows: InstantRails - http://instantrails.rubyforge.org/wiki/wiki.pl&lt;br /&gt;
&lt;br /&gt;
		An all in one, single click installer for Windows that includes a Rails server.&lt;br /&gt;
&lt;br /&gt;
	Mac: Locomotive - http://locomotive.raaum.org/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Projects''''' - http://www.workingwithrails.com/&lt;br /&gt;
&lt;br /&gt;
	A Database of Rails projects, programmers and websites&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails plugins''''' - http://agilewebdevelopment.com/&lt;br /&gt;
&lt;br /&gt;
	A collection of Rails open source plugins, searchable by category or keyword.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Sample Rails''''' - http://snippets.dzone.com/tag/rails&lt;br /&gt;
&lt;br /&gt;
	A collection of Rails code snippets.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Agile Rails book''''' - http://www.amazon.com/gp/product/097669400X/002-0481267-8083260?v=glance&amp;amp;n=283155&lt;br /&gt;
&lt;br /&gt;
	An excellent resource for learning how to apply Agile programming concepts to Rails.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails cheatsheet''''' - http://www.blainekendall.com/uploads/RubyOnRails-Cheatsheet-BlaineKendall.pdf&lt;br /&gt;
&lt;br /&gt;
	One user's list of best practices, gotchas and quirks of developing with Rails.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails best practices''''' - http://www.therailsway.com/&lt;br /&gt;
&lt;br /&gt;
	An official best practices list for programming in Rails.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Advanced Rails''''' - http://webonrails.com/&lt;br /&gt;
&lt;br /&gt;
	A resource for the advanced Rails programmer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Blog''''' - http://weblog.rubyonrails.org/&lt;br /&gt;
&lt;br /&gt;
	An online community of updates about current happenings with the Rails platform.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Guides''''' - http://guides.rubyonrails.org/&lt;br /&gt;
&lt;br /&gt;
	An all in one resource for learning Rails including Howtos, security and contributing to the Rails community.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Authoring Rails plugins''''' - http://nubyonrails.com/articles/2006/05/04/the-complete-guide-to-rails-plugins-part-i&lt;br /&gt;
&lt;br /&gt;
	A complete guide to authoring your own Rails plugins.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
== '''Tools for Rails (other than IDEs)''' ==&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
'''Test Unit'''&lt;br /&gt;
The Rails stack uses Test::Unit, known as the default Ruby unit testing framework shipping with Ruby.  There are various plugins and extension that could be used with Rails built-in Test::Unit to extend its functionality for support of TDD and BDD testing practices.&lt;br /&gt;
&lt;br /&gt;
[http://wiki.rubyonrails.org/addons/testing]&lt;br /&gt;
The link provides additional information in the form of supporting resources, whitepapers, examples, and plug-in documentation&lt;br /&gt;
&lt;br /&gt;
'''Example'''&lt;br /&gt;
[http://wiki.rubyonrails.org/testing/test-unitrequire] &lt;br /&gt;
&lt;br /&gt;
 Image:class CalculatorTest &amp;lt; Test::Unit::TestCase &lt;br /&gt;
  def test_add_two_numbers_for_the_sum &lt;br /&gt;
    calculator = Calculator.new &lt;br /&gt;
    assert_equal 4, calculator.sum(2, 2)&lt;br /&gt;
  end &lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
== TDD: Test Driven Development ==&lt;br /&gt;
 	&lt;br /&gt;
Test Driven Development is a combination of refactoring and test first development, a form of development where the test is &lt;br /&gt;
&lt;br /&gt;
written prior to completed production code.  The goal of TDD is the specification of requirements and not the validation of &lt;br /&gt;
&lt;br /&gt;
requirements.  There are a few testing frameworks that are used to implement the TDD programming technique.  &lt;br /&gt;
&lt;br /&gt;
[http://ruby.about.com/b/2009/01/28/test-driven-development-with-rails.htm]&lt;br /&gt;
This link provides a comprehensive overview of test driven development practices and available resources for implementation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''RSpec'''&lt;br /&gt;
RSpec is a testing framework for Behavior Driven Development, complete with its own expectations, matchers and mocking and &lt;br /&gt;
&lt;br /&gt;
stubbing facilities. It goes along hand in hand with Cucumber, though it plays nicely with many other testing frameworks as well.&lt;br /&gt;
&lt;br /&gt;
''Example expresses some basic desired behavior''[http://rspec.info/]&lt;br /&gt;
&lt;br /&gt;
 bowling_spec.rb&lt;br /&gt;
 require ‘bowling’&lt;br /&gt;
 describe Bowling do&lt;br /&gt;
 it &amp;quot;should score 0 for gutter game&amp;quot; do&lt;br /&gt;
 bowling = Bowling.new&lt;br /&gt;
 20.times { bowling.hit(0) }&lt;br /&gt;
 bowling.score.should == 0&lt;br /&gt;
 end&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
'''Model Examples'''&lt;br /&gt;
These are the equivalent of unit tests in Rails’ built in testing. Ironically&lt;br /&gt;
(for the traditional TDD’er) these are the only specs that we feel should actually interact&lt;br /&gt;
with the database.&lt;br /&gt;
&lt;br /&gt;
'''Controller Examples'''&lt;br /&gt;
These align somewhat with functional tests in rails, except&lt;br /&gt;
that they do not actually render views (though you can force rendering of views&lt;br /&gt;
if you prefer). Instead of setting expectations about what goes on a page, you&lt;br /&gt;
set expectations about what templates get rendered. &lt;br /&gt;
&lt;br /&gt;
'''View Examples'''&lt;br /&gt;
This is the other half of Rails’ functional testing. View specs allow&lt;br /&gt;
you to set up assigns (thanks to ZenTest).&lt;br /&gt;
&lt;br /&gt;
'''Helper Examples'''&lt;br /&gt;
let you specify directly methods that live in your helpers.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://www.ibm.com/developerworks/web/library/wa-rspec/]&lt;br /&gt;
The link provides a brief overview of RSpec with a comprehensive series of examples and a conceptual view of Rpecs step by step &lt;br /&gt;
&lt;br /&gt;
implementation process&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Cucumber'''&lt;br /&gt;
Cucumber is used with TDD and BDD within other testing frameworks such as RSpec by letting software development teams describe how &lt;br /&gt;
&lt;br /&gt;
software should behave in plain text. The text is written in a business-readable domain-specific language and serves as &lt;br /&gt;
&lt;br /&gt;
documentation, automated tests and development-aid - all rolled into one format.&lt;br /&gt;
&lt;br /&gt;
[http://cukes.info/]&lt;br /&gt;
The link provides a detail decription, definition, and examples of Cucumber implementation best practices and supported &lt;br /&gt;
&lt;br /&gt;
frameworks.&lt;br /&gt;
&lt;br /&gt;
'''Cucumber Example:'''&lt;br /&gt;
Scenario: See all vendors&lt;br /&gt;
    Given I am logged in as a user in the administrator role&lt;br /&gt;
    And There are 3 vendors&lt;br /&gt;
    When I go to the manage vendors page&lt;br /&gt;
    Then I should see the first 3 vendor names&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Shoulda''' &lt;br /&gt;
An extension to Test::Unit with additional helpers, macros, and assertions.&lt;br /&gt;
 &lt;br /&gt;
[http://www.thoughtbot.com/projects/shoulda]&lt;br /&gt;
The link provides a more conclusive definition of Shoulda along with installation facts and working examples of the Shoulda &lt;br /&gt;
&lt;br /&gt;
testing framework within Ruby's built in Test::Unit&lt;br /&gt;
&lt;br /&gt;
== BDD: Behavior Driven Development ==&lt;br /&gt;
	[http://eggsonbread.com/2009/07/22/behavior-driven-development-in-a-nutshell/]&lt;br /&gt;
Behavior driven development was born from the concepts behind the implementation of TDD.  It brings together strands from &lt;br /&gt;
&lt;br /&gt;
TestDrivenDevelopment and DomainDrivenDesign into an integrated whole, making the relationship between these two powerful &lt;br /&gt;
&lt;br /&gt;
approaches to software development more evident.  Most test driven development testing frameworks such as RSpec and Cucumber also support behavior driven development testing. &lt;br /&gt;
&lt;br /&gt;
[http://behaviour-driven.org/]&lt;br /&gt;
The link supports BDDs definition with additional links to more viable behavior driven development resources.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Other Test Tool Resources'''&lt;br /&gt;
&lt;br /&gt;
''Watir:'' is an open-source library for automating web browsers. It allows you to write tests that are easy to read and maintain. It &lt;br /&gt;
&lt;br /&gt;
is simple and flexible.  &lt;br /&gt;
[http://wtr.rubyforge.org/]&lt;br /&gt;
The link provides an overview of Watir with installation specifications, examples, and supported platforms&lt;br /&gt;
&lt;br /&gt;
''NullDB:'' [http://avdi.org/projects/nulldb/]&lt;br /&gt;
a way to speed up testing by avoiding database use.&lt;br /&gt;
&lt;br /&gt;
''Bleakhouse:'' memory leak detection&lt;br /&gt;
[http://www.rubyinside.com/bleakhouse-tool-to-find-memory-leaks-in-your-rails-applications-470.html]&lt;br /&gt;
The link gives additional information on Bleakhouse profiling for memory leaks&lt;br /&gt;
&lt;br /&gt;
''ruby-debug:'' &lt;br /&gt;
Other than the extensive use of breakpoints Rails provides little to streamline the debugging process. Ruby-debug provides Rails with a plug-in extending the functionality of Rails built in debugger. &lt;br /&gt;
&lt;br /&gt;
[http://rubyforge.org/softwaremap/trove_list.php?form_cat=47]&lt;br /&gt;
The link provides twenty additional debug resources available for RoR&lt;br /&gt;
&lt;br /&gt;
== '''Conclusion''' ==&lt;br /&gt;
&lt;br /&gt;
Rails is a very comprehensive development environment for Ruby with numerous extensions, plugins, and other resources outside of IDEs to strengthen the functionality of the open source web application framework.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
''All sources used to create this wiki are linked in the above text.''&lt;/div&gt;</summary>
		<author><name>Los Bravo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_team1&amp;diff=22167</id>
		<title>CSC/ECE 517 Fall 2009/wiki1b team1</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_team1&amp;diff=22167"/>
		<updated>2009-09-28T19:51:56Z</updated>

		<summary type="html">&lt;p&gt;Los Bravo: /* TDD: Test Driven Development */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;CSC/ECE 517 Fall 2009&lt;br /&gt;
&lt;br /&gt;
'''&lt;br /&gt;
== Resources for Rails (other than IDEs) ==&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
IDEs are a valuable resource for Rails development, however there are many other resources and tools&lt;br /&gt;
that can either replace or supplement IDEs.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Resources for Rails other than IDEs&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails API''''' - http://api.rubyonrails.org/&lt;br /&gt;
&lt;br /&gt;
	This site documents Rails files, classes and methods that can be used to build a Rails application.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Forum''''' - http://railsforum.com/&lt;br /&gt;
&lt;br /&gt;
	A discussion forum covering all aspects of Rails for beginners and experts including planning, &lt;br /&gt;
	programming, extensions and production.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Introducing Ruby on Rails''''' &lt;br /&gt;
&lt;br /&gt;
Part 1 http://www.softwaredeveloper.com/features/intro-to-ruby-on-rails-042507/&lt;br /&gt;
&lt;br /&gt;
Part 2 http://www.softwaredeveloper.com/features/intro-to-ruby-on-rails-part-two-043007/&lt;br /&gt;
&lt;br /&gt;
An excellent introduction to Rails for novices&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Installers'''&lt;br /&gt;
''&lt;br /&gt;
	&lt;br /&gt;
Windows: InstantRails - http://instantrails.rubyforge.org/wiki/wiki.pl&lt;br /&gt;
&lt;br /&gt;
		An all in one, single click installer for Windows that includes a Rails server.&lt;br /&gt;
&lt;br /&gt;
	Mac: Locomotive - http://locomotive.raaum.org/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Projects''''' - http://www.workingwithrails.com/&lt;br /&gt;
&lt;br /&gt;
	A Database of Rails projects, programmers and websites&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails plugins''''' - http://agilewebdevelopment.com/&lt;br /&gt;
&lt;br /&gt;
	A collection of Rails open source plugins, searchable by category or keyword.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Sample Rails''''' - http://snippets.dzone.com/tag/rails&lt;br /&gt;
&lt;br /&gt;
	A collection of Rails code snippets.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Agile Rails book''''' - http://www.amazon.com/gp/product/097669400X/002-0481267-8083260?v=glance&amp;amp;n=283155&lt;br /&gt;
&lt;br /&gt;
	An excellent resource for learning how to apply Agile programming concepts to Rails.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails cheatsheet''''' - http://www.blainekendall.com/uploads/RubyOnRails-Cheatsheet-BlaineKendall.pdf&lt;br /&gt;
&lt;br /&gt;
	One user's list of best practices, gotchas and quirks of developing with Rails.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails best practices''''' - http://www.therailsway.com/&lt;br /&gt;
&lt;br /&gt;
	An official best practices list for programming in Rails.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Advanced Rails''''' - http://webonrails.com/&lt;br /&gt;
&lt;br /&gt;
	A resource for the advanced Rails programmer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Blog''''' - http://weblog.rubyonrails.org/&lt;br /&gt;
&lt;br /&gt;
	An online community of updates about current happenings with the Rails platform.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Guides''''' - http://guides.rubyonrails.org/&lt;br /&gt;
&lt;br /&gt;
	An all in one resource for learning Rails including Howtos, security and contributing to the Rails community.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Authoring Rails plugins''''' - http://nubyonrails.com/articles/2006/05/04/the-complete-guide-to-rails-plugins-part-i&lt;br /&gt;
&lt;br /&gt;
	A complete guide to authoring your own Rails plugins.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
== '''Tools for Rails (other than IDEs)''' ==&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
'''Test Unit'''&lt;br /&gt;
The Rails stack uses Test::Unit, known as the default Ruby unit testing framework shipping with Ruby.  There are various plugins and extension that could be used with Rails built-in Test::Unit to extend its functionality for support of TDD and BDD testing practices.&lt;br /&gt;
&lt;br /&gt;
[http://wiki.rubyonrails.org/addons/testing]&lt;br /&gt;
The link provides additional information in the form of supporting resources, whitepapers, examples, and plug-in documentation&lt;br /&gt;
&lt;br /&gt;
'''Example'''&lt;br /&gt;
[http://wiki.rubyonrails.org/testing/test-unitrequire] &lt;br /&gt;
&lt;br /&gt;
 Image:class CalculatorTest &amp;lt; Test::Unit::TestCase &lt;br /&gt;
  def test_add_two_numbers_for_the_sum &lt;br /&gt;
    calculator = Calculator.new &lt;br /&gt;
    assert_equal 4, calculator.sum(2, 2)&lt;br /&gt;
  end &lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
== TDD: Test Driven Development ==&lt;br /&gt;
 	&lt;br /&gt;
Test Driven Development is a combination of refactoring and test first development, a form of development where the test is &lt;br /&gt;
&lt;br /&gt;
written prior to completed production code.  The goal of TDD is the specification of requirements and not the validation of &lt;br /&gt;
&lt;br /&gt;
requirements.  There are a few testing frameworks that are used to implement the TDD programming technique.  &lt;br /&gt;
&lt;br /&gt;
[http://ruby.about.com/b/2009/01/28/test-driven-development-with-rails.htm]&lt;br /&gt;
This link provides a comprehensive overview of test driven development practices and available resources for implementation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''RSpec'''&lt;br /&gt;
RSpec is a testing framework for Behavior Driven Development, complete with its own expectations, matchers and mocking and &lt;br /&gt;
&lt;br /&gt;
stubbing facilities. It goes along hand in hand with Cucumber, though it plays nicely with many other testing frameworks as well.&lt;br /&gt;
&lt;br /&gt;
'''Example expresses some basic desired behavior'''''Italic text''&lt;br /&gt;
&lt;br /&gt;
 bowling_spec.rb&lt;br /&gt;
 require ‘bowling’&lt;br /&gt;
 describe Bowling do&lt;br /&gt;
 it &amp;quot;should score 0 for gutter game&amp;quot; do&lt;br /&gt;
 bowling = Bowling.new&lt;br /&gt;
 20.times { bowling.hit(0) }&lt;br /&gt;
 bowling.score.should == 0&lt;br /&gt;
 end&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
'''Model Examples'''&lt;br /&gt;
These are the equivalent of unit tests in Rails’ built in testing. Ironically&lt;br /&gt;
(for the traditional TDD’er) these are the only specs that we feel should actually interact&lt;br /&gt;
with the database.&lt;br /&gt;
&lt;br /&gt;
'''Controller Examples'''&lt;br /&gt;
These align somewhat with functional tests in rails, except&lt;br /&gt;
that they do not actually render views (though you can force rendering of views&lt;br /&gt;
if you prefer). Instead of setting expectations about what goes on a page, you&lt;br /&gt;
set expectations about what templates get rendered. &lt;br /&gt;
&lt;br /&gt;
'''View Examples'''&lt;br /&gt;
This is the other half of Rails’ functional testing. View specs allow&lt;br /&gt;
you to set up assigns (thanks to ZenTest).&lt;br /&gt;
&lt;br /&gt;
'''Helper Examples'''&lt;br /&gt;
let you specify directly methods that live in your helpers.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://www.ibm.com/developerworks/web/library/wa-rspec/]&lt;br /&gt;
The link provides a brief overview of RSpec with a comprehensive series of examples and a conceptual view of Rpecs step by step &lt;br /&gt;
&lt;br /&gt;
implementation process&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Cucumber'''&lt;br /&gt;
Cucumber is used with TDD and BDD within other testing frameworks such as RSpec by letting software development teams describe how &lt;br /&gt;
&lt;br /&gt;
software should behave in plain text. The text is written in a business-readable domain-specific language and serves as &lt;br /&gt;
&lt;br /&gt;
documentation, automated tests and development-aid - all rolled into one format.&lt;br /&gt;
&lt;br /&gt;
[http://cukes.info/]&lt;br /&gt;
The link provides a detail decription, definition, and examples of Cucumber implementation best practices and supported &lt;br /&gt;
&lt;br /&gt;
frameworks.&lt;br /&gt;
&lt;br /&gt;
'''Cucumber Example:'''&lt;br /&gt;
Scenario: See all vendors&lt;br /&gt;
    Given I am logged in as a user in the administrator role&lt;br /&gt;
    And There are 3 vendors&lt;br /&gt;
    When I go to the manage vendors page&lt;br /&gt;
    Then I should see the first 3 vendor names&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Shoulda''' &lt;br /&gt;
An extension to Test::Unit with additional helpers, macros, and assertions.&lt;br /&gt;
 &lt;br /&gt;
[http://www.thoughtbot.com/projects/shoulda]&lt;br /&gt;
The link provides a more conclusive definition of Shoulda along with installation facts and working examples of the Shoulda &lt;br /&gt;
&lt;br /&gt;
testing framework within Ruby's built in Test::Unit&lt;br /&gt;
&lt;br /&gt;
== BDD: Behavior Driven Development ==&lt;br /&gt;
	[http://eggsonbread.com/2009/07/22/behavior-driven-development-in-a-nutshell/]&lt;br /&gt;
Behavior driven development was born from the concepts behind the implementation of TDD.  It brings together strands from &lt;br /&gt;
&lt;br /&gt;
TestDrivenDevelopment and DomainDrivenDesign into an integrated whole, making the relationship between these two powerful &lt;br /&gt;
&lt;br /&gt;
approaches to software development more evident.  Most test driven development testing frameworks such as RSpec and Cucumber also support behavior driven development testing. &lt;br /&gt;
&lt;br /&gt;
[http://behaviour-driven.org/]&lt;br /&gt;
The link supports BDDs definition with additional links to more viable behavior driven development resources.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Other Test Tool Resources'''&lt;br /&gt;
&lt;br /&gt;
''Watir:'' is an open-source library for automating web browsers. It allows you to write tests that are easy to read and maintain. It &lt;br /&gt;
&lt;br /&gt;
is simple and flexible.  &lt;br /&gt;
[http://wtr.rubyforge.org/]&lt;br /&gt;
The link provides an overview of Watir with installation specifications, examples, and supported platforms&lt;br /&gt;
&lt;br /&gt;
''NullDB:'' [http://avdi.org/projects/nulldb/]&lt;br /&gt;
a way to speed up testing by avoiding database use.&lt;br /&gt;
&lt;br /&gt;
''Bleakhouse:'' memory leak detection&lt;br /&gt;
[http://www.rubyinside.com/bleakhouse-tool-to-find-memory-leaks-in-your-rails-applications-470.html]&lt;br /&gt;
The link gives additional information on Bleakhouse profiling for memory leaks&lt;br /&gt;
&lt;br /&gt;
''ruby-debug:'' &lt;br /&gt;
Other than the extensive use of breakpoints Rails provides little to streamline the debugging process. Ruby-debug provides Rails with a plug-in extending the functionality of Rails built in debugger. &lt;br /&gt;
&lt;br /&gt;
[http://rubyforge.org/softwaremap/trove_list.php?form_cat=47]&lt;br /&gt;
The link provides twenty additional debug resources available for RoR&lt;br /&gt;
&lt;br /&gt;
== '''Conclusion''' ==&lt;br /&gt;
&lt;br /&gt;
Rails is a very comprehensive development environment for Ruby with numerous extensions, plugins, and other resources outside of IDEs to strengthen the functionality of the open source web application framework.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
''All sources used to create this wiki are linked in the above text.''&lt;/div&gt;</summary>
		<author><name>Los Bravo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_team1&amp;diff=22166</id>
		<title>CSC/ECE 517 Fall 2009/wiki1b team1</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_team1&amp;diff=22166"/>
		<updated>2009-09-28T19:51:28Z</updated>

		<summary type="html">&lt;p&gt;Los Bravo: /* TDD: Test Driven Development */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;CSC/ECE 517 Fall 2009&lt;br /&gt;
&lt;br /&gt;
'''&lt;br /&gt;
== Resources for Rails (other than IDEs) ==&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
IDEs are a valuable resource for Rails development, however there are many other resources and tools&lt;br /&gt;
that can either replace or supplement IDEs.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Resources for Rails other than IDEs&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails API''''' - http://api.rubyonrails.org/&lt;br /&gt;
&lt;br /&gt;
	This site documents Rails files, classes and methods that can be used to build a Rails application.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Forum''''' - http://railsforum.com/&lt;br /&gt;
&lt;br /&gt;
	A discussion forum covering all aspects of Rails for beginners and experts including planning, &lt;br /&gt;
	programming, extensions and production.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Introducing Ruby on Rails''''' &lt;br /&gt;
&lt;br /&gt;
Part 1 http://www.softwaredeveloper.com/features/intro-to-ruby-on-rails-042507/&lt;br /&gt;
&lt;br /&gt;
Part 2 http://www.softwaredeveloper.com/features/intro-to-ruby-on-rails-part-two-043007/&lt;br /&gt;
&lt;br /&gt;
An excellent introduction to Rails for novices&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Installers'''&lt;br /&gt;
''&lt;br /&gt;
	&lt;br /&gt;
Windows: InstantRails - http://instantrails.rubyforge.org/wiki/wiki.pl&lt;br /&gt;
&lt;br /&gt;
		An all in one, single click installer for Windows that includes a Rails server.&lt;br /&gt;
&lt;br /&gt;
	Mac: Locomotive - http://locomotive.raaum.org/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Projects''''' - http://www.workingwithrails.com/&lt;br /&gt;
&lt;br /&gt;
	A Database of Rails projects, programmers and websites&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails plugins''''' - http://agilewebdevelopment.com/&lt;br /&gt;
&lt;br /&gt;
	A collection of Rails open source plugins, searchable by category or keyword.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Sample Rails''''' - http://snippets.dzone.com/tag/rails&lt;br /&gt;
&lt;br /&gt;
	A collection of Rails code snippets.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Agile Rails book''''' - http://www.amazon.com/gp/product/097669400X/002-0481267-8083260?v=glance&amp;amp;n=283155&lt;br /&gt;
&lt;br /&gt;
	An excellent resource for learning how to apply Agile programming concepts to Rails.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails cheatsheet''''' - http://www.blainekendall.com/uploads/RubyOnRails-Cheatsheet-BlaineKendall.pdf&lt;br /&gt;
&lt;br /&gt;
	One user's list of best practices, gotchas and quirks of developing with Rails.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails best practices''''' - http://www.therailsway.com/&lt;br /&gt;
&lt;br /&gt;
	An official best practices list for programming in Rails.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Advanced Rails''''' - http://webonrails.com/&lt;br /&gt;
&lt;br /&gt;
	A resource for the advanced Rails programmer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Blog''''' - http://weblog.rubyonrails.org/&lt;br /&gt;
&lt;br /&gt;
	An online community of updates about current happenings with the Rails platform.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Guides''''' - http://guides.rubyonrails.org/&lt;br /&gt;
&lt;br /&gt;
	An all in one resource for learning Rails including Howtos, security and contributing to the Rails community.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Authoring Rails plugins''''' - http://nubyonrails.com/articles/2006/05/04/the-complete-guide-to-rails-plugins-part-i&lt;br /&gt;
&lt;br /&gt;
	A complete guide to authoring your own Rails plugins.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
== '''Tools for Rails (other than IDEs)''' ==&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
'''Test Unit'''&lt;br /&gt;
The Rails stack uses Test::Unit, known as the default Ruby unit testing framework shipping with Ruby.  There are various plugins and extension that could be used with Rails built-in Test::Unit to extend its functionality for support of TDD and BDD testing practices.&lt;br /&gt;
&lt;br /&gt;
[http://wiki.rubyonrails.org/addons/testing]&lt;br /&gt;
The link provides additional information in the form of supporting resources, whitepapers, examples, and plug-in documentation&lt;br /&gt;
&lt;br /&gt;
'''Example'''&lt;br /&gt;
[http://wiki.rubyonrails.org/testing/test-unitrequire] &lt;br /&gt;
&lt;br /&gt;
 Image:class CalculatorTest &amp;lt; Test::Unit::TestCase &lt;br /&gt;
  def test_add_two_numbers_for_the_sum &lt;br /&gt;
    calculator = Calculator.new &lt;br /&gt;
    assert_equal 4, calculator.sum(2, 2)&lt;br /&gt;
  end &lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
== TDD: Test Driven Development ==&lt;br /&gt;
 	&lt;br /&gt;
Test Driven Development is a combination of refactoring and test first development, a form of development where the test is &lt;br /&gt;
&lt;br /&gt;
written prior to completed production code.  The goal of TDD is the specification of requirements and not the validation of &lt;br /&gt;
&lt;br /&gt;
requirements.  There are a few testing frameworks that are used to implement the TDD programming technique.  &lt;br /&gt;
&lt;br /&gt;
[http://ruby.about.com/b/2009/01/28/test-driven-development-with-rails.htm]&lt;br /&gt;
This link provides a comprehensive overview of test driven development practices and available resources for implementation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''RSpec'''&lt;br /&gt;
RSpec is a testing framework for Behavior Driven Development, complete with its own expectations, matchers and mocking and &lt;br /&gt;
&lt;br /&gt;
stubbing facilities. It goes along hand in hand with Cucumber, though it plays nicely with many other testing frameworks as well.&lt;br /&gt;
&lt;br /&gt;
Example expresses some basic desired behavior&lt;br /&gt;
&lt;br /&gt;
 bowling_spec.rb&lt;br /&gt;
 require ‘bowling’&lt;br /&gt;
 describe Bowling do&lt;br /&gt;
 it &amp;quot;should score 0 for gutter game&amp;quot; do&lt;br /&gt;
 bowling = Bowling.new&lt;br /&gt;
 20.times { bowling.hit(0) }&lt;br /&gt;
 bowling.score.should == 0&lt;br /&gt;
 end&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
'''Model Examples'''&lt;br /&gt;
These are the equivalent of unit tests in Rails’ built in testing. Ironically&lt;br /&gt;
(for the traditional TDD’er) these are the only specs that we feel should actually interact&lt;br /&gt;
with the database.&lt;br /&gt;
&lt;br /&gt;
'''Controller Examples'''&lt;br /&gt;
These align somewhat with functional tests in rails, except&lt;br /&gt;
that they do not actually render views (though you can force rendering of views&lt;br /&gt;
if you prefer). Instead of setting expectations about what goes on a page, you&lt;br /&gt;
set expectations about what templates get rendered. &lt;br /&gt;
&lt;br /&gt;
'''View Examples'''&lt;br /&gt;
This is the other half of Rails’ functional testing. View specs allow&lt;br /&gt;
you to set up assigns (thanks to ZenTest).&lt;br /&gt;
&lt;br /&gt;
'''Helper Examples'''&lt;br /&gt;
let you specify directly methods that live in your helpers.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://www.ibm.com/developerworks/web/library/wa-rspec/]&lt;br /&gt;
The link provides a brief overview of RSpec with a comprehensive series of examples and a conceptual view of Rpecs step by step &lt;br /&gt;
&lt;br /&gt;
implementation process&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Cucumber'''&lt;br /&gt;
Cucumber is used with TDD and BDD within other testing frameworks such as RSpec by letting software development teams describe how &lt;br /&gt;
&lt;br /&gt;
software should behave in plain text. The text is written in a business-readable domain-specific language and serves as &lt;br /&gt;
&lt;br /&gt;
documentation, automated tests and development-aid - all rolled into one format.&lt;br /&gt;
&lt;br /&gt;
[http://cukes.info/]&lt;br /&gt;
The link provides a detail decription, definition, and examples of Cucumber implementation best practices and supported &lt;br /&gt;
&lt;br /&gt;
frameworks.&lt;br /&gt;
&lt;br /&gt;
'''Cucumber Example:'''&lt;br /&gt;
Scenario: See all vendors&lt;br /&gt;
    Given I am logged in as a user in the administrator role&lt;br /&gt;
    And There are 3 vendors&lt;br /&gt;
    When I go to the manage vendors page&lt;br /&gt;
    Then I should see the first 3 vendor names&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Shoulda''' &lt;br /&gt;
An extension to Test::Unit with additional helpers, macros, and assertions.&lt;br /&gt;
 &lt;br /&gt;
[http://www.thoughtbot.com/projects/shoulda]&lt;br /&gt;
The link provides a more conclusive definition of Shoulda along with installation facts and working examples of the Shoulda &lt;br /&gt;
&lt;br /&gt;
testing framework within Ruby's built in Test::Unit&lt;br /&gt;
&lt;br /&gt;
== BDD: Behavior Driven Development ==&lt;br /&gt;
	[http://eggsonbread.com/2009/07/22/behavior-driven-development-in-a-nutshell/]&lt;br /&gt;
Behavior driven development was born from the concepts behind the implementation of TDD.  It brings together strands from &lt;br /&gt;
&lt;br /&gt;
TestDrivenDevelopment and DomainDrivenDesign into an integrated whole, making the relationship between these two powerful &lt;br /&gt;
&lt;br /&gt;
approaches to software development more evident.  Most test driven development testing frameworks such as RSpec and Cucumber also support behavior driven development testing. &lt;br /&gt;
&lt;br /&gt;
[http://behaviour-driven.org/]&lt;br /&gt;
The link supports BDDs definition with additional links to more viable behavior driven development resources.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Other Test Tool Resources'''&lt;br /&gt;
&lt;br /&gt;
''Watir:'' is an open-source library for automating web browsers. It allows you to write tests that are easy to read and maintain. It &lt;br /&gt;
&lt;br /&gt;
is simple and flexible.  &lt;br /&gt;
[http://wtr.rubyforge.org/]&lt;br /&gt;
The link provides an overview of Watir with installation specifications, examples, and supported platforms&lt;br /&gt;
&lt;br /&gt;
''NullDB:'' [http://avdi.org/projects/nulldb/]&lt;br /&gt;
a way to speed up testing by avoiding database use.&lt;br /&gt;
&lt;br /&gt;
''Bleakhouse:'' memory leak detection&lt;br /&gt;
[http://www.rubyinside.com/bleakhouse-tool-to-find-memory-leaks-in-your-rails-applications-470.html]&lt;br /&gt;
The link gives additional information on Bleakhouse profiling for memory leaks&lt;br /&gt;
&lt;br /&gt;
''ruby-debug:'' &lt;br /&gt;
Other than the extensive use of breakpoints Rails provides little to streamline the debugging process. Ruby-debug provides Rails with a plug-in extending the functionality of Rails built in debugger. &lt;br /&gt;
&lt;br /&gt;
[http://rubyforge.org/softwaremap/trove_list.php?form_cat=47]&lt;br /&gt;
The link provides twenty additional debug resources available for RoR&lt;br /&gt;
&lt;br /&gt;
== '''Conclusion''' ==&lt;br /&gt;
&lt;br /&gt;
Rails is a very comprehensive development environment for Ruby with numerous extensions, plugins, and other resources outside of IDEs to strengthen the functionality of the open source web application framework.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
''All sources used to create this wiki are linked in the above text.''&lt;/div&gt;</summary>
		<author><name>Los Bravo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_team1&amp;diff=22165</id>
		<title>CSC/ECE 517 Fall 2009/wiki1b team1</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_team1&amp;diff=22165"/>
		<updated>2009-09-28T19:51:05Z</updated>

		<summary type="html">&lt;p&gt;Los Bravo: /* TDD: Test Driven Development */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;CSC/ECE 517 Fall 2009&lt;br /&gt;
&lt;br /&gt;
'''&lt;br /&gt;
== Resources for Rails (other than IDEs) ==&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
IDEs are a valuable resource for Rails development, however there are many other resources and tools&lt;br /&gt;
that can either replace or supplement IDEs.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Resources for Rails other than IDEs&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails API''''' - http://api.rubyonrails.org/&lt;br /&gt;
&lt;br /&gt;
	This site documents Rails files, classes and methods that can be used to build a Rails application.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Forum''''' - http://railsforum.com/&lt;br /&gt;
&lt;br /&gt;
	A discussion forum covering all aspects of Rails for beginners and experts including planning, &lt;br /&gt;
	programming, extensions and production.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Introducing Ruby on Rails''''' &lt;br /&gt;
&lt;br /&gt;
Part 1 http://www.softwaredeveloper.com/features/intro-to-ruby-on-rails-042507/&lt;br /&gt;
&lt;br /&gt;
Part 2 http://www.softwaredeveloper.com/features/intro-to-ruby-on-rails-part-two-043007/&lt;br /&gt;
&lt;br /&gt;
An excellent introduction to Rails for novices&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Installers'''&lt;br /&gt;
''&lt;br /&gt;
	&lt;br /&gt;
Windows: InstantRails - http://instantrails.rubyforge.org/wiki/wiki.pl&lt;br /&gt;
&lt;br /&gt;
		An all in one, single click installer for Windows that includes a Rails server.&lt;br /&gt;
&lt;br /&gt;
	Mac: Locomotive - http://locomotive.raaum.org/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Projects''''' - http://www.workingwithrails.com/&lt;br /&gt;
&lt;br /&gt;
	A Database of Rails projects, programmers and websites&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails plugins''''' - http://agilewebdevelopment.com/&lt;br /&gt;
&lt;br /&gt;
	A collection of Rails open source plugins, searchable by category or keyword.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Sample Rails''''' - http://snippets.dzone.com/tag/rails&lt;br /&gt;
&lt;br /&gt;
	A collection of Rails code snippets.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Agile Rails book''''' - http://www.amazon.com/gp/product/097669400X/002-0481267-8083260?v=glance&amp;amp;n=283155&lt;br /&gt;
&lt;br /&gt;
	An excellent resource for learning how to apply Agile programming concepts to Rails.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails cheatsheet''''' - http://www.blainekendall.com/uploads/RubyOnRails-Cheatsheet-BlaineKendall.pdf&lt;br /&gt;
&lt;br /&gt;
	One user's list of best practices, gotchas and quirks of developing with Rails.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails best practices''''' - http://www.therailsway.com/&lt;br /&gt;
&lt;br /&gt;
	An official best practices list for programming in Rails.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Advanced Rails''''' - http://webonrails.com/&lt;br /&gt;
&lt;br /&gt;
	A resource for the advanced Rails programmer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Blog''''' - http://weblog.rubyonrails.org/&lt;br /&gt;
&lt;br /&gt;
	An online community of updates about current happenings with the Rails platform.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Guides''''' - http://guides.rubyonrails.org/&lt;br /&gt;
&lt;br /&gt;
	An all in one resource for learning Rails including Howtos, security and contributing to the Rails community.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Authoring Rails plugins''''' - http://nubyonrails.com/articles/2006/05/04/the-complete-guide-to-rails-plugins-part-i&lt;br /&gt;
&lt;br /&gt;
	A complete guide to authoring your own Rails plugins.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
== '''Tools for Rails (other than IDEs)''' ==&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
'''Test Unit'''&lt;br /&gt;
The Rails stack uses Test::Unit, known as the default Ruby unit testing framework shipping with Ruby.  There are various plugins and extension that could be used with Rails built-in Test::Unit to extend its functionality for support of TDD and BDD testing practices.&lt;br /&gt;
&lt;br /&gt;
[http://wiki.rubyonrails.org/addons/testing]&lt;br /&gt;
The link provides additional information in the form of supporting resources, whitepapers, examples, and plug-in documentation&lt;br /&gt;
&lt;br /&gt;
'''Example'''&lt;br /&gt;
[http://wiki.rubyonrails.org/testing/test-unitrequire] &lt;br /&gt;
&lt;br /&gt;
 Image:class CalculatorTest &amp;lt; Test::Unit::TestCase &lt;br /&gt;
  def test_add_two_numbers_for_the_sum &lt;br /&gt;
    calculator = Calculator.new &lt;br /&gt;
    assert_equal 4, calculator.sum(2, 2)&lt;br /&gt;
  end &lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
== TDD: Test Driven Development ==&lt;br /&gt;
 	&lt;br /&gt;
Test Driven Development is a combination of refactoring and test first development, a form of development where the test is &lt;br /&gt;
&lt;br /&gt;
written prior to completed production code.  The goal of TDD is the specification of requirements and not the validation of &lt;br /&gt;
&lt;br /&gt;
requirements.  There are a few testing frameworks that are used to implement the TDD programming technique.  &lt;br /&gt;
&lt;br /&gt;
[http://ruby.about.com/b/2009/01/28/test-driven-development-with-rails.htm]&lt;br /&gt;
This link provides a comprehensive overview of test driven development practices and available resources for implementation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''RSpec'''&lt;br /&gt;
RSpec is a testing framework for Behavior Driven Development, complete with its own expectations, matchers and mocking and &lt;br /&gt;
&lt;br /&gt;
stubbing facilities. It goes along hand in hand with Cucumber, though it plays nicely with many other testing frameworks as well.&lt;br /&gt;
&lt;br /&gt;
Example expresses some basic desired behavior&lt;br /&gt;
&lt;br /&gt;
bowling_spec.rb&lt;br /&gt;
 require ‘bowling’&lt;br /&gt;
 describe Bowling do&lt;br /&gt;
 it &amp;quot;should score 0 for gutter game&amp;quot; do&lt;br /&gt;
 bowling = Bowling.new&lt;br /&gt;
 20.times { bowling.hit(0) }&lt;br /&gt;
 bowling.score.should == 0&lt;br /&gt;
 end&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
'''Model Examples'''&lt;br /&gt;
These are the equivalent of unit tests in Rails’ built in testing. Ironically&lt;br /&gt;
(for the traditional TDD’er) these are the only specs that we feel should actually interact&lt;br /&gt;
with the database.&lt;br /&gt;
&lt;br /&gt;
'''Controller Examples'''&lt;br /&gt;
These align somewhat with functional tests in rails, except&lt;br /&gt;
that they do not actually render views (though you can force rendering of views&lt;br /&gt;
if you prefer). Instead of setting expectations about what goes on a page, you&lt;br /&gt;
set expectations about what templates get rendered. &lt;br /&gt;
&lt;br /&gt;
'''View Examples'''&lt;br /&gt;
This is the other half of Rails’ functional testing. View specs allow&lt;br /&gt;
you to set up assigns (thanks to ZenTest).&lt;br /&gt;
&lt;br /&gt;
'''Helper Examples'''&lt;br /&gt;
let you specify directly methods that live in your helpers.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://www.ibm.com/developerworks/web/library/wa-rspec/]&lt;br /&gt;
The link provides a brief overview of RSpec with a comprehensive series of examples and a conceptual view of Rpecs step by step &lt;br /&gt;
&lt;br /&gt;
implementation process&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Cucumber'''&lt;br /&gt;
Cucumber is used with TDD and BDD within other testing frameworks such as RSpec by letting software development teams describe how &lt;br /&gt;
&lt;br /&gt;
software should behave in plain text. The text is written in a business-readable domain-specific language and serves as &lt;br /&gt;
&lt;br /&gt;
documentation, automated tests and development-aid - all rolled into one format.&lt;br /&gt;
&lt;br /&gt;
[http://cukes.info/]&lt;br /&gt;
The link provides a detail decription, definition, and examples of Cucumber implementation best practices and supported &lt;br /&gt;
&lt;br /&gt;
frameworks.&lt;br /&gt;
&lt;br /&gt;
'''Cucumber Example:'''&lt;br /&gt;
Scenario: See all vendors&lt;br /&gt;
    Given I am logged in as a user in the administrator role&lt;br /&gt;
    And There are 3 vendors&lt;br /&gt;
    When I go to the manage vendors page&lt;br /&gt;
    Then I should see the first 3 vendor names&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Shoulda''' &lt;br /&gt;
An extension to Test::Unit with additional helpers, macros, and assertions.&lt;br /&gt;
 &lt;br /&gt;
[http://www.thoughtbot.com/projects/shoulda]&lt;br /&gt;
The link provides a more conclusive definition of Shoulda along with installation facts and working examples of the Shoulda &lt;br /&gt;
&lt;br /&gt;
testing framework within Ruby's built in Test::Unit&lt;br /&gt;
&lt;br /&gt;
== BDD: Behavior Driven Development ==&lt;br /&gt;
	[http://eggsonbread.com/2009/07/22/behavior-driven-development-in-a-nutshell/]&lt;br /&gt;
Behavior driven development was born from the concepts behind the implementation of TDD.  It brings together strands from &lt;br /&gt;
&lt;br /&gt;
TestDrivenDevelopment and DomainDrivenDesign into an integrated whole, making the relationship between these two powerful &lt;br /&gt;
&lt;br /&gt;
approaches to software development more evident.  Most test driven development testing frameworks such as RSpec and Cucumber also support behavior driven development testing. &lt;br /&gt;
&lt;br /&gt;
[http://behaviour-driven.org/]&lt;br /&gt;
The link supports BDDs definition with additional links to more viable behavior driven development resources.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Other Test Tool Resources'''&lt;br /&gt;
&lt;br /&gt;
''Watir:'' is an open-source library for automating web browsers. It allows you to write tests that are easy to read and maintain. It &lt;br /&gt;
&lt;br /&gt;
is simple and flexible.  &lt;br /&gt;
[http://wtr.rubyforge.org/]&lt;br /&gt;
The link provides an overview of Watir with installation specifications, examples, and supported platforms&lt;br /&gt;
&lt;br /&gt;
''NullDB:'' [http://avdi.org/projects/nulldb/]&lt;br /&gt;
a way to speed up testing by avoiding database use.&lt;br /&gt;
&lt;br /&gt;
''Bleakhouse:'' memory leak detection&lt;br /&gt;
[http://www.rubyinside.com/bleakhouse-tool-to-find-memory-leaks-in-your-rails-applications-470.html]&lt;br /&gt;
The link gives additional information on Bleakhouse profiling for memory leaks&lt;br /&gt;
&lt;br /&gt;
''ruby-debug:'' &lt;br /&gt;
Other than the extensive use of breakpoints Rails provides little to streamline the debugging process. Ruby-debug provides Rails with a plug-in extending the functionality of Rails built in debugger. &lt;br /&gt;
&lt;br /&gt;
[http://rubyforge.org/softwaremap/trove_list.php?form_cat=47]&lt;br /&gt;
The link provides twenty additional debug resources available for RoR&lt;br /&gt;
&lt;br /&gt;
== '''Conclusion''' ==&lt;br /&gt;
&lt;br /&gt;
Rails is a very comprehensive development environment for Ruby with numerous extensions, plugins, and other resources outside of IDEs to strengthen the functionality of the open source web application framework.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
''All sources used to create this wiki are linked in the above text.''&lt;/div&gt;</summary>
		<author><name>Los Bravo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_team1&amp;diff=22164</id>
		<title>CSC/ECE 517 Fall 2009/wiki1b team1</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_team1&amp;diff=22164"/>
		<updated>2009-09-28T19:50:32Z</updated>

		<summary type="html">&lt;p&gt;Los Bravo: /* TDD: Test Driven Development */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;CSC/ECE 517 Fall 2009&lt;br /&gt;
&lt;br /&gt;
'''&lt;br /&gt;
== Resources for Rails (other than IDEs) ==&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
IDEs are a valuable resource for Rails development, however there are many other resources and tools&lt;br /&gt;
that can either replace or supplement IDEs.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Resources for Rails other than IDEs&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails API''''' - http://api.rubyonrails.org/&lt;br /&gt;
&lt;br /&gt;
	This site documents Rails files, classes and methods that can be used to build a Rails application.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Forum''''' - http://railsforum.com/&lt;br /&gt;
&lt;br /&gt;
	A discussion forum covering all aspects of Rails for beginners and experts including planning, &lt;br /&gt;
	programming, extensions and production.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Introducing Ruby on Rails''''' &lt;br /&gt;
&lt;br /&gt;
Part 1 http://www.softwaredeveloper.com/features/intro-to-ruby-on-rails-042507/&lt;br /&gt;
&lt;br /&gt;
Part 2 http://www.softwaredeveloper.com/features/intro-to-ruby-on-rails-part-two-043007/&lt;br /&gt;
&lt;br /&gt;
An excellent introduction to Rails for novices&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Installers'''&lt;br /&gt;
''&lt;br /&gt;
	&lt;br /&gt;
Windows: InstantRails - http://instantrails.rubyforge.org/wiki/wiki.pl&lt;br /&gt;
&lt;br /&gt;
		An all in one, single click installer for Windows that includes a Rails server.&lt;br /&gt;
&lt;br /&gt;
	Mac: Locomotive - http://locomotive.raaum.org/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Projects''''' - http://www.workingwithrails.com/&lt;br /&gt;
&lt;br /&gt;
	A Database of Rails projects, programmers and websites&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails plugins''''' - http://agilewebdevelopment.com/&lt;br /&gt;
&lt;br /&gt;
	A collection of Rails open source plugins, searchable by category or keyword.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Sample Rails''''' - http://snippets.dzone.com/tag/rails&lt;br /&gt;
&lt;br /&gt;
	A collection of Rails code snippets.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Agile Rails book''''' - http://www.amazon.com/gp/product/097669400X/002-0481267-8083260?v=glance&amp;amp;n=283155&lt;br /&gt;
&lt;br /&gt;
	An excellent resource for learning how to apply Agile programming concepts to Rails.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails cheatsheet''''' - http://www.blainekendall.com/uploads/RubyOnRails-Cheatsheet-BlaineKendall.pdf&lt;br /&gt;
&lt;br /&gt;
	One user's list of best practices, gotchas and quirks of developing with Rails.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails best practices''''' - http://www.therailsway.com/&lt;br /&gt;
&lt;br /&gt;
	An official best practices list for programming in Rails.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Advanced Rails''''' - http://webonrails.com/&lt;br /&gt;
&lt;br /&gt;
	A resource for the advanced Rails programmer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Blog''''' - http://weblog.rubyonrails.org/&lt;br /&gt;
&lt;br /&gt;
	An online community of updates about current happenings with the Rails platform.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Guides''''' - http://guides.rubyonrails.org/&lt;br /&gt;
&lt;br /&gt;
	An all in one resource for learning Rails including Howtos, security and contributing to the Rails community.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Authoring Rails plugins''''' - http://nubyonrails.com/articles/2006/05/04/the-complete-guide-to-rails-plugins-part-i&lt;br /&gt;
&lt;br /&gt;
	A complete guide to authoring your own Rails plugins.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
== '''Tools for Rails (other than IDEs)''' ==&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
'''Test Unit'''&lt;br /&gt;
The Rails stack uses Test::Unit, known as the default Ruby unit testing framework shipping with Ruby.  There are various plugins and extension that could be used with Rails built-in Test::Unit to extend its functionality for support of TDD and BDD testing practices.&lt;br /&gt;
&lt;br /&gt;
[http://wiki.rubyonrails.org/addons/testing]&lt;br /&gt;
The link provides additional information in the form of supporting resources, whitepapers, examples, and plug-in documentation&lt;br /&gt;
&lt;br /&gt;
'''Example'''&lt;br /&gt;
[http://wiki.rubyonrails.org/testing/test-unitrequire] &lt;br /&gt;
&lt;br /&gt;
 Image:class CalculatorTest &amp;lt; Test::Unit::TestCase &lt;br /&gt;
  def test_add_two_numbers_for_the_sum &lt;br /&gt;
    calculator = Calculator.new &lt;br /&gt;
    assert_equal 4, calculator.sum(2, 2)&lt;br /&gt;
  end &lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
== TDD: Test Driven Development ==&lt;br /&gt;
 	&lt;br /&gt;
Test Driven Development is a combination of refactoring and test first development, a form of development where the test is &lt;br /&gt;
&lt;br /&gt;
written prior to completed production code.  The goal of TDD is the specification of requirements and not the validation of &lt;br /&gt;
&lt;br /&gt;
requirements.  There are a few testing frameworks that are used to implement the TDD programming technique.  &lt;br /&gt;
&lt;br /&gt;
[http://ruby.about.com/b/2009/01/28/test-driven-development-with-rails.htm]&lt;br /&gt;
This link provides a comprehensive overview of test driven development practices and available resources for implementation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''RSpec'''&lt;br /&gt;
RSpec is a testing framework for Behavior Driven Development, complete with its own expectations, matchers and mocking and &lt;br /&gt;
&lt;br /&gt;
stubbing facilities. It goes along hand in hand with Cucumber, though it plays nicely with many other testing frameworks as well.&lt;br /&gt;
&lt;br /&gt;
Example expresses some basic desired behavior&lt;br /&gt;
&lt;br /&gt;
bowling_spec.rb&lt;br /&gt;
&lt;br /&gt;
 require ‘bowling’&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 describe Bowling do&lt;br /&gt;
&lt;br /&gt;
 it &amp;quot;should score 0 for gutter game&amp;quot; do&lt;br /&gt;
&lt;br /&gt;
 bowling = Bowling.new&lt;br /&gt;
&lt;br /&gt;
 20.times { bowling.hit(0) }&lt;br /&gt;
&lt;br /&gt;
 bowling.score.should == 0&lt;br /&gt;
&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
 end&lt;br /&gt;
'''Model Examples'''&lt;br /&gt;
These are the equivalent of unit tests in Rails’ built in testing. Ironically&lt;br /&gt;
(for the traditional TDD’er) these are the only specs that we feel should actually interact&lt;br /&gt;
with the database.&lt;br /&gt;
&lt;br /&gt;
'''Controller Examples'''&lt;br /&gt;
These align somewhat with functional tests in rails, except&lt;br /&gt;
that they do not actually render views (though you can force rendering of views&lt;br /&gt;
if you prefer). Instead of setting expectations about what goes on a page, you&lt;br /&gt;
set expectations about what templates get rendered. &lt;br /&gt;
&lt;br /&gt;
'''View Examples'''&lt;br /&gt;
This is the other half of Rails’ functional testing. View specs allow&lt;br /&gt;
you to set up assigns (thanks to ZenTest).&lt;br /&gt;
&lt;br /&gt;
'''Helper Examples'''&lt;br /&gt;
let you specify directly methods that live in your helpers.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://www.ibm.com/developerworks/web/library/wa-rspec/]&lt;br /&gt;
The link provides a brief overview of RSpec with a comprehensive series of examples and a conceptual view of Rpecs step by step &lt;br /&gt;
&lt;br /&gt;
implementation process&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Cucumber'''&lt;br /&gt;
Cucumber is used with TDD and BDD within other testing frameworks such as RSpec by letting software development teams describe how &lt;br /&gt;
&lt;br /&gt;
software should behave in plain text. The text is written in a business-readable domain-specific language and serves as &lt;br /&gt;
&lt;br /&gt;
documentation, automated tests and development-aid - all rolled into one format.&lt;br /&gt;
&lt;br /&gt;
[http://cukes.info/]&lt;br /&gt;
The link provides a detail decription, definition, and examples of Cucumber implementation best practices and supported &lt;br /&gt;
&lt;br /&gt;
frameworks.&lt;br /&gt;
&lt;br /&gt;
'''Cucumber Example:'''&lt;br /&gt;
Scenario: See all vendors&lt;br /&gt;
    Given I am logged in as a user in the administrator role&lt;br /&gt;
    And There are 3 vendors&lt;br /&gt;
    When I go to the manage vendors page&lt;br /&gt;
    Then I should see the first 3 vendor names&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Shoulda''' &lt;br /&gt;
An extension to Test::Unit with additional helpers, macros, and assertions.&lt;br /&gt;
 &lt;br /&gt;
[http://www.thoughtbot.com/projects/shoulda]&lt;br /&gt;
The link provides a more conclusive definition of Shoulda along with installation facts and working examples of the Shoulda &lt;br /&gt;
&lt;br /&gt;
testing framework within Ruby's built in Test::Unit&lt;br /&gt;
&lt;br /&gt;
== BDD: Behavior Driven Development ==&lt;br /&gt;
	[http://eggsonbread.com/2009/07/22/behavior-driven-development-in-a-nutshell/]&lt;br /&gt;
Behavior driven development was born from the concepts behind the implementation of TDD.  It brings together strands from &lt;br /&gt;
&lt;br /&gt;
TestDrivenDevelopment and DomainDrivenDesign into an integrated whole, making the relationship between these two powerful &lt;br /&gt;
&lt;br /&gt;
approaches to software development more evident.  Most test driven development testing frameworks such as RSpec and Cucumber also support behavior driven development testing. &lt;br /&gt;
&lt;br /&gt;
[http://behaviour-driven.org/]&lt;br /&gt;
The link supports BDDs definition with additional links to more viable behavior driven development resources.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Other Test Tool Resources'''&lt;br /&gt;
&lt;br /&gt;
''Watir:'' is an open-source library for automating web browsers. It allows you to write tests that are easy to read and maintain. It &lt;br /&gt;
&lt;br /&gt;
is simple and flexible.  &lt;br /&gt;
[http://wtr.rubyforge.org/]&lt;br /&gt;
The link provides an overview of Watir with installation specifications, examples, and supported platforms&lt;br /&gt;
&lt;br /&gt;
''NullDB:'' [http://avdi.org/projects/nulldb/]&lt;br /&gt;
a way to speed up testing by avoiding database use.&lt;br /&gt;
&lt;br /&gt;
''Bleakhouse:'' memory leak detection&lt;br /&gt;
[http://www.rubyinside.com/bleakhouse-tool-to-find-memory-leaks-in-your-rails-applications-470.html]&lt;br /&gt;
The link gives additional information on Bleakhouse profiling for memory leaks&lt;br /&gt;
&lt;br /&gt;
''ruby-debug:'' &lt;br /&gt;
Other than the extensive use of breakpoints Rails provides little to streamline the debugging process. Ruby-debug provides Rails with a plug-in extending the functionality of Rails built in debugger. &lt;br /&gt;
&lt;br /&gt;
[http://rubyforge.org/softwaremap/trove_list.php?form_cat=47]&lt;br /&gt;
The link provides twenty additional debug resources available for RoR&lt;br /&gt;
&lt;br /&gt;
== '''Conclusion''' ==&lt;br /&gt;
&lt;br /&gt;
Rails is a very comprehensive development environment for Ruby with numerous extensions, plugins, and other resources outside of IDEs to strengthen the functionality of the open source web application framework.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
''All sources used to create this wiki are linked in the above text.''&lt;/div&gt;</summary>
		<author><name>Los Bravo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_team1&amp;diff=22163</id>
		<title>CSC/ECE 517 Fall 2009/wiki1b team1</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_team1&amp;diff=22163"/>
		<updated>2009-09-28T19:49:47Z</updated>

		<summary type="html">&lt;p&gt;Los Bravo: /* TDD: Test Driven Development */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;CSC/ECE 517 Fall 2009&lt;br /&gt;
&lt;br /&gt;
'''&lt;br /&gt;
== Resources for Rails (other than IDEs) ==&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
IDEs are a valuable resource for Rails development, however there are many other resources and tools&lt;br /&gt;
that can either replace or supplement IDEs.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Resources for Rails other than IDEs&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails API''''' - http://api.rubyonrails.org/&lt;br /&gt;
&lt;br /&gt;
	This site documents Rails files, classes and methods that can be used to build a Rails application.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Forum''''' - http://railsforum.com/&lt;br /&gt;
&lt;br /&gt;
	A discussion forum covering all aspects of Rails for beginners and experts including planning, &lt;br /&gt;
	programming, extensions and production.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Introducing Ruby on Rails''''' &lt;br /&gt;
&lt;br /&gt;
Part 1 http://www.softwaredeveloper.com/features/intro-to-ruby-on-rails-042507/&lt;br /&gt;
&lt;br /&gt;
Part 2 http://www.softwaredeveloper.com/features/intro-to-ruby-on-rails-part-two-043007/&lt;br /&gt;
&lt;br /&gt;
An excellent introduction to Rails for novices&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Installers'''&lt;br /&gt;
''&lt;br /&gt;
	&lt;br /&gt;
Windows: InstantRails - http://instantrails.rubyforge.org/wiki/wiki.pl&lt;br /&gt;
&lt;br /&gt;
		An all in one, single click installer for Windows that includes a Rails server.&lt;br /&gt;
&lt;br /&gt;
	Mac: Locomotive - http://locomotive.raaum.org/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Projects''''' - http://www.workingwithrails.com/&lt;br /&gt;
&lt;br /&gt;
	A Database of Rails projects, programmers and websites&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails plugins''''' - http://agilewebdevelopment.com/&lt;br /&gt;
&lt;br /&gt;
	A collection of Rails open source plugins, searchable by category or keyword.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Sample Rails''''' - http://snippets.dzone.com/tag/rails&lt;br /&gt;
&lt;br /&gt;
	A collection of Rails code snippets.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Agile Rails book''''' - http://www.amazon.com/gp/product/097669400X/002-0481267-8083260?v=glance&amp;amp;n=283155&lt;br /&gt;
&lt;br /&gt;
	An excellent resource for learning how to apply Agile programming concepts to Rails.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails cheatsheet''''' - http://www.blainekendall.com/uploads/RubyOnRails-Cheatsheet-BlaineKendall.pdf&lt;br /&gt;
&lt;br /&gt;
	One user's list of best practices, gotchas and quirks of developing with Rails.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails best practices''''' - http://www.therailsway.com/&lt;br /&gt;
&lt;br /&gt;
	An official best practices list for programming in Rails.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Advanced Rails''''' - http://webonrails.com/&lt;br /&gt;
&lt;br /&gt;
	A resource for the advanced Rails programmer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Blog''''' - http://weblog.rubyonrails.org/&lt;br /&gt;
&lt;br /&gt;
	An online community of updates about current happenings with the Rails platform.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Guides''''' - http://guides.rubyonrails.org/&lt;br /&gt;
&lt;br /&gt;
	An all in one resource for learning Rails including Howtos, security and contributing to the Rails community.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Authoring Rails plugins''''' - http://nubyonrails.com/articles/2006/05/04/the-complete-guide-to-rails-plugins-part-i&lt;br /&gt;
&lt;br /&gt;
	A complete guide to authoring your own Rails plugins.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
== '''Tools for Rails (other than IDEs)''' ==&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
'''Test Unit'''&lt;br /&gt;
The Rails stack uses Test::Unit, known as the default Ruby unit testing framework shipping with Ruby.  There are various plugins and extension that could be used with Rails built-in Test::Unit to extend its functionality for support of TDD and BDD testing practices.&lt;br /&gt;
&lt;br /&gt;
[http://wiki.rubyonrails.org/addons/testing]&lt;br /&gt;
The link provides additional information in the form of supporting resources, whitepapers, examples, and plug-in documentation&lt;br /&gt;
&lt;br /&gt;
'''Example'''&lt;br /&gt;
[http://wiki.rubyonrails.org/testing/test-unitrequire] &lt;br /&gt;
&lt;br /&gt;
 Image:class CalculatorTest &amp;lt; Test::Unit::TestCase &lt;br /&gt;
  def test_add_two_numbers_for_the_sum &lt;br /&gt;
    calculator = Calculator.new &lt;br /&gt;
    assert_equal 4, calculator.sum(2, 2)&lt;br /&gt;
  end &lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
== TDD: Test Driven Development ==&lt;br /&gt;
 	&lt;br /&gt;
Test Driven Development is a combination of refactoring and test first development, a form of development where the test is &lt;br /&gt;
&lt;br /&gt;
written prior to completed production code.  The goal of TDD is the specification of requirements and not the validation of &lt;br /&gt;
&lt;br /&gt;
requirements.  There are a few testing frameworks that are used to implement the TDD programming technique.  &lt;br /&gt;
&lt;br /&gt;
[http://ruby.about.com/b/2009/01/28/test-driven-development-with-rails.htm]&lt;br /&gt;
This link provides a comprehensive overview of test driven development practices and available resources for implementation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''RSpec'''&lt;br /&gt;
RSpec is a testing framework for Behavior Driven Development, complete with its own expectations, matchers and mocking and &lt;br /&gt;
&lt;br /&gt;
stubbing facilities. It goes along hand in hand with Cucumber, though it plays nicely with many other testing frameworks as well.&lt;br /&gt;
&lt;br /&gt;
Example expresses some basic desired behavior&lt;br /&gt;
&lt;br /&gt;
# bowling_spec.rb&lt;br /&gt;
&lt;br /&gt;
require ‘bowling’&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
describe Bowling do&lt;br /&gt;
&lt;br /&gt;
it &amp;quot;should score 0 for gutter game&amp;quot; do&lt;br /&gt;
&lt;br /&gt;
bowling = Bowling.new&lt;br /&gt;
&lt;br /&gt;
20.times { bowling.hit(0) }&lt;br /&gt;
&lt;br /&gt;
bowling.score.should == 0&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
'''Model Examples'''&lt;br /&gt;
These are the equivalent of unit tests in Rails’ built in testing. Ironically&lt;br /&gt;
(for the traditional TDD’er) these are the only specs that we feel should actually interact&lt;br /&gt;
with the database.&lt;br /&gt;
&lt;br /&gt;
'''Controller Examples'''&lt;br /&gt;
These align somewhat with functional tests in rails, except&lt;br /&gt;
that they do not actually render views (though you can force rendering of views&lt;br /&gt;
if you prefer). Instead of setting expectations about what goes on a page, you&lt;br /&gt;
set expectations about what templates get rendered. &lt;br /&gt;
&lt;br /&gt;
'''View Examples'''&lt;br /&gt;
This is the other half of Rails’ functional testing. View specs allow&lt;br /&gt;
you to set up assigns (thanks to ZenTest).&lt;br /&gt;
&lt;br /&gt;
'''Helper Examples'''&lt;br /&gt;
let you specify directly methods that live in your helpers.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://www.ibm.com/developerworks/web/library/wa-rspec/]&lt;br /&gt;
The link provides a brief overview of RSpec with a comprehensive series of examples and a conceptual view of Rpecs step by step &lt;br /&gt;
&lt;br /&gt;
implementation process&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Cucumber'''&lt;br /&gt;
Cucumber is used with TDD and BDD within other testing frameworks such as RSpec by letting software development teams describe how &lt;br /&gt;
&lt;br /&gt;
software should behave in plain text. The text is written in a business-readable domain-specific language and serves as &lt;br /&gt;
&lt;br /&gt;
documentation, automated tests and development-aid - all rolled into one format.&lt;br /&gt;
&lt;br /&gt;
[http://cukes.info/]&lt;br /&gt;
The link provides a detail decription, definition, and examples of Cucumber implementation best practices and supported &lt;br /&gt;
&lt;br /&gt;
frameworks.&lt;br /&gt;
&lt;br /&gt;
'''Cucumber Example:'''&lt;br /&gt;
Scenario: See all vendors&lt;br /&gt;
    Given I am logged in as a user in the administrator role&lt;br /&gt;
    And There are 3 vendors&lt;br /&gt;
    When I go to the manage vendors page&lt;br /&gt;
    Then I should see the first 3 vendor names&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Shoulda''' &lt;br /&gt;
An extension to Test::Unit with additional helpers, macros, and assertions.&lt;br /&gt;
 &lt;br /&gt;
[http://www.thoughtbot.com/projects/shoulda]&lt;br /&gt;
The link provides a more conclusive definition of Shoulda along with installation facts and working examples of the Shoulda &lt;br /&gt;
&lt;br /&gt;
testing framework within Ruby's built in Test::Unit&lt;br /&gt;
&lt;br /&gt;
== BDD: Behavior Driven Development ==&lt;br /&gt;
	[http://eggsonbread.com/2009/07/22/behavior-driven-development-in-a-nutshell/]&lt;br /&gt;
Behavior driven development was born from the concepts behind the implementation of TDD.  It brings together strands from &lt;br /&gt;
&lt;br /&gt;
TestDrivenDevelopment and DomainDrivenDesign into an integrated whole, making the relationship between these two powerful &lt;br /&gt;
&lt;br /&gt;
approaches to software development more evident.  Most test driven development testing frameworks such as RSpec and Cucumber also support behavior driven development testing. &lt;br /&gt;
&lt;br /&gt;
[http://behaviour-driven.org/]&lt;br /&gt;
The link supports BDDs definition with additional links to more viable behavior driven development resources.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Other Test Tool Resources'''&lt;br /&gt;
&lt;br /&gt;
''Watir:'' is an open-source library for automating web browsers. It allows you to write tests that are easy to read and maintain. It &lt;br /&gt;
&lt;br /&gt;
is simple and flexible.  &lt;br /&gt;
[http://wtr.rubyforge.org/]&lt;br /&gt;
The link provides an overview of Watir with installation specifications, examples, and supported platforms&lt;br /&gt;
&lt;br /&gt;
''NullDB:'' [http://avdi.org/projects/nulldb/]&lt;br /&gt;
a way to speed up testing by avoiding database use.&lt;br /&gt;
&lt;br /&gt;
''Bleakhouse:'' memory leak detection&lt;br /&gt;
[http://www.rubyinside.com/bleakhouse-tool-to-find-memory-leaks-in-your-rails-applications-470.html]&lt;br /&gt;
The link gives additional information on Bleakhouse profiling for memory leaks&lt;br /&gt;
&lt;br /&gt;
''ruby-debug:'' &lt;br /&gt;
Other than the extensive use of breakpoints Rails provides little to streamline the debugging process. Ruby-debug provides Rails with a plug-in extending the functionality of Rails built in debugger. &lt;br /&gt;
&lt;br /&gt;
[http://rubyforge.org/softwaremap/trove_list.php?form_cat=47]&lt;br /&gt;
The link provides twenty additional debug resources available for RoR&lt;br /&gt;
&lt;br /&gt;
== '''Conclusion''' ==&lt;br /&gt;
&lt;br /&gt;
Rails is a very comprehensive development environment for Ruby with numerous extensions, plugins, and other resources outside of IDEs to strengthen the functionality of the open source web application framework.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
''All sources used to create this wiki are linked in the above text.''&lt;/div&gt;</summary>
		<author><name>Los Bravo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_team1&amp;diff=22162</id>
		<title>CSC/ECE 517 Fall 2009/wiki1b team1</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_team1&amp;diff=22162"/>
		<updated>2009-09-28T19:00:07Z</updated>

		<summary type="html">&lt;p&gt;Los Bravo: /* TDD: Test Driven Development */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;CSC/ECE 517 Fall 2009&lt;br /&gt;
&lt;br /&gt;
'''&lt;br /&gt;
== Resources for Rails (other than IDEs) ==&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
IDEs are a valuable resource for Rails development, however there are many other resources and tools&lt;br /&gt;
that can either replace or supplement IDEs.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Resources for Rails other than IDEs&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails API''''' - http://api.rubyonrails.org/&lt;br /&gt;
&lt;br /&gt;
	This site documents Rails files, classes and methods that can be used to build a Rails application.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Forum''''' - http://railsforum.com/&lt;br /&gt;
&lt;br /&gt;
	A discussion forum covering all aspects of Rails for beginners and experts including planning, &lt;br /&gt;
	programming, extensions and production.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Introducing Ruby on Rails''''' &lt;br /&gt;
&lt;br /&gt;
Part 1 http://www.softwaredeveloper.com/features/intro-to-ruby-on-rails-042507/&lt;br /&gt;
&lt;br /&gt;
Part 2 http://www.softwaredeveloper.com/features/intro-to-ruby-on-rails-part-two-043007/&lt;br /&gt;
&lt;br /&gt;
An excellent introduction to Rails for novices&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Installers'''&lt;br /&gt;
''&lt;br /&gt;
	&lt;br /&gt;
Windows: InstantRails - http://instantrails.rubyforge.org/wiki/wiki.pl&lt;br /&gt;
&lt;br /&gt;
		An all in one, single click installer for Windows that includes a Rails server.&lt;br /&gt;
&lt;br /&gt;
	Mac: Locomotive - http://locomotive.raaum.org/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Projects''''' - http://www.workingwithrails.com/&lt;br /&gt;
&lt;br /&gt;
	A Database of Rails projects, programmers and websites&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails plugins''''' - http://agilewebdevelopment.com/&lt;br /&gt;
&lt;br /&gt;
	A collection of Rails open source plugins, searchable by category or keyword.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Sample Rails''''' - http://snippets.dzone.com/tag/rails&lt;br /&gt;
&lt;br /&gt;
	A collection of Rails code snippets.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Agile Rails book''''' - http://www.amazon.com/gp/product/097669400X/002-0481267-8083260?v=glance&amp;amp;n=283155&lt;br /&gt;
&lt;br /&gt;
	An excellent resource for learning how to apply Agile programming concepts to Rails.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails cheatsheet''''' - http://www.blainekendall.com/uploads/RubyOnRails-Cheatsheet-BlaineKendall.pdf&lt;br /&gt;
&lt;br /&gt;
	One user's list of best practices, gotchas and quirks of developing with Rails.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails best practices''''' - http://www.therailsway.com/&lt;br /&gt;
&lt;br /&gt;
	An official best practices list for programming in Rails.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Advanced Rails''''' - http://webonrails.com/&lt;br /&gt;
&lt;br /&gt;
	A resource for the advanced Rails programmer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Blog''''' - http://weblog.rubyonrails.org/&lt;br /&gt;
&lt;br /&gt;
	An online community of updates about current happenings with the Rails platform.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Guides''''' - http://guides.rubyonrails.org/&lt;br /&gt;
&lt;br /&gt;
	An all in one resource for learning Rails including Howtos, security and contributing to the Rails community.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Authoring Rails plugins''''' - http://nubyonrails.com/articles/2006/05/04/the-complete-guide-to-rails-plugins-part-i&lt;br /&gt;
&lt;br /&gt;
	A complete guide to authoring your own Rails plugins.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
== '''Tools for Rails (other than IDEs)''' ==&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
'''Test Unit'''&lt;br /&gt;
The Rails stack uses Test::Unit, known as the default Ruby unit testing framework shipping with Ruby.  There are various plugins and extension that could be used with Rails built-in Test::Unit to extend its functionality for support of TDD and BDD testing practices.&lt;br /&gt;
&lt;br /&gt;
[http://wiki.rubyonrails.org/addons/testing]&lt;br /&gt;
The link provides additional information in the form of supporting resources, whitepapers, examples, and plug-in documentation&lt;br /&gt;
&lt;br /&gt;
'''Example'''&lt;br /&gt;
[http://wiki.rubyonrails.org/testing/test-unitrequire] &lt;br /&gt;
&lt;br /&gt;
 Image:class CalculatorTest &amp;lt; Test::Unit::TestCase &lt;br /&gt;
  def test_add_two_numbers_for_the_sum &lt;br /&gt;
    calculator = Calculator.new &lt;br /&gt;
    assert_equal 4, calculator.sum(2, 2)&lt;br /&gt;
  end &lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
== TDD: Test Driven Development ==&lt;br /&gt;
 	&lt;br /&gt;
Test Driven Development is a combination of refactoring and test first development, a form of development where the test is &lt;br /&gt;
&lt;br /&gt;
written prior to completed production code.  The goal of TDD is the specification of requirements and not the validation of &lt;br /&gt;
&lt;br /&gt;
requirements.  There are a few testing frameworks that are used to implement the TDD programming technique.  &lt;br /&gt;
&lt;br /&gt;
[http://ruby.about.com/b/2009/01/28/test-driven-development-with-rails.htm]&lt;br /&gt;
This link provides a comprehensive overview of test driven development practices and available resources for implementation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''RSpec'''&lt;br /&gt;
RSpec is a testing framework for Behavior Driven Development, complete with its own expectations, matchers and mocking and &lt;br /&gt;
&lt;br /&gt;
stubbing facilities. It goes along hand in hand with Cucumber, though it plays nicely with many other testing frameworks as well.&lt;br /&gt;
&lt;br /&gt;
'''Model Examples'''&lt;br /&gt;
These are the equivalent of unit tests in Rails’ built in testing. Ironically&lt;br /&gt;
(for the traditional TDD’er) these are the only specs that we feel should actually interact&lt;br /&gt;
with the database.&lt;br /&gt;
&lt;br /&gt;
'''Controller Examples'''&lt;br /&gt;
These align somewhat with functional tests in rails, except&lt;br /&gt;
that they do not actually render views (though you can force rendering of views&lt;br /&gt;
if you prefer). Instead of setting expectations about what goes on a page, you&lt;br /&gt;
set expectations about what templates get rendered. &lt;br /&gt;
&lt;br /&gt;
'''View Examples'''&lt;br /&gt;
This is the other half of Rails’ functional testing. View specs allow&lt;br /&gt;
you to set up assigns (thanks to ZenTest).&lt;br /&gt;
&lt;br /&gt;
'''Helper Examples'''&lt;br /&gt;
let you specify directly methods that live in your helpers.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://www.ibm.com/developerworks/web/library/wa-rspec/]&lt;br /&gt;
The link provides a brief overview of RSpec with a comprehensive series of examples and a conceptual view of Rpecs step by step &lt;br /&gt;
&lt;br /&gt;
implementation process&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Cucumber'''&lt;br /&gt;
Cucumber is used with TDD and BDD within other testing frameworks such as RSpec by letting software development teams describe how &lt;br /&gt;
&lt;br /&gt;
software should behave in plain text. The text is written in a business-readable domain-specific language and serves as &lt;br /&gt;
&lt;br /&gt;
documentation, automated tests and development-aid - all rolled into one format.&lt;br /&gt;
&lt;br /&gt;
[http://cukes.info/]&lt;br /&gt;
The link provides a detail decription, definition, and examples of Cucumber implementation best practices and supported &lt;br /&gt;
&lt;br /&gt;
frameworks.&lt;br /&gt;
&lt;br /&gt;
'''Cucumber Example:'''&lt;br /&gt;
Scenario: See all vendors&lt;br /&gt;
    Given I am logged in as a user in the administrator role&lt;br /&gt;
    And There are 3 vendors&lt;br /&gt;
    When I go to the manage vendors page&lt;br /&gt;
    Then I should see the first 3 vendor names&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Shoulda''' &lt;br /&gt;
An extension to Test::Unit with additional helpers, macros, and assertions.&lt;br /&gt;
 &lt;br /&gt;
[http://www.thoughtbot.com/projects/shoulda]&lt;br /&gt;
The link provides a more conclusive definition of Shoulda along with installation facts and working examples of the Shoulda &lt;br /&gt;
&lt;br /&gt;
testing framework within Ruby's built in Test::Unit&lt;br /&gt;
&lt;br /&gt;
== BDD: Behavior Driven Development ==&lt;br /&gt;
	[http://eggsonbread.com/2009/07/22/behavior-driven-development-in-a-nutshell/]&lt;br /&gt;
Behavior driven development was born from the concepts behind the implementation of TDD.  It brings together strands from &lt;br /&gt;
&lt;br /&gt;
TestDrivenDevelopment and DomainDrivenDesign into an integrated whole, making the relationship between these two powerful &lt;br /&gt;
&lt;br /&gt;
approaches to software development more evident.  Most test driven development testing frameworks such as RSpec and Cucumber also support behavior driven development testing. &lt;br /&gt;
&lt;br /&gt;
[http://behaviour-driven.org/]&lt;br /&gt;
The link supports BDDs definition with additional links to more viable behavior driven development resources.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Other Test Tool Resources'''&lt;br /&gt;
&lt;br /&gt;
''Watir:'' is an open-source library for automating web browsers. It allows you to write tests that are easy to read and maintain. It &lt;br /&gt;
&lt;br /&gt;
is simple and flexible.  &lt;br /&gt;
[http://wtr.rubyforge.org/]&lt;br /&gt;
The link provides an overview of Watir with installation specifications, examples, and supported platforms&lt;br /&gt;
&lt;br /&gt;
''NullDB:'' [http://avdi.org/projects/nulldb/]&lt;br /&gt;
a way to speed up testing by avoiding database use.&lt;br /&gt;
&lt;br /&gt;
''Bleakhouse:'' memory leak detection&lt;br /&gt;
[http://www.rubyinside.com/bleakhouse-tool-to-find-memory-leaks-in-your-rails-applications-470.html]&lt;br /&gt;
The link gives additional information on Bleakhouse profiling for memory leaks&lt;br /&gt;
&lt;br /&gt;
''ruby-debug:'' &lt;br /&gt;
Other than the extensive use of breakpoints Rails provides little to streamline the debugging process. Ruby-debug provides Rails with a plug-in extending the functionality of Rails built in debugger. &lt;br /&gt;
&lt;br /&gt;
[http://rubyforge.org/softwaremap/trove_list.php?form_cat=47]&lt;br /&gt;
The link provides twenty additional debug resources available for RoR&lt;br /&gt;
&lt;br /&gt;
== '''Conclusion''' ==&lt;br /&gt;
&lt;br /&gt;
Rails is a very comprehensive development environment for Ruby with numerous extensions, plugins, and other resources outside of IDEs to strengthen the functionality of the open source web application framework.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
''All sources used to create this wiki are linked in the above text.''&lt;/div&gt;</summary>
		<author><name>Los Bravo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_team1&amp;diff=22161</id>
		<title>CSC/ECE 517 Fall 2009/wiki1b team1</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_team1&amp;diff=22161"/>
		<updated>2009-09-28T18:59:32Z</updated>

		<summary type="html">&lt;p&gt;Los Bravo: /* TDD: Test Driven Development */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;CSC/ECE 517 Fall 2009&lt;br /&gt;
&lt;br /&gt;
'''&lt;br /&gt;
== Resources for Rails (other than IDEs) ==&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
IDEs are a valuable resource for Rails development, however there are many other resources and tools&lt;br /&gt;
that can either replace or supplement IDEs.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Resources for Rails other than IDEs&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails API''''' - http://api.rubyonrails.org/&lt;br /&gt;
&lt;br /&gt;
	This site documents Rails files, classes and methods that can be used to build a Rails application.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Forum''''' - http://railsforum.com/&lt;br /&gt;
&lt;br /&gt;
	A discussion forum covering all aspects of Rails for beginners and experts including planning, &lt;br /&gt;
	programming, extensions and production.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Introducing Ruby on Rails''''' &lt;br /&gt;
&lt;br /&gt;
Part 1 http://www.softwaredeveloper.com/features/intro-to-ruby-on-rails-042507/&lt;br /&gt;
&lt;br /&gt;
Part 2 http://www.softwaredeveloper.com/features/intro-to-ruby-on-rails-part-two-043007/&lt;br /&gt;
&lt;br /&gt;
An excellent introduction to Rails for novices&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Installers'''&lt;br /&gt;
''&lt;br /&gt;
	&lt;br /&gt;
Windows: InstantRails - http://instantrails.rubyforge.org/wiki/wiki.pl&lt;br /&gt;
&lt;br /&gt;
		An all in one, single click installer for Windows that includes a Rails server.&lt;br /&gt;
&lt;br /&gt;
	Mac: Locomotive - http://locomotive.raaum.org/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Projects''''' - http://www.workingwithrails.com/&lt;br /&gt;
&lt;br /&gt;
	A Database of Rails projects, programmers and websites&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails plugins''''' - http://agilewebdevelopment.com/&lt;br /&gt;
&lt;br /&gt;
	A collection of Rails open source plugins, searchable by category or keyword.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Sample Rails''''' - http://snippets.dzone.com/tag/rails&lt;br /&gt;
&lt;br /&gt;
	A collection of Rails code snippets.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Agile Rails book''''' - http://www.amazon.com/gp/product/097669400X/002-0481267-8083260?v=glance&amp;amp;n=283155&lt;br /&gt;
&lt;br /&gt;
	An excellent resource for learning how to apply Agile programming concepts to Rails.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails cheatsheet''''' - http://www.blainekendall.com/uploads/RubyOnRails-Cheatsheet-BlaineKendall.pdf&lt;br /&gt;
&lt;br /&gt;
	One user's list of best practices, gotchas and quirks of developing with Rails.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails best practices''''' - http://www.therailsway.com/&lt;br /&gt;
&lt;br /&gt;
	An official best practices list for programming in Rails.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Advanced Rails''''' - http://webonrails.com/&lt;br /&gt;
&lt;br /&gt;
	A resource for the advanced Rails programmer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Blog''''' - http://weblog.rubyonrails.org/&lt;br /&gt;
&lt;br /&gt;
	An online community of updates about current happenings with the Rails platform.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Guides''''' - http://guides.rubyonrails.org/&lt;br /&gt;
&lt;br /&gt;
	An all in one resource for learning Rails including Howtos, security and contributing to the Rails community.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Authoring Rails plugins''''' - http://nubyonrails.com/articles/2006/05/04/the-complete-guide-to-rails-plugins-part-i&lt;br /&gt;
&lt;br /&gt;
	A complete guide to authoring your own Rails plugins.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
== '''Tools for Rails (other than IDEs)''' ==&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
'''Test Unit'''&lt;br /&gt;
The Rails stack uses Test::Unit, known as the default Ruby unit testing framework shipping with Ruby.  There are various plugins and extension that could be used with Rails built-in Test::Unit to extend its functionality for support of TDD and BDD testing practices.&lt;br /&gt;
&lt;br /&gt;
[http://wiki.rubyonrails.org/addons/testing]&lt;br /&gt;
The link provides additional information in the form of supporting resources, whitepapers, examples, and plug-in documentation&lt;br /&gt;
&lt;br /&gt;
'''Example'''&lt;br /&gt;
[http://wiki.rubyonrails.org/testing/test-unitrequire] &lt;br /&gt;
&lt;br /&gt;
 Image:class CalculatorTest &amp;lt; Test::Unit::TestCase &lt;br /&gt;
  def test_add_two_numbers_for_the_sum &lt;br /&gt;
    calculator = Calculator.new &lt;br /&gt;
    assert_equal 4, calculator.sum(2, 2)&lt;br /&gt;
  end &lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
== TDD: Test Driven Development ==&lt;br /&gt;
 	&lt;br /&gt;
Test Driven Development is a combination of refactoring and test first development, a form of development where the test is &lt;br /&gt;
&lt;br /&gt;
written prior to completed production code.  The goal of TDD is the specification of requirements and not the validation of &lt;br /&gt;
&lt;br /&gt;
requirements.  There are a few testing frameworks that are used to implement the TDD programming technique.  &lt;br /&gt;
&lt;br /&gt;
[http://ruby.about.com/b/2009/01/28/test-driven-development-with-rails.htm]&lt;br /&gt;
This link provides a comprehensive overview of test driven development practices and available resources for implementation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''RSpec'''&lt;br /&gt;
RSpec is a testing framework for Behavior Driven Development, complete with its own expectations, matchers and mocking and &lt;br /&gt;
&lt;br /&gt;
stubbing facilities. It goes along hand in hand with Cucumber, though it plays nicely with many other testing frameworks as well.&lt;br /&gt;
&lt;br /&gt;
'''Model Examples'''&lt;br /&gt;
These are the equivalent of unit tests in Rails’ built in testing. Ironically&lt;br /&gt;
(for the traditional TDD’er) these are the only specs that we feel should actually interact&lt;br /&gt;
with the database. Learn more ….&lt;br /&gt;
&lt;br /&gt;
'''Controller Examples'''&lt;br /&gt;
These align somewhat with functional tests in rails, except&lt;br /&gt;
that they do not actually render views (though you can force rendering of views&lt;br /&gt;
if you prefer). Instead of setting expectations about what goes on a page, you&lt;br /&gt;
set expectations about what templates get rendered. Learn more….&lt;br /&gt;
&lt;br /&gt;
'''View Examples'''&lt;br /&gt;
This is the other half of Rails’ functional testing. View specs allow&lt;br /&gt;
you to set up assigns (thanks to ZenTest).&lt;br /&gt;
&lt;br /&gt;
'''Helper Examples'''&lt;br /&gt;
let you specify directly methods that live in your helpers.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://www.ibm.com/developerworks/web/library/wa-rspec/]&lt;br /&gt;
The link provides a brief overview of RSpec with a comprehensive series of examples and a conceptual view of Rpecs step by step &lt;br /&gt;
&lt;br /&gt;
implementation process&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Cucumber'''&lt;br /&gt;
Cucumber is used with TDD and BDD within other testing frameworks such as RSpec by letting software development teams describe how &lt;br /&gt;
&lt;br /&gt;
software should behave in plain text. The text is written in a business-readable domain-specific language and serves as &lt;br /&gt;
&lt;br /&gt;
documentation, automated tests and development-aid - all rolled into one format.&lt;br /&gt;
&lt;br /&gt;
[http://cukes.info/]&lt;br /&gt;
The link provides a detail decription, definition, and examples of Cucumber implementation best practices and supported &lt;br /&gt;
&lt;br /&gt;
frameworks.&lt;br /&gt;
&lt;br /&gt;
'''Cucumber Example:'''&lt;br /&gt;
Scenario: See all vendors&lt;br /&gt;
    Given I am logged in as a user in the administrator role&lt;br /&gt;
    And There are 3 vendors&lt;br /&gt;
    When I go to the manage vendors page&lt;br /&gt;
    Then I should see the first 3 vendor names&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Shoulda''' &lt;br /&gt;
An extension to Test::Unit with additional helpers, macros, and assertions.&lt;br /&gt;
 &lt;br /&gt;
[http://www.thoughtbot.com/projects/shoulda]&lt;br /&gt;
The link provides a more conclusive definition of Shoulda along with installation facts and working examples of the Shoulda &lt;br /&gt;
&lt;br /&gt;
testing framework within Ruby's built in Test::Unit&lt;br /&gt;
&lt;br /&gt;
== BDD: Behavior Driven Development ==&lt;br /&gt;
	[http://eggsonbread.com/2009/07/22/behavior-driven-development-in-a-nutshell/]&lt;br /&gt;
Behavior driven development was born from the concepts behind the implementation of TDD.  It brings together strands from &lt;br /&gt;
&lt;br /&gt;
TestDrivenDevelopment and DomainDrivenDesign into an integrated whole, making the relationship between these two powerful &lt;br /&gt;
&lt;br /&gt;
approaches to software development more evident.  Most test driven development testing frameworks such as RSpec and Cucumber also support behavior driven development testing. &lt;br /&gt;
&lt;br /&gt;
[http://behaviour-driven.org/]&lt;br /&gt;
The link supports BDDs definition with additional links to more viable behavior driven development resources.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Other Test Tool Resources'''&lt;br /&gt;
&lt;br /&gt;
''Watir:'' is an open-source library for automating web browsers. It allows you to write tests that are easy to read and maintain. It &lt;br /&gt;
&lt;br /&gt;
is simple and flexible.  &lt;br /&gt;
[http://wtr.rubyforge.org/]&lt;br /&gt;
The link provides an overview of Watir with installation specifications, examples, and supported platforms&lt;br /&gt;
&lt;br /&gt;
''NullDB:'' [http://avdi.org/projects/nulldb/]&lt;br /&gt;
a way to speed up testing by avoiding database use.&lt;br /&gt;
&lt;br /&gt;
''Bleakhouse:'' memory leak detection&lt;br /&gt;
[http://www.rubyinside.com/bleakhouse-tool-to-find-memory-leaks-in-your-rails-applications-470.html]&lt;br /&gt;
The link gives additional information on Bleakhouse profiling for memory leaks&lt;br /&gt;
&lt;br /&gt;
''ruby-debug:'' &lt;br /&gt;
Other than the extensive use of breakpoints Rails provides little to streamline the debugging process. Ruby-debug provides Rails with a plug-in extending the functionality of Rails built in debugger. &lt;br /&gt;
&lt;br /&gt;
[http://rubyforge.org/softwaremap/trove_list.php?form_cat=47]&lt;br /&gt;
The link provides twenty additional debug resources available for RoR&lt;br /&gt;
&lt;br /&gt;
== '''Conclusion''' ==&lt;br /&gt;
&lt;br /&gt;
Rails is a very comprehensive development environment for Ruby with numerous extensions, plugins, and other resources outside of IDEs to strengthen the functionality of the open source web application framework.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
''All sources used to create this wiki are linked in the above text.''&lt;/div&gt;</summary>
		<author><name>Los Bravo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_team1&amp;diff=21580</id>
		<title>CSC/ECE 517 Fall 2009/wiki1b team1</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_team1&amp;diff=21580"/>
		<updated>2009-09-22T01:28:42Z</updated>

		<summary type="html">&lt;p&gt;Los Bravo: /* Reference */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;CSC/ECE 517 Fall 2009&lt;br /&gt;
&lt;br /&gt;
'''&lt;br /&gt;
== Resources for Rails (other than IDEs) ==&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
IDEs are a valuable resource for Rails development, however there are many other resources and tools&lt;br /&gt;
that can either replace or supplement IDEs.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Resources for Rails other than IDEs&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails API''''' - http://api.rubyonrails.org/&lt;br /&gt;
&lt;br /&gt;
	This site documents Rails files, classes and methods that can be used to build a Rails application.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Forum''''' - http://railsforum.com/&lt;br /&gt;
&lt;br /&gt;
	A discussion forum covering all aspects of Rails for beginners and experts including planning, &lt;br /&gt;
	programming, extensions and production.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Introducing Ruby on Rails''''' &lt;br /&gt;
&lt;br /&gt;
Part 1 http://www.softwaredeveloper.com/features/intro-to-ruby-on-rails-042507/&lt;br /&gt;
&lt;br /&gt;
Part 2 http://www.softwaredeveloper.com/features/intro-to-ruby-on-rails-part-two-043007/&lt;br /&gt;
&lt;br /&gt;
An excellent introduction to Rails for novices&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Installers'''&lt;br /&gt;
''&lt;br /&gt;
	&lt;br /&gt;
Windows: InstantRails - http://instantrails.rubyforge.org/wiki/wiki.pl&lt;br /&gt;
&lt;br /&gt;
		An all in one, single click installer for Windows that includes a Rails server.&lt;br /&gt;
&lt;br /&gt;
	Mac: Locomotive - http://locomotive.raaum.org/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Projects''''' - http://www.workingwithrails.com/&lt;br /&gt;
&lt;br /&gt;
	A Database of Rails projects, programmers and websites&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails plugins''''' - http://agilewebdevelopment.com/&lt;br /&gt;
&lt;br /&gt;
	A collection of Rails open source plugins, searchable by category or keyword.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Sample Rails''''' - http://snippets.dzone.com/tag/rails&lt;br /&gt;
&lt;br /&gt;
	A collection of Rails code snippets.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Agile Rails book''''' - http://www.amazon.com/gp/product/097669400X/002-0481267-8083260?v=glance&amp;amp;n=283155&lt;br /&gt;
&lt;br /&gt;
	An excellent resource for learning how to apply Agile programming concepts to Rails.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails cheatsheet''''' - http://www.blainekendall.com/uploads/RubyOnRails-Cheatsheet-BlaineKendall.pdf&lt;br /&gt;
&lt;br /&gt;
	One user's list of best practices, gotchas and quirks of developing with Rails.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails best practices''''' - http://www.therailsway.com/&lt;br /&gt;
&lt;br /&gt;
	An official best practices list for programming in Rails.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Advanced Rails''''' - http://webonrails.com/&lt;br /&gt;
&lt;br /&gt;
	A resource for the advanced Rails programmer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Blog''''' - http://weblog.rubyonrails.org/&lt;br /&gt;
&lt;br /&gt;
	An online community of updates about current happenings with the Rails platform.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Guides''''' - http://guides.rubyonrails.org/&lt;br /&gt;
&lt;br /&gt;
	An all in one resource for learning Rails including Howtos, security and contributing to the Rails community.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Authoring Rails plugins''''' - http://nubyonrails.com/articles/2006/05/04/the-complete-guide-to-rails-plugins-part-i&lt;br /&gt;
&lt;br /&gt;
	A complete guide to authoring your own Rails plugins.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
== '''Tools for Rails (other than IDEs)''' ==&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
'''Test Unit'''&lt;br /&gt;
The Rails stack uses Test::Unit, known as the default Ruby unit testing framework shipping with Ruby.  There are various plugins and extension that could be used with Rails built-in Test::Unit to extend its functionality for support of TDD and BDD testing practices.&lt;br /&gt;
&lt;br /&gt;
[http://wiki.rubyonrails.org/addons/testing]&lt;br /&gt;
The link provides additional information in the form of supporting resources, whitepapers, examples, and plug-in documentation&lt;br /&gt;
&lt;br /&gt;
'''Example'''&lt;br /&gt;
[http://wiki.rubyonrails.org/testing/test-unitrequire] &lt;br /&gt;
&lt;br /&gt;
 Image:class CalculatorTest &amp;lt; Test::Unit::TestCase &lt;br /&gt;
  def test_add_two_numbers_for_the_sum &lt;br /&gt;
    calculator = Calculator.new &lt;br /&gt;
    assert_equal 4, calculator.sum(2, 2)&lt;br /&gt;
  end &lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
== TDD: Test Driven Development ==&lt;br /&gt;
 	&lt;br /&gt;
Test Driven Development is a combination of refactoring and test first development, a form of development where the test is &lt;br /&gt;
&lt;br /&gt;
written prior to completed production code.  The goal of TDD is the specification of requirements and not the validation of &lt;br /&gt;
&lt;br /&gt;
requirements.  There are a few testing frameworks that are used to implement the TDD programming technique.  &lt;br /&gt;
&lt;br /&gt;
[http://ruby.about.com/b/2009/01/28/test-driven-development-with-rails.htm]&lt;br /&gt;
This link provides a comprehensive overview of test driven development practices and available resources for implementation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''RSpec'''&lt;br /&gt;
RSpec is a testing framework for Behavior Driven Development, complete with its own expectations, matchers and mocking and &lt;br /&gt;
&lt;br /&gt;
stubbing facilities. It goes along hand in hand with Cucumber, though it plays nicely with many other testing frameworks as well.&lt;br /&gt;
&lt;br /&gt;
'''Model Examples'''&lt;br /&gt;
These are the equivalent of unit tests in Rails’ built in testing. Ironically&lt;br /&gt;
(for the traditional TDD’er) these are the only specs that we feel should actually interact&lt;br /&gt;
with the database. Learn more ….&lt;br /&gt;
&lt;br /&gt;
'''Controller Examples'''&lt;br /&gt;
These align somewhat with functional tests in rails, except&lt;br /&gt;
that they do not actually render views (though you can force rendering of views&lt;br /&gt;
if you prefer). Instead of setting expectations about what goes on a page, you&lt;br /&gt;
set expectations about what templates get rendered. Learn more….&lt;br /&gt;
&lt;br /&gt;
'''View Examples'''&lt;br /&gt;
This is the other half of Rails’ functional testing. View specs allow&lt;br /&gt;
you to set up assigns (thanks to ZenTest). Learn more ….&lt;br /&gt;
&lt;br /&gt;
'''Helper Examples'''&lt;br /&gt;
let you specify directly methods that live in your helpers. Learn more ….&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://www.ibm.com/developerworks/web/library/wa-rspec/]&lt;br /&gt;
The link provides a brief overview of RSpec with a comprehensive series of examples and a conceptual view of Rpecs step by step &lt;br /&gt;
&lt;br /&gt;
implementation process&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Cucumber'''&lt;br /&gt;
Cucumber is used with TDD and BDD within other testing frameworks such as RSpec by letting software development teams describe how &lt;br /&gt;
&lt;br /&gt;
software should behave in plain text. The text is written in a business-readable domain-specific language and serves as &lt;br /&gt;
&lt;br /&gt;
documentation, automated tests and development-aid - all rolled into one format.&lt;br /&gt;
&lt;br /&gt;
[http://cukes.info/]&lt;br /&gt;
The link provides a detail decription, definition, and examples of Cucumber implementation best practices and supported &lt;br /&gt;
&lt;br /&gt;
frameworks.&lt;br /&gt;
&lt;br /&gt;
'''Cucumber Example:'''&lt;br /&gt;
Scenario: See all vendors&lt;br /&gt;
    Given I am logged in as a user in the administrator role&lt;br /&gt;
    And There are 3 vendors&lt;br /&gt;
    When I go to the manage vendors page&lt;br /&gt;
    Then I should see the first 3 vendor names&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Shoulda''' &lt;br /&gt;
An extension to Test::Unit with additional helpers, macros, and assertions.&lt;br /&gt;
 &lt;br /&gt;
[http://www.thoughtbot.com/projects/shoulda]&lt;br /&gt;
The link provides a more conclusive definition of Shoulda along with installation facts and working examples of the Shoulda &lt;br /&gt;
&lt;br /&gt;
testing framework within Ruby's built in Test::Unit&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== BDD: Behavior Driven Development ==&lt;br /&gt;
	[http://eggsonbread.com/2009/07/22/behavior-driven-development-in-a-nutshell/]&lt;br /&gt;
Behavior driven development was born from the concepts behind the implementation of TDD.  It brings together strands from &lt;br /&gt;
&lt;br /&gt;
TestDrivenDevelopment and DomainDrivenDesign into an integrated whole, making the relationship between these two powerful &lt;br /&gt;
&lt;br /&gt;
approaches to software development more evident.  Most test driven development testing frameworks such as RSpec and Cucumber also support behavior driven development testing. &lt;br /&gt;
&lt;br /&gt;
[http://behaviour-driven.org/]&lt;br /&gt;
The link supports BDDs definition with additional links to more viable behavior driven development resources.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Other Test Tool Resources'''&lt;br /&gt;
&lt;br /&gt;
''Watir:'' is an open-source library for automating web browsers. It allows you to write tests that are easy to read and maintain. It &lt;br /&gt;
&lt;br /&gt;
is simple and flexible.  &lt;br /&gt;
[http://wtr.rubyforge.org/]&lt;br /&gt;
The link provides an overview of Watir with installation specifications, examples, and supported platforms&lt;br /&gt;
&lt;br /&gt;
''NullDB:'' [http://avdi.org/projects/nulldb/]&lt;br /&gt;
a way to speed up testing by avoiding database use.&lt;br /&gt;
&lt;br /&gt;
''Bleakhouse:'' memory leak detection&lt;br /&gt;
[http://www.rubyinside.com/bleakhouse-tool-to-find-memory-leaks-in-your-rails-applications-470.html]&lt;br /&gt;
The link gives additional information on Bleakhouse profiling for memory leaks&lt;br /&gt;
&lt;br /&gt;
''ruby-debug:'' &lt;br /&gt;
Other than the extensive use of breakpoints Rails provides little to streamline the debugging process. Ruby-debug provides Rails with a plug-in extending the functionality of Rails built in debugger. &lt;br /&gt;
&lt;br /&gt;
[http://rubyforge.org/softwaremap/trove_list.php?form_cat=47]&lt;br /&gt;
The link provides twenty additional debug resources available for RoR&lt;br /&gt;
&lt;br /&gt;
== '''Conclusion''' ==&lt;br /&gt;
&lt;br /&gt;
Rails is a very comprehensive development environment for Ruby with numerous extensions, plugins, and other resources outside of IDEs to strengthen the functionality of the open source web application framework.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
''All sources used to create this wiki are linked in the above text.''&lt;/div&gt;</summary>
		<author><name>Los Bravo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_team1&amp;diff=20813</id>
		<title>CSC/ECE 517 Fall 2009/wiki1b team1</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_team1&amp;diff=20813"/>
		<updated>2009-09-21T02:55:36Z</updated>

		<summary type="html">&lt;p&gt;Los Bravo: /* BDD: Behavior Driven Development */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;CSC/ECE 517 Fall 2009&lt;br /&gt;
&lt;br /&gt;
'''&lt;br /&gt;
== Resources for Rails (other than IDEs) ==&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
IDEs are a valuable resource for Rails development, however there are many other resources and tools&lt;br /&gt;
that can either replace or supplement IDEs.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Resources for Rails other than IDEs&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails API''''' - http://api.rubyonrails.org/&lt;br /&gt;
&lt;br /&gt;
	This site documents Rails files, classes and methods that can be used to build a Rails application.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Forum''''' - http://railsforum.com/&lt;br /&gt;
&lt;br /&gt;
	A discussion forum covering all aspects of Rails for beginners and experts including planning, &lt;br /&gt;
	programming, extensions and production.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Introducing Ruby on Rails''''' &lt;br /&gt;
&lt;br /&gt;
Part 1 http://www.softwaredeveloper.com/features/intro-to-ruby-on-rails-042507/&lt;br /&gt;
&lt;br /&gt;
Part 2 http://www.softwaredeveloper.com/features/intro-to-ruby-on-rails-part-two-043007/&lt;br /&gt;
&lt;br /&gt;
An excellent introduction to Rails for novices&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Installers'''&lt;br /&gt;
''&lt;br /&gt;
	&lt;br /&gt;
Windows: InstantRails - http://instantrails.rubyforge.org/wiki/wiki.pl&lt;br /&gt;
&lt;br /&gt;
		An all in one, single click installer for Windows that includes a Rails server.&lt;br /&gt;
&lt;br /&gt;
	Mac: Locomotive - http://locomotive.raaum.org/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Projects''''' - http://www.workingwithrails.com/&lt;br /&gt;
&lt;br /&gt;
	A Database of Rails projects, programmers and websites&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails plugins''''' - http://agilewebdevelopment.com/&lt;br /&gt;
&lt;br /&gt;
	A collection of Rails open source plugins, searchable by category or keyword.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Sample Rails''''' - http://snippets.dzone.com/tag/rails&lt;br /&gt;
&lt;br /&gt;
	A collection of Rails code snippets.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Agile Rails book''''' - http://www.amazon.com/gp/product/097669400X/002-0481267-8083260?v=glance&amp;amp;n=283155&lt;br /&gt;
&lt;br /&gt;
	An excellent resource for learning how to apply Agile programming concepts to Rails.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails cheatsheet''''' - http://www.blainekendall.com/uploads/RubyOnRails-Cheatsheet-BlaineKendall.pdf&lt;br /&gt;
&lt;br /&gt;
	One user's list of best practices, gotchas and quirks of developing with Rails.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails best practices''''' - http://www.therailsway.com/&lt;br /&gt;
&lt;br /&gt;
	An official best practices list for programming in Rails.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Advanced Rails''''' - http://webonrails.com/&lt;br /&gt;
&lt;br /&gt;
	A resource for the advanced Rails programmer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Blog''''' - http://weblog.rubyonrails.org/&lt;br /&gt;
&lt;br /&gt;
	An online community of updates about current happenings with the Rails platform.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Guides''''' - http://guides.rubyonrails.org/&lt;br /&gt;
&lt;br /&gt;
	An all in one resource for learning Rails including Howtos, security and contributing to the Rails community.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Authoring Rails plugins''''' - http://nubyonrails.com/articles/2006/05/04/the-complete-guide-to-rails-plugins-part-i&lt;br /&gt;
&lt;br /&gt;
	A complete guide to authoring your own Rails plugins.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
== '''Tools for Rails (other than IDEs)''' ==&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
'''Test Unit'''&lt;br /&gt;
The Rails stack uses Test::Unit, known as the default Ruby unit testing framework shipping with Ruby.  There are various plugins and extension that could be used with Rails built-in Test::Unit to extend its functionality for support of TDD and BDD testing practices.&lt;br /&gt;
&lt;br /&gt;
[http://wiki.rubyonrails.org/addons/testing]&lt;br /&gt;
The link provides additional information in the form of supporting resources, whitepapers, examples, and plug-in documentation&lt;br /&gt;
&lt;br /&gt;
'''Example'''&lt;br /&gt;
[http://wiki.rubyonrails.org/testing/test-unitrequire] &lt;br /&gt;
&lt;br /&gt;
 Image:class CalculatorTest &amp;lt; Test::Unit::TestCase &lt;br /&gt;
  def test_add_two_numbers_for_the_sum &lt;br /&gt;
    calculator = Calculator.new &lt;br /&gt;
    assert_equal 4, calculator.sum(2, 2)&lt;br /&gt;
  end &lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
== TDD: Test Driven Development ==&lt;br /&gt;
 	&lt;br /&gt;
Test Driven Development is a combination of refactoring and test first development, a form of development where the test is &lt;br /&gt;
&lt;br /&gt;
written prior to completed production code.  The goal of TDD is the specification of requirements and not the validation of &lt;br /&gt;
&lt;br /&gt;
requirements.  There are a few testing frameworks that are used to implement the TDD programming technique.  &lt;br /&gt;
&lt;br /&gt;
[http://ruby.about.com/b/2009/01/28/test-driven-development-with-rails.htm]&lt;br /&gt;
This link provides a comprehensive overview of test driven development practices and available resources for implementation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''RSpec'''&lt;br /&gt;
RSpec is a testing framework for Behavior Driven Development, complete with its own expectations, matchers and mocking and &lt;br /&gt;
&lt;br /&gt;
stubbing facilities. It goes along hand in hand with Cucumber, though it plays nicely with many other testing frameworks as well.&lt;br /&gt;
&lt;br /&gt;
'''Model Examples'''&lt;br /&gt;
These are the equivalent of unit tests in Rails’ built in testing. Ironically&lt;br /&gt;
(for the traditional TDD’er) these are the only specs that we feel should actually interact&lt;br /&gt;
with the database. Learn more ….&lt;br /&gt;
&lt;br /&gt;
'''Controller Examples'''&lt;br /&gt;
These align somewhat with functional tests in rails, except&lt;br /&gt;
that they do not actually render views (though you can force rendering of views&lt;br /&gt;
if you prefer). Instead of setting expectations about what goes on a page, you&lt;br /&gt;
set expectations about what templates get rendered. Learn more….&lt;br /&gt;
&lt;br /&gt;
'''View Examples'''&lt;br /&gt;
This is the other half of Rails’ functional testing. View specs allow&lt;br /&gt;
you to set up assigns (thanks to ZenTest). Learn more ….&lt;br /&gt;
&lt;br /&gt;
'''Helper Examples'''&lt;br /&gt;
let you specify directly methods that live in your helpers. Learn more ….&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://www.ibm.com/developerworks/web/library/wa-rspec/]&lt;br /&gt;
The link provides a brief overview of RSpec with a comprehensive series of examples and a conceptual view of Rpecs step by step &lt;br /&gt;
&lt;br /&gt;
implementation process&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Cucumber'''&lt;br /&gt;
Cucumber is used with TDD and BDD within other testing frameworks such as RSpec by letting software development teams describe how &lt;br /&gt;
&lt;br /&gt;
software should behave in plain text. The text is written in a business-readable domain-specific language and serves as &lt;br /&gt;
&lt;br /&gt;
documentation, automated tests and development-aid - all rolled into one format.&lt;br /&gt;
&lt;br /&gt;
[http://cukes.info/]&lt;br /&gt;
The link provides a detail decription, definition, and examples of Cucumber implementation best practices and supported &lt;br /&gt;
&lt;br /&gt;
frameworks.&lt;br /&gt;
&lt;br /&gt;
'''Cucumber Example:'''&lt;br /&gt;
Scenario: See all vendors&lt;br /&gt;
    Given I am logged in as a user in the administrator role&lt;br /&gt;
    And There are 3 vendors&lt;br /&gt;
    When I go to the manage vendors page&lt;br /&gt;
    Then I should see the first 3 vendor names&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Shoulda''' &lt;br /&gt;
An extension to Test::Unit with additional helpers, macros, and assertions.&lt;br /&gt;
 &lt;br /&gt;
[http://www.thoughtbot.com/projects/shoulda]&lt;br /&gt;
The link provides a more conclusive definition of Shoulda along with installation facts and working examples of the Shoulda &lt;br /&gt;
&lt;br /&gt;
testing framework within Ruby's built in Test::Unit&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== BDD: Behavior Driven Development ==&lt;br /&gt;
	[http://eggsonbread.com/2009/07/22/behavior-driven-development-in-a-nutshell/]&lt;br /&gt;
Behavior driven development was born from the concepts behind the implementation of TDD.  It brings together strands from &lt;br /&gt;
&lt;br /&gt;
TestDrivenDevelopment and DomainDrivenDesign into an integrated whole, making the relationship between these two powerful &lt;br /&gt;
&lt;br /&gt;
approaches to software development more evident.  Most test driven development testing frameworks such as RSpec and Cucumber also support behavior driven development testing. &lt;br /&gt;
&lt;br /&gt;
[http://behaviour-driven.org/]&lt;br /&gt;
The link supports BDDs definition with additional links to more viable behavior driven development resources.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Other Test Tool Resources'''&lt;br /&gt;
&lt;br /&gt;
''Watir:'' is an open-source library for automating web browsers. It allows you to write tests that are easy to read and maintain. It &lt;br /&gt;
&lt;br /&gt;
is simple and flexible.  &lt;br /&gt;
[http://wtr.rubyforge.org/]&lt;br /&gt;
The link provides an overview of Watir with installation specifications, examples, and supported platforms&lt;br /&gt;
&lt;br /&gt;
''NullDB:'' [http://avdi.org/projects/nulldb/]&lt;br /&gt;
a way to speed up testing by avoiding database use.&lt;br /&gt;
&lt;br /&gt;
''Bleakhouse:'' memory leak detection&lt;br /&gt;
[http://www.rubyinside.com/bleakhouse-tool-to-find-memory-leaks-in-your-rails-applications-470.html]&lt;br /&gt;
The link gives additional information on Bleakhouse profiling for memory leaks&lt;br /&gt;
&lt;br /&gt;
''ruby-debug:'' &lt;br /&gt;
Other than the extensive use of breakpoints Rails provides little to streamline the debugging process. Ruby-debug provides Rails with a plug-in extending the functionality of Rails built in debugger. &lt;br /&gt;
&lt;br /&gt;
[http://rubyforge.org/softwaremap/trove_list.php?form_cat=47]&lt;br /&gt;
The link provides twenty additional debug resources available for RoR&lt;br /&gt;
&lt;br /&gt;
== '''Conclusion''' ==&lt;br /&gt;
&lt;br /&gt;
Rails is a very comprehensive development environment for Ruby with numerous extensions, plugins, and other resources outside of IDEs to strengthen the functionality of the open source web application framework.&lt;br /&gt;
&lt;br /&gt;
== Reference ==&lt;br /&gt;
&lt;br /&gt;
''All sources used to create this wiki are linked in the above text.''&lt;/div&gt;</summary>
		<author><name>Los Bravo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_team1&amp;diff=20810</id>
		<title>CSC/ECE 517 Fall 2009/wiki1b team1</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_team1&amp;diff=20810"/>
		<updated>2009-09-21T02:55:02Z</updated>

		<summary type="html">&lt;p&gt;Los Bravo: /* BDD: Behavior Driven Development */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;CSC/ECE 517 Fall 2009&lt;br /&gt;
&lt;br /&gt;
'''&lt;br /&gt;
== Resources for Rails (other than IDEs) ==&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
IDEs are a valuable resource for Rails development, however there are many other resources and tools&lt;br /&gt;
that can either replace or supplement IDEs.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Resources for Rails other than IDEs&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails API''''' - http://api.rubyonrails.org/&lt;br /&gt;
&lt;br /&gt;
	This site documents Rails files, classes and methods that can be used to build a Rails application.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Forum''''' - http://railsforum.com/&lt;br /&gt;
&lt;br /&gt;
	A discussion forum covering all aspects of Rails for beginners and experts including planning, &lt;br /&gt;
	programming, extensions and production.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Introducing Ruby on Rails''''' &lt;br /&gt;
&lt;br /&gt;
Part 1 http://www.softwaredeveloper.com/features/intro-to-ruby-on-rails-042507/&lt;br /&gt;
&lt;br /&gt;
Part 2 http://www.softwaredeveloper.com/features/intro-to-ruby-on-rails-part-two-043007/&lt;br /&gt;
&lt;br /&gt;
An excellent introduction to Rails for novices&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Installers'''&lt;br /&gt;
''&lt;br /&gt;
	&lt;br /&gt;
Windows: InstantRails - http://instantrails.rubyforge.org/wiki/wiki.pl&lt;br /&gt;
&lt;br /&gt;
		An all in one, single click installer for Windows that includes a Rails server.&lt;br /&gt;
&lt;br /&gt;
	Mac: Locomotive - http://locomotive.raaum.org/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Projects''''' - http://www.workingwithrails.com/&lt;br /&gt;
&lt;br /&gt;
	A Database of Rails projects, programmers and websites&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails plugins''''' - http://agilewebdevelopment.com/&lt;br /&gt;
&lt;br /&gt;
	A collection of Rails open source plugins, searchable by category or keyword.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Sample Rails''''' - http://snippets.dzone.com/tag/rails&lt;br /&gt;
&lt;br /&gt;
	A collection of Rails code snippets.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Agile Rails book''''' - http://www.amazon.com/gp/product/097669400X/002-0481267-8083260?v=glance&amp;amp;n=283155&lt;br /&gt;
&lt;br /&gt;
	An excellent resource for learning how to apply Agile programming concepts to Rails.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails cheatsheet''''' - http://www.blainekendall.com/uploads/RubyOnRails-Cheatsheet-BlaineKendall.pdf&lt;br /&gt;
&lt;br /&gt;
	One user's list of best practices, gotchas and quirks of developing with Rails.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails best practices''''' - http://www.therailsway.com/&lt;br /&gt;
&lt;br /&gt;
	An official best practices list for programming in Rails.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Advanced Rails''''' - http://webonrails.com/&lt;br /&gt;
&lt;br /&gt;
	A resource for the advanced Rails programmer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Blog''''' - http://weblog.rubyonrails.org/&lt;br /&gt;
&lt;br /&gt;
	An online community of updates about current happenings with the Rails platform.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Guides''''' - http://guides.rubyonrails.org/&lt;br /&gt;
&lt;br /&gt;
	An all in one resource for learning Rails including Howtos, security and contributing to the Rails community.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Authoring Rails plugins''''' - http://nubyonrails.com/articles/2006/05/04/the-complete-guide-to-rails-plugins-part-i&lt;br /&gt;
&lt;br /&gt;
	A complete guide to authoring your own Rails plugins.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
== '''Tools for Rails (other than IDEs)''' ==&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
'''Test Unit'''&lt;br /&gt;
The Rails stack uses Test::Unit, known as the default Ruby unit testing framework shipping with Ruby.  There are various plugins and extension that could be used with Rails built-in Test::Unit to extend its functionality for support of TDD and BDD testing practices.&lt;br /&gt;
&lt;br /&gt;
[http://wiki.rubyonrails.org/addons/testing]&lt;br /&gt;
The link provides additional information in the form of supporting resources, whitepapers, examples, and plug-in documentation&lt;br /&gt;
&lt;br /&gt;
'''Example'''&lt;br /&gt;
[http://wiki.rubyonrails.org/testing/test-unitrequire] &lt;br /&gt;
&lt;br /&gt;
 Image:class CalculatorTest &amp;lt; Test::Unit::TestCase &lt;br /&gt;
  def test_add_two_numbers_for_the_sum &lt;br /&gt;
    calculator = Calculator.new &lt;br /&gt;
    assert_equal 4, calculator.sum(2, 2)&lt;br /&gt;
  end &lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
== TDD: Test Driven Development ==&lt;br /&gt;
 	&lt;br /&gt;
Test Driven Development is a combination of refactoring and test first development, a form of development where the test is &lt;br /&gt;
&lt;br /&gt;
written prior to completed production code.  The goal of TDD is the specification of requirements and not the validation of &lt;br /&gt;
&lt;br /&gt;
requirements.  There are a few testing frameworks that are used to implement the TDD programming technique.  &lt;br /&gt;
&lt;br /&gt;
[http://ruby.about.com/b/2009/01/28/test-driven-development-with-rails.htm]&lt;br /&gt;
This link provides a comprehensive overview of test driven development practices and available resources for implementation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''RSpec'''&lt;br /&gt;
RSpec is a testing framework for Behavior Driven Development, complete with its own expectations, matchers and mocking and &lt;br /&gt;
&lt;br /&gt;
stubbing facilities. It goes along hand in hand with Cucumber, though it plays nicely with many other testing frameworks as well.&lt;br /&gt;
&lt;br /&gt;
'''Model Examples'''&lt;br /&gt;
These are the equivalent of unit tests in Rails’ built in testing. Ironically&lt;br /&gt;
(for the traditional TDD’er) these are the only specs that we feel should actually interact&lt;br /&gt;
with the database. Learn more ….&lt;br /&gt;
&lt;br /&gt;
'''Controller Examples'''&lt;br /&gt;
These align somewhat with functional tests in rails, except&lt;br /&gt;
that they do not actually render views (though you can force rendering of views&lt;br /&gt;
if you prefer). Instead of setting expectations about what goes on a page, you&lt;br /&gt;
set expectations about what templates get rendered. Learn more….&lt;br /&gt;
&lt;br /&gt;
'''View Examples'''&lt;br /&gt;
This is the other half of Rails’ functional testing. View specs allow&lt;br /&gt;
you to set up assigns (thanks to ZenTest). Learn more ….&lt;br /&gt;
&lt;br /&gt;
'''Helper Examples'''&lt;br /&gt;
let you specify directly methods that live in your helpers. Learn more ….&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://www.ibm.com/developerworks/web/library/wa-rspec/]&lt;br /&gt;
The link provides a brief overview of RSpec with a comprehensive series of examples and a conceptual view of Rpecs step by step &lt;br /&gt;
&lt;br /&gt;
implementation process&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Cucumber'''&lt;br /&gt;
Cucumber is used with TDD and BDD within other testing frameworks such as RSpec by letting software development teams describe how &lt;br /&gt;
&lt;br /&gt;
software should behave in plain text. The text is written in a business-readable domain-specific language and serves as &lt;br /&gt;
&lt;br /&gt;
documentation, automated tests and development-aid - all rolled into one format.&lt;br /&gt;
&lt;br /&gt;
[http://cukes.info/]&lt;br /&gt;
The link provides a detail decription, definition, and examples of Cucumber implementation best practices and supported &lt;br /&gt;
&lt;br /&gt;
frameworks.&lt;br /&gt;
&lt;br /&gt;
'''Cucumber Example:'''&lt;br /&gt;
Scenario: See all vendors&lt;br /&gt;
    Given I am logged in as a user in the administrator role&lt;br /&gt;
    And There are 3 vendors&lt;br /&gt;
    When I go to the manage vendors page&lt;br /&gt;
    Then I should see the first 3 vendor names&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Shoulda''' &lt;br /&gt;
An extension to Test::Unit with additional helpers, macros, and assertions.&lt;br /&gt;
 &lt;br /&gt;
[http://www.thoughtbot.com/projects/shoulda]&lt;br /&gt;
The link provides a more conclusive definition of Shoulda along with installation facts and working examples of the Shoulda &lt;br /&gt;
&lt;br /&gt;
testing framework within Ruby's built in Test::Unit&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== BDD: Behavior Driven Development ==&lt;br /&gt;
	[http://eggsonbread.com/2009/07/22/behavior-driven-development-in-a-nutshell/]&lt;br /&gt;
Behavior driven development was born from the concepts behind the implementation of TDD.  It brings together strands from &lt;br /&gt;
&lt;br /&gt;
TestDrivenDevelopment and DomainDrivenDesign into an integrated whole, making the relationship between these two powerful &lt;br /&gt;
&lt;br /&gt;
approaches to software development more evident.  Most test driven development testing frameworks such as RSpec and Cucumber also support behavior driven development testing. &lt;br /&gt;
&lt;br /&gt;
[http://behaviour-driven.org/]&lt;br /&gt;
The link supports BDDs definition with additional links to more viable behavior driven development resources.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Other Test Tool Resources'''&lt;br /&gt;
&lt;br /&gt;
''Watir:'' is an open-source library for automating web browsers. It allows you to write tests that are easy to read and maintain. It &lt;br /&gt;
&lt;br /&gt;
is simple and flexible.  &lt;br /&gt;
&lt;br /&gt;
[http://wtr.rubyforge.org/]&lt;br /&gt;
The link provides an overview of Watir with installation specifications, examples, and supported platforms&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''NullDB:'' [http://avdi.org/projects/nulldb/]&lt;br /&gt;
a way to speed up testing by avoiding database use.&lt;br /&gt;
&lt;br /&gt;
''Bleakhouse:'' memory leak detection&lt;br /&gt;
[http://www.rubyinside.com/bleakhouse-tool-to-find-memory-leaks-in-your-rails-applications-470.html]&lt;br /&gt;
The link gives additional information on Bleakhouse profiling for memory leaks&lt;br /&gt;
&lt;br /&gt;
''ruby-debug:'' &lt;br /&gt;
Other than the extensive use of breakpoints Rails provides little to streamline the debugging process. Ruby-debug provides Rails with a plug-in extending the functionality of Rails built in debugger. &lt;br /&gt;
&lt;br /&gt;
[http://rubyforge.org/softwaremap/trove_list.php?form_cat=47]&lt;br /&gt;
The link provides twenty additional debug resources available for RoR&lt;br /&gt;
&lt;br /&gt;
== '''Conclusion''' ==&lt;br /&gt;
&lt;br /&gt;
Rails is a very comprehensive development environment for Ruby with numerous extensions, plugins, and other resources outside of IDEs to strengthen the functionality of the open source web application framework.&lt;br /&gt;
&lt;br /&gt;
== Reference ==&lt;br /&gt;
&lt;br /&gt;
''All sources used to create this wiki are linked in the above text.''&lt;/div&gt;</summary>
		<author><name>Los Bravo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_team1&amp;diff=20805</id>
		<title>CSC/ECE 517 Fall 2009/wiki1b team1</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_team1&amp;diff=20805"/>
		<updated>2009-09-21T02:52:32Z</updated>

		<summary type="html">&lt;p&gt;Los Bravo: /* BDD: Behavior Driven Development */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;CSC/ECE 517 Fall 2009&lt;br /&gt;
&lt;br /&gt;
'''&lt;br /&gt;
== Resources for Rails (other than IDEs) ==&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
IDEs are a valuable resource for Rails development, however there are many other resources and tools&lt;br /&gt;
that can either replace or supplement IDEs.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Resources for Rails other than IDEs&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails API''''' - http://api.rubyonrails.org/&lt;br /&gt;
&lt;br /&gt;
	This site documents Rails files, classes and methods that can be used to build a Rails application.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Forum''''' - http://railsforum.com/&lt;br /&gt;
&lt;br /&gt;
	A discussion forum covering all aspects of Rails for beginners and experts including planning, &lt;br /&gt;
	programming, extensions and production.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Introducing Ruby on Rails''''' &lt;br /&gt;
&lt;br /&gt;
Part 1 http://www.softwaredeveloper.com/features/intro-to-ruby-on-rails-042507/&lt;br /&gt;
&lt;br /&gt;
Part 2 http://www.softwaredeveloper.com/features/intro-to-ruby-on-rails-part-two-043007/&lt;br /&gt;
&lt;br /&gt;
An excellent introduction to Rails for novices&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Installers'''&lt;br /&gt;
''&lt;br /&gt;
	&lt;br /&gt;
Windows: InstantRails - http://instantrails.rubyforge.org/wiki/wiki.pl&lt;br /&gt;
&lt;br /&gt;
		An all in one, single click installer for Windows that includes a Rails server.&lt;br /&gt;
&lt;br /&gt;
	Mac: Locomotive - http://locomotive.raaum.org/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Projects''''' - http://www.workingwithrails.com/&lt;br /&gt;
&lt;br /&gt;
	A Database of Rails projects, programmers and websites&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails plugins''''' - http://agilewebdevelopment.com/&lt;br /&gt;
&lt;br /&gt;
	A collection of Rails open source plugins, searchable by category or keyword.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Sample Rails''''' - http://snippets.dzone.com/tag/rails&lt;br /&gt;
&lt;br /&gt;
	A collection of Rails code snippets.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Agile Rails book''''' - http://www.amazon.com/gp/product/097669400X/002-0481267-8083260?v=glance&amp;amp;n=283155&lt;br /&gt;
&lt;br /&gt;
	An excellent resource for learning how to apply Agile programming concepts to Rails.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails cheatsheet''''' - http://www.blainekendall.com/uploads/RubyOnRails-Cheatsheet-BlaineKendall.pdf&lt;br /&gt;
&lt;br /&gt;
	One user's list of best practices, gotchas and quirks of developing with Rails.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails best practices''''' - http://www.therailsway.com/&lt;br /&gt;
&lt;br /&gt;
	An official best practices list for programming in Rails.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Advanced Rails''''' - http://webonrails.com/&lt;br /&gt;
&lt;br /&gt;
	A resource for the advanced Rails programmer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Blog''''' - http://weblog.rubyonrails.org/&lt;br /&gt;
&lt;br /&gt;
	An online community of updates about current happenings with the Rails platform.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Guides''''' - http://guides.rubyonrails.org/&lt;br /&gt;
&lt;br /&gt;
	An all in one resource for learning Rails including Howtos, security and contributing to the Rails community.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Authoring Rails plugins''''' - http://nubyonrails.com/articles/2006/05/04/the-complete-guide-to-rails-plugins-part-i&lt;br /&gt;
&lt;br /&gt;
	A complete guide to authoring your own Rails plugins.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
== '''Tools for Rails (other than IDEs)''' ==&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
'''Test Unit'''&lt;br /&gt;
The Rails stack uses Test::Unit, known as the default Ruby unit testing framework shipping with Ruby.  There are various plugins and extension that could be used with Rails built-in Test::Unit to extend its functionality for support of TDD and BDD testing practices.&lt;br /&gt;
&lt;br /&gt;
[http://wiki.rubyonrails.org/addons/testing]&lt;br /&gt;
The link provides additional information in the form of supporting resources, whitepapers, examples, and plug-in documentation&lt;br /&gt;
&lt;br /&gt;
'''Example'''&lt;br /&gt;
[http://wiki.rubyonrails.org/testing/test-unitrequire] &lt;br /&gt;
&lt;br /&gt;
 Image:class CalculatorTest &amp;lt; Test::Unit::TestCase &lt;br /&gt;
  def test_add_two_numbers_for_the_sum &lt;br /&gt;
    calculator = Calculator.new &lt;br /&gt;
    assert_equal 4, calculator.sum(2, 2)&lt;br /&gt;
  end &lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
== TDD: Test Driven Development ==&lt;br /&gt;
 	&lt;br /&gt;
Test Driven Development is a combination of refactoring and test first development, a form of development where the test is &lt;br /&gt;
&lt;br /&gt;
written prior to completed production code.  The goal of TDD is the specification of requirements and not the validation of &lt;br /&gt;
&lt;br /&gt;
requirements.  There are a few testing frameworks that are used to implement the TDD programming technique.  &lt;br /&gt;
&lt;br /&gt;
[http://ruby.about.com/b/2009/01/28/test-driven-development-with-rails.htm]&lt;br /&gt;
This link provides a comprehensive overview of test driven development practices and available resources for implementation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''RSpec'''&lt;br /&gt;
RSpec is a testing framework for Behavior Driven Development, complete with its own expectations, matchers and mocking and &lt;br /&gt;
&lt;br /&gt;
stubbing facilities. It goes along hand in hand with Cucumber, though it plays nicely with many other testing frameworks as well.&lt;br /&gt;
&lt;br /&gt;
'''Model Examples'''&lt;br /&gt;
These are the equivalent of unit tests in Rails’ built in testing. Ironically&lt;br /&gt;
(for the traditional TDD’er) these are the only specs that we feel should actually interact&lt;br /&gt;
with the database. Learn more ….&lt;br /&gt;
&lt;br /&gt;
'''Controller Examples'''&lt;br /&gt;
These align somewhat with functional tests in rails, except&lt;br /&gt;
that they do not actually render views (though you can force rendering of views&lt;br /&gt;
if you prefer). Instead of setting expectations about what goes on a page, you&lt;br /&gt;
set expectations about what templates get rendered. Learn more….&lt;br /&gt;
&lt;br /&gt;
'''View Examples'''&lt;br /&gt;
This is the other half of Rails’ functional testing. View specs allow&lt;br /&gt;
you to set up assigns (thanks to ZenTest). Learn more ….&lt;br /&gt;
&lt;br /&gt;
'''Helper Examples'''&lt;br /&gt;
let you specify directly methods that live in your helpers. Learn more ….&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://www.ibm.com/developerworks/web/library/wa-rspec/]&lt;br /&gt;
The link provides a brief overview of RSpec with a comprehensive series of examples and a conceptual view of Rpecs step by step &lt;br /&gt;
&lt;br /&gt;
implementation process&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Cucumber'''&lt;br /&gt;
Cucumber is used with TDD and BDD within other testing frameworks such as RSpec by letting software development teams describe how &lt;br /&gt;
&lt;br /&gt;
software should behave in plain text. The text is written in a business-readable domain-specific language and serves as &lt;br /&gt;
&lt;br /&gt;
documentation, automated tests and development-aid - all rolled into one format.&lt;br /&gt;
&lt;br /&gt;
[http://cukes.info/]&lt;br /&gt;
The link provides a detail decription, definition, and examples of Cucumber implementation best practices and supported &lt;br /&gt;
&lt;br /&gt;
frameworks.&lt;br /&gt;
&lt;br /&gt;
'''Cucumber Example:'''&lt;br /&gt;
Scenario: See all vendors&lt;br /&gt;
    Given I am logged in as a user in the administrator role&lt;br /&gt;
    And There are 3 vendors&lt;br /&gt;
    When I go to the manage vendors page&lt;br /&gt;
    Then I should see the first 3 vendor names&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Shoulda''' &lt;br /&gt;
An extension to Test::Unit with additional helpers, macros, and assertions.&lt;br /&gt;
 &lt;br /&gt;
[http://www.thoughtbot.com/projects/shoulda]&lt;br /&gt;
The link provides a more conclusive definition of Shoulda along with installation facts and working examples of the Shoulda &lt;br /&gt;
&lt;br /&gt;
testing framework within Ruby's built in Test::Unit&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== BDD: Behavior Driven Development ==&lt;br /&gt;
	[http://eggsonbread.com/2009/07/22/behavior-driven-development-in-a-nutshell/]&lt;br /&gt;
Behavior driven development was born from the concepts behind the implementation of TDD.  It brings together strands from &lt;br /&gt;
&lt;br /&gt;
TestDrivenDevelopment and DomainDrivenDesign into an integrated whole, making the relationship between these two powerful &lt;br /&gt;
&lt;br /&gt;
approaches to software development more evident.  Most test driven development testing frameworks such as RSpec and Cucumber also support behavior driven development testing. &lt;br /&gt;
&lt;br /&gt;
[http://behaviour-driven.org/]&lt;br /&gt;
The link supports BDDs definition with additional links to more viable behavior driven development resources.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Other Test Tool Resources'''&lt;br /&gt;
&lt;br /&gt;
''Watir''&lt;br /&gt;
Watir is an open-source library for automating web browsers. It allows you to write tests that are easy to read and maintain. It &lt;br /&gt;
&lt;br /&gt;
is simple and flexible.  &lt;br /&gt;
&lt;br /&gt;
[http://wtr.rubyforge.org/]&lt;br /&gt;
The link provides an overview of Watir with installation specifications, examples, and supported platforms&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''NullDB'' - [http://avdi.org/projects/nulldb/]&lt;br /&gt;
a way to speed up testing by avoiding database use.&lt;br /&gt;
&lt;br /&gt;
''Bleakhouse:'' memory leak detection&lt;br /&gt;
[http://www.rubyinside.com/bleakhouse-tool-to-find-memory-leaks-in-your-rails-applications-470.html]&lt;br /&gt;
The link gives additional information on Bleakhouse profiling for memory leaks&lt;br /&gt;
&lt;br /&gt;
''ruby-debug'' &lt;br /&gt;
Other than the extensive use of breakpoints, ruby-debug provides Rails with a plug-in extending the functionality of Rails built in debugger. &lt;br /&gt;
&lt;br /&gt;
[http://rubyforge.org/softwaremap/trove_list.php?form_cat=47]&lt;br /&gt;
The link provides twenty debug resources available for RoR&lt;br /&gt;
&lt;br /&gt;
== '''Conclusion''' ==&lt;br /&gt;
&lt;br /&gt;
Rails is a very comprehensive development environment for Ruby with numerous extensions, plugins, and other resources outside of IDEs to strengthen the functionality of the open source web application framework.&lt;br /&gt;
&lt;br /&gt;
== Reference ==&lt;br /&gt;
&lt;br /&gt;
''All sources used to create this wiki are linked in the above text.''&lt;/div&gt;</summary>
		<author><name>Los Bravo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_team1&amp;diff=20802</id>
		<title>CSC/ECE 517 Fall 2009/wiki1b team1</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_team1&amp;diff=20802"/>
		<updated>2009-09-21T02:51:17Z</updated>

		<summary type="html">&lt;p&gt;Los Bravo: /* BDD: Behavior Driven Development */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;CSC/ECE 517 Fall 2009&lt;br /&gt;
&lt;br /&gt;
'''&lt;br /&gt;
== Resources for Rails (other than IDEs) ==&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
IDEs are a valuable resource for Rails development, however there are many other resources and tools&lt;br /&gt;
that can either replace or supplement IDEs.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Resources for Rails other than IDEs&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails API''''' - http://api.rubyonrails.org/&lt;br /&gt;
&lt;br /&gt;
	This site documents Rails files, classes and methods that can be used to build a Rails application.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Forum''''' - http://railsforum.com/&lt;br /&gt;
&lt;br /&gt;
	A discussion forum covering all aspects of Rails for beginners and experts including planning, &lt;br /&gt;
	programming, extensions and production.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Introducing Ruby on Rails''''' &lt;br /&gt;
&lt;br /&gt;
Part 1 http://www.softwaredeveloper.com/features/intro-to-ruby-on-rails-042507/&lt;br /&gt;
&lt;br /&gt;
Part 2 http://www.softwaredeveloper.com/features/intro-to-ruby-on-rails-part-two-043007/&lt;br /&gt;
&lt;br /&gt;
An excellent introduction to Rails for novices&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Installers'''&lt;br /&gt;
''&lt;br /&gt;
	&lt;br /&gt;
Windows: InstantRails - http://instantrails.rubyforge.org/wiki/wiki.pl&lt;br /&gt;
&lt;br /&gt;
		An all in one, single click installer for Windows that includes a Rails server.&lt;br /&gt;
&lt;br /&gt;
	Mac: Locomotive - http://locomotive.raaum.org/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Projects''''' - http://www.workingwithrails.com/&lt;br /&gt;
&lt;br /&gt;
	A Database of Rails projects, programmers and websites&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails plugins''''' - http://agilewebdevelopment.com/&lt;br /&gt;
&lt;br /&gt;
	A collection of Rails open source plugins, searchable by category or keyword.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Sample Rails''''' - http://snippets.dzone.com/tag/rails&lt;br /&gt;
&lt;br /&gt;
	A collection of Rails code snippets.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Agile Rails book''''' - http://www.amazon.com/gp/product/097669400X/002-0481267-8083260?v=glance&amp;amp;n=283155&lt;br /&gt;
&lt;br /&gt;
	An excellent resource for learning how to apply Agile programming concepts to Rails.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails cheatsheet''''' - http://www.blainekendall.com/uploads/RubyOnRails-Cheatsheet-BlaineKendall.pdf&lt;br /&gt;
&lt;br /&gt;
	One user's list of best practices, gotchas and quirks of developing with Rails.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails best practices''''' - http://www.therailsway.com/&lt;br /&gt;
&lt;br /&gt;
	An official best practices list for programming in Rails.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Advanced Rails''''' - http://webonrails.com/&lt;br /&gt;
&lt;br /&gt;
	A resource for the advanced Rails programmer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Blog''''' - http://weblog.rubyonrails.org/&lt;br /&gt;
&lt;br /&gt;
	An online community of updates about current happenings with the Rails platform.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Guides''''' - http://guides.rubyonrails.org/&lt;br /&gt;
&lt;br /&gt;
	An all in one resource for learning Rails including Howtos, security and contributing to the Rails community.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Authoring Rails plugins''''' - http://nubyonrails.com/articles/2006/05/04/the-complete-guide-to-rails-plugins-part-i&lt;br /&gt;
&lt;br /&gt;
	A complete guide to authoring your own Rails plugins.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
== '''Tools for Rails (other than IDEs)''' ==&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
'''Test Unit'''&lt;br /&gt;
The Rails stack uses Test::Unit, known as the default Ruby unit testing framework shipping with Ruby.  There are various plugins and extension that could be used with Rails built-in Test::Unit to extend its functionality for support of TDD and BDD testing practices.&lt;br /&gt;
&lt;br /&gt;
[http://wiki.rubyonrails.org/addons/testing]&lt;br /&gt;
The link provides additional information in the form of supporting resources, whitepapers, examples, and plug-in documentation&lt;br /&gt;
&lt;br /&gt;
'''Example'''&lt;br /&gt;
[http://wiki.rubyonrails.org/testing/test-unitrequire] &lt;br /&gt;
&lt;br /&gt;
 Image:class CalculatorTest &amp;lt; Test::Unit::TestCase &lt;br /&gt;
  def test_add_two_numbers_for_the_sum &lt;br /&gt;
    calculator = Calculator.new &lt;br /&gt;
    assert_equal 4, calculator.sum(2, 2)&lt;br /&gt;
  end &lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
== TDD: Test Driven Development ==&lt;br /&gt;
 	&lt;br /&gt;
Test Driven Development is a combination of refactoring and test first development, a form of development where the test is &lt;br /&gt;
&lt;br /&gt;
written prior to completed production code.  The goal of TDD is the specification of requirements and not the validation of &lt;br /&gt;
&lt;br /&gt;
requirements.  There are a few testing frameworks that are used to implement the TDD programming technique.  &lt;br /&gt;
&lt;br /&gt;
[http://ruby.about.com/b/2009/01/28/test-driven-development-with-rails.htm]&lt;br /&gt;
This link provides a comprehensive overview of test driven development practices and available resources for implementation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''RSpec'''&lt;br /&gt;
RSpec is a testing framework for Behavior Driven Development, complete with its own expectations, matchers and mocking and &lt;br /&gt;
&lt;br /&gt;
stubbing facilities. It goes along hand in hand with Cucumber, though it plays nicely with many other testing frameworks as well.&lt;br /&gt;
&lt;br /&gt;
'''Model Examples'''&lt;br /&gt;
These are the equivalent of unit tests in Rails’ built in testing. Ironically&lt;br /&gt;
(for the traditional TDD’er) these are the only specs that we feel should actually interact&lt;br /&gt;
with the database. Learn more ….&lt;br /&gt;
&lt;br /&gt;
'''Controller Examples'''&lt;br /&gt;
These align somewhat with functional tests in rails, except&lt;br /&gt;
that they do not actually render views (though you can force rendering of views&lt;br /&gt;
if you prefer). Instead of setting expectations about what goes on a page, you&lt;br /&gt;
set expectations about what templates get rendered. Learn more….&lt;br /&gt;
&lt;br /&gt;
'''View Examples'''&lt;br /&gt;
This is the other half of Rails’ functional testing. View specs allow&lt;br /&gt;
you to set up assigns (thanks to ZenTest). Learn more ….&lt;br /&gt;
&lt;br /&gt;
'''Helper Examples'''&lt;br /&gt;
let you specify directly methods that live in your helpers. Learn more ….&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://www.ibm.com/developerworks/web/library/wa-rspec/]&lt;br /&gt;
The link provides a brief overview of RSpec with a comprehensive series of examples and a conceptual view of Rpecs step by step &lt;br /&gt;
&lt;br /&gt;
implementation process&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Cucumber'''&lt;br /&gt;
Cucumber is used with TDD and BDD within other testing frameworks such as RSpec by letting software development teams describe how &lt;br /&gt;
&lt;br /&gt;
software should behave in plain text. The text is written in a business-readable domain-specific language and serves as &lt;br /&gt;
&lt;br /&gt;
documentation, automated tests and development-aid - all rolled into one format.&lt;br /&gt;
&lt;br /&gt;
[http://cukes.info/]&lt;br /&gt;
The link provides a detail decription, definition, and examples of Cucumber implementation best practices and supported &lt;br /&gt;
&lt;br /&gt;
frameworks.&lt;br /&gt;
&lt;br /&gt;
'''Cucumber Example:'''&lt;br /&gt;
Scenario: See all vendors&lt;br /&gt;
    Given I am logged in as a user in the administrator role&lt;br /&gt;
    And There are 3 vendors&lt;br /&gt;
    When I go to the manage vendors page&lt;br /&gt;
    Then I should see the first 3 vendor names&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Shoulda''' &lt;br /&gt;
An extension to Test::Unit with additional helpers, macros, and assertions.&lt;br /&gt;
 &lt;br /&gt;
[http://www.thoughtbot.com/projects/shoulda]&lt;br /&gt;
The link provides a more conclusive definition of Shoulda along with installation facts and working examples of the Shoulda &lt;br /&gt;
&lt;br /&gt;
testing framework within Ruby's built in Test::Unit&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== BDD: Behavior Driven Development ==&lt;br /&gt;
	[http://eggsonbread.com/2009/07/22/behavior-driven-development-in-a-nutshell/]&lt;br /&gt;
Behavior driven development was born from the concepts behind the implementation of TDD.  It brings together strands from &lt;br /&gt;
&lt;br /&gt;
TestDrivenDevelopment and DomainDrivenDesign into an integrated whole, making the relationship between these two powerful &lt;br /&gt;
&lt;br /&gt;
approaches to software development more evident.  Most test driven development testing frameworks such as RSpec and Cucumber also support behavior driven development testing. &lt;br /&gt;
&lt;br /&gt;
[http://behaviour-driven.org/]&lt;br /&gt;
The link supports BDDs definition with additional links to more viable behavior driven development resources.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Other Test Tool Resources'''&lt;br /&gt;
&lt;br /&gt;
''Watir''&lt;br /&gt;
Watir is an open-source library for automating web browsers. It allows you to write tests that are easy to read and maintain. It &lt;br /&gt;
&lt;br /&gt;
is simple and flexible.  &lt;br /&gt;
&lt;br /&gt;
[http://wtr.rubyforge.org/]&lt;br /&gt;
The link provides an overview of Watir with installation specifications, examples, and supported platforms&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''NullDB'' - [http://avdi.org/projects/nulldb/]&lt;br /&gt;
a way to speed up testing by avoiding database use.&lt;br /&gt;
&lt;br /&gt;
''Bleakhouse:'' memory leak detection&lt;br /&gt;
[http://www.rubyinside.com/bleakhouse-tool-to-find-memory-leaks-in-your-rails-applications-470.html]&lt;br /&gt;
The links gives additional information on Bleakhouse profiling for memory leaks&lt;br /&gt;
&lt;br /&gt;
''ruby-debug'' &lt;br /&gt;
Other than the extensive use of breakpoints, ruby-debug provides Rails with a plug-in extending the functionality of Rails built in debugger. &lt;br /&gt;
&lt;br /&gt;
[http://rubyforge.org/softwaremap/trove_list.php?form_cat=47]&lt;br /&gt;
The link provides twenty debug resources available for RoR&lt;br /&gt;
&lt;br /&gt;
== '''Conclusion''' ==&lt;br /&gt;
&lt;br /&gt;
Rails is a very comprehensive development environment for Ruby with numerous extensions, plugins, and other resources outside of IDEs to strengthen the functionality of the open source web application framework.&lt;br /&gt;
&lt;br /&gt;
== Reference ==&lt;br /&gt;
&lt;br /&gt;
''All sources used to create this wiki are linked in the above text.''&lt;/div&gt;</summary>
		<author><name>Los Bravo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_team1&amp;diff=20798</id>
		<title>CSC/ECE 517 Fall 2009/wiki1b team1</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_team1&amp;diff=20798"/>
		<updated>2009-09-21T02:49:09Z</updated>

		<summary type="html">&lt;p&gt;Los Bravo: /* '''Conclusion''' */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;CSC/ECE 517 Fall 2009&lt;br /&gt;
&lt;br /&gt;
'''&lt;br /&gt;
== Resources for Rails (other than IDEs) ==&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
IDEs are a valuable resource for Rails development, however there are many other resources and tools&lt;br /&gt;
that can either replace or supplement IDEs.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Resources for Rails other than IDEs&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails API''''' - http://api.rubyonrails.org/&lt;br /&gt;
&lt;br /&gt;
	This site documents Rails files, classes and methods that can be used to build a Rails application.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Forum''''' - http://railsforum.com/&lt;br /&gt;
&lt;br /&gt;
	A discussion forum covering all aspects of Rails for beginners and experts including planning, &lt;br /&gt;
	programming, extensions and production.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Introducing Ruby on Rails''''' &lt;br /&gt;
&lt;br /&gt;
Part 1 http://www.softwaredeveloper.com/features/intro-to-ruby-on-rails-042507/&lt;br /&gt;
&lt;br /&gt;
Part 2 http://www.softwaredeveloper.com/features/intro-to-ruby-on-rails-part-two-043007/&lt;br /&gt;
&lt;br /&gt;
An excellent introduction to Rails for novices&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Installers'''&lt;br /&gt;
''&lt;br /&gt;
	&lt;br /&gt;
Windows: InstantRails - http://instantrails.rubyforge.org/wiki/wiki.pl&lt;br /&gt;
&lt;br /&gt;
		An all in one, single click installer for Windows that includes a Rails server.&lt;br /&gt;
&lt;br /&gt;
	Mac: Locomotive - http://locomotive.raaum.org/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Projects''''' - http://www.workingwithrails.com/&lt;br /&gt;
&lt;br /&gt;
	A Database of Rails projects, programmers and websites&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails plugins''''' - http://agilewebdevelopment.com/&lt;br /&gt;
&lt;br /&gt;
	A collection of Rails open source plugins, searchable by category or keyword.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Sample Rails''''' - http://snippets.dzone.com/tag/rails&lt;br /&gt;
&lt;br /&gt;
	A collection of Rails code snippets.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Agile Rails book''''' - http://www.amazon.com/gp/product/097669400X/002-0481267-8083260?v=glance&amp;amp;n=283155&lt;br /&gt;
&lt;br /&gt;
	An excellent resource for learning how to apply Agile programming concepts to Rails.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails cheatsheet''''' - http://www.blainekendall.com/uploads/RubyOnRails-Cheatsheet-BlaineKendall.pdf&lt;br /&gt;
&lt;br /&gt;
	One user's list of best practices, gotchas and quirks of developing with Rails.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails best practices''''' - http://www.therailsway.com/&lt;br /&gt;
&lt;br /&gt;
	An official best practices list for programming in Rails.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Advanced Rails''''' - http://webonrails.com/&lt;br /&gt;
&lt;br /&gt;
	A resource for the advanced Rails programmer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Blog''''' - http://weblog.rubyonrails.org/&lt;br /&gt;
&lt;br /&gt;
	An online community of updates about current happenings with the Rails platform.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Guides''''' - http://guides.rubyonrails.org/&lt;br /&gt;
&lt;br /&gt;
	An all in one resource for learning Rails including Howtos, security and contributing to the Rails community.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Authoring Rails plugins''''' - http://nubyonrails.com/articles/2006/05/04/the-complete-guide-to-rails-plugins-part-i&lt;br /&gt;
&lt;br /&gt;
	A complete guide to authoring your own Rails plugins.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
== '''Tools for Rails (other than IDEs)''' ==&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
'''Test Unit'''&lt;br /&gt;
The Rails stack uses Test::Unit, known as the default Ruby unit testing framework shipping with Ruby.  There are various plugins and extension that could be used with Rails built-in Test::Unit to extend its functionality for support of TDD and BDD testing practices.&lt;br /&gt;
&lt;br /&gt;
[http://wiki.rubyonrails.org/addons/testing]&lt;br /&gt;
The link provides additional information in the form of supporting resources, whitepapers, examples, and plug-in documentation&lt;br /&gt;
&lt;br /&gt;
'''Example'''&lt;br /&gt;
[http://wiki.rubyonrails.org/testing/test-unitrequire] &lt;br /&gt;
&lt;br /&gt;
 Image:class CalculatorTest &amp;lt; Test::Unit::TestCase &lt;br /&gt;
  def test_add_two_numbers_for_the_sum &lt;br /&gt;
    calculator = Calculator.new &lt;br /&gt;
    assert_equal 4, calculator.sum(2, 2)&lt;br /&gt;
  end &lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
== TDD: Test Driven Development ==&lt;br /&gt;
 	&lt;br /&gt;
Test Driven Development is a combination of refactoring and test first development, a form of development where the test is &lt;br /&gt;
&lt;br /&gt;
written prior to completed production code.  The goal of TDD is the specification of requirements and not the validation of &lt;br /&gt;
&lt;br /&gt;
requirements.  There are a few testing frameworks that are used to implement the TDD programming technique.  &lt;br /&gt;
&lt;br /&gt;
[http://ruby.about.com/b/2009/01/28/test-driven-development-with-rails.htm]&lt;br /&gt;
This link provides a comprehensive overview of test driven development practices and available resources for implementation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''RSpec'''&lt;br /&gt;
RSpec is a testing framework for Behavior Driven Development, complete with its own expectations, matchers and mocking and &lt;br /&gt;
&lt;br /&gt;
stubbing facilities. It goes along hand in hand with Cucumber, though it plays nicely with many other testing frameworks as well.&lt;br /&gt;
&lt;br /&gt;
'''Model Examples'''&lt;br /&gt;
These are the equivalent of unit tests in Rails’ built in testing. Ironically&lt;br /&gt;
(for the traditional TDD’er) these are the only specs that we feel should actually interact&lt;br /&gt;
with the database. Learn more ….&lt;br /&gt;
&lt;br /&gt;
'''Controller Examples'''&lt;br /&gt;
These align somewhat with functional tests in rails, except&lt;br /&gt;
that they do not actually render views (though you can force rendering of views&lt;br /&gt;
if you prefer). Instead of setting expectations about what goes on a page, you&lt;br /&gt;
set expectations about what templates get rendered. Learn more….&lt;br /&gt;
&lt;br /&gt;
'''View Examples'''&lt;br /&gt;
This is the other half of Rails’ functional testing. View specs allow&lt;br /&gt;
you to set up assigns (thanks to ZenTest). Learn more ….&lt;br /&gt;
&lt;br /&gt;
'''Helper Examples'''&lt;br /&gt;
let you specify directly methods that live in your helpers. Learn more ….&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://www.ibm.com/developerworks/web/library/wa-rspec/]&lt;br /&gt;
The link provides a brief overview of RSpec with a comprehensive series of examples and a conceptual view of Rpecs step by step &lt;br /&gt;
&lt;br /&gt;
implementation process&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Cucumber'''&lt;br /&gt;
Cucumber is used with TDD and BDD within other testing frameworks such as RSpec by letting software development teams describe how &lt;br /&gt;
&lt;br /&gt;
software should behave in plain text. The text is written in a business-readable domain-specific language and serves as &lt;br /&gt;
&lt;br /&gt;
documentation, automated tests and development-aid - all rolled into one format.&lt;br /&gt;
&lt;br /&gt;
[http://cukes.info/]&lt;br /&gt;
The link provides a detail decription, definition, and examples of Cucumber implementation best practices and supported &lt;br /&gt;
&lt;br /&gt;
frameworks.&lt;br /&gt;
&lt;br /&gt;
'''Cucumber Example:'''&lt;br /&gt;
Scenario: See all vendors&lt;br /&gt;
    Given I am logged in as a user in the administrator role&lt;br /&gt;
    And There are 3 vendors&lt;br /&gt;
    When I go to the manage vendors page&lt;br /&gt;
    Then I should see the first 3 vendor names&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Shoulda''' &lt;br /&gt;
An extension to Test::Unit with additional helpers, macros, and assertions.&lt;br /&gt;
 &lt;br /&gt;
[http://www.thoughtbot.com/projects/shoulda]&lt;br /&gt;
The link provides a more conclusive definition of Shoulda along with installation facts and working examples of the Shoulda &lt;br /&gt;
&lt;br /&gt;
testing framework within Ruby's built in Test::Unit&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== BDD: Behavior Driven Development ==&lt;br /&gt;
	[http://eggsonbread.com/2009/07/22/behavior-driven-development-in-a-nutshell/]&lt;br /&gt;
Behavior driven development was born from the concepts behind the implementation of TDD.  It brings together strands from &lt;br /&gt;
&lt;br /&gt;
TestDrivenDevelopment and DomainDrivenDesign into an integrated whole, making the relationship between these two powerful &lt;br /&gt;
&lt;br /&gt;
approaches to software development more evident.  Most test driven development testing frameworks such as RSpec and Cucumber also support behavior driven development testing. &lt;br /&gt;
&lt;br /&gt;
[http://behaviour-driven.org/]&lt;br /&gt;
The link supports BDDs definition with additional links to more viable behavior driven development resources.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Other Test Tool Resources'''&lt;br /&gt;
&lt;br /&gt;
''Watir''&lt;br /&gt;
Watir is an open-source library for automating web browsers. It allows you to write tests that are easy to read and maintain. It &lt;br /&gt;
&lt;br /&gt;
is simple and flexible.  &lt;br /&gt;
&lt;br /&gt;
[http://wtr.rubyforge.org/]&lt;br /&gt;
The link provides an overview of Watir with installation specifications, examples, and supported platforms&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''NullDB'' - [http://avdi.org/projects/nulldb/]&lt;br /&gt;
a way to speed up testing by avoiding database use.&lt;br /&gt;
&lt;br /&gt;
''Bleakhouse:'' memory leak detection&lt;br /&gt;
http://www.rubyinside.com/bleakhouse-tool-to-find-memory-leaks-in-your-rails-applications-470.html&lt;br /&gt;
The links gives additional information on Bleakhouse profiling for memory leaks&lt;br /&gt;
&lt;br /&gt;
''ruby-debug'' &lt;br /&gt;
Other than the extensive use of breakpoints, ruby-debug provides Rails with a plug-in extending the functionality of Rails built in debugger. &lt;br /&gt;
&lt;br /&gt;
[http://rubyforge.org/softwaremap/trove_list.php?form_cat=47]&lt;br /&gt;
The link provides twenty debug resources available for RoR&lt;br /&gt;
&lt;br /&gt;
== '''Conclusion''' ==&lt;br /&gt;
&lt;br /&gt;
Rails is a very comprehensive development environment for Ruby with numerous extensions, plugins, and other resources outside of IDEs to strengthen the functionality of the open source web application framework.&lt;br /&gt;
&lt;br /&gt;
== Reference ==&lt;br /&gt;
&lt;br /&gt;
''All sources used to create this wiki are linked in the above text.''&lt;/div&gt;</summary>
		<author><name>Los Bravo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_team1&amp;diff=20786</id>
		<title>CSC/ECE 517 Fall 2009/wiki1b team1</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_team1&amp;diff=20786"/>
		<updated>2009-09-21T02:44:50Z</updated>

		<summary type="html">&lt;p&gt;Los Bravo: /* BDD: Behavior Driven Development */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;CSC/ECE 517 Fall 2009&lt;br /&gt;
&lt;br /&gt;
'''&lt;br /&gt;
== Resources for Rails (other than IDEs) ==&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
IDEs are a valuable resource for Rails development, however there are many other resources and tools&lt;br /&gt;
that can either replace or supplement IDEs.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Resources for Rails other than IDEs&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails API''''' - http://api.rubyonrails.org/&lt;br /&gt;
&lt;br /&gt;
	This site documents Rails files, classes and methods that can be used to build a Rails application.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Forum''''' - http://railsforum.com/&lt;br /&gt;
&lt;br /&gt;
	A discussion forum covering all aspects of Rails for beginners and experts including planning, &lt;br /&gt;
	programming, extensions and production.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Introducing Ruby on Rails''''' &lt;br /&gt;
&lt;br /&gt;
Part 1 http://www.softwaredeveloper.com/features/intro-to-ruby-on-rails-042507/&lt;br /&gt;
&lt;br /&gt;
Part 2 http://www.softwaredeveloper.com/features/intro-to-ruby-on-rails-part-two-043007/&lt;br /&gt;
&lt;br /&gt;
An excellent introduction to Rails for novices&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Installers'''&lt;br /&gt;
''&lt;br /&gt;
	&lt;br /&gt;
Windows: InstantRails - http://instantrails.rubyforge.org/wiki/wiki.pl&lt;br /&gt;
&lt;br /&gt;
		An all in one, single click installer for Windows that includes a Rails server.&lt;br /&gt;
&lt;br /&gt;
	Mac: Locomotive - http://locomotive.raaum.org/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Projects''''' - http://www.workingwithrails.com/&lt;br /&gt;
&lt;br /&gt;
	A Database of Rails projects, programmers and websites&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails plugins''''' - http://agilewebdevelopment.com/&lt;br /&gt;
&lt;br /&gt;
	A collection of Rails open source plugins, searchable by category or keyword.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Sample Rails''''' - http://snippets.dzone.com/tag/rails&lt;br /&gt;
&lt;br /&gt;
	A collection of Rails code snippets.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Agile Rails book''''' - http://www.amazon.com/gp/product/097669400X/002-0481267-8083260?v=glance&amp;amp;n=283155&lt;br /&gt;
&lt;br /&gt;
	An excellent resource for learning how to apply Agile programming concepts to Rails.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails cheatsheet''''' - http://www.blainekendall.com/uploads/RubyOnRails-Cheatsheet-BlaineKendall.pdf&lt;br /&gt;
&lt;br /&gt;
	One user's list of best practices, gotchas and quirks of developing with Rails.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails best practices''''' - http://www.therailsway.com/&lt;br /&gt;
&lt;br /&gt;
	An official best practices list for programming in Rails.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Advanced Rails''''' - http://webonrails.com/&lt;br /&gt;
&lt;br /&gt;
	A resource for the advanced Rails programmer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Blog''''' - http://weblog.rubyonrails.org/&lt;br /&gt;
&lt;br /&gt;
	An online community of updates about current happenings with the Rails platform.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Guides''''' - http://guides.rubyonrails.org/&lt;br /&gt;
&lt;br /&gt;
	An all in one resource for learning Rails including Howtos, security and contributing to the Rails community.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Authoring Rails plugins''''' - http://nubyonrails.com/articles/2006/05/04/the-complete-guide-to-rails-plugins-part-i&lt;br /&gt;
&lt;br /&gt;
	A complete guide to authoring your own Rails plugins.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
== '''Tools for Rails (other than IDEs)''' ==&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
'''Test Unit'''&lt;br /&gt;
The Rails stack uses Test::Unit, known as the default Ruby unit testing framework shipping with Ruby.  There are various plugins and extension that could be used with Rails built-in Test::Unit to extend its functionality for support of TDD and BDD testing practices.&lt;br /&gt;
&lt;br /&gt;
[http://wiki.rubyonrails.org/addons/testing]&lt;br /&gt;
The link provides additional information in the form of supporting resources, whitepapers, examples, and plug-in documentation&lt;br /&gt;
&lt;br /&gt;
'''Example'''&lt;br /&gt;
[http://wiki.rubyonrails.org/testing/test-unitrequire] &lt;br /&gt;
&lt;br /&gt;
 Image:class CalculatorTest &amp;lt; Test::Unit::TestCase &lt;br /&gt;
  def test_add_two_numbers_for_the_sum &lt;br /&gt;
    calculator = Calculator.new &lt;br /&gt;
    assert_equal 4, calculator.sum(2, 2)&lt;br /&gt;
  end &lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
== TDD: Test Driven Development ==&lt;br /&gt;
 	&lt;br /&gt;
Test Driven Development is a combination of refactoring and test first development, a form of development where the test is &lt;br /&gt;
&lt;br /&gt;
written prior to completed production code.  The goal of TDD is the specification of requirements and not the validation of &lt;br /&gt;
&lt;br /&gt;
requirements.  There are a few testing frameworks that are used to implement the TDD programming technique.  &lt;br /&gt;
&lt;br /&gt;
[http://ruby.about.com/b/2009/01/28/test-driven-development-with-rails.htm]&lt;br /&gt;
This link provides a comprehensive overview of test driven development practices and available resources for implementation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''RSpec'''&lt;br /&gt;
RSpec is a testing framework for Behavior Driven Development, complete with its own expectations, matchers and mocking and &lt;br /&gt;
&lt;br /&gt;
stubbing facilities. It goes along hand in hand with Cucumber, though it plays nicely with many other testing frameworks as well.&lt;br /&gt;
&lt;br /&gt;
'''Model Examples'''&lt;br /&gt;
These are the equivalent of unit tests in Rails’ built in testing. Ironically&lt;br /&gt;
(for the traditional TDD’er) these are the only specs that we feel should actually interact&lt;br /&gt;
with the database. Learn more ….&lt;br /&gt;
&lt;br /&gt;
'''Controller Examples'''&lt;br /&gt;
These align somewhat with functional tests in rails, except&lt;br /&gt;
that they do not actually render views (though you can force rendering of views&lt;br /&gt;
if you prefer). Instead of setting expectations about what goes on a page, you&lt;br /&gt;
set expectations about what templates get rendered. Learn more….&lt;br /&gt;
&lt;br /&gt;
'''View Examples'''&lt;br /&gt;
This is the other half of Rails’ functional testing. View specs allow&lt;br /&gt;
you to set up assigns (thanks to ZenTest). Learn more ….&lt;br /&gt;
&lt;br /&gt;
'''Helper Examples'''&lt;br /&gt;
let you specify directly methods that live in your helpers. Learn more ….&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://www.ibm.com/developerworks/web/library/wa-rspec/]&lt;br /&gt;
The link provides a brief overview of RSpec with a comprehensive series of examples and a conceptual view of Rpecs step by step &lt;br /&gt;
&lt;br /&gt;
implementation process&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Cucumber'''&lt;br /&gt;
Cucumber is used with TDD and BDD within other testing frameworks such as RSpec by letting software development teams describe how &lt;br /&gt;
&lt;br /&gt;
software should behave in plain text. The text is written in a business-readable domain-specific language and serves as &lt;br /&gt;
&lt;br /&gt;
documentation, automated tests and development-aid - all rolled into one format.&lt;br /&gt;
&lt;br /&gt;
[http://cukes.info/]&lt;br /&gt;
The link provides a detail decription, definition, and examples of Cucumber implementation best practices and supported &lt;br /&gt;
&lt;br /&gt;
frameworks.&lt;br /&gt;
&lt;br /&gt;
'''Cucumber Example:'''&lt;br /&gt;
Scenario: See all vendors&lt;br /&gt;
    Given I am logged in as a user in the administrator role&lt;br /&gt;
    And There are 3 vendors&lt;br /&gt;
    When I go to the manage vendors page&lt;br /&gt;
    Then I should see the first 3 vendor names&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Shoulda''' &lt;br /&gt;
An extension to Test::Unit with additional helpers, macros, and assertions.&lt;br /&gt;
 &lt;br /&gt;
[http://www.thoughtbot.com/projects/shoulda]&lt;br /&gt;
The link provides a more conclusive definition of Shoulda along with installation facts and working examples of the Shoulda &lt;br /&gt;
&lt;br /&gt;
testing framework within Ruby's built in Test::Unit&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== BDD: Behavior Driven Development ==&lt;br /&gt;
	[http://eggsonbread.com/2009/07/22/behavior-driven-development-in-a-nutshell/]&lt;br /&gt;
Behavior driven development was born from the concepts behind the implementation of TDD.  It brings together strands from &lt;br /&gt;
&lt;br /&gt;
TestDrivenDevelopment and DomainDrivenDesign into an integrated whole, making the relationship between these two powerful &lt;br /&gt;
&lt;br /&gt;
approaches to software development more evident.  Most test driven development testing frameworks such as RSpec and Cucumber also support behavior driven development testing. &lt;br /&gt;
&lt;br /&gt;
[http://behaviour-driven.org/]&lt;br /&gt;
The link supports BDDs definition with additional links to more viable behavior driven development resources.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Other Test Tool Resources'''&lt;br /&gt;
&lt;br /&gt;
''Watir''&lt;br /&gt;
Watir is an open-source library for automating web browsers. It allows you to write tests that are easy to read and maintain. It &lt;br /&gt;
&lt;br /&gt;
is simple and flexible.  &lt;br /&gt;
&lt;br /&gt;
[http://wtr.rubyforge.org/]&lt;br /&gt;
The link provides an overview of Watir with installation specifications, examples, and supported platforms&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''NullDB'' - [http://avdi.org/projects/nulldb/]&lt;br /&gt;
a way to speed up testing by avoiding database use.&lt;br /&gt;
&lt;br /&gt;
''Bleakhouse:'' memory leak detection&lt;br /&gt;
http://www.rubyinside.com/bleakhouse-tool-to-find-memory-leaks-in-your-rails-applications-470.html&lt;br /&gt;
The links gives additional information on Bleakhouse profiling for memory leaks&lt;br /&gt;
&lt;br /&gt;
''ruby-debug'' &lt;br /&gt;
Other than the extensive use of breakpoints, ruby-debug provides Rails with a plug-in extending the functionality of Rails built in debugger. &lt;br /&gt;
&lt;br /&gt;
[http://rubyforge.org/softwaremap/trove_list.php?form_cat=47]&lt;br /&gt;
The link provides twenty debug resources available for RoR&lt;br /&gt;
&lt;br /&gt;
== '''Conclusion''' ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Reference ==&lt;br /&gt;
&lt;br /&gt;
''All sources used to create this wiki are linked in the above text.''&lt;/div&gt;</summary>
		<author><name>Los Bravo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_team1&amp;diff=20772</id>
		<title>CSC/ECE 517 Fall 2009/wiki1b team1</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_team1&amp;diff=20772"/>
		<updated>2009-09-21T02:37:34Z</updated>

		<summary type="html">&lt;p&gt;Los Bravo: /* BDD: Behavior Driven Development */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;CSC/ECE 517 Fall 2009&lt;br /&gt;
&lt;br /&gt;
'''&lt;br /&gt;
== Resources for Rails (other than IDEs) ==&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
IDEs are a valuable resource for Rails development, however there are many other resources and tools&lt;br /&gt;
that can either replace or supplement IDEs.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Resources for Rails other than IDEs&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails API''''' - http://api.rubyonrails.org/&lt;br /&gt;
&lt;br /&gt;
	This site documents Rails files, classes and methods that can be used to build a Rails application.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Forum''''' - http://railsforum.com/&lt;br /&gt;
&lt;br /&gt;
	A discussion forum covering all aspects of Rails for beginners and experts including planning, &lt;br /&gt;
	programming, extensions and production.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Introducing Ruby on Rails''''' &lt;br /&gt;
&lt;br /&gt;
Part 1 http://www.softwaredeveloper.com/features/intro-to-ruby-on-rails-042507/&lt;br /&gt;
&lt;br /&gt;
Part 2 http://www.softwaredeveloper.com/features/intro-to-ruby-on-rails-part-two-043007/&lt;br /&gt;
&lt;br /&gt;
An excellent introduction to Rails for novices&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Installers'''&lt;br /&gt;
''&lt;br /&gt;
	&lt;br /&gt;
Windows: InstantRails - http://instantrails.rubyforge.org/wiki/wiki.pl&lt;br /&gt;
&lt;br /&gt;
		An all in one, single click installer for Windows that includes a Rails server.&lt;br /&gt;
&lt;br /&gt;
	Mac: Locomotive - http://locomotive.raaum.org/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Projects''''' - http://www.workingwithrails.com/&lt;br /&gt;
&lt;br /&gt;
	A Database of Rails projects, programmers and websites&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails plugins''''' - http://agilewebdevelopment.com/&lt;br /&gt;
&lt;br /&gt;
	A collection of Rails open source plugins, searchable by category or keyword.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Sample Rails''''' - http://snippets.dzone.com/tag/rails&lt;br /&gt;
&lt;br /&gt;
	A collection of Rails code snippets.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Agile Rails book''''' - http://www.amazon.com/gp/product/097669400X/002-0481267-8083260?v=glance&amp;amp;n=283155&lt;br /&gt;
&lt;br /&gt;
	An excellent resource for learning how to apply Agile programming concepts to Rails.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails cheatsheet''''' - http://www.blainekendall.com/uploads/RubyOnRails-Cheatsheet-BlaineKendall.pdf&lt;br /&gt;
&lt;br /&gt;
	One user's list of best practices, gotchas and quirks of developing with Rails.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails best practices''''' - http://www.therailsway.com/&lt;br /&gt;
&lt;br /&gt;
	An official best practices list for programming in Rails.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Advanced Rails''''' - http://webonrails.com/&lt;br /&gt;
&lt;br /&gt;
	A resource for the advanced Rails programmer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Blog''''' - http://weblog.rubyonrails.org/&lt;br /&gt;
&lt;br /&gt;
	An online community of updates about current happenings with the Rails platform.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Guides''''' - http://guides.rubyonrails.org/&lt;br /&gt;
&lt;br /&gt;
	An all in one resource for learning Rails including Howtos, security and contributing to the Rails community.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Authoring Rails plugins''''' - http://nubyonrails.com/articles/2006/05/04/the-complete-guide-to-rails-plugins-part-i&lt;br /&gt;
&lt;br /&gt;
	A complete guide to authoring your own Rails plugins.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
== '''Tools for Rails (other than IDEs)''' ==&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
'''Test Unit'''&lt;br /&gt;
The Rails stack uses Test::Unit, known as the default Ruby unit testing framework shipping with Ruby.  There are various plugins and extension that could be used with Rails built-in Test::Unit to extend its functionality for support of TDD and BDD testing practices.&lt;br /&gt;
&lt;br /&gt;
[http://wiki.rubyonrails.org/addons/testing]&lt;br /&gt;
The link provides additional information in the form of supporting resources, whitepapers, examples, and plug-in documentation&lt;br /&gt;
&lt;br /&gt;
'''Example'''&lt;br /&gt;
[http://wiki.rubyonrails.org/testing/test-unitrequire] &lt;br /&gt;
&lt;br /&gt;
 Image:class CalculatorTest &amp;lt; Test::Unit::TestCase &lt;br /&gt;
  def test_add_two_numbers_for_the_sum &lt;br /&gt;
    calculator = Calculator.new &lt;br /&gt;
    assert_equal 4, calculator.sum(2, 2)&lt;br /&gt;
  end &lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
== TDD: Test Driven Development ==&lt;br /&gt;
 	&lt;br /&gt;
Test Driven Development is a combination of refactoring and test first development, a form of development where the test is &lt;br /&gt;
&lt;br /&gt;
written prior to completed production code.  The goal of TDD is the specification of requirements and not the validation of &lt;br /&gt;
&lt;br /&gt;
requirements.  There are a few testing frameworks that are used to implement the TDD programming technique.  &lt;br /&gt;
&lt;br /&gt;
[http://ruby.about.com/b/2009/01/28/test-driven-development-with-rails.htm]&lt;br /&gt;
This link provides a comprehensive overview of test driven development practices and available resources for implementation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''RSpec'''&lt;br /&gt;
RSpec is a testing framework for Behavior Driven Development, complete with its own expectations, matchers and mocking and &lt;br /&gt;
&lt;br /&gt;
stubbing facilities. It goes along hand in hand with Cucumber, though it plays nicely with many other testing frameworks as well.&lt;br /&gt;
&lt;br /&gt;
'''Model Examples'''&lt;br /&gt;
These are the equivalent of unit tests in Rails’ built in testing. Ironically&lt;br /&gt;
(for the traditional TDD’er) these are the only specs that we feel should actually interact&lt;br /&gt;
with the database. Learn more ….&lt;br /&gt;
&lt;br /&gt;
'''Controller Examples'''&lt;br /&gt;
These align somewhat with functional tests in rails, except&lt;br /&gt;
that they do not actually render views (though you can force rendering of views&lt;br /&gt;
if you prefer). Instead of setting expectations about what goes on a page, you&lt;br /&gt;
set expectations about what templates get rendered. Learn more….&lt;br /&gt;
&lt;br /&gt;
'''View Examples'''&lt;br /&gt;
This is the other half of Rails’ functional testing. View specs allow&lt;br /&gt;
you to set up assigns (thanks to ZenTest). Learn more ….&lt;br /&gt;
&lt;br /&gt;
'''Helper Examples'''&lt;br /&gt;
let you specify directly methods that live in your helpers. Learn more ….&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://www.ibm.com/developerworks/web/library/wa-rspec/]&lt;br /&gt;
The link provides a brief overview of RSpec with a comprehensive series of examples and a conceptual view of Rpecs step by step &lt;br /&gt;
&lt;br /&gt;
implementation process&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Cucumber'''&lt;br /&gt;
Cucumber is used with TDD and BDD within other testing frameworks such as RSpec by letting software development teams describe how &lt;br /&gt;
&lt;br /&gt;
software should behave in plain text. The text is written in a business-readable domain-specific language and serves as &lt;br /&gt;
&lt;br /&gt;
documentation, automated tests and development-aid - all rolled into one format.&lt;br /&gt;
&lt;br /&gt;
[http://cukes.info/]&lt;br /&gt;
The link provides a detail decription, definition, and examples of Cucumber implementation best practices and supported &lt;br /&gt;
&lt;br /&gt;
frameworks.&lt;br /&gt;
&lt;br /&gt;
'''Cucumber Example:'''&lt;br /&gt;
Scenario: See all vendors&lt;br /&gt;
    Given I am logged in as a user in the administrator role&lt;br /&gt;
    And There are 3 vendors&lt;br /&gt;
    When I go to the manage vendors page&lt;br /&gt;
    Then I should see the first 3 vendor names&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Shoulda''' &lt;br /&gt;
An extension to Test::Unit with additional helpers, macros, and assertions.&lt;br /&gt;
 &lt;br /&gt;
[http://www.thoughtbot.com/projects/shoulda]&lt;br /&gt;
The link provides a more conclusive definition of Shoulda along with installation facts and working examples of the Shoulda &lt;br /&gt;
&lt;br /&gt;
testing framework within Ruby's built in Test::Unit&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== BDD: Behavior Driven Development ==&lt;br /&gt;
	[http://eggsonbread.com/2009/07/22/behavior-driven-development-in-a-nutshell/]&lt;br /&gt;
Behavior driven development was born from the concepts behind the implementation of TDD.  It brings together strands from &lt;br /&gt;
&lt;br /&gt;
TestDrivenDevelopment and DomainDrivenDesign into an integrated whole, making the relationship between these two powerful &lt;br /&gt;
&lt;br /&gt;
approaches to software development more evident.  Most test driven development testing frameworks such as RSpec and Cucumber also support behavior driven development testing. &lt;br /&gt;
&lt;br /&gt;
[http://behaviour-driven.org/]&lt;br /&gt;
The link supports BDDs definition with additional links to more viable behavior driven development resources.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Other Test Tool Resources'''&lt;br /&gt;
&lt;br /&gt;
''Watir''&lt;br /&gt;
Watir is an open-source library for automating web browsers. It allows you to write tests that are easy to read and maintain. It &lt;br /&gt;
&lt;br /&gt;
is simple and flexible.&lt;br /&gt;
&lt;br /&gt;
[http://wtr.rubyforge.org/]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''NullDB'' - [http://avdi.org/projects/nulldb/]&lt;br /&gt;
a way to speed up testing by avoiding database use.&lt;br /&gt;
&lt;br /&gt;
''Bleakhouse:'' memory leak detection&lt;br /&gt;
&lt;br /&gt;
''ruby-debug'' &lt;br /&gt;
Other than the extensive use of breakpoints, ruby-debug provides Rails with a plug-in extending the functionality of Rails built in debugger. &lt;br /&gt;
&lt;br /&gt;
[http://rubyforge.org/softwaremap/trove_list.php?form_cat=47]&lt;br /&gt;
The link provides twenty debug resources available for RoR&lt;br /&gt;
&lt;br /&gt;
== '''Conclusion''' ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Reference ==&lt;br /&gt;
&lt;br /&gt;
''All sources used to create this wiki are linked in the above text.''&lt;/div&gt;</summary>
		<author><name>Los Bravo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_team1&amp;diff=20770</id>
		<title>CSC/ECE 517 Fall 2009/wiki1b team1</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_team1&amp;diff=20770"/>
		<updated>2009-09-21T02:36:21Z</updated>

		<summary type="html">&lt;p&gt;Los Bravo: /* Reference */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;CSC/ECE 517 Fall 2009&lt;br /&gt;
&lt;br /&gt;
'''&lt;br /&gt;
== Resources for Rails (other than IDEs) ==&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
IDEs are a valuable resource for Rails development, however there are many other resources and tools&lt;br /&gt;
that can either replace or supplement IDEs.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Resources for Rails other than IDEs&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails API''''' - http://api.rubyonrails.org/&lt;br /&gt;
&lt;br /&gt;
	This site documents Rails files, classes and methods that can be used to build a Rails application.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Forum''''' - http://railsforum.com/&lt;br /&gt;
&lt;br /&gt;
	A discussion forum covering all aspects of Rails for beginners and experts including planning, &lt;br /&gt;
	programming, extensions and production.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Introducing Ruby on Rails''''' &lt;br /&gt;
&lt;br /&gt;
Part 1 http://www.softwaredeveloper.com/features/intro-to-ruby-on-rails-042507/&lt;br /&gt;
&lt;br /&gt;
Part 2 http://www.softwaredeveloper.com/features/intro-to-ruby-on-rails-part-two-043007/&lt;br /&gt;
&lt;br /&gt;
An excellent introduction to Rails for novices&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Installers'''&lt;br /&gt;
''&lt;br /&gt;
	&lt;br /&gt;
Windows: InstantRails - http://instantrails.rubyforge.org/wiki/wiki.pl&lt;br /&gt;
&lt;br /&gt;
		An all in one, single click installer for Windows that includes a Rails server.&lt;br /&gt;
&lt;br /&gt;
	Mac: Locomotive - http://locomotive.raaum.org/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Projects''''' - http://www.workingwithrails.com/&lt;br /&gt;
&lt;br /&gt;
	A Database of Rails projects, programmers and websites&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails plugins''''' - http://agilewebdevelopment.com/&lt;br /&gt;
&lt;br /&gt;
	A collection of Rails open source plugins, searchable by category or keyword.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Sample Rails''''' - http://snippets.dzone.com/tag/rails&lt;br /&gt;
&lt;br /&gt;
	A collection of Rails code snippets.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Agile Rails book''''' - http://www.amazon.com/gp/product/097669400X/002-0481267-8083260?v=glance&amp;amp;n=283155&lt;br /&gt;
&lt;br /&gt;
	An excellent resource for learning how to apply Agile programming concepts to Rails.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails cheatsheet''''' - http://www.blainekendall.com/uploads/RubyOnRails-Cheatsheet-BlaineKendall.pdf&lt;br /&gt;
&lt;br /&gt;
	One user's list of best practices, gotchas and quirks of developing with Rails.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails best practices''''' - http://www.therailsway.com/&lt;br /&gt;
&lt;br /&gt;
	An official best practices list for programming in Rails.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Advanced Rails''''' - http://webonrails.com/&lt;br /&gt;
&lt;br /&gt;
	A resource for the advanced Rails programmer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Blog''''' - http://weblog.rubyonrails.org/&lt;br /&gt;
&lt;br /&gt;
	An online community of updates about current happenings with the Rails platform.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Guides''''' - http://guides.rubyonrails.org/&lt;br /&gt;
&lt;br /&gt;
	An all in one resource for learning Rails including Howtos, security and contributing to the Rails community.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Authoring Rails plugins''''' - http://nubyonrails.com/articles/2006/05/04/the-complete-guide-to-rails-plugins-part-i&lt;br /&gt;
&lt;br /&gt;
	A complete guide to authoring your own Rails plugins.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
== '''Tools for Rails (other than IDEs)''' ==&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
'''Test Unit'''&lt;br /&gt;
The Rails stack uses Test::Unit, known as the default Ruby unit testing framework shipping with Ruby.  There are various plugins and extension that could be used with Rails built-in Test::Unit to extend its functionality for support of TDD and BDD testing practices.&lt;br /&gt;
&lt;br /&gt;
[http://wiki.rubyonrails.org/addons/testing]&lt;br /&gt;
The link provides additional information in the form of supporting resources, whitepapers, examples, and plug-in documentation&lt;br /&gt;
&lt;br /&gt;
'''Example'''&lt;br /&gt;
[http://wiki.rubyonrails.org/testing/test-unitrequire] &lt;br /&gt;
&lt;br /&gt;
 Image:class CalculatorTest &amp;lt; Test::Unit::TestCase &lt;br /&gt;
  def test_add_two_numbers_for_the_sum &lt;br /&gt;
    calculator = Calculator.new &lt;br /&gt;
    assert_equal 4, calculator.sum(2, 2)&lt;br /&gt;
  end &lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
== TDD: Test Driven Development ==&lt;br /&gt;
 	&lt;br /&gt;
Test Driven Development is a combination of refactoring and test first development, a form of development where the test is &lt;br /&gt;
&lt;br /&gt;
written prior to completed production code.  The goal of TDD is the specification of requirements and not the validation of &lt;br /&gt;
&lt;br /&gt;
requirements.  There are a few testing frameworks that are used to implement the TDD programming technique.  &lt;br /&gt;
&lt;br /&gt;
[http://ruby.about.com/b/2009/01/28/test-driven-development-with-rails.htm]&lt;br /&gt;
This link provides a comprehensive overview of test driven development practices and available resources for implementation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''RSpec'''&lt;br /&gt;
RSpec is a testing framework for Behavior Driven Development, complete with its own expectations, matchers and mocking and &lt;br /&gt;
&lt;br /&gt;
stubbing facilities. It goes along hand in hand with Cucumber, though it plays nicely with many other testing frameworks as well.&lt;br /&gt;
&lt;br /&gt;
'''Model Examples'''&lt;br /&gt;
These are the equivalent of unit tests in Rails’ built in testing. Ironically&lt;br /&gt;
(for the traditional TDD’er) these are the only specs that we feel should actually interact&lt;br /&gt;
with the database. Learn more ….&lt;br /&gt;
&lt;br /&gt;
'''Controller Examples'''&lt;br /&gt;
These align somewhat with functional tests in rails, except&lt;br /&gt;
that they do not actually render views (though you can force rendering of views&lt;br /&gt;
if you prefer). Instead of setting expectations about what goes on a page, you&lt;br /&gt;
set expectations about what templates get rendered. Learn more….&lt;br /&gt;
&lt;br /&gt;
'''View Examples'''&lt;br /&gt;
This is the other half of Rails’ functional testing. View specs allow&lt;br /&gt;
you to set up assigns (thanks to ZenTest). Learn more ….&lt;br /&gt;
&lt;br /&gt;
'''Helper Examples'''&lt;br /&gt;
let you specify directly methods that live in your helpers. Learn more ….&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://www.ibm.com/developerworks/web/library/wa-rspec/]&lt;br /&gt;
The link provides a brief overview of RSpec with a comprehensive series of examples and a conceptual view of Rpecs step by step &lt;br /&gt;
&lt;br /&gt;
implementation process&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Cucumber'''&lt;br /&gt;
Cucumber is used with TDD and BDD within other testing frameworks such as RSpec by letting software development teams describe how &lt;br /&gt;
&lt;br /&gt;
software should behave in plain text. The text is written in a business-readable domain-specific language and serves as &lt;br /&gt;
&lt;br /&gt;
documentation, automated tests and development-aid - all rolled into one format.&lt;br /&gt;
&lt;br /&gt;
[http://cukes.info/]&lt;br /&gt;
The link provides a detail decription, definition, and examples of Cucumber implementation best practices and supported &lt;br /&gt;
&lt;br /&gt;
frameworks.&lt;br /&gt;
&lt;br /&gt;
'''Cucumber Example:'''&lt;br /&gt;
Scenario: See all vendors&lt;br /&gt;
    Given I am logged in as a user in the administrator role&lt;br /&gt;
    And There are 3 vendors&lt;br /&gt;
    When I go to the manage vendors page&lt;br /&gt;
    Then I should see the first 3 vendor names&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Shoulda''' &lt;br /&gt;
An extension to Test::Unit with additional helpers, macros, and assertions.&lt;br /&gt;
 &lt;br /&gt;
[http://www.thoughtbot.com/projects/shoulda]&lt;br /&gt;
The link provides a more conclusive definition of Shoulda along with installation facts and working examples of the Shoulda &lt;br /&gt;
&lt;br /&gt;
testing framework within Ruby's built in Test::Unit&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== BDD: Behavior Driven Development ==&lt;br /&gt;
	[http://eggsonbread.com/2009/07/22/behavior-driven-development-in-a-nutshell/]&lt;br /&gt;
Behavior driven development was born from the concepts behind the implementation of TDD.  It brings together strands from &lt;br /&gt;
&lt;br /&gt;
TestDrivenDevelopment and DomainDrivenDesign into an integrated whole, making the relationship between these two powerful &lt;br /&gt;
&lt;br /&gt;
approaches to software development more evident.  Most test driven development testing frameworks such as RSpec and Cucumber also support behavior driven development testing. &lt;br /&gt;
&lt;br /&gt;
[http://behaviour-driven.org/]&lt;br /&gt;
The link supports BDDs definition with additional links to more viable behavior driven development resources.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Other Test Tool Resources'''&lt;br /&gt;
Watir&lt;br /&gt;
Watir is an open-source library for automating web browsers. It allows you to write tests that are easy to read and maintain. It &lt;br /&gt;
&lt;br /&gt;
is simple and flexible.&lt;br /&gt;
&lt;br /&gt;
[http://wtr.rubyforge.org/]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''NullDB''' - [http://avdi.org/projects/nulldb/]&lt;br /&gt;
a way to speed up testing by avoiding database use.&lt;br /&gt;
&lt;br /&gt;
'''Bleakhouse:''' memory leak detection&lt;br /&gt;
&lt;br /&gt;
'''ruby-debug''' &lt;br /&gt;
Other than the extensive use of breakpoints, ruby-debug provides Rails with a plug-in extending the functionality of Rails built in debugger. &lt;br /&gt;
&lt;br /&gt;
[http://rubyforge.org/softwaremap/trove_list.php?form_cat=47]&lt;br /&gt;
The link provides twenty debug resources available for RoR&lt;br /&gt;
&lt;br /&gt;
== '''Conclusion''' ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Reference ==&lt;br /&gt;
&lt;br /&gt;
''All sources used to create this wiki are linked in the above text.''&lt;/div&gt;</summary>
		<author><name>Los Bravo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_team1&amp;diff=20768</id>
		<title>CSC/ECE 517 Fall 2009/wiki1b team1</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_team1&amp;diff=20768"/>
		<updated>2009-09-21T02:35:54Z</updated>

		<summary type="html">&lt;p&gt;Los Bravo: /* BDD: Behavior Driven Development */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;CSC/ECE 517 Fall 2009&lt;br /&gt;
&lt;br /&gt;
'''&lt;br /&gt;
== Resources for Rails (other than IDEs) ==&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
IDEs are a valuable resource for Rails development, however there are many other resources and tools&lt;br /&gt;
that can either replace or supplement IDEs.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Resources for Rails other than IDEs&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails API''''' - http://api.rubyonrails.org/&lt;br /&gt;
&lt;br /&gt;
	This site documents Rails files, classes and methods that can be used to build a Rails application.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Forum''''' - http://railsforum.com/&lt;br /&gt;
&lt;br /&gt;
	A discussion forum covering all aspects of Rails for beginners and experts including planning, &lt;br /&gt;
	programming, extensions and production.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Introducing Ruby on Rails''''' &lt;br /&gt;
&lt;br /&gt;
Part 1 http://www.softwaredeveloper.com/features/intro-to-ruby-on-rails-042507/&lt;br /&gt;
&lt;br /&gt;
Part 2 http://www.softwaredeveloper.com/features/intro-to-ruby-on-rails-part-two-043007/&lt;br /&gt;
&lt;br /&gt;
An excellent introduction to Rails for novices&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Installers'''&lt;br /&gt;
''&lt;br /&gt;
	&lt;br /&gt;
Windows: InstantRails - http://instantrails.rubyforge.org/wiki/wiki.pl&lt;br /&gt;
&lt;br /&gt;
		An all in one, single click installer for Windows that includes a Rails server.&lt;br /&gt;
&lt;br /&gt;
	Mac: Locomotive - http://locomotive.raaum.org/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Projects''''' - http://www.workingwithrails.com/&lt;br /&gt;
&lt;br /&gt;
	A Database of Rails projects, programmers and websites&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails plugins''''' - http://agilewebdevelopment.com/&lt;br /&gt;
&lt;br /&gt;
	A collection of Rails open source plugins, searchable by category or keyword.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Sample Rails''''' - http://snippets.dzone.com/tag/rails&lt;br /&gt;
&lt;br /&gt;
	A collection of Rails code snippets.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Agile Rails book''''' - http://www.amazon.com/gp/product/097669400X/002-0481267-8083260?v=glance&amp;amp;n=283155&lt;br /&gt;
&lt;br /&gt;
	An excellent resource for learning how to apply Agile programming concepts to Rails.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails cheatsheet''''' - http://www.blainekendall.com/uploads/RubyOnRails-Cheatsheet-BlaineKendall.pdf&lt;br /&gt;
&lt;br /&gt;
	One user's list of best practices, gotchas and quirks of developing with Rails.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails best practices''''' - http://www.therailsway.com/&lt;br /&gt;
&lt;br /&gt;
	An official best practices list for programming in Rails.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Advanced Rails''''' - http://webonrails.com/&lt;br /&gt;
&lt;br /&gt;
	A resource for the advanced Rails programmer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Blog''''' - http://weblog.rubyonrails.org/&lt;br /&gt;
&lt;br /&gt;
	An online community of updates about current happenings with the Rails platform.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Guides''''' - http://guides.rubyonrails.org/&lt;br /&gt;
&lt;br /&gt;
	An all in one resource for learning Rails including Howtos, security and contributing to the Rails community.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Authoring Rails plugins''''' - http://nubyonrails.com/articles/2006/05/04/the-complete-guide-to-rails-plugins-part-i&lt;br /&gt;
&lt;br /&gt;
	A complete guide to authoring your own Rails plugins.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
== '''Tools for Rails (other than IDEs)''' ==&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
'''Test Unit'''&lt;br /&gt;
The Rails stack uses Test::Unit, known as the default Ruby unit testing framework shipping with Ruby.  There are various plugins and extension that could be used with Rails built-in Test::Unit to extend its functionality for support of TDD and BDD testing practices.&lt;br /&gt;
&lt;br /&gt;
[http://wiki.rubyonrails.org/addons/testing]&lt;br /&gt;
The link provides additional information in the form of supporting resources, whitepapers, examples, and plug-in documentation&lt;br /&gt;
&lt;br /&gt;
'''Example'''&lt;br /&gt;
[http://wiki.rubyonrails.org/testing/test-unitrequire] &lt;br /&gt;
&lt;br /&gt;
 Image:class CalculatorTest &amp;lt; Test::Unit::TestCase &lt;br /&gt;
  def test_add_two_numbers_for_the_sum &lt;br /&gt;
    calculator = Calculator.new &lt;br /&gt;
    assert_equal 4, calculator.sum(2, 2)&lt;br /&gt;
  end &lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
== TDD: Test Driven Development ==&lt;br /&gt;
 	&lt;br /&gt;
Test Driven Development is a combination of refactoring and test first development, a form of development where the test is &lt;br /&gt;
&lt;br /&gt;
written prior to completed production code.  The goal of TDD is the specification of requirements and not the validation of &lt;br /&gt;
&lt;br /&gt;
requirements.  There are a few testing frameworks that are used to implement the TDD programming technique.  &lt;br /&gt;
&lt;br /&gt;
[http://ruby.about.com/b/2009/01/28/test-driven-development-with-rails.htm]&lt;br /&gt;
This link provides a comprehensive overview of test driven development practices and available resources for implementation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''RSpec'''&lt;br /&gt;
RSpec is a testing framework for Behavior Driven Development, complete with its own expectations, matchers and mocking and &lt;br /&gt;
&lt;br /&gt;
stubbing facilities. It goes along hand in hand with Cucumber, though it plays nicely with many other testing frameworks as well.&lt;br /&gt;
&lt;br /&gt;
'''Model Examples'''&lt;br /&gt;
These are the equivalent of unit tests in Rails’ built in testing. Ironically&lt;br /&gt;
(for the traditional TDD’er) these are the only specs that we feel should actually interact&lt;br /&gt;
with the database. Learn more ….&lt;br /&gt;
&lt;br /&gt;
'''Controller Examples'''&lt;br /&gt;
These align somewhat with functional tests in rails, except&lt;br /&gt;
that they do not actually render views (though you can force rendering of views&lt;br /&gt;
if you prefer). Instead of setting expectations about what goes on a page, you&lt;br /&gt;
set expectations about what templates get rendered. Learn more….&lt;br /&gt;
&lt;br /&gt;
'''View Examples'''&lt;br /&gt;
This is the other half of Rails’ functional testing. View specs allow&lt;br /&gt;
you to set up assigns (thanks to ZenTest). Learn more ….&lt;br /&gt;
&lt;br /&gt;
'''Helper Examples'''&lt;br /&gt;
let you specify directly methods that live in your helpers. Learn more ….&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://www.ibm.com/developerworks/web/library/wa-rspec/]&lt;br /&gt;
The link provides a brief overview of RSpec with a comprehensive series of examples and a conceptual view of Rpecs step by step &lt;br /&gt;
&lt;br /&gt;
implementation process&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Cucumber'''&lt;br /&gt;
Cucumber is used with TDD and BDD within other testing frameworks such as RSpec by letting software development teams describe how &lt;br /&gt;
&lt;br /&gt;
software should behave in plain text. The text is written in a business-readable domain-specific language and serves as &lt;br /&gt;
&lt;br /&gt;
documentation, automated tests and development-aid - all rolled into one format.&lt;br /&gt;
&lt;br /&gt;
[http://cukes.info/]&lt;br /&gt;
The link provides a detail decription, definition, and examples of Cucumber implementation best practices and supported &lt;br /&gt;
&lt;br /&gt;
frameworks.&lt;br /&gt;
&lt;br /&gt;
'''Cucumber Example:'''&lt;br /&gt;
Scenario: See all vendors&lt;br /&gt;
    Given I am logged in as a user in the administrator role&lt;br /&gt;
    And There are 3 vendors&lt;br /&gt;
    When I go to the manage vendors page&lt;br /&gt;
    Then I should see the first 3 vendor names&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Shoulda''' &lt;br /&gt;
An extension to Test::Unit with additional helpers, macros, and assertions.&lt;br /&gt;
 &lt;br /&gt;
[http://www.thoughtbot.com/projects/shoulda]&lt;br /&gt;
The link provides a more conclusive definition of Shoulda along with installation facts and working examples of the Shoulda &lt;br /&gt;
&lt;br /&gt;
testing framework within Ruby's built in Test::Unit&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== BDD: Behavior Driven Development ==&lt;br /&gt;
	[http://eggsonbread.com/2009/07/22/behavior-driven-development-in-a-nutshell/]&lt;br /&gt;
Behavior driven development was born from the concepts behind the implementation of TDD.  It brings together strands from &lt;br /&gt;
&lt;br /&gt;
TestDrivenDevelopment and DomainDrivenDesign into an integrated whole, making the relationship between these two powerful &lt;br /&gt;
&lt;br /&gt;
approaches to software development more evident.  Most test driven development testing frameworks such as RSpec and Cucumber also support behavior driven development testing. &lt;br /&gt;
&lt;br /&gt;
[http://behaviour-driven.org/]&lt;br /&gt;
The link supports BDDs definition with additional links to more viable behavior driven development resources.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Other Test Tool Resources'''&lt;br /&gt;
Watir&lt;br /&gt;
Watir is an open-source library for automating web browsers. It allows you to write tests that are easy to read and maintain. It &lt;br /&gt;
&lt;br /&gt;
is simple and flexible.&lt;br /&gt;
&lt;br /&gt;
[http://wtr.rubyforge.org/]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''NullDB''' - [http://avdi.org/projects/nulldb/]&lt;br /&gt;
a way to speed up testing by avoiding database use.&lt;br /&gt;
&lt;br /&gt;
'''Bleakhouse:''' memory leak detection&lt;br /&gt;
&lt;br /&gt;
'''ruby-debug''' &lt;br /&gt;
Other than the extensive use of breakpoints, ruby-debug provides Rails with a plug-in extending the functionality of Rails built in debugger. &lt;br /&gt;
&lt;br /&gt;
[http://rubyforge.org/softwaremap/trove_list.php?form_cat=47]&lt;br /&gt;
The link provides twenty debug resources available for RoR&lt;br /&gt;
&lt;br /&gt;
== '''Conclusion''' ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Reference ==&lt;br /&gt;
&lt;br /&gt;
All sources used to create this wiki are linked in the above text.&lt;/div&gt;</summary>
		<author><name>Los Bravo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_team1&amp;diff=20766</id>
		<title>CSC/ECE 517 Fall 2009/wiki1b team1</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_team1&amp;diff=20766"/>
		<updated>2009-09-21T02:34:19Z</updated>

		<summary type="html">&lt;p&gt;Los Bravo: /* '''Reference''' */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;CSC/ECE 517 Fall 2009&lt;br /&gt;
&lt;br /&gt;
'''&lt;br /&gt;
== Resources for Rails (other than IDEs) ==&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
IDEs are a valuable resource for Rails development, however there are many other resources and tools&lt;br /&gt;
that can either replace or supplement IDEs.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Resources for Rails other than IDEs&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails API''''' - http://api.rubyonrails.org/&lt;br /&gt;
&lt;br /&gt;
	This site documents Rails files, classes and methods that can be used to build a Rails application.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Forum''''' - http://railsforum.com/&lt;br /&gt;
&lt;br /&gt;
	A discussion forum covering all aspects of Rails for beginners and experts including planning, &lt;br /&gt;
	programming, extensions and production.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Introducing Ruby on Rails''''' &lt;br /&gt;
&lt;br /&gt;
Part 1 http://www.softwaredeveloper.com/features/intro-to-ruby-on-rails-042507/&lt;br /&gt;
&lt;br /&gt;
Part 2 http://www.softwaredeveloper.com/features/intro-to-ruby-on-rails-part-two-043007/&lt;br /&gt;
&lt;br /&gt;
An excellent introduction to Rails for novices&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Installers'''&lt;br /&gt;
''&lt;br /&gt;
	&lt;br /&gt;
Windows: InstantRails - http://instantrails.rubyforge.org/wiki/wiki.pl&lt;br /&gt;
&lt;br /&gt;
		An all in one, single click installer for Windows that includes a Rails server.&lt;br /&gt;
&lt;br /&gt;
	Mac: Locomotive - http://locomotive.raaum.org/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Projects''''' - http://www.workingwithrails.com/&lt;br /&gt;
&lt;br /&gt;
	A Database of Rails projects, programmers and websites&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails plugins''''' - http://agilewebdevelopment.com/&lt;br /&gt;
&lt;br /&gt;
	A collection of Rails open source plugins, searchable by category or keyword.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Sample Rails''''' - http://snippets.dzone.com/tag/rails&lt;br /&gt;
&lt;br /&gt;
	A collection of Rails code snippets.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Agile Rails book''''' - http://www.amazon.com/gp/product/097669400X/002-0481267-8083260?v=glance&amp;amp;n=283155&lt;br /&gt;
&lt;br /&gt;
	An excellent resource for learning how to apply Agile programming concepts to Rails.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails cheatsheet''''' - http://www.blainekendall.com/uploads/RubyOnRails-Cheatsheet-BlaineKendall.pdf&lt;br /&gt;
&lt;br /&gt;
	One user's list of best practices, gotchas and quirks of developing with Rails.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails best practices''''' - http://www.therailsway.com/&lt;br /&gt;
&lt;br /&gt;
	An official best practices list for programming in Rails.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Advanced Rails''''' - http://webonrails.com/&lt;br /&gt;
&lt;br /&gt;
	A resource for the advanced Rails programmer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Blog''''' - http://weblog.rubyonrails.org/&lt;br /&gt;
&lt;br /&gt;
	An online community of updates about current happenings with the Rails platform.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Guides''''' - http://guides.rubyonrails.org/&lt;br /&gt;
&lt;br /&gt;
	An all in one resource for learning Rails including Howtos, security and contributing to the Rails community.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Authoring Rails plugins''''' - http://nubyonrails.com/articles/2006/05/04/the-complete-guide-to-rails-plugins-part-i&lt;br /&gt;
&lt;br /&gt;
	A complete guide to authoring your own Rails plugins.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
== '''Tools for Rails (other than IDEs)''' ==&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
'''Test Unit'''&lt;br /&gt;
The Rails stack uses Test::Unit, known as the default Ruby unit testing framework shipping with Ruby.  There are various plugins and extension that could be used with Rails built-in Test::Unit to extend its functionality for support of TDD and BDD testing practices.&lt;br /&gt;
&lt;br /&gt;
[http://wiki.rubyonrails.org/addons/testing]&lt;br /&gt;
The link provides additional information in the form of supporting resources, whitepapers, examples, and plug-in documentation&lt;br /&gt;
&lt;br /&gt;
'''Example'''&lt;br /&gt;
[http://wiki.rubyonrails.org/testing/test-unitrequire] &lt;br /&gt;
&lt;br /&gt;
 Image:class CalculatorTest &amp;lt; Test::Unit::TestCase &lt;br /&gt;
  def test_add_two_numbers_for_the_sum &lt;br /&gt;
    calculator = Calculator.new &lt;br /&gt;
    assert_equal 4, calculator.sum(2, 2)&lt;br /&gt;
  end &lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
== TDD: Test Driven Development ==&lt;br /&gt;
 	&lt;br /&gt;
Test Driven Development is a combination of refactoring and test first development, a form of development where the test is &lt;br /&gt;
&lt;br /&gt;
written prior to completed production code.  The goal of TDD is the specification of requirements and not the validation of &lt;br /&gt;
&lt;br /&gt;
requirements.  There are a few testing frameworks that are used to implement the TDD programming technique.  &lt;br /&gt;
&lt;br /&gt;
[http://ruby.about.com/b/2009/01/28/test-driven-development-with-rails.htm]&lt;br /&gt;
This link provides a comprehensive overview of test driven development practices and available resources for implementation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''RSpec'''&lt;br /&gt;
RSpec is a testing framework for Behavior Driven Development, complete with its own expectations, matchers and mocking and &lt;br /&gt;
&lt;br /&gt;
stubbing facilities. It goes along hand in hand with Cucumber, though it plays nicely with many other testing frameworks as well.&lt;br /&gt;
&lt;br /&gt;
'''Model Examples'''&lt;br /&gt;
These are the equivalent of unit tests in Rails’ built in testing. Ironically&lt;br /&gt;
(for the traditional TDD’er) these are the only specs that we feel should actually interact&lt;br /&gt;
with the database. Learn more ….&lt;br /&gt;
&lt;br /&gt;
'''Controller Examples'''&lt;br /&gt;
These align somewhat with functional tests in rails, except&lt;br /&gt;
that they do not actually render views (though you can force rendering of views&lt;br /&gt;
if you prefer). Instead of setting expectations about what goes on a page, you&lt;br /&gt;
set expectations about what templates get rendered. Learn more….&lt;br /&gt;
&lt;br /&gt;
'''View Examples'''&lt;br /&gt;
This is the other half of Rails’ functional testing. View specs allow&lt;br /&gt;
you to set up assigns (thanks to ZenTest). Learn more ….&lt;br /&gt;
&lt;br /&gt;
'''Helper Examples'''&lt;br /&gt;
let you specify directly methods that live in your helpers. Learn more ….&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://www.ibm.com/developerworks/web/library/wa-rspec/]&lt;br /&gt;
The link provides a brief overview of RSpec with a comprehensive series of examples and a conceptual view of Rpecs step by step &lt;br /&gt;
&lt;br /&gt;
implementation process&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Cucumber'''&lt;br /&gt;
Cucumber is used with TDD and BDD within other testing frameworks such as RSpec by letting software development teams describe how &lt;br /&gt;
&lt;br /&gt;
software should behave in plain text. The text is written in a business-readable domain-specific language and serves as &lt;br /&gt;
&lt;br /&gt;
documentation, automated tests and development-aid - all rolled into one format.&lt;br /&gt;
&lt;br /&gt;
[http://cukes.info/]&lt;br /&gt;
The link provides a detail decription, definition, and examples of Cucumber implementation best practices and supported &lt;br /&gt;
&lt;br /&gt;
frameworks.&lt;br /&gt;
&lt;br /&gt;
'''Cucumber Example:'''&lt;br /&gt;
Scenario: See all vendors&lt;br /&gt;
    Given I am logged in as a user in the administrator role&lt;br /&gt;
    And There are 3 vendors&lt;br /&gt;
    When I go to the manage vendors page&lt;br /&gt;
    Then I should see the first 3 vendor names&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Shoulda''' &lt;br /&gt;
An extension to Test::Unit with additional helpers, macros, and assertions.&lt;br /&gt;
 &lt;br /&gt;
[http://www.thoughtbot.com/projects/shoulda]&lt;br /&gt;
The link provides a more conclusive definition of Shoulda along with installation facts and working examples of the Shoulda &lt;br /&gt;
&lt;br /&gt;
testing framework within Ruby's built in Test::Unit&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== BDD: Behavior Driven Development ==&lt;br /&gt;
	[http://eggsonbread.com/2009/07/22/behavior-driven-development-in-a-nutshell/]&lt;br /&gt;
Behavior driven development was born from the concepts behind the implementation of TDD.  It brings together strands from &lt;br /&gt;
&lt;br /&gt;
TestDrivenDevelopment and DomainDrivenDesign into an integrated whole, making the relationship between these two powerful &lt;br /&gt;
&lt;br /&gt;
approaches to software development more evident.  Most test driven development testing frameworks such as RSpec and Cucumber also support behavior driven development testing. &lt;br /&gt;
&lt;br /&gt;
[http://behaviour-driven.org/]&lt;br /&gt;
The link supports BDDs definition with additional links to more viable behavior driven development resources.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Other Test Tool Resources'''&lt;br /&gt;
Watir&lt;br /&gt;
Watir is an open-source library for automating web browsers. It allows you to write tests that are easy to read and maintain. It &lt;br /&gt;
&lt;br /&gt;
is simple and flexible.&lt;br /&gt;
&lt;br /&gt;
[http://wtr.rubyforge.org/]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''NullDB''' - http://avdi.org/projects/nulldb/&lt;br /&gt;
a way to speed up testing by avoiding database use.&lt;br /&gt;
&lt;br /&gt;
'''Bleakhouse:''' memory leak detection&lt;br /&gt;
&lt;br /&gt;
'''ruby-debug''' &lt;br /&gt;
Other than the extensive use of breakpoints, ruby-debug provides Rails with a plug-in extending the functionality of Rails built in debugger. &lt;br /&gt;
&lt;br /&gt;
'''http://rubyforge.org/softwaremap/trove_list.php?form_cat=47'''&lt;br /&gt;
The link provides twenty debug resources available for RoR&lt;br /&gt;
&lt;br /&gt;
== '''Conclusion''' ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Reference ==&lt;br /&gt;
&lt;br /&gt;
All sources used to create this wiki are linked in the above text.&lt;/div&gt;</summary>
		<author><name>Los Bravo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_team1&amp;diff=20765</id>
		<title>CSC/ECE 517 Fall 2009/wiki1b team1</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_team1&amp;diff=20765"/>
		<updated>2009-09-21T02:33:44Z</updated>

		<summary type="html">&lt;p&gt;Los Bravo: /* '''Conclusion''' */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;CSC/ECE 517 Fall 2009&lt;br /&gt;
&lt;br /&gt;
'''&lt;br /&gt;
== Resources for Rails (other than IDEs) ==&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
IDEs are a valuable resource for Rails development, however there are many other resources and tools&lt;br /&gt;
that can either replace or supplement IDEs.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Resources for Rails other than IDEs&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails API''''' - http://api.rubyonrails.org/&lt;br /&gt;
&lt;br /&gt;
	This site documents Rails files, classes and methods that can be used to build a Rails application.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Forum''''' - http://railsforum.com/&lt;br /&gt;
&lt;br /&gt;
	A discussion forum covering all aspects of Rails for beginners and experts including planning, &lt;br /&gt;
	programming, extensions and production.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Introducing Ruby on Rails''''' &lt;br /&gt;
&lt;br /&gt;
Part 1 http://www.softwaredeveloper.com/features/intro-to-ruby-on-rails-042507/&lt;br /&gt;
&lt;br /&gt;
Part 2 http://www.softwaredeveloper.com/features/intro-to-ruby-on-rails-part-two-043007/&lt;br /&gt;
&lt;br /&gt;
An excellent introduction to Rails for novices&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Installers'''&lt;br /&gt;
''&lt;br /&gt;
	&lt;br /&gt;
Windows: InstantRails - http://instantrails.rubyforge.org/wiki/wiki.pl&lt;br /&gt;
&lt;br /&gt;
		An all in one, single click installer for Windows that includes a Rails server.&lt;br /&gt;
&lt;br /&gt;
	Mac: Locomotive - http://locomotive.raaum.org/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Projects''''' - http://www.workingwithrails.com/&lt;br /&gt;
&lt;br /&gt;
	A Database of Rails projects, programmers and websites&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails plugins''''' - http://agilewebdevelopment.com/&lt;br /&gt;
&lt;br /&gt;
	A collection of Rails open source plugins, searchable by category or keyword.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Sample Rails''''' - http://snippets.dzone.com/tag/rails&lt;br /&gt;
&lt;br /&gt;
	A collection of Rails code snippets.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Agile Rails book''''' - http://www.amazon.com/gp/product/097669400X/002-0481267-8083260?v=glance&amp;amp;n=283155&lt;br /&gt;
&lt;br /&gt;
	An excellent resource for learning how to apply Agile programming concepts to Rails.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails cheatsheet''''' - http://www.blainekendall.com/uploads/RubyOnRails-Cheatsheet-BlaineKendall.pdf&lt;br /&gt;
&lt;br /&gt;
	One user's list of best practices, gotchas and quirks of developing with Rails.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails best practices''''' - http://www.therailsway.com/&lt;br /&gt;
&lt;br /&gt;
	An official best practices list for programming in Rails.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Advanced Rails''''' - http://webonrails.com/&lt;br /&gt;
&lt;br /&gt;
	A resource for the advanced Rails programmer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Blog''''' - http://weblog.rubyonrails.org/&lt;br /&gt;
&lt;br /&gt;
	An online community of updates about current happenings with the Rails platform.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Guides''''' - http://guides.rubyonrails.org/&lt;br /&gt;
&lt;br /&gt;
	An all in one resource for learning Rails including Howtos, security and contributing to the Rails community.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Authoring Rails plugins''''' - http://nubyonrails.com/articles/2006/05/04/the-complete-guide-to-rails-plugins-part-i&lt;br /&gt;
&lt;br /&gt;
	A complete guide to authoring your own Rails plugins.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
== '''Tools for Rails (other than IDEs)''' ==&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
'''Test Unit'''&lt;br /&gt;
The Rails stack uses Test::Unit, known as the default Ruby unit testing framework shipping with Ruby.  There are various plugins and extension that could be used with Rails built-in Test::Unit to extend its functionality for support of TDD and BDD testing practices.&lt;br /&gt;
&lt;br /&gt;
[http://wiki.rubyonrails.org/addons/testing]&lt;br /&gt;
The link provides additional information in the form of supporting resources, whitepapers, examples, and plug-in documentation&lt;br /&gt;
&lt;br /&gt;
'''Example'''&lt;br /&gt;
[http://wiki.rubyonrails.org/testing/test-unitrequire] &lt;br /&gt;
&lt;br /&gt;
 Image:class CalculatorTest &amp;lt; Test::Unit::TestCase &lt;br /&gt;
  def test_add_two_numbers_for_the_sum &lt;br /&gt;
    calculator = Calculator.new &lt;br /&gt;
    assert_equal 4, calculator.sum(2, 2)&lt;br /&gt;
  end &lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
== TDD: Test Driven Development ==&lt;br /&gt;
 	&lt;br /&gt;
Test Driven Development is a combination of refactoring and test first development, a form of development where the test is &lt;br /&gt;
&lt;br /&gt;
written prior to completed production code.  The goal of TDD is the specification of requirements and not the validation of &lt;br /&gt;
&lt;br /&gt;
requirements.  There are a few testing frameworks that are used to implement the TDD programming technique.  &lt;br /&gt;
&lt;br /&gt;
[http://ruby.about.com/b/2009/01/28/test-driven-development-with-rails.htm]&lt;br /&gt;
This link provides a comprehensive overview of test driven development practices and available resources for implementation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''RSpec'''&lt;br /&gt;
RSpec is a testing framework for Behavior Driven Development, complete with its own expectations, matchers and mocking and &lt;br /&gt;
&lt;br /&gt;
stubbing facilities. It goes along hand in hand with Cucumber, though it plays nicely with many other testing frameworks as well.&lt;br /&gt;
&lt;br /&gt;
'''Model Examples'''&lt;br /&gt;
These are the equivalent of unit tests in Rails’ built in testing. Ironically&lt;br /&gt;
(for the traditional TDD’er) these are the only specs that we feel should actually interact&lt;br /&gt;
with the database. Learn more ….&lt;br /&gt;
&lt;br /&gt;
'''Controller Examples'''&lt;br /&gt;
These align somewhat with functional tests in rails, except&lt;br /&gt;
that they do not actually render views (though you can force rendering of views&lt;br /&gt;
if you prefer). Instead of setting expectations about what goes on a page, you&lt;br /&gt;
set expectations about what templates get rendered. Learn more….&lt;br /&gt;
&lt;br /&gt;
'''View Examples'''&lt;br /&gt;
This is the other half of Rails’ functional testing. View specs allow&lt;br /&gt;
you to set up assigns (thanks to ZenTest). Learn more ….&lt;br /&gt;
&lt;br /&gt;
'''Helper Examples'''&lt;br /&gt;
let you specify directly methods that live in your helpers. Learn more ….&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://www.ibm.com/developerworks/web/library/wa-rspec/]&lt;br /&gt;
The link provides a brief overview of RSpec with a comprehensive series of examples and a conceptual view of Rpecs step by step &lt;br /&gt;
&lt;br /&gt;
implementation process&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Cucumber'''&lt;br /&gt;
Cucumber is used with TDD and BDD within other testing frameworks such as RSpec by letting software development teams describe how &lt;br /&gt;
&lt;br /&gt;
software should behave in plain text. The text is written in a business-readable domain-specific language and serves as &lt;br /&gt;
&lt;br /&gt;
documentation, automated tests and development-aid - all rolled into one format.&lt;br /&gt;
&lt;br /&gt;
[http://cukes.info/]&lt;br /&gt;
The link provides a detail decription, definition, and examples of Cucumber implementation best practices and supported &lt;br /&gt;
&lt;br /&gt;
frameworks.&lt;br /&gt;
&lt;br /&gt;
'''Cucumber Example:'''&lt;br /&gt;
Scenario: See all vendors&lt;br /&gt;
    Given I am logged in as a user in the administrator role&lt;br /&gt;
    And There are 3 vendors&lt;br /&gt;
    When I go to the manage vendors page&lt;br /&gt;
    Then I should see the first 3 vendor names&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Shoulda''' &lt;br /&gt;
An extension to Test::Unit with additional helpers, macros, and assertions.&lt;br /&gt;
 &lt;br /&gt;
[http://www.thoughtbot.com/projects/shoulda]&lt;br /&gt;
The link provides a more conclusive definition of Shoulda along with installation facts and working examples of the Shoulda &lt;br /&gt;
&lt;br /&gt;
testing framework within Ruby's built in Test::Unit&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== BDD: Behavior Driven Development ==&lt;br /&gt;
	[http://eggsonbread.com/2009/07/22/behavior-driven-development-in-a-nutshell/]&lt;br /&gt;
Behavior driven development was born from the concepts behind the implementation of TDD.  It brings together strands from &lt;br /&gt;
&lt;br /&gt;
TestDrivenDevelopment and DomainDrivenDesign into an integrated whole, making the relationship between these two powerful &lt;br /&gt;
&lt;br /&gt;
approaches to software development more evident.  Most test driven development testing frameworks such as RSpec and Cucumber also support behavior driven development testing. &lt;br /&gt;
&lt;br /&gt;
[http://behaviour-driven.org/]&lt;br /&gt;
The link supports BDDs definition with additional links to more viable behavior driven development resources.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Other Test Tool Resources'''&lt;br /&gt;
Watir&lt;br /&gt;
Watir is an open-source library for automating web browsers. It allows you to write tests that are easy to read and maintain. It &lt;br /&gt;
&lt;br /&gt;
is simple and flexible.&lt;br /&gt;
&lt;br /&gt;
[http://wtr.rubyforge.org/]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''NullDB''' - http://avdi.org/projects/nulldb/&lt;br /&gt;
a way to speed up testing by avoiding database use.&lt;br /&gt;
&lt;br /&gt;
'''Bleakhouse:''' memory leak detection&lt;br /&gt;
&lt;br /&gt;
'''ruby-debug''' &lt;br /&gt;
Other than the extensive use of breakpoints, ruby-debug provides Rails with a plug-in extending the functionality of Rails built in debugger. &lt;br /&gt;
&lt;br /&gt;
'''http://rubyforge.org/softwaremap/trove_list.php?form_cat=47'''&lt;br /&gt;
The link provides twenty debug resources available for RoR&lt;br /&gt;
&lt;br /&gt;
== '''Conclusion''' ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== '''Reference''' ==&lt;br /&gt;
&lt;br /&gt;
All sources used to create this wiki are linked in the above text.&lt;/div&gt;</summary>
		<author><name>Los Bravo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_team1&amp;diff=20763</id>
		<title>CSC/ECE 517 Fall 2009/wiki1b team1</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_team1&amp;diff=20763"/>
		<updated>2009-09-21T02:30:28Z</updated>

		<summary type="html">&lt;p&gt;Los Bravo: /* Conclusion */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;CSC/ECE 517 Fall 2009&lt;br /&gt;
&lt;br /&gt;
'''&lt;br /&gt;
== Resources for Rails (other than IDEs) ==&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
IDEs are a valuable resource for Rails development, however there are many other resources and tools&lt;br /&gt;
that can either replace or supplement IDEs.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Resources for Rails other than IDEs&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails API''''' - http://api.rubyonrails.org/&lt;br /&gt;
&lt;br /&gt;
	This site documents Rails files, classes and methods that can be used to build a Rails application.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Forum''''' - http://railsforum.com/&lt;br /&gt;
&lt;br /&gt;
	A discussion forum covering all aspects of Rails for beginners and experts including planning, &lt;br /&gt;
	programming, extensions and production.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Introducing Ruby on Rails''''' &lt;br /&gt;
&lt;br /&gt;
Part 1 http://www.softwaredeveloper.com/features/intro-to-ruby-on-rails-042507/&lt;br /&gt;
&lt;br /&gt;
Part 2 http://www.softwaredeveloper.com/features/intro-to-ruby-on-rails-part-two-043007/&lt;br /&gt;
&lt;br /&gt;
An excellent introduction to Rails for novices&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Installers'''&lt;br /&gt;
''&lt;br /&gt;
	&lt;br /&gt;
Windows: InstantRails - http://instantrails.rubyforge.org/wiki/wiki.pl&lt;br /&gt;
&lt;br /&gt;
		An all in one, single click installer for Windows that includes a Rails server.&lt;br /&gt;
&lt;br /&gt;
	Mac: Locomotive - http://locomotive.raaum.org/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Projects''''' - http://www.workingwithrails.com/&lt;br /&gt;
&lt;br /&gt;
	A Database of Rails projects, programmers and websites&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails plugins''''' - http://agilewebdevelopment.com/&lt;br /&gt;
&lt;br /&gt;
	A collection of Rails open source plugins, searchable by category or keyword.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Sample Rails''''' - http://snippets.dzone.com/tag/rails&lt;br /&gt;
&lt;br /&gt;
	A collection of Rails code snippets.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Agile Rails book''''' - http://www.amazon.com/gp/product/097669400X/002-0481267-8083260?v=glance&amp;amp;n=283155&lt;br /&gt;
&lt;br /&gt;
	An excellent resource for learning how to apply Agile programming concepts to Rails.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails cheatsheet''''' - http://www.blainekendall.com/uploads/RubyOnRails-Cheatsheet-BlaineKendall.pdf&lt;br /&gt;
&lt;br /&gt;
	One user's list of best practices, gotchas and quirks of developing with Rails.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails best practices''''' - http://www.therailsway.com/&lt;br /&gt;
&lt;br /&gt;
	An official best practices list for programming in Rails.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Advanced Rails''''' - http://webonrails.com/&lt;br /&gt;
&lt;br /&gt;
	A resource for the advanced Rails programmer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Blog''''' - http://weblog.rubyonrails.org/&lt;br /&gt;
&lt;br /&gt;
	An online community of updates about current happenings with the Rails platform.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Guides''''' - http://guides.rubyonrails.org/&lt;br /&gt;
&lt;br /&gt;
	An all in one resource for learning Rails including Howtos, security and contributing to the Rails community.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Authoring Rails plugins''''' - http://nubyonrails.com/articles/2006/05/04/the-complete-guide-to-rails-plugins-part-i&lt;br /&gt;
&lt;br /&gt;
	A complete guide to authoring your own Rails plugins.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
== '''Tools for Rails (other than IDEs)''' ==&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
'''Test Unit'''&lt;br /&gt;
The Rails stack uses Test::Unit, known as the default Ruby unit testing framework shipping with Ruby.  There are various plugins and extension that could be used with Rails built-in Test::Unit to extend its functionality for support of TDD and BDD testing practices.&lt;br /&gt;
&lt;br /&gt;
[http://wiki.rubyonrails.org/addons/testing]&lt;br /&gt;
The link provides additional information in the form of supporting resources, whitepapers, examples, and plug-in documentation&lt;br /&gt;
&lt;br /&gt;
'''Example'''&lt;br /&gt;
[http://wiki.rubyonrails.org/testing/test-unitrequire] &lt;br /&gt;
&lt;br /&gt;
 Image:class CalculatorTest &amp;lt; Test::Unit::TestCase &lt;br /&gt;
  def test_add_two_numbers_for_the_sum &lt;br /&gt;
    calculator = Calculator.new &lt;br /&gt;
    assert_equal 4, calculator.sum(2, 2)&lt;br /&gt;
  end &lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
== TDD: Test Driven Development ==&lt;br /&gt;
 	&lt;br /&gt;
Test Driven Development is a combination of refactoring and test first development, a form of development where the test is &lt;br /&gt;
&lt;br /&gt;
written prior to completed production code.  The goal of TDD is the specification of requirements and not the validation of &lt;br /&gt;
&lt;br /&gt;
requirements.  There are a few testing frameworks that are used to implement the TDD programming technique.  &lt;br /&gt;
&lt;br /&gt;
[http://ruby.about.com/b/2009/01/28/test-driven-development-with-rails.htm]&lt;br /&gt;
This link provides a comprehensive overview of test driven development practices and available resources for implementation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''RSpec'''&lt;br /&gt;
RSpec is a testing framework for Behavior Driven Development, complete with its own expectations, matchers and mocking and &lt;br /&gt;
&lt;br /&gt;
stubbing facilities. It goes along hand in hand with Cucumber, though it plays nicely with many other testing frameworks as well.&lt;br /&gt;
&lt;br /&gt;
'''Model Examples'''&lt;br /&gt;
These are the equivalent of unit tests in Rails’ built in testing. Ironically&lt;br /&gt;
(for the traditional TDD’er) these are the only specs that we feel should actually interact&lt;br /&gt;
with the database. Learn more ….&lt;br /&gt;
&lt;br /&gt;
'''Controller Examples'''&lt;br /&gt;
These align somewhat with functional tests in rails, except&lt;br /&gt;
that they do not actually render views (though you can force rendering of views&lt;br /&gt;
if you prefer). Instead of setting expectations about what goes on a page, you&lt;br /&gt;
set expectations about what templates get rendered. Learn more….&lt;br /&gt;
&lt;br /&gt;
'''View Examples'''&lt;br /&gt;
This is the other half of Rails’ functional testing. View specs allow&lt;br /&gt;
you to set up assigns (thanks to ZenTest). Learn more ….&lt;br /&gt;
&lt;br /&gt;
'''Helper Examples'''&lt;br /&gt;
let you specify directly methods that live in your helpers. Learn more ….&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://www.ibm.com/developerworks/web/library/wa-rspec/]&lt;br /&gt;
The link provides a brief overview of RSpec with a comprehensive series of examples and a conceptual view of Rpecs step by step &lt;br /&gt;
&lt;br /&gt;
implementation process&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Cucumber'''&lt;br /&gt;
Cucumber is used with TDD and BDD within other testing frameworks such as RSpec by letting software development teams describe how &lt;br /&gt;
&lt;br /&gt;
software should behave in plain text. The text is written in a business-readable domain-specific language and serves as &lt;br /&gt;
&lt;br /&gt;
documentation, automated tests and development-aid - all rolled into one format.&lt;br /&gt;
&lt;br /&gt;
[http://cukes.info/]&lt;br /&gt;
The link provides a detail decription, definition, and examples of Cucumber implementation best practices and supported &lt;br /&gt;
&lt;br /&gt;
frameworks.&lt;br /&gt;
&lt;br /&gt;
'''Cucumber Example:'''&lt;br /&gt;
Scenario: See all vendors&lt;br /&gt;
    Given I am logged in as a user in the administrator role&lt;br /&gt;
    And There are 3 vendors&lt;br /&gt;
    When I go to the manage vendors page&lt;br /&gt;
    Then I should see the first 3 vendor names&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Shoulda''' &lt;br /&gt;
An extension to Test::Unit with additional helpers, macros, and assertions.&lt;br /&gt;
 &lt;br /&gt;
[http://www.thoughtbot.com/projects/shoulda]&lt;br /&gt;
The link provides a more conclusive definition of Shoulda along with installation facts and working examples of the Shoulda &lt;br /&gt;
&lt;br /&gt;
testing framework within Ruby's built in Test::Unit&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== BDD: Behavior Driven Development ==&lt;br /&gt;
	[http://eggsonbread.com/2009/07/22/behavior-driven-development-in-a-nutshell/]&lt;br /&gt;
Behavior driven development was born from the concepts behind the implementation of TDD.  It brings together strands from &lt;br /&gt;
&lt;br /&gt;
TestDrivenDevelopment and DomainDrivenDesign into an integrated whole, making the relationship between these two powerful &lt;br /&gt;
&lt;br /&gt;
approaches to software development more evident.  Most test driven development testing frameworks such as RSpec and Cucumber also support behavior driven development testing. &lt;br /&gt;
&lt;br /&gt;
[http://behaviour-driven.org/]&lt;br /&gt;
The link supports BDDs definition with additional links to more viable behavior driven development resources.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Other Test Tool Resources'''&lt;br /&gt;
Watir&lt;br /&gt;
Watir is an open-source library for automating web browsers. It allows you to write tests that are easy to read and maintain. It &lt;br /&gt;
&lt;br /&gt;
is simple and flexible.&lt;br /&gt;
&lt;br /&gt;
[http://wtr.rubyforge.org/]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''NullDB''' - http://avdi.org/projects/nulldb/&lt;br /&gt;
a way to speed up testing by avoiding database use.&lt;br /&gt;
&lt;br /&gt;
'''Bleakhouse:''' memory leak detection&lt;br /&gt;
&lt;br /&gt;
'''ruby-debug''' &lt;br /&gt;
Other than the extensive use of breakpoints, ruby-debug provides Rails with a plug-in extending the functionality of Rails built in debugger. &lt;br /&gt;
&lt;br /&gt;
'''http://rubyforge.org/softwaremap/trove_list.php?form_cat=47'''&lt;br /&gt;
The link provides twenty debug resources available for RoR&lt;br /&gt;
&lt;br /&gt;
== '''Conclusion''' ==&lt;/div&gt;</summary>
		<author><name>Los Bravo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_team1&amp;diff=20761</id>
		<title>CSC/ECE 517 Fall 2009/wiki1b team1</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_team1&amp;diff=20761"/>
		<updated>2009-09-21T02:29:37Z</updated>

		<summary type="html">&lt;p&gt;Los Bravo: /* Tools for Rails (other than IDEs) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;CSC/ECE 517 Fall 2009&lt;br /&gt;
&lt;br /&gt;
'''&lt;br /&gt;
== Resources for Rails (other than IDEs) ==&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
IDEs are a valuable resource for Rails development, however there are many other resources and tools&lt;br /&gt;
that can either replace or supplement IDEs.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Resources for Rails other than IDEs&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails API''''' - http://api.rubyonrails.org/&lt;br /&gt;
&lt;br /&gt;
	This site documents Rails files, classes and methods that can be used to build a Rails application.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Forum''''' - http://railsforum.com/&lt;br /&gt;
&lt;br /&gt;
	A discussion forum covering all aspects of Rails for beginners and experts including planning, &lt;br /&gt;
	programming, extensions and production.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Introducing Ruby on Rails''''' &lt;br /&gt;
&lt;br /&gt;
Part 1 http://www.softwaredeveloper.com/features/intro-to-ruby-on-rails-042507/&lt;br /&gt;
&lt;br /&gt;
Part 2 http://www.softwaredeveloper.com/features/intro-to-ruby-on-rails-part-two-043007/&lt;br /&gt;
&lt;br /&gt;
An excellent introduction to Rails for novices&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Installers'''&lt;br /&gt;
''&lt;br /&gt;
	&lt;br /&gt;
Windows: InstantRails - http://instantrails.rubyforge.org/wiki/wiki.pl&lt;br /&gt;
&lt;br /&gt;
		An all in one, single click installer for Windows that includes a Rails server.&lt;br /&gt;
&lt;br /&gt;
	Mac: Locomotive - http://locomotive.raaum.org/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Projects''''' - http://www.workingwithrails.com/&lt;br /&gt;
&lt;br /&gt;
	A Database of Rails projects, programmers and websites&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails plugins''''' - http://agilewebdevelopment.com/&lt;br /&gt;
&lt;br /&gt;
	A collection of Rails open source plugins, searchable by category or keyword.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Sample Rails''''' - http://snippets.dzone.com/tag/rails&lt;br /&gt;
&lt;br /&gt;
	A collection of Rails code snippets.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Agile Rails book''''' - http://www.amazon.com/gp/product/097669400X/002-0481267-8083260?v=glance&amp;amp;n=283155&lt;br /&gt;
&lt;br /&gt;
	An excellent resource for learning how to apply Agile programming concepts to Rails.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails cheatsheet''''' - http://www.blainekendall.com/uploads/RubyOnRails-Cheatsheet-BlaineKendall.pdf&lt;br /&gt;
&lt;br /&gt;
	One user's list of best practices, gotchas and quirks of developing with Rails.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails best practices''''' - http://www.therailsway.com/&lt;br /&gt;
&lt;br /&gt;
	An official best practices list for programming in Rails.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Advanced Rails''''' - http://webonrails.com/&lt;br /&gt;
&lt;br /&gt;
	A resource for the advanced Rails programmer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Blog''''' - http://weblog.rubyonrails.org/&lt;br /&gt;
&lt;br /&gt;
	An online community of updates about current happenings with the Rails platform.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Guides''''' - http://guides.rubyonrails.org/&lt;br /&gt;
&lt;br /&gt;
	An all in one resource for learning Rails including Howtos, security and contributing to the Rails community.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Authoring Rails plugins''''' - http://nubyonrails.com/articles/2006/05/04/the-complete-guide-to-rails-plugins-part-i&lt;br /&gt;
&lt;br /&gt;
	A complete guide to authoring your own Rails plugins.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
== '''Tools for Rails (other than IDEs)''' ==&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
'''Test Unit'''&lt;br /&gt;
The Rails stack uses Test::Unit, known as the default Ruby unit testing framework shipping with Ruby.  There are various plugins and extension that could be used with Rails built-in Test::Unit to extend its functionality for support of TDD and BDD testing practices.&lt;br /&gt;
&lt;br /&gt;
[http://wiki.rubyonrails.org/addons/testing]&lt;br /&gt;
The link provides additional information in the form of supporting resources, whitepapers, examples, and plug-in documentation&lt;br /&gt;
&lt;br /&gt;
'''Example'''&lt;br /&gt;
[http://wiki.rubyonrails.org/testing/test-unitrequire] &lt;br /&gt;
&lt;br /&gt;
 Image:class CalculatorTest &amp;lt; Test::Unit::TestCase &lt;br /&gt;
  def test_add_two_numbers_for_the_sum &lt;br /&gt;
    calculator = Calculator.new &lt;br /&gt;
    assert_equal 4, calculator.sum(2, 2)&lt;br /&gt;
  end &lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
== TDD: Test Driven Development ==&lt;br /&gt;
 	&lt;br /&gt;
Test Driven Development is a combination of refactoring and test first development, a form of development where the test is &lt;br /&gt;
&lt;br /&gt;
written prior to completed production code.  The goal of TDD is the specification of requirements and not the validation of &lt;br /&gt;
&lt;br /&gt;
requirements.  There are a few testing frameworks that are used to implement the TDD programming technique.  &lt;br /&gt;
&lt;br /&gt;
[http://ruby.about.com/b/2009/01/28/test-driven-development-with-rails.htm]&lt;br /&gt;
This link provides a comprehensive overview of test driven development practices and available resources for implementation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''RSpec'''&lt;br /&gt;
RSpec is a testing framework for Behavior Driven Development, complete with its own expectations, matchers and mocking and &lt;br /&gt;
&lt;br /&gt;
stubbing facilities. It goes along hand in hand with Cucumber, though it plays nicely with many other testing frameworks as well.&lt;br /&gt;
&lt;br /&gt;
'''Model Examples'''&lt;br /&gt;
These are the equivalent of unit tests in Rails’ built in testing. Ironically&lt;br /&gt;
(for the traditional TDD’er) these are the only specs that we feel should actually interact&lt;br /&gt;
with the database. Learn more ….&lt;br /&gt;
&lt;br /&gt;
'''Controller Examples'''&lt;br /&gt;
These align somewhat with functional tests in rails, except&lt;br /&gt;
that they do not actually render views (though you can force rendering of views&lt;br /&gt;
if you prefer). Instead of setting expectations about what goes on a page, you&lt;br /&gt;
set expectations about what templates get rendered. Learn more….&lt;br /&gt;
&lt;br /&gt;
'''View Examples'''&lt;br /&gt;
This is the other half of Rails’ functional testing. View specs allow&lt;br /&gt;
you to set up assigns (thanks to ZenTest). Learn more ….&lt;br /&gt;
&lt;br /&gt;
'''Helper Examples'''&lt;br /&gt;
let you specify directly methods that live in your helpers. Learn more ….&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://www.ibm.com/developerworks/web/library/wa-rspec/]&lt;br /&gt;
The link provides a brief overview of RSpec with a comprehensive series of examples and a conceptual view of Rpecs step by step &lt;br /&gt;
&lt;br /&gt;
implementation process&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Cucumber'''&lt;br /&gt;
Cucumber is used with TDD and BDD within other testing frameworks such as RSpec by letting software development teams describe how &lt;br /&gt;
&lt;br /&gt;
software should behave in plain text. The text is written in a business-readable domain-specific language and serves as &lt;br /&gt;
&lt;br /&gt;
documentation, automated tests and development-aid - all rolled into one format.&lt;br /&gt;
&lt;br /&gt;
[http://cukes.info/]&lt;br /&gt;
The link provides a detail decription, definition, and examples of Cucumber implementation best practices and supported &lt;br /&gt;
&lt;br /&gt;
frameworks.&lt;br /&gt;
&lt;br /&gt;
'''Cucumber Example:'''&lt;br /&gt;
Scenario: See all vendors&lt;br /&gt;
    Given I am logged in as a user in the administrator role&lt;br /&gt;
    And There are 3 vendors&lt;br /&gt;
    When I go to the manage vendors page&lt;br /&gt;
    Then I should see the first 3 vendor names&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Shoulda''' &lt;br /&gt;
An extension to Test::Unit with additional helpers, macros, and assertions.&lt;br /&gt;
 &lt;br /&gt;
[http://www.thoughtbot.com/projects/shoulda]&lt;br /&gt;
The link provides a more conclusive definition of Shoulda along with installation facts and working examples of the Shoulda &lt;br /&gt;
&lt;br /&gt;
testing framework within Ruby's built in Test::Unit&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== BDD: Behavior Driven Development ==&lt;br /&gt;
	[http://eggsonbread.com/2009/07/22/behavior-driven-development-in-a-nutshell/]&lt;br /&gt;
Behavior driven development was born from the concepts behind the implementation of TDD.  It brings together strands from &lt;br /&gt;
&lt;br /&gt;
TestDrivenDevelopment and DomainDrivenDesign into an integrated whole, making the relationship between these two powerful &lt;br /&gt;
&lt;br /&gt;
approaches to software development more evident.  Most test driven development testing frameworks such as RSpec and Cucumber also support behavior driven development testing. &lt;br /&gt;
&lt;br /&gt;
[http://behaviour-driven.org/]&lt;br /&gt;
The link supports BDDs definition with additional links to more viable behavior driven development resources.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Other Test Tool Resources'''&lt;br /&gt;
Watir&lt;br /&gt;
Watir is an open-source library for automating web browsers. It allows you to write tests that are easy to read and maintain. It &lt;br /&gt;
&lt;br /&gt;
is simple and flexible.&lt;br /&gt;
&lt;br /&gt;
[http://wtr.rubyforge.org/]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''NullDB''' - http://avdi.org/projects/nulldb/&lt;br /&gt;
a way to speed up testing by avoiding database use.&lt;br /&gt;
&lt;br /&gt;
'''Bleakhouse:''' memory leak detection&lt;br /&gt;
&lt;br /&gt;
'''ruby-debug''' &lt;br /&gt;
Other than the extensive use of breakpoints, ruby-debug provides Rails with a plug-in extending the functionality of Rails built in debugger. &lt;br /&gt;
&lt;br /&gt;
'''http://rubyforge.org/softwaremap/trove_list.php?form_cat=47'''&lt;br /&gt;
The link provides twenty debug resources available for RoR&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;/div&gt;</summary>
		<author><name>Los Bravo</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_team1&amp;diff=20760</id>
		<title>CSC/ECE 517 Fall 2009/wiki1b team1</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1b_team1&amp;diff=20760"/>
		<updated>2009-09-21T02:28:57Z</updated>

		<summary type="html">&lt;p&gt;Los Bravo: /* Tools for Rails (other than IDEs) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;CSC/ECE 517 Fall 2009&lt;br /&gt;
&lt;br /&gt;
'''&lt;br /&gt;
== Resources for Rails (other than IDEs) ==&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
IDEs are a valuable resource for Rails development, however there are many other resources and tools&lt;br /&gt;
that can either replace or supplement IDEs.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Resources for Rails other than IDEs&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails API''''' - http://api.rubyonrails.org/&lt;br /&gt;
&lt;br /&gt;
	This site documents Rails files, classes and methods that can be used to build a Rails application.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Forum''''' - http://railsforum.com/&lt;br /&gt;
&lt;br /&gt;
	A discussion forum covering all aspects of Rails for beginners and experts including planning, &lt;br /&gt;
	programming, extensions and production.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Introducing Ruby on Rails''''' &lt;br /&gt;
&lt;br /&gt;
Part 1 http://www.softwaredeveloper.com/features/intro-to-ruby-on-rails-042507/&lt;br /&gt;
&lt;br /&gt;
Part 2 http://www.softwaredeveloper.com/features/intro-to-ruby-on-rails-part-two-043007/&lt;br /&gt;
&lt;br /&gt;
An excellent introduction to Rails for novices&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Installers'''&lt;br /&gt;
''&lt;br /&gt;
	&lt;br /&gt;
Windows: InstantRails - http://instantrails.rubyforge.org/wiki/wiki.pl&lt;br /&gt;
&lt;br /&gt;
		An all in one, single click installer for Windows that includes a Rails server.&lt;br /&gt;
&lt;br /&gt;
	Mac: Locomotive - http://locomotive.raaum.org/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Projects''''' - http://www.workingwithrails.com/&lt;br /&gt;
&lt;br /&gt;
	A Database of Rails projects, programmers and websites&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails plugins''''' - http://agilewebdevelopment.com/&lt;br /&gt;
&lt;br /&gt;
	A collection of Rails open source plugins, searchable by category or keyword.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Sample Rails''''' - http://snippets.dzone.com/tag/rails&lt;br /&gt;
&lt;br /&gt;
	A collection of Rails code snippets.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Agile Rails book''''' - http://www.amazon.com/gp/product/097669400X/002-0481267-8083260?v=glance&amp;amp;n=283155&lt;br /&gt;
&lt;br /&gt;
	An excellent resource for learning how to apply Agile programming concepts to Rails.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails cheatsheet''''' - http://www.blainekendall.com/uploads/RubyOnRails-Cheatsheet-BlaineKendall.pdf&lt;br /&gt;
&lt;br /&gt;
	One user's list of best practices, gotchas and quirks of developing with Rails.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails best practices''''' - http://www.therailsway.com/&lt;br /&gt;
&lt;br /&gt;
	An official best practices list for programming in Rails.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Advanced Rails''''' - http://webonrails.com/&lt;br /&gt;
&lt;br /&gt;
	A resource for the advanced Rails programmer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Blog''''' - http://weblog.rubyonrails.org/&lt;br /&gt;
&lt;br /&gt;
	An online community of updates about current happenings with the Rails platform.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Rails Guides''''' - http://guides.rubyonrails.org/&lt;br /&gt;
&lt;br /&gt;
	An all in one resource for learning Rails including Howtos, security and contributing to the Rails community.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''Authoring Rails plugins''''' - http://nubyonrails.com/articles/2006/05/04/the-complete-guide-to-rails-plugins-part-i&lt;br /&gt;
&lt;br /&gt;
	A complete guide to authoring your own Rails plugins.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
== Tools for Rails (other than IDEs) ==&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
'''Test Unit'''&lt;br /&gt;
The Rails stack uses Test::Unit, known as the default Ruby unit testing framework shipping with Ruby.  There are various plugins and extension that could be used with Rails built-in Test::Unit to extend its functionality for support of TDD and BDD testing practices.&lt;br /&gt;
&lt;br /&gt;
[http://wiki.rubyonrails.org/addons/testing]&lt;br /&gt;
The link provides additional information in the form of supporting resources, whitepapers, examples, and plug-in documentation&lt;br /&gt;
&lt;br /&gt;
'''Example'''&lt;br /&gt;
[http://wiki.rubyonrails.org/testing/test-unitrequire] &lt;br /&gt;
&lt;br /&gt;
 Image:class CalculatorTest &amp;lt; Test::Unit::TestCase &lt;br /&gt;
  def test_add_two_numbers_for_the_sum &lt;br /&gt;
    calculator = Calculator.new &lt;br /&gt;
    assert_equal 4, calculator.sum(2, 2)&lt;br /&gt;
  end &lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== TDD: Test Driven Development ==&lt;br /&gt;
 	&lt;br /&gt;
Test Driven Development is a combination of refactoring and test first development, a form of development where the test is &lt;br /&gt;
&lt;br /&gt;
written prior to completed production code.  The goal of TDD is the specification of requirements and not the validation of &lt;br /&gt;
&lt;br /&gt;
requirements.  There are a few testing frameworks that are used to implement the TDD programming technique.  &lt;br /&gt;
&lt;br /&gt;
[http://ruby.about.com/b/2009/01/28/test-driven-development-with-rails.htm]&lt;br /&gt;
This link provides a comprehensive overview of test driven development practices and available resources for implementation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''RSpec'''&lt;br /&gt;
RSpec is a testing framework for Behavior Driven Development, complete with its own expectations, matchers and mocking and &lt;br /&gt;
&lt;br /&gt;
stubbing facilities. It goes along hand in hand with Cucumber, though it plays nicely with many other testing frameworks as well.&lt;br /&gt;
&lt;br /&gt;
'''Model Examples'''&lt;br /&gt;
These are the equivalent of unit tests in Rails’ built in testing. Ironically&lt;br /&gt;
(for the traditional TDD’er) these are the only specs that we feel should actually interact&lt;br /&gt;
with the database. Learn more ….&lt;br /&gt;
&lt;br /&gt;
'''Controller Examples'''&lt;br /&gt;
These align somewhat with functional tests in rails, except&lt;br /&gt;
that they do not actually render views (though you can force rendering of views&lt;br /&gt;
if you prefer). Instead of setting expectations about what goes on a page, you&lt;br /&gt;
set expectations about what templates get rendered. Learn more….&lt;br /&gt;
&lt;br /&gt;
'''View Examples'''&lt;br /&gt;
This is the other half of Rails’ functional testing. View specs allow&lt;br /&gt;
you to set up assigns (thanks to ZenTest). Learn more ….&lt;br /&gt;
&lt;br /&gt;
'''Helper Examples'''&lt;br /&gt;
let you specify directly methods that live in your helpers. Learn more ….&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://www.ibm.com/developerworks/web/library/wa-rspec/]&lt;br /&gt;
The link provides a brief overview of RSpec with a comprehensive series of examples and a conceptual view of Rpecs step by step &lt;br /&gt;
&lt;br /&gt;
implementation process&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Cucumber'''&lt;br /&gt;
Cucumber is used with TDD and BDD within other testing frameworks such as RSpec by letting software development teams describe how &lt;br /&gt;
&lt;br /&gt;
software should behave in plain text. The text is written in a business-readable domain-specific language and serves as &lt;br /&gt;
&lt;br /&gt;
documentation, automated tests and development-aid - all rolled into one format.&lt;br /&gt;
&lt;br /&gt;
[http://cukes.info/]&lt;br /&gt;
The link provides a detail decription, definition, and examples of Cucumber implementation best practices and supported &lt;br /&gt;
&lt;br /&gt;
frameworks.&lt;br /&gt;
&lt;br /&gt;
'''Cucumber Example:'''&lt;br /&gt;
Scenario: See all vendors&lt;br /&gt;
    Given I am logged in as a user in the administrator role&lt;br /&gt;
    And There are 3 vendors&lt;br /&gt;
    When I go to the manage vendors page&lt;br /&gt;
    Then I should see the first 3 vendor names&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Shoulda''' &lt;br /&gt;
An extension to Test::Unit with additional helpers, macros, and assertions.&lt;br /&gt;
 &lt;br /&gt;
[http://www.thoughtbot.com/projects/shoulda]&lt;br /&gt;
The link provides a more conclusive definition of Shoulda along with installation facts and working examples of the Shoulda &lt;br /&gt;
&lt;br /&gt;
testing framework within Ruby's built in Test::Unit&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== BDD: Behavior Driven Development ==&lt;br /&gt;
	[http://eggsonbread.com/2009/07/22/behavior-driven-development-in-a-nutshell/]&lt;br /&gt;
Behavior driven development was born from the concepts behind the implementation of TDD.  It brings together strands from &lt;br /&gt;
&lt;br /&gt;
TestDrivenDevelopment and DomainDrivenDesign into an integrated whole, making the relationship between these two powerful &lt;br /&gt;
&lt;br /&gt;
approaches to software development more evident.  Most test driven development testing frameworks such as RSpec and Cucumber also support behavior driven development testing. &lt;br /&gt;
&lt;br /&gt;
[http://behaviour-driven.org/]&lt;br /&gt;
The link supports BDDs definition with additional links to more viable behavior driven development resources.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Other Test Tool Resources'''&lt;br /&gt;
Watir&lt;br /&gt;
Watir is an open-source library for automating web browsers. It allows you to write tests that are easy to read and maintain. It &lt;br /&gt;
&lt;br /&gt;
is simple and flexible.&lt;br /&gt;
&lt;br /&gt;
[http://wtr.rubyforge.org/]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''NullDB''' - http://avdi.org/projects/nulldb/&lt;br /&gt;
a way to speed up testing by avoiding database use.&lt;br /&gt;
&lt;br /&gt;
'''Bleakhouse:''' memory leak detection&lt;br /&gt;
&lt;br /&gt;
'''ruby-debug''' &lt;br /&gt;
Other than the extensive use of breakpoints, ruby-debug provides Rails with a plug-in extending the functionality of Rails built in debugger. &lt;br /&gt;
&lt;br /&gt;
'''http://rubyforge.org/softwaremap/trove_list.php?form_cat=47'''&lt;br /&gt;
The link provides twenty debug resources available for RoR&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;/div&gt;</summary>
		<author><name>Los Bravo</name></author>
	</entry>
</feed>