<?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=Kanke</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=Kanke"/>
	<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Special:Contributions/Kanke"/>
	<updated>2026-05-24T23:23:07Z</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/wiki3_16_teamhelm&amp;diff=29806</id>
		<title>CSC/ECE 517 Fall 2009/wiki3 16 teamhelm</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_16_teamhelm&amp;diff=29806"/>
		<updated>2009-11-22T01:59:23Z</updated>

		<summary type="html">&lt;p&gt;Kanke: /* '''''References''''' */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''The Release Reuse Equivalency Principle (REP)''' ==&lt;br /&gt;
Components can be effectively reused only if they are released through a tracking system.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
=='''''Concept'''''==&lt;br /&gt;
&lt;br /&gt;
The Release Reuse Equivalency Principle (REP), first introduced by Bertrand Meyer [3][4], and later laid down in details by [http://en.wikipedia.org/wiki/Robert_Cecil_Martin Bob Martin], is described as follows:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;quot;''The granule of reuse is the granule of release.''&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Martin elaborates: &amp;quot;A reusable element, be it a component, a class, or a cluster of classes, cannot be&lt;br /&gt;
reused unless it is managed by a release system of some kind. Users will be unwilling&lt;br /&gt;
to use the element if they are forced to upgrade every time the author changes it.&lt;br /&gt;
Thus. even though the author has released a new version of his reusable element, he&lt;br /&gt;
must be willing to support and maintain older versions while his customers go about&lt;br /&gt;
the slow business of getting ready to upgrade. Thus, clients will refuse to reuse an element&lt;br /&gt;
unless the author promises to keep track of version numbers, and maintain old&lt;br /&gt;
versions for awhile.&lt;br /&gt;
Therefore, one criterion for grouping classes into packages is reuse. Since packages&lt;br /&gt;
are the unit of release, they are also the unit of reuse. Therefore architects would do&lt;br /&gt;
well to group reusable classes together into packages.&amp;quot; [1]&lt;br /&gt;
&lt;br /&gt;
=='''''Description'''''==&lt;br /&gt;
&lt;br /&gt;
Martin describes a &amp;quot;release system&amp;quot; in his concept, which refers to a system that is able to track versions of code as it is changed. This is also sometimes referred to as [http://en.wikipedia.org/wiki/Version_control version control]. Some common examples of version control are [http://en.wikipedia.org/wiki/Subversion_%28software%29 SVN], [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] and [http://en.wikipedia.org/wiki/Cmvc CMVC].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Martin also states that customers are slow to upgrade newer versions of code. This is commonly true for several reasons, including fear of instability of software, internal process, management approvals, and downtime for software systems.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Another critical concept here is that Martin states clients will refuse to upgrade unless the author tracks version numbers. This is related to the previous concept, where a client or customer, because of the above factors, may need to revert the system to a previous version of the code because the new version has caused a problem or outage.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
REP has also been described in the following way:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;..in order to effectively reuse code it must arrive in a complete, black-box, package that is to be used but not changed. Users of the code are shielded from changes to it because they can choose when to integrate changes from the package into their own code. While this supports code ownership, and even promotes it, it does not enforce it.&amp;quot; [2]&lt;br /&gt;
&lt;br /&gt;
Further elaboration on REP is noted here:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;I reuse code if, and only if, I never need to look at&lt;br /&gt;
the [http://en.wikipedia.org/wiki/Source_code source code] (other than the public portions of header files). I need only link with static&lt;br /&gt;
[http://en.wikipedia.org/wiki/Library_%28computing%29 libraries] or include dynamic libraries. Whenever these libraries are fixed or enhanced, I&lt;br /&gt;
receive a new version which I can then integrate into my system when opportunity allows. That is, I expect the code I am reusing to be treated like a product. It is not maintained&lt;br /&gt;
by me. It is not distributed by me. I am the customer, and the author, or some other entity,&lt;br /&gt;
is responsible for maintaining it. Thus, I can reuse nothing that is not also released. Moreover, when I reuse something&lt;br /&gt;
in a released library, I am in effect a client of the entire library.&amp;quot;[3]&lt;br /&gt;
&lt;br /&gt;
In a nutshell, Martin is stating that reuse (not copying) is useless and meaningless without release. The concept of reuse is vital to elegant [http://en.wikipedia.org/wiki/Object_oriented_design Object-Oriented design] and therefore cannot be properly maintained without release.&lt;br /&gt;
&lt;br /&gt;
=='''''Advantages'''''==&lt;br /&gt;
&lt;br /&gt;
The obvious advantages of REP are:&lt;br /&gt;
&lt;br /&gt;
1. [http://en.wikipedia.org/wiki/Software_maintenance Maintainability]. There is no need to maintain reused code. This is done by the owner of the reused (released) code.&amp;lt;br&amp;gt;&lt;br /&gt;
2. Flexibility. The consumer of the reused code can decide what version and on what timetable the reused code is adopted.&amp;lt;br&amp;gt;&lt;br /&gt;
3. Enhancements. There is no need to make the reused code more efficient or to add function. New function can be added by upgrading to a new version of the reused code.&lt;br /&gt;
&lt;br /&gt;
=='''''Disadvantages'''''==&lt;br /&gt;
&lt;br /&gt;
As REP is a [http://en.wikipedia.org/wiki/Cohesion_%28computer_science%29 Cohesion] Principle, the disadvantages would be similar to disadvantages of cohesion principles.&lt;br /&gt;
&lt;br /&gt;
1. REP is not simple for the maintainer of the code. The code owner must maintain several [http://en.wikipedia.org/wiki/Software_versioning versions] of the code, as well as large [http://en.wikipedia.org/wiki/Software_package_%28installation%29 packages].&amp;lt;br&amp;gt;&lt;br /&gt;
2. The package structure cannot be designed from the top down, meaning that it would not be one of the first things about a system that is designed. Because of this, the package structure remains in a constant state of flux. [3]&amp;lt;br&amp;gt;&lt;br /&gt;
3. The best [http://en.wikipedia.org/wiki/Software_design design] philosophy cannot depend solely on REP. REP is best suited for a system that has gone through the initial planning, design and development stages to ensure that the package structure can be utilized effectively.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''''Example'''''==&lt;br /&gt;
&lt;br /&gt;
The Java Boutique describes a [http://javaboutique.internet.com/Case_Study/ tutorial] for designing a system with, among other principles, REP.&lt;br /&gt;
&lt;br /&gt;
A &amp;quot;bad&amp;quot; example of not following REP is to reuse code by copying the source code. Just a few days after Microsoft released its Windows 7 operating system, it had to apologize to the public for violating the [http://en.wikipedia.org/wiki/Gpl GPL] license.[5] A utility tool it hired the third party to develop contains a chunk of open source code with a [http://en.wikipedia.org/wiki/Gpl GPL] license attached to it. Microsoft had to open its own source code for this utility program.&lt;br /&gt;
&lt;br /&gt;
Copying source code can bring not only embarrassment, but also lawsuit. In 2003, Cisco filed a lawsuit against Huawei, its competitor in the swtich and router market, for alleged theft. Cisco said &amp;quot;portions of its IOS source code found its way into Huawei's operating system for its Quidway routers and switches. Cisco claimed the Huawei OS included text strings, files names and bugs that were identical with Cisco's IOS source code. The suit alleges that Huawei is infringing at least five Cisco patents&amp;quot;.[6]&lt;br /&gt;
&lt;br /&gt;
=='''''Conclusion'''''==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Code should be reused by including the released [http://en.wikipedia.org/wiki/Software_library library], not by copying the code. This ensures the reused code is maintained by a single authority to avoid the divergence of the reused code. In fact, the user should never see the source code for reuse except the included header files - &amp;lt;b&amp;gt;The unit of reuse is the unit of release&amp;lt;/b&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
The users of the library need to know the version/signature for dependency control and for reliable reversal to the originals after failed upgrade. The author need the same information to maintain and support the released product - &amp;lt;b&amp;gt;Effective reuse requires a change control system&amp;lt;/b&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Though a class is the &amp;lt;i&amp;gt;de facto&amp;lt;/i&amp;gt; unit of reuse, its reuse is mostly confined to the author of related classes and collectively make them a large functional unit or package. The REP is targeting a wide audience who are more interested in reuse of a large functional unit or a class in that context. Keeping track of versions of individual classes would be, more often than not, burdensome to users who both use multiple classes within the same package and authors who need to maintain individual classes and their inter-dependencies within the large functional unit. &amp;lt;b&amp;gt;The effective unit of reuse and release is the package&amp;lt;/B&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
REP not only applies to external users, but also applies within the organization among different development groups.&lt;br /&gt;
&lt;br /&gt;
=='''''References'''''==&lt;br /&gt;
&lt;br /&gt;
[1] Design Principles and Patterns: http://www.objectmentor.com/resources/articles/Principles_and_Patterns.pdf &amp;lt;br&amp;gt;&lt;br /&gt;
[2] Reuse Release Equivalence Principle: http://c2.com/cgi/wiki$?ReuseReleaseEquivalencePrinciple&amp;lt;br&amp;gt;&lt;br /&gt;
[3] Granularity: http://www.objectmentor.com/resources/articles/granularity.pdf&amp;lt;br&amp;gt;&lt;br /&gt;
[4] Object Oriented Software Construction, Bertrand Meyer, Prentice Hall, 1988&amp;lt;br&amp;gt;&lt;br /&gt;
[5] Microsoft will open source Windows 7 tool that includes GPL code: http://www.infoworld.com/d/windows/microsoft-will-open-source-windows-7-tool-includes-gpl-code-442&lt;br /&gt;
[6] http://www.theregister.co.uk/2003/01/24/cisco_sues_huawei_over_ip/&lt;/div&gt;</summary>
		<author><name>Kanke</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_16_teamhelm&amp;diff=29805</id>
		<title>CSC/ECE 517 Fall 2009/wiki3 16 teamhelm</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_16_teamhelm&amp;diff=29805"/>
		<updated>2009-11-22T01:58:46Z</updated>

		<summary type="html">&lt;p&gt;Kanke: /* '''''Example''''' */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''The Release Reuse Equivalency Principle (REP)''' ==&lt;br /&gt;
Components can be effectively reused only if they are released through a tracking system.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
=='''''Concept'''''==&lt;br /&gt;
&lt;br /&gt;
The Release Reuse Equivalency Principle (REP), first introduced by Bertrand Meyer [3][4], and later laid down in details by [http://en.wikipedia.org/wiki/Robert_Cecil_Martin Bob Martin], is described as follows:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;quot;''The granule of reuse is the granule of release.''&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Martin elaborates: &amp;quot;A reusable element, be it a component, a class, or a cluster of classes, cannot be&lt;br /&gt;
reused unless it is managed by a release system of some kind. Users will be unwilling&lt;br /&gt;
to use the element if they are forced to upgrade every time the author changes it.&lt;br /&gt;
Thus. even though the author has released a new version of his reusable element, he&lt;br /&gt;
must be willing to support and maintain older versions while his customers go about&lt;br /&gt;
the slow business of getting ready to upgrade. Thus, clients will refuse to reuse an element&lt;br /&gt;
unless the author promises to keep track of version numbers, and maintain old&lt;br /&gt;
versions for awhile.&lt;br /&gt;
Therefore, one criterion for grouping classes into packages is reuse. Since packages&lt;br /&gt;
are the unit of release, they are also the unit of reuse. Therefore architects would do&lt;br /&gt;
well to group reusable classes together into packages.&amp;quot; [1]&lt;br /&gt;
&lt;br /&gt;
=='''''Description'''''==&lt;br /&gt;
&lt;br /&gt;
Martin describes a &amp;quot;release system&amp;quot; in his concept, which refers to a system that is able to track versions of code as it is changed. This is also sometimes referred to as [http://en.wikipedia.org/wiki/Version_control version control]. Some common examples of version control are [http://en.wikipedia.org/wiki/Subversion_%28software%29 SVN], [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] and [http://en.wikipedia.org/wiki/Cmvc CMVC].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Martin also states that customers are slow to upgrade newer versions of code. This is commonly true for several reasons, including fear of instability of software, internal process, management approvals, and downtime for software systems.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Another critical concept here is that Martin states clients will refuse to upgrade unless the author tracks version numbers. This is related to the previous concept, where a client or customer, because of the above factors, may need to revert the system to a previous version of the code because the new version has caused a problem or outage.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
REP has also been described in the following way:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;..in order to effectively reuse code it must arrive in a complete, black-box, package that is to be used but not changed. Users of the code are shielded from changes to it because they can choose when to integrate changes from the package into their own code. While this supports code ownership, and even promotes it, it does not enforce it.&amp;quot; [2]&lt;br /&gt;
&lt;br /&gt;
Further elaboration on REP is noted here:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;I reuse code if, and only if, I never need to look at&lt;br /&gt;
the [http://en.wikipedia.org/wiki/Source_code source code] (other than the public portions of header files). I need only link with static&lt;br /&gt;
[http://en.wikipedia.org/wiki/Library_%28computing%29 libraries] or include dynamic libraries. Whenever these libraries are fixed or enhanced, I&lt;br /&gt;
receive a new version which I can then integrate into my system when opportunity allows. That is, I expect the code I am reusing to be treated like a product. It is not maintained&lt;br /&gt;
by me. It is not distributed by me. I am the customer, and the author, or some other entity,&lt;br /&gt;
is responsible for maintaining it. Thus, I can reuse nothing that is not also released. Moreover, when I reuse something&lt;br /&gt;
in a released library, I am in effect a client of the entire library.&amp;quot;[3]&lt;br /&gt;
&lt;br /&gt;
In a nutshell, Martin is stating that reuse (not copying) is useless and meaningless without release. The concept of reuse is vital to elegant [http://en.wikipedia.org/wiki/Object_oriented_design Object-Oriented design] and therefore cannot be properly maintained without release.&lt;br /&gt;
&lt;br /&gt;
=='''''Advantages'''''==&lt;br /&gt;
&lt;br /&gt;
The obvious advantages of REP are:&lt;br /&gt;
&lt;br /&gt;
1. [http://en.wikipedia.org/wiki/Software_maintenance Maintainability]. There is no need to maintain reused code. This is done by the owner of the reused (released) code.&amp;lt;br&amp;gt;&lt;br /&gt;
2. Flexibility. The consumer of the reused code can decide what version and on what timetable the reused code is adopted.&amp;lt;br&amp;gt;&lt;br /&gt;
3. Enhancements. There is no need to make the reused code more efficient or to add function. New function can be added by upgrading to a new version of the reused code.&lt;br /&gt;
&lt;br /&gt;
=='''''Disadvantages'''''==&lt;br /&gt;
&lt;br /&gt;
As REP is a [http://en.wikipedia.org/wiki/Cohesion_%28computer_science%29 Cohesion] Principle, the disadvantages would be similar to disadvantages of cohesion principles.&lt;br /&gt;
&lt;br /&gt;
1. REP is not simple for the maintainer of the code. The code owner must maintain several [http://en.wikipedia.org/wiki/Software_versioning versions] of the code, as well as large [http://en.wikipedia.org/wiki/Software_package_%28installation%29 packages].&amp;lt;br&amp;gt;&lt;br /&gt;
2. The package structure cannot be designed from the top down, meaning that it would not be one of the first things about a system that is designed. Because of this, the package structure remains in a constant state of flux. [3]&amp;lt;br&amp;gt;&lt;br /&gt;
3. The best [http://en.wikipedia.org/wiki/Software_design design] philosophy cannot depend solely on REP. REP is best suited for a system that has gone through the initial planning, design and development stages to ensure that the package structure can be utilized effectively.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''''Example'''''==&lt;br /&gt;
&lt;br /&gt;
The Java Boutique describes a [http://javaboutique.internet.com/Case_Study/ tutorial] for designing a system with, among other principles, REP.&lt;br /&gt;
&lt;br /&gt;
A &amp;quot;bad&amp;quot; example of not following REP is to reuse code by copying the source code. Just a few days after Microsoft released its Windows 7 operating system, it had to apologize to the public for violating the [http://en.wikipedia.org/wiki/Gpl GPL] license.[5] A utility tool it hired the third party to develop contains a chunk of open source code with a [http://en.wikipedia.org/wiki/Gpl GPL] license attached to it. Microsoft had to open its own source code for this utility program.&lt;br /&gt;
&lt;br /&gt;
Copying source code can bring not only embarrassment, but also lawsuit. In 2003, Cisco filed a lawsuit against Huawei, its competitor in the swtich and router market, for alleged theft. Cisco said &amp;quot;portions of its IOS source code found its way into Huawei's operating system for its Quidway routers and switches. Cisco claimed the Huawei OS included text strings, files names and bugs that were identical with Cisco's IOS source code. The suit alleges that Huawei is infringing at least five Cisco patents&amp;quot;.[6]&lt;br /&gt;
&lt;br /&gt;
=='''''Conclusion'''''==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Code should be reused by including the released [http://en.wikipedia.org/wiki/Software_library library], not by copying the code. This ensures the reused code is maintained by a single authority to avoid the divergence of the reused code. In fact, the user should never see the source code for reuse except the included header files - &amp;lt;b&amp;gt;The unit of reuse is the unit of release&amp;lt;/b&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
The users of the library need to know the version/signature for dependency control and for reliable reversal to the originals after failed upgrade. The author need the same information to maintain and support the released product - &amp;lt;b&amp;gt;Effective reuse requires a change control system&amp;lt;/b&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Though a class is the &amp;lt;i&amp;gt;de facto&amp;lt;/i&amp;gt; unit of reuse, its reuse is mostly confined to the author of related classes and collectively make them a large functional unit or package. The REP is targeting a wide audience who are more interested in reuse of a large functional unit or a class in that context. Keeping track of versions of individual classes would be, more often than not, burdensome to users who both use multiple classes within the same package and authors who need to maintain individual classes and their inter-dependencies within the large functional unit. &amp;lt;b&amp;gt;The effective unit of reuse and release is the package&amp;lt;/B&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
REP not only applies to external users, but also applies within the organization among different development groups.&lt;br /&gt;
&lt;br /&gt;
=='''''References'''''==&lt;br /&gt;
&lt;br /&gt;
[1] Design Principles and Patterns: http://www.objectmentor.com/resources/articles/Principles_and_Patterns.pdf &amp;lt;br&amp;gt;&lt;br /&gt;
[2] Reuse Release Equivalence Principle: http://c2.com/cgi/wiki$?ReuseReleaseEquivalencePrinciple&amp;lt;br&amp;gt;&lt;br /&gt;
[3] Granularity: http://www.objectmentor.com/resources/articles/granularity.pdf&amp;lt;br&amp;gt;&lt;br /&gt;
[4] Object Oriented Software Construction, Bertrand Meyer, Prentice Hall, 1988&amp;lt;br&amp;gt;&lt;br /&gt;
[5] Microsoft will open source Windows 7 tool that includes GPL code: http://www.infoworld.com/d/windows/microsoft-will-open-source-windows-7-tool-includes-gpl-code-442&lt;/div&gt;</summary>
		<author><name>Kanke</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_16_teamhelm&amp;diff=29804</id>
		<title>CSC/ECE 517 Fall 2009/wiki3 16 teamhelm</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_16_teamhelm&amp;diff=29804"/>
		<updated>2009-11-22T01:57:31Z</updated>

		<summary type="html">&lt;p&gt;Kanke: /* '''''Example''''' */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''The Release Reuse Equivalency Principle (REP)''' ==&lt;br /&gt;
Components can be effectively reused only if they are released through a tracking system.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
=='''''Concept'''''==&lt;br /&gt;
&lt;br /&gt;
The Release Reuse Equivalency Principle (REP), first introduced by Bertrand Meyer [3][4], and later laid down in details by [http://en.wikipedia.org/wiki/Robert_Cecil_Martin Bob Martin], is described as follows:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;quot;''The granule of reuse is the granule of release.''&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Martin elaborates: &amp;quot;A reusable element, be it a component, a class, or a cluster of classes, cannot be&lt;br /&gt;
reused unless it is managed by a release system of some kind. Users will be unwilling&lt;br /&gt;
to use the element if they are forced to upgrade every time the author changes it.&lt;br /&gt;
Thus. even though the author has released a new version of his reusable element, he&lt;br /&gt;
must be willing to support and maintain older versions while his customers go about&lt;br /&gt;
the slow business of getting ready to upgrade. Thus, clients will refuse to reuse an element&lt;br /&gt;
unless the author promises to keep track of version numbers, and maintain old&lt;br /&gt;
versions for awhile.&lt;br /&gt;
Therefore, one criterion for grouping classes into packages is reuse. Since packages&lt;br /&gt;
are the unit of release, they are also the unit of reuse. Therefore architects would do&lt;br /&gt;
well to group reusable classes together into packages.&amp;quot; [1]&lt;br /&gt;
&lt;br /&gt;
=='''''Description'''''==&lt;br /&gt;
&lt;br /&gt;
Martin describes a &amp;quot;release system&amp;quot; in his concept, which refers to a system that is able to track versions of code as it is changed. This is also sometimes referred to as [http://en.wikipedia.org/wiki/Version_control version control]. Some common examples of version control are [http://en.wikipedia.org/wiki/Subversion_%28software%29 SVN], [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] and [http://en.wikipedia.org/wiki/Cmvc CMVC].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Martin also states that customers are slow to upgrade newer versions of code. This is commonly true for several reasons, including fear of instability of software, internal process, management approvals, and downtime for software systems.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Another critical concept here is that Martin states clients will refuse to upgrade unless the author tracks version numbers. This is related to the previous concept, where a client or customer, because of the above factors, may need to revert the system to a previous version of the code because the new version has caused a problem or outage.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
REP has also been described in the following way:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;..in order to effectively reuse code it must arrive in a complete, black-box, package that is to be used but not changed. Users of the code are shielded from changes to it because they can choose when to integrate changes from the package into their own code. While this supports code ownership, and even promotes it, it does not enforce it.&amp;quot; [2]&lt;br /&gt;
&lt;br /&gt;
Further elaboration on REP is noted here:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;I reuse code if, and only if, I never need to look at&lt;br /&gt;
the [http://en.wikipedia.org/wiki/Source_code source code] (other than the public portions of header files). I need only link with static&lt;br /&gt;
[http://en.wikipedia.org/wiki/Library_%28computing%29 libraries] or include dynamic libraries. Whenever these libraries are fixed or enhanced, I&lt;br /&gt;
receive a new version which I can then integrate into my system when opportunity allows. That is, I expect the code I am reusing to be treated like a product. It is not maintained&lt;br /&gt;
by me. It is not distributed by me. I am the customer, and the author, or some other entity,&lt;br /&gt;
is responsible for maintaining it. Thus, I can reuse nothing that is not also released. Moreover, when I reuse something&lt;br /&gt;
in a released library, I am in effect a client of the entire library.&amp;quot;[3]&lt;br /&gt;
&lt;br /&gt;
In a nutshell, Martin is stating that reuse (not copying) is useless and meaningless without release. The concept of reuse is vital to elegant [http://en.wikipedia.org/wiki/Object_oriented_design Object-Oriented design] and therefore cannot be properly maintained without release.&lt;br /&gt;
&lt;br /&gt;
=='''''Advantages'''''==&lt;br /&gt;
&lt;br /&gt;
The obvious advantages of REP are:&lt;br /&gt;
&lt;br /&gt;
1. [http://en.wikipedia.org/wiki/Software_maintenance Maintainability]. There is no need to maintain reused code. This is done by the owner of the reused (released) code.&amp;lt;br&amp;gt;&lt;br /&gt;
2. Flexibility. The consumer of the reused code can decide what version and on what timetable the reused code is adopted.&amp;lt;br&amp;gt;&lt;br /&gt;
3. Enhancements. There is no need to make the reused code more efficient or to add function. New function can be added by upgrading to a new version of the reused code.&lt;br /&gt;
&lt;br /&gt;
=='''''Disadvantages'''''==&lt;br /&gt;
&lt;br /&gt;
As REP is a [http://en.wikipedia.org/wiki/Cohesion_%28computer_science%29 Cohesion] Principle, the disadvantages would be similar to disadvantages of cohesion principles.&lt;br /&gt;
&lt;br /&gt;
1. REP is not simple for the maintainer of the code. The code owner must maintain several [http://en.wikipedia.org/wiki/Software_versioning versions] of the code, as well as large [http://en.wikipedia.org/wiki/Software_package_%28installation%29 packages].&amp;lt;br&amp;gt;&lt;br /&gt;
2. The package structure cannot be designed from the top down, meaning that it would not be one of the first things about a system that is designed. Because of this, the package structure remains in a constant state of flux. [3]&amp;lt;br&amp;gt;&lt;br /&gt;
3. The best [http://en.wikipedia.org/wiki/Software_design design] philosophy cannot depend solely on REP. REP is best suited for a system that has gone through the initial planning, design and development stages to ensure that the package structure can be utilized effectively.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''''Example'''''==&lt;br /&gt;
&lt;br /&gt;
The Java Boutique describes a [http://javaboutique.internet.com/Case_Study/ tutorial] for designing a system with, among other principles, REP.&lt;br /&gt;
&lt;br /&gt;
A &amp;quot;bad&amp;quot; example of not following REP is to reuse code by copying the source code. Just a few days after Microsoft released its Windows 7 operating system, it had to apologize to the public for violating the [http://en.wikipedia.org/wiki/Gpl GPL] license.[5] A utility tool it hired the third party to develop contains a chunk of open source code with a [http://en.wikipedia.org/wiki/Gpl GPL] license attached to it. Microsoft had to open its own source code for this utility program.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Copying&amp;quot; can bring not only embarrassment, but also lawsuit. In 2003, Cisco filed a lawsuit against Huawei, its competitor in the swtich and router market, for alleged theft. Cisco said &amp;quot;portions of its IOS source code found its way into Huawei's operating system for its Quidway routers and switches. Cisco claimed the Huawei OS included text strings, files names and bugs that were identical with Cisco's IOS source code. The suit alleges that Huawei is infringing at least five Cisco patents&amp;quot;.[6]&lt;br /&gt;
&lt;br /&gt;
=='''''Conclusion'''''==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Code should be reused by including the released [http://en.wikipedia.org/wiki/Software_library library], not by copying the code. This ensures the reused code is maintained by a single authority to avoid the divergence of the reused code. In fact, the user should never see the source code for reuse except the included header files - &amp;lt;b&amp;gt;The unit of reuse is the unit of release&amp;lt;/b&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
The users of the library need to know the version/signature for dependency control and for reliable reversal to the originals after failed upgrade. The author need the same information to maintain and support the released product - &amp;lt;b&amp;gt;Effective reuse requires a change control system&amp;lt;/b&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Though a class is the &amp;lt;i&amp;gt;de facto&amp;lt;/i&amp;gt; unit of reuse, its reuse is mostly confined to the author of related classes and collectively make them a large functional unit or package. The REP is targeting a wide audience who are more interested in reuse of a large functional unit or a class in that context. Keeping track of versions of individual classes would be, more often than not, burdensome to users who both use multiple classes within the same package and authors who need to maintain individual classes and their inter-dependencies within the large functional unit. &amp;lt;b&amp;gt;The effective unit of reuse and release is the package&amp;lt;/B&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
REP not only applies to external users, but also applies within the organization among different development groups.&lt;br /&gt;
&lt;br /&gt;
=='''''References'''''==&lt;br /&gt;
&lt;br /&gt;
[1] Design Principles and Patterns: http://www.objectmentor.com/resources/articles/Principles_and_Patterns.pdf &amp;lt;br&amp;gt;&lt;br /&gt;
[2] Reuse Release Equivalence Principle: http://c2.com/cgi/wiki$?ReuseReleaseEquivalencePrinciple&amp;lt;br&amp;gt;&lt;br /&gt;
[3] Granularity: http://www.objectmentor.com/resources/articles/granularity.pdf&amp;lt;br&amp;gt;&lt;br /&gt;
[4] Object Oriented Software Construction, Bertrand Meyer, Prentice Hall, 1988&amp;lt;br&amp;gt;&lt;br /&gt;
[5] Microsoft will open source Windows 7 tool that includes GPL code: http://www.infoworld.com/d/windows/microsoft-will-open-source-windows-7-tool-includes-gpl-code-442&lt;/div&gt;</summary>
		<author><name>Kanke</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_16_teamhelm&amp;diff=29726</id>
		<title>CSC/ECE 517 Fall 2009/wiki3 16 teamhelm</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_16_teamhelm&amp;diff=29726"/>
		<updated>2009-11-19T14:15:46Z</updated>

		<summary type="html">&lt;p&gt;Kanke: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''The Release Reuse Equivalency Principle (REP)''' ==&lt;br /&gt;
Components can be effectively reused only if they are released through a tracking system.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
=='''''Concept'''''==&lt;br /&gt;
&lt;br /&gt;
The Release Reuse Equivalency Principle (REP), first introduced by Bertrand Meyer [3][4], and later laid down in details by [http://en.wikipedia.org/wiki/Robert_Cecil_Martin Bob Martin], is described as follows:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;quot;''The granule of reuse is the granule of release.''&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Martin elaborates: &amp;quot;A reusable element, be it a component, a class, or a cluster of classes, cannot be&lt;br /&gt;
reused unless it is managed by a release system of some kind. Users will be unwilling&lt;br /&gt;
to use the element if they are forced to upgrade every time the author changes it.&lt;br /&gt;
Thus. even though the author has released a new version of his reusable element, he&lt;br /&gt;
must be willing to support and maintain older versions while his customers go about&lt;br /&gt;
the slow business of getting ready to upgrade. Thus, clients will refuse to reuse an element&lt;br /&gt;
unless the author promises to keep track of version numbers, and maintain old&lt;br /&gt;
versions for awhile.&lt;br /&gt;
Therefore, one criterion for grouping classes into packages is reuse. Since packages&lt;br /&gt;
are the unit of release, they are also the unit of reuse. Therefore architects would do&lt;br /&gt;
well to group reusable classes together into packages.&amp;quot; [1]&lt;br /&gt;
&lt;br /&gt;
=='''''Description'''''==&lt;br /&gt;
&lt;br /&gt;
Martin describes a &amp;quot;release system&amp;quot; in his concept, which refers to a system that is able to track versions of code as it is changed. This is also sometimes referred to as [http://en.wikipedia.org/wiki/Version_control version control]. Some common examples of version control are [http://en.wikipedia.org/wiki/Subversion_%28software%29 SVN], [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] and [http://en.wikipedia.org/wiki/Cmvc CMVC].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Martin also states that customers are slow to upgrade newer versions of code. This is commonly true for several reasons, including fear of instability of software, internal process, management approvals, and downtime for software systems.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Another critical concept here is that Martin states clients will refuse to upgrade unless the author tracks version numbers. This is related to the previous concept, where a client or customer, because of the above factors, may need to revert the system to a previous version of the code because the new version has caused a problem or outage.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
REP has also been described in the following way:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;..in order to effectively reuse code it must arrive in a complete, black-box, package that is to be used but not changed. Users of the code are shielded from changes to it because they can choose when to integrate changes from the package into their own code. While this supports code ownership, and even promotes it, it does not enforce it.&amp;quot; [2]&lt;br /&gt;
&lt;br /&gt;
Further elaboration on REP is noted here:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;I reuse code if, and only if, I never need to look at&lt;br /&gt;
the [http://en.wikipedia.org/wiki/Source_code source code] (other than the public portions of header files). I need only link with static&lt;br /&gt;
[http://en.wikipedia.org/wiki/Library_%28computing%29 libraries] or include dynamic libraries. Whenever these libraries are fixed or enhanced, I&lt;br /&gt;
receive a new version which I can then integrate into my system when opportunity allows. That is, I expect the code I am reusing to be treated like a product. It is not maintained&lt;br /&gt;
by me. It is not distributed by me. I am the customer, and the author, or some other entity,&lt;br /&gt;
is responsible for maintaining it. Thus, I can reuse nothing that is not also released. Moreover, when I reuse something&lt;br /&gt;
in a released library, I am in effect a client of the entire library.&amp;quot;[3]&lt;br /&gt;
&lt;br /&gt;
In a nutshell, Martin is stating that reuse (not copying) is useless and meaningless without release. The concept of reuse is vital to elegant [http://en.wikipedia.org/wiki/Object_oriented_design Object-Oriented design] and therefore cannot be properly maintained without release.&lt;br /&gt;
&lt;br /&gt;
=='''''Advantages'''''==&lt;br /&gt;
&lt;br /&gt;
The obvious advantages of REP are:&lt;br /&gt;
&lt;br /&gt;
1. [http://en.wikipedia.org/wiki/Software_maintenance Maintainability]. There is no need to maintain reused code. This is done by the owner of the reused (released) code.&amp;lt;br&amp;gt;&lt;br /&gt;
2. Flexibility. The consumer of the reused code can decide what version and on what timetable the reused code is adopted.&amp;lt;br&amp;gt;&lt;br /&gt;
3. Enhancements. There is no need to make the reused code more efficient or to add function. New function can be added by upgrading to a new version of the reused code.&lt;br /&gt;
&lt;br /&gt;
=='''''Disadvantages'''''==&lt;br /&gt;
&lt;br /&gt;
As REP is a [http://en.wikipedia.org/wiki/Cohesion_%28computer_science%29 Cohesion] Principle, the disadvantages would be similar to disadvantages of cohesion principles.&lt;br /&gt;
&lt;br /&gt;
1. REP is not simple for the maintainer of the code. The code owner must maintain several [http://en.wikipedia.org/wiki/Software_versioning versions] of the code, as well as large [http://en.wikipedia.org/wiki/Software_package_%28installation%29 packages].&amp;lt;br&amp;gt;&lt;br /&gt;
2. The package structure cannot be designed from the top down, meaning that it would not be one of the first things about a system that is designed. Because of this, the package structure remains in a constant state of flux. [3]&amp;lt;br&amp;gt;&lt;br /&gt;
3. The best [http://en.wikipedia.org/wiki/Software_design design] philosophy cannot depend solely on REP. REP is best suited for a system that has gone through the initial planning, design and development stages to ensure that the package structure can be utilized effectively.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''''Example'''''==&lt;br /&gt;
&lt;br /&gt;
The Java Boutique describes a [http://javaboutique.internet.com/Case_Study/ tutorial] for designing a system with, among other principles, REP.&lt;br /&gt;
&lt;br /&gt;
A &amp;quot;bad&amp;quot; example of not following REP is to reuse code by copying the source code. Just a few days after Microsoft released its Windows 7 operating system, it had to apologize to the public for violating the [http://en.wikipedia.org/wiki/Gpl GPL] license.[5] A utility tool it hired the third party to develop contains a chunk of open source code with a [http://en.wikipedia.org/wiki/Gpl GPL] license attached to it. Microsoft had to open its own source code for this utility program.&lt;br /&gt;
&lt;br /&gt;
=='''''Conclusion'''''==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Code should be reused by including the released [http://en.wikipedia.org/wiki/Software_library library], not by copying the code. This ensures the reused code is maintained by a single authority to avoid the divergence of the reused code. In fact, the user should never see the source code for reuse except the included header files - &amp;lt;b&amp;gt;The unit of reuse is the unit of release&amp;lt;/b&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
The users of the library need to know the version/signature for dependency control and for reliable reversal to the originals after failed upgrade. The author need the same information to maintain and support the released product - &amp;lt;b&amp;gt;Effective reuse requires a change control system&amp;lt;/b&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Though a class is the &amp;lt;i&amp;gt;de facto&amp;lt;/i&amp;gt; unit of reuse, its reuse is mostly confined to the author of related classes and collectively make them a large functional unit or package. The REP is targeting a wide audience who are more interested in reuse of a large functional unit or a class in that context. Keeping track of versions of individual classes would be, more often than not, burdensome to users who both use multiple classes within the same package and authors who need to maintain individual classes and their inter-dependencies within the large functional unit. &amp;lt;b&amp;gt;The effective unit of reuse and release is the package&amp;lt;/B&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
REP not only applies to external users, but also applies within the organization among different development groups.&lt;br /&gt;
&lt;br /&gt;
=='''''References'''''==&lt;br /&gt;
&lt;br /&gt;
[1] Design Principles and Patterns: http://www.objectmentor.com/resources/articles/Principles_and_Patterns.pdf &amp;lt;br&amp;gt;&lt;br /&gt;
[2] Reuse Release Equivalence Principle: http://c2.com/cgi/wiki$?ReuseReleaseEquivalencePrinciple&amp;lt;br&amp;gt;&lt;br /&gt;
[3] Granularity: http://www.objectmentor.com/resources/articles/granularity.pdf&amp;lt;br&amp;gt;&lt;br /&gt;
[4] Object Oriented Software Construction, Bertrand Meyer, Prentice Hall, 1988&amp;lt;br&amp;gt;&lt;br /&gt;
[5] Microsoft will open source Windows 7 tool that includes GPL code: http://www.infoworld.com/d/windows/microsoft-will-open-source-windows-7-tool-includes-gpl-code-442&lt;/div&gt;</summary>
		<author><name>Kanke</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_teamhelm&amp;diff=29725</id>
		<title>CSC/ECE 517 Fall 2009/wiki3 teamhelm</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_teamhelm&amp;diff=29725"/>
		<updated>2009-11-19T14:14:10Z</updated>

		<summary type="html">&lt;p&gt;Kanke: /* '''''References''''' */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''The Release Reuse Equivalency Principle (REP)''' ==&lt;br /&gt;
Components can be effectively reused only if they are released through a tracking system.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
=='''''Concept'''''==&lt;br /&gt;
&lt;br /&gt;
The Release Reuse Equivalency Principle (REP), first introduced by [http://en.wikipedia.org/wiki/Robert_Cecil_Martin Bob Martin], is described as follows:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;quot;''The granule of reuse is the granule of release.''&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Martin elaborates: &amp;quot;A reusable element, be it a component, a class, or a cluster of classes, cannot be&lt;br /&gt;
reused unless it is managed by a release system of some kind. Users will be unwilling&lt;br /&gt;
to use the element if they are forced to upgrade every time the author changes it.&lt;br /&gt;
Thus. even though the author has released a new version of his reusable element, he&lt;br /&gt;
must be willing to support and maintain older versions while his customers go about&lt;br /&gt;
the slow business of getting ready to upgrade. Thus, clients will refuse to reuse an element&lt;br /&gt;
unless the author promises to keep track of version numbers, and maintain old&lt;br /&gt;
versions for awhile.&lt;br /&gt;
Therefore, one criterion for grouping classes into packages is reuse. Since packages&lt;br /&gt;
are the unit of release, they are also the unit of reuse. Therefore architects would do&lt;br /&gt;
well to group reusable classes together into packages.&amp;quot; [1]&lt;br /&gt;
&lt;br /&gt;
=='''''Description'''''==&lt;br /&gt;
&lt;br /&gt;
Martin describes a &amp;quot;release system&amp;quot; in his concept, which refers to a system that is able to track versions of code as it is changed. This is also sometimes referred to as [http://en.wikipedia.org/wiki/Version_control version control]. Some common examples of version control are [http://en.wikipedia.org/wiki/Subversion_%28software%29 SVN], [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] and [http://en.wikipedia.org/wiki/Cmvc CMVC].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Martin also states that customers are slow to upgrade newer versions of code. This is commonly true for several reasons, including fear of instability of software, internal process, management approvals, and downtime for software systems.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Another critical concept here is that Martin states clients will refuse to upgrade unless the author tracks version numbers. This is related to the previous concept, where a client or customer, because of the above factors, may need to revert the system to a previous version of the code because the new version has caused a problem or outage.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
REP has also been described in the following way:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;..in order to effectively reuse code it must arrive in a complete, black-box, package that is to be used but not changed. Users of the code are shielded from changes to it because they can choose when to integrate changes from the package into their own code. While this supports code ownership, and even promotes it, it does not enforce it.&amp;quot; [2]&lt;br /&gt;
&lt;br /&gt;
Further elaboration on REP is noted here:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;I reuse code if, and only if, I never need to look at&lt;br /&gt;
the [http://en.wikipedia.org/wiki/Source_code source code] (other than the public portions of header files). I need only link with static&lt;br /&gt;
[http://en.wikipedia.org/wiki/Library_%28computing%29 libraries] or include dynamic libraries. Whenever these libraries are fixed or enhanced, I&lt;br /&gt;
receive a new version which I can then integrate into my system when opportunity allows. That is, I expect the code I am reusing to be treated like a product. It is not maintained&lt;br /&gt;
by me. It is not distributed by me. I am the customer, and the author, or some other entity,&lt;br /&gt;
is responsible for maintaining it. Thus, I can reuse nothing that is not also released. Moreover, when I reuse something&lt;br /&gt;
in a released library, I am in effect a client of the entire library.&amp;quot;[3]&lt;br /&gt;
&lt;br /&gt;
In a nutshell, Martin is stating that reuse (not copying) is useless and meaningless without release. The concept of reuse is vital to elegant [http://en.wikipedia.org/wiki/Object_oriented_design Object-Oriented design] and therefore cannot be properly maintained without release.&lt;br /&gt;
&lt;br /&gt;
=='''''Advantages'''''==&lt;br /&gt;
&lt;br /&gt;
The obvious advantages of REP are:&lt;br /&gt;
&lt;br /&gt;
1. [http://en.wikipedia.org/wiki/Software_maintenance Maintainability]. There is no need to maintain reused code. This is done by the owner of the reused (released) code.&amp;lt;br&amp;gt;&lt;br /&gt;
2. Flexibility. The consumer of the reused code can decide what version and on what timetable the reused code is adopted.&amp;lt;br&amp;gt;&lt;br /&gt;
3. Enhancements. There is no need to make the reused code more efficient or to add function. New function can be added by upgrading to a new version of the reused code.&lt;br /&gt;
&lt;br /&gt;
=='''''Disadvantages'''''==&lt;br /&gt;
&lt;br /&gt;
As REP is a [http://en.wikipedia.org/wiki/Cohesion_%28computer_science%29 Cohesion] Principle, the disadvantages would be similar to disadvantages of cohesion principles.&lt;br /&gt;
&lt;br /&gt;
1. REP is not simple for the maintainer of the code. The code owner must maintain several [http://en.wikipedia.org/wiki/Software_versioning versions] of the code, as well as large [http://en.wikipedia.org/wiki/Software_package_%28installation%29 packages].&amp;lt;br&amp;gt;&lt;br /&gt;
2. The package structure cannot be designed from the top down, meaning that it would not be one of the first things about a system that is designed. Because of this, the package structure remains in a constant state of flux. [3]&amp;lt;br&amp;gt;&lt;br /&gt;
3. The best [http://en.wikipedia.org/wiki/Software_design design] philosophy cannot depend solely on REP. REP is best suited for a system that has gone through the initial planning, design and development stages to ensure that the package structure can be utilized effectively.&lt;br /&gt;
&lt;br /&gt;
=='''''Example'''''==&lt;br /&gt;
&lt;br /&gt;
The Java Boutique describes a [http://javaboutique.internet.com/Case_Study/ tutorial] for designing a system with, among other principles, REP.&lt;br /&gt;
&lt;br /&gt;
A &amp;quot;bad&amp;quot; example of not following REP is to reuse code by copying the source code. Just a few days after Microsoft released its Windows 7 operating system, it had to apologize to the public for violating the [http://en.wikipedia.org/wiki/Gpl GPL] license.[5] A utility tool it hired the third party to develop contains a chunk of open source code with a [http://en.wikipedia.org/wiki/Gpl GPL] license attached to it. Microsoft had to open its own source code for this utility program.&lt;br /&gt;
&lt;br /&gt;
=='''''Conclusion'''''==&lt;br /&gt;
&lt;br /&gt;
Code should be reused by including the released [http://en.wikipedia.org/wiki/Software_library library], not by copying the code. This ensures the reused code is maintained by a single authority to avoid the divergence of the reused code. In fact, the user should never see the source code for reuse except the included header files - &amp;lt;b&amp;gt;The unit of reuse is the unit of release&amp;lt;/b&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
The users of the library need to know the version/signature for dependency control and for reliable reversal to the originals after failed upgrade. The author need the same information to maintain and support the released product - &amp;lt;b&amp;gt;Effective reuse requires a change control system&amp;lt;/b&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Though a class is the &amp;lt;i&amp;gt;de facto&amp;lt;/i&amp;gt; unit of reuse, its reuse is mostly confined to the author of related classes and collectively make them a large functional unit or package. The REP is targeting a wide audience who are more interested in reuse of a large functional unit or a class in that context. Keeping track of versions of individual classes would be, more often than not, burdensome to users who both use multiple classes within the same package and authors who need to maintain individual classes and their inter-dependencies within the large functional unit. &amp;lt;b&amp;gt;The effective unit of reuse and release is the package&amp;lt;/B&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
REP not only applies to external users, but also applies within the organization among different development groups.&lt;br /&gt;
&lt;br /&gt;
=='''''References'''''==&lt;br /&gt;
&lt;br /&gt;
[1] Design Principles and Patterns: http://www.objectmentor.com/resources/articles/Principles_and_Patterns.pdf &amp;lt;br&amp;gt;&lt;br /&gt;
[2] Reuse Release Equivalence Principle: http://c2.com/cgi/wiki$?ReuseReleaseEquivalencePrinciple&amp;lt;br&amp;gt;&lt;br /&gt;
[3] Granularity: http://www.objectmentor.com/resources/articles/granularity.pdf&amp;lt;br&amp;gt;&lt;br /&gt;
[4] Object Oriented Software Construction, Bertrand Meyer, Prentice Hall, 1988&lt;br /&gt;
[5] Microsoft will open source Windows 7 tool that includes GPL code: http://www.infoworld.com/d/windows/microsoft-will-open-source-windows-7-tool-includes-gpl-code-442&lt;/div&gt;</summary>
		<author><name>Kanke</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_teamhelm&amp;diff=29724</id>
		<title>CSC/ECE 517 Fall 2009/wiki3 teamhelm</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_teamhelm&amp;diff=29724"/>
		<updated>2009-11-19T14:13:34Z</updated>

		<summary type="html">&lt;p&gt;Kanke: /* '''''Example''''' */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''The Release Reuse Equivalency Principle (REP)''' ==&lt;br /&gt;
Components can be effectively reused only if they are released through a tracking system.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
=='''''Concept'''''==&lt;br /&gt;
&lt;br /&gt;
The Release Reuse Equivalency Principle (REP), first introduced by [http://en.wikipedia.org/wiki/Robert_Cecil_Martin Bob Martin], is described as follows:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;quot;''The granule of reuse is the granule of release.''&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Martin elaborates: &amp;quot;A reusable element, be it a component, a class, or a cluster of classes, cannot be&lt;br /&gt;
reused unless it is managed by a release system of some kind. Users will be unwilling&lt;br /&gt;
to use the element if they are forced to upgrade every time the author changes it.&lt;br /&gt;
Thus. even though the author has released a new version of his reusable element, he&lt;br /&gt;
must be willing to support and maintain older versions while his customers go about&lt;br /&gt;
the slow business of getting ready to upgrade. Thus, clients will refuse to reuse an element&lt;br /&gt;
unless the author promises to keep track of version numbers, and maintain old&lt;br /&gt;
versions for awhile.&lt;br /&gt;
Therefore, one criterion for grouping classes into packages is reuse. Since packages&lt;br /&gt;
are the unit of release, they are also the unit of reuse. Therefore architects would do&lt;br /&gt;
well to group reusable classes together into packages.&amp;quot; [1]&lt;br /&gt;
&lt;br /&gt;
=='''''Description'''''==&lt;br /&gt;
&lt;br /&gt;
Martin describes a &amp;quot;release system&amp;quot; in his concept, which refers to a system that is able to track versions of code as it is changed. This is also sometimes referred to as [http://en.wikipedia.org/wiki/Version_control version control]. Some common examples of version control are [http://en.wikipedia.org/wiki/Subversion_%28software%29 SVN], [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] and [http://en.wikipedia.org/wiki/Cmvc CMVC].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Martin also states that customers are slow to upgrade newer versions of code. This is commonly true for several reasons, including fear of instability of software, internal process, management approvals, and downtime for software systems.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Another critical concept here is that Martin states clients will refuse to upgrade unless the author tracks version numbers. This is related to the previous concept, where a client or customer, because of the above factors, may need to revert the system to a previous version of the code because the new version has caused a problem or outage.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
REP has also been described in the following way:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;..in order to effectively reuse code it must arrive in a complete, black-box, package that is to be used but not changed. Users of the code are shielded from changes to it because they can choose when to integrate changes from the package into their own code. While this supports code ownership, and even promotes it, it does not enforce it.&amp;quot; [2]&lt;br /&gt;
&lt;br /&gt;
Further elaboration on REP is noted here:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;I reuse code if, and only if, I never need to look at&lt;br /&gt;
the [http://en.wikipedia.org/wiki/Source_code source code] (other than the public portions of header files). I need only link with static&lt;br /&gt;
[http://en.wikipedia.org/wiki/Library_%28computing%29 libraries] or include dynamic libraries. Whenever these libraries are fixed or enhanced, I&lt;br /&gt;
receive a new version which I can then integrate into my system when opportunity allows. That is, I expect the code I am reusing to be treated like a product. It is not maintained&lt;br /&gt;
by me. It is not distributed by me. I am the customer, and the author, or some other entity,&lt;br /&gt;
is responsible for maintaining it. Thus, I can reuse nothing that is not also released. Moreover, when I reuse something&lt;br /&gt;
in a released library, I am in effect a client of the entire library.&amp;quot;[3]&lt;br /&gt;
&lt;br /&gt;
In a nutshell, Martin is stating that reuse (not copying) is useless and meaningless without release. The concept of reuse is vital to elegant [http://en.wikipedia.org/wiki/Object_oriented_design Object-Oriented design] and therefore cannot be properly maintained without release.&lt;br /&gt;
&lt;br /&gt;
=='''''Advantages'''''==&lt;br /&gt;
&lt;br /&gt;
The obvious advantages of REP are:&lt;br /&gt;
&lt;br /&gt;
1. [http://en.wikipedia.org/wiki/Software_maintenance Maintainability]. There is no need to maintain reused code. This is done by the owner of the reused (released) code.&amp;lt;br&amp;gt;&lt;br /&gt;
2. Flexibility. The consumer of the reused code can decide what version and on what timetable the reused code is adopted.&amp;lt;br&amp;gt;&lt;br /&gt;
3. Enhancements. There is no need to make the reused code more efficient or to add function. New function can be added by upgrading to a new version of the reused code.&lt;br /&gt;
&lt;br /&gt;
=='''''Disadvantages'''''==&lt;br /&gt;
&lt;br /&gt;
As REP is a [http://en.wikipedia.org/wiki/Cohesion_%28computer_science%29 Cohesion] Principle, the disadvantages would be similar to disadvantages of cohesion principles.&lt;br /&gt;
&lt;br /&gt;
1. REP is not simple for the maintainer of the code. The code owner must maintain several [http://en.wikipedia.org/wiki/Software_versioning versions] of the code, as well as large [http://en.wikipedia.org/wiki/Software_package_%28installation%29 packages].&amp;lt;br&amp;gt;&lt;br /&gt;
2. The package structure cannot be designed from the top down, meaning that it would not be one of the first things about a system that is designed. Because of this, the package structure remains in a constant state of flux. [3]&amp;lt;br&amp;gt;&lt;br /&gt;
3. The best [http://en.wikipedia.org/wiki/Software_design design] philosophy cannot depend solely on REP. REP is best suited for a system that has gone through the initial planning, design and development stages to ensure that the package structure can be utilized effectively.&lt;br /&gt;
&lt;br /&gt;
=='''''Example'''''==&lt;br /&gt;
&lt;br /&gt;
The Java Boutique describes a [http://javaboutique.internet.com/Case_Study/ tutorial] for designing a system with, among other principles, REP.&lt;br /&gt;
&lt;br /&gt;
A &amp;quot;bad&amp;quot; example of not following REP is to reuse code by copying the source code. Just a few days after Microsoft released its Windows 7 operating system, it had to apologize to the public for violating the [http://en.wikipedia.org/wiki/Gpl GPL] license.[5] A utility tool it hired the third party to develop contains a chunk of open source code with a [http://en.wikipedia.org/wiki/Gpl GPL] license attached to it. Microsoft had to open its own source code for this utility program.&lt;br /&gt;
&lt;br /&gt;
=='''''Conclusion'''''==&lt;br /&gt;
&lt;br /&gt;
Code should be reused by including the released [http://en.wikipedia.org/wiki/Software_library library], not by copying the code. This ensures the reused code is maintained by a single authority to avoid the divergence of the reused code. In fact, the user should never see the source code for reuse except the included header files - &amp;lt;b&amp;gt;The unit of reuse is the unit of release&amp;lt;/b&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
The users of the library need to know the version/signature for dependency control and for reliable reversal to the originals after failed upgrade. The author need the same information to maintain and support the released product - &amp;lt;b&amp;gt;Effective reuse requires a change control system&amp;lt;/b&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Though a class is the &amp;lt;i&amp;gt;de facto&amp;lt;/i&amp;gt; unit of reuse, its reuse is mostly confined to the author of related classes and collectively make them a large functional unit or package. The REP is targeting a wide audience who are more interested in reuse of a large functional unit or a class in that context. Keeping track of versions of individual classes would be, more often than not, burdensome to users who both use multiple classes within the same package and authors who need to maintain individual classes and their inter-dependencies within the large functional unit. &amp;lt;b&amp;gt;The effective unit of reuse and release is the package&amp;lt;/B&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
REP not only applies to external users, but also applies within the organization among different development groups.&lt;br /&gt;
&lt;br /&gt;
=='''''References'''''==&lt;br /&gt;
&lt;br /&gt;
[1] Design Principles and Patterns: http://www.objectmentor.com/resources/articles/Principles_and_Patterns.pdf &amp;lt;br&amp;gt;&lt;br /&gt;
[2] Reuse Release Equivalence Principle: http://c2.com/cgi/wiki$?ReuseReleaseEquivalencePrinciple&amp;lt;br&amp;gt;&lt;br /&gt;
[3] Granularity: http://www.objectmentor.com/resources/articles/granularity.pdf&amp;lt;br&amp;gt;&lt;br /&gt;
[4] Object Oriented Software Construction, Bertrand Meyer, Prentice Hall, 1988&lt;/div&gt;</summary>
		<author><name>Kanke</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_16_teamhelm&amp;diff=29723</id>
		<title>CSC/ECE 517 Fall 2009/wiki3 16 teamhelm</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_16_teamhelm&amp;diff=29723"/>
		<updated>2009-11-19T14:11:04Z</updated>

		<summary type="html">&lt;p&gt;Kanke: /* '''''Conclusion''''' */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''The Release Reuse Equivalency Principle (REP)''' ==&lt;br /&gt;
Components can be effectively reused only if they are released through a tracking system.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
=='''''Concept'''''==&lt;br /&gt;
&lt;br /&gt;
The Release Reuse Equivalency Principle (REP), first introduced by Bertrand Meyer [3][4], and later laid down in details by [http://en.wikipedia.org/wiki/Robert_Cecil_Martin Bob Martin], is described as follows:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;quot;''The granule of reuse is the granule of release.''&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Martin elaborates: &amp;quot;A reusable element, be it a component, a class, or a cluster of classes, cannot be&lt;br /&gt;
reused unless it is managed by a release system of some kind. Users will be unwilling&lt;br /&gt;
to use the element if they are forced to upgrade every time the author changes it.&lt;br /&gt;
Thus. even though the author has released a new version of his reusable element, he&lt;br /&gt;
must be willing to support and maintain older versions while his customers go about&lt;br /&gt;
the slow business of getting ready to upgrade. Thus, clients will refuse to reuse an element&lt;br /&gt;
unless the author promises to keep track of version numbers, and maintain old&lt;br /&gt;
versions for awhile.&lt;br /&gt;
Therefore, one criterion for grouping classes into packages is reuse. Since packages&lt;br /&gt;
are the unit of release, they are also the unit of reuse. Therefore architects would do&lt;br /&gt;
well to group reusable classes together into packages.&amp;quot; [1]&lt;br /&gt;
&lt;br /&gt;
=='''''Description'''''==&lt;br /&gt;
&lt;br /&gt;
Martin describes a &amp;quot;release system&amp;quot; in his concept, which refers to a system that is able to track versions of code as it is changed. This is also sometimes referred to as [http://en.wikipedia.org/wiki/Version_control version control]. Some common examples of version control are [http://en.wikipedia.org/wiki/Subversion_%28software%29 SVN], [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] and [http://en.wikipedia.org/wiki/Cmvc CMVC].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Martin also states that customers are slow to upgrade newer versions of code. This is commonly true for several reasons, including fear of instability of software, internal process, management approvals, and downtime for software systems.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Another critical concept here is that Martin states clients will refuse to upgrade unless the author tracks version numbers. This is related to the previous concept, where a client or customer, because of the above factors, may need to revert the system to a previous version of the code because the new version has caused a problem or outage.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
REP has also been described in the following way:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;..in order to effectively reuse code it must arrive in a complete, black-box, package that is to be used but not changed. Users of the code are shielded from changes to it because they can choose when to integrate changes from the package into their own code. While this supports code ownership, and even promotes it, it does not enforce it.&amp;quot; [2]&lt;br /&gt;
&lt;br /&gt;
Further elaboration on REP is noted here:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;I reuse code if, and only if, I never need to look at&lt;br /&gt;
the [http://en.wikipedia.org/wiki/Source_code source code] (other than the public portions of header files). I need only link with static&lt;br /&gt;
[http://en.wikipedia.org/wiki/Library_%28computing%29 libraries] or include dynamic libraries. Whenever these libraries are fixed or enhanced, I&lt;br /&gt;
receive a new version which I can then integrate into my system when opportunity allows. That is, I expect the code I am reusing to be treated like a product. It is not maintained&lt;br /&gt;
by me. It is not distributed by me. I am the customer, and the author, or some other entity,&lt;br /&gt;
is responsible for maintaining it. Thus, I can reuse nothing that is not also released. Moreover, when I reuse something&lt;br /&gt;
in a released library, I am in effect a client of the entire library.&amp;quot;[3]&lt;br /&gt;
&lt;br /&gt;
In a nutshell, Martin is stating that reuse (not copying) is useless and meaningless without release. The concept of reuse is vital to elegant [http://en.wikipedia.org/wiki/Object_oriented_design Object-Oriented design] and therefore cannot be properly maintained without release.&lt;br /&gt;
&lt;br /&gt;
=='''''Advantages'''''==&lt;br /&gt;
&lt;br /&gt;
The obvious advantages of REP are:&lt;br /&gt;
&lt;br /&gt;
1. Maintainability. There is no need to maintain reused code. This is done by the owner of the resused (released) code.&amp;lt;br&amp;gt;&lt;br /&gt;
2. Flexibility. The consumer of the reused code can decide what version and on what timetable the reused code is adopted.&amp;lt;br&amp;gt;&lt;br /&gt;
3. Enhancements. There is no need to make the reused code more efficient or to add function. New function can be added by upgrading to a new version of the reused code.&lt;br /&gt;
&lt;br /&gt;
=='''''Disadvantages'''''==&lt;br /&gt;
&lt;br /&gt;
As REP is a Cohesion Principle, the disadvantages would be similar to disadvantages of cohesion principles.&lt;br /&gt;
&lt;br /&gt;
1. REP is not simple for the maintainer of the code. The code owner must maintain several versions of the code, as well as large packages.&amp;lt;br&amp;gt;&lt;br /&gt;
2. The package structure cannot be designed from the top down, meaning that it would not be one of the first things about a system that is designed. Because of this, the package structure remains in a constant state of flux. [3]&amp;lt;br&amp;gt;&lt;br /&gt;
3. The best design philosophy cannot depend solely on REP. REP is best suited for a system that has gone through the initial planning, design and development stages to ensure that the package structure can be utilized effectively.&lt;br /&gt;
&lt;br /&gt;
=='''''Example'''''==&lt;br /&gt;
&lt;br /&gt;
The Java Boutique desribes a [http://javaboutique.internet.com/Case_Study/ tutorial] for designing a system with, among other primciples, REP in mind.&lt;br /&gt;
&lt;br /&gt;
A &amp;quot;bad&amp;quot; example of not following REP is to reuse code by copying the source code. Just a few days after Microsoft released its Windows 7 operating system, it had to apologize to the public for violating the [http://en.wikipedia.org/wiki/Gpl GPL] license.[5] A utility tool it hired the third party to develop contains a chunk of open source code with a [http://en.wikipedia.org/wiki/Gpl GPL] license attached to it. Microsoft had to open its own source code for this utility program.&lt;br /&gt;
&lt;br /&gt;
=='''''Conclusion'''''==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Code should be reused by including the released [http://en.wikipedia.org/wiki/Software_library library], not by copying the code. This ensures the reused code is maintained by a single authority to avoid the divergence of the reused code. In fact, the user should never see the source code for reuse except the included header files - &amp;lt;b&amp;gt;The unit of reuse is the unit of release&amp;lt;/b&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
The users of the library need to know the version/signature for dependency control and for reliable reversal to the originals after failed upgrade. The author need the same information to maintain and support the released product - &amp;lt;b&amp;gt;Effective reuse requires a change control system&amp;lt;/b&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Though a class is the &amp;lt;i&amp;gt;de facto&amp;lt;/i&amp;gt; unit of reuse, its reuse is mostly confined to the author of related classes and collectively make them a large functional unit or package. The REP is targeting a wide audience who are more interested in reuse of a large functional unit or a class in that context. Keeping track of versions of individual classes would be, more often than not, burdensome to users who both use multiple classes within the same package and authors who need to maintain individual classes and their inter-dependencies within the large functional unit. &amp;lt;b&amp;gt;The effective unit of reuse and release is the package&amp;lt;/B&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
REP not only applies to external users, but also applies within the organization among different development groups.&lt;br /&gt;
&lt;br /&gt;
=='''''References'''''==&lt;br /&gt;
&lt;br /&gt;
[1] Design Principles and Patterns: http://www.objectmentor.com/resources/articles/Principles_and_Patterns.pdf &amp;lt;br&amp;gt;&lt;br /&gt;
[2] Reuse Release Equivalence Principle: http://c2.com/cgi/wiki$?ReuseReleaseEquivalencePrinciple&amp;lt;br&amp;gt;&lt;br /&gt;
[3] Granularity: http://www.objectmentor.com/resources/articles/granularity.pdf&amp;lt;br&amp;gt;&lt;br /&gt;
[4] Object Oriented Software Construction, Bertrand Meyer, Prentice Hall, 1988&amp;lt;br&amp;gt;&lt;br /&gt;
[5] Microsoft will open source Windows 7 tool that includes GPL code: http://www.infoworld.com/d/windows/microsoft-will-open-source-windows-7-tool-includes-gpl-code-442&lt;/div&gt;</summary>
		<author><name>Kanke</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_16_teamhelm&amp;diff=27343</id>
		<title>CSC/ECE 517 Fall 2009/wiki3 16 teamhelm</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_16_teamhelm&amp;diff=27343"/>
		<updated>2009-11-17T16:39:55Z</updated>

		<summary type="html">&lt;p&gt;Kanke: /* '''''Example''''' */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''The Release Reuse Equivalency Principle (REP)''' ==&lt;br /&gt;
Components can be effectively reused only if they are released through a tracking system.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
=='''''Concept'''''==&lt;br /&gt;
&lt;br /&gt;
The Release Reuse Equivalency Principle (REP), first introduced by Bertrand Meyer [3][4], and later laid down in details by [http://en.wikipedia.org/wiki/Robert_Cecil_Martin Bob Martin], is described as follows:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;quot;''The granule of reuse is the granule of release.''&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Martin elaborates: &amp;quot;A reusable element, be it a component, a class, or a cluster of classes, cannot be&lt;br /&gt;
reused unless it is managed by a release system of some kind. Users will be unwilling&lt;br /&gt;
to use the element if they are forced to upgrade every time the author changes it.&lt;br /&gt;
Thus. even though the author has released a new version of his reusable element, he&lt;br /&gt;
must be willing to support and maintain older versions while his customers go about&lt;br /&gt;
the slow business of getting ready to upgrade. Thus, clients will refuse to reuse an element&lt;br /&gt;
unless the author promises to keep track of version numbers, and maintain old&lt;br /&gt;
versions for awhile.&lt;br /&gt;
Therefore, one criterion for grouping classes into packages is reuse. Since packages&lt;br /&gt;
are the unit of release, they are also the unit of reuse. Therefore architects would do&lt;br /&gt;
well to group reusable classes together into packages.&amp;quot; [1]&lt;br /&gt;
&lt;br /&gt;
=='''''Description'''''==&lt;br /&gt;
&lt;br /&gt;
Martin describes a &amp;quot;release system&amp;quot; in his concept, which refers to a system that is able to track versions of code as it is changed. This is also sometimes referred to as [http://en.wikipedia.org/wiki/Version_control version control]. Some common examples of version control are [http://en.wikipedia.org/wiki/Subversion_%28software%29 SVN], [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] and [http://en.wikipedia.org/wiki/Cmvc CMVC].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Martin also states that customers are slow to upgrade newer versions of code. This is commonly true for several reasons, including fear of instability of software, internal process, management approvals, and downtime for software systems.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Another critical concept here is that Martin states clients will refuse to upgrade unless the author tracks version numbers. This is related to the previous concept, where a client or customer, because of the above factors, may need to revert the system to a previous version of the code because the new version has caused a problem or outage.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
REP has also been described in the following way:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;..in order to effectively reuse code it must arrive in a complete, black-box, package that is to be used but not changed. Users of the code are shielded from changes to it because they can choose when to integrate changes from the package into their own code. While this supports code ownership, and even promotes it, it does not enforce it.&amp;quot; [2]&lt;br /&gt;
&lt;br /&gt;
Further elaboration on REP is noted here:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;I reuse code if, and only if, I never need to look at&lt;br /&gt;
the [http://en.wikipedia.org/wiki/Source_code source code] (other than the public portions of header files). I need only link with static&lt;br /&gt;
[http://en.wikipedia.org/wiki/Library_%28computing%29 libraries] or include dynamic libraries. Whenever these libraries are fixed or enhanced, I&lt;br /&gt;
receive a new version which I can then integrate into my system when opportunity allows. That is, I expect the code I am reusing to be treated like a product. It is not maintained&lt;br /&gt;
by me. It is not distributed by me. I am the customer, and the author, or some other entity,&lt;br /&gt;
is responsible for maintaining it. Thus, I can reuse nothing that is not also released. Moreover, when I reuse something&lt;br /&gt;
in a released library, I am in effect a client of the entire library.&amp;quot;[3]&lt;br /&gt;
&lt;br /&gt;
In a nutshell, Martin is stating that reuse (not copying) is useless and meaningless without release. The concept of reuse is vital to elegant [http://en.wikipedia.org/wiki/Object_oriented_design Object-Oriented design] and therefore cannot be properly maintained without release.&lt;br /&gt;
&lt;br /&gt;
=='''''Advantages'''''==&lt;br /&gt;
&lt;br /&gt;
The obvious advantages of REP are:&lt;br /&gt;
&lt;br /&gt;
1. Maintainability. There is no need to maintain reused code. This is done by the owner of the resused (released) code.&amp;lt;br&amp;gt;&lt;br /&gt;
2. Flexibility. The consumer of the reused code can decide what version and on what timetable the reused code is adopted.&amp;lt;br&amp;gt;&lt;br /&gt;
3. Enhancements. There is no need to make the reused code more efficient or to add function. New function can be added by upgrading to a new version of the reused code.&lt;br /&gt;
&lt;br /&gt;
=='''''Disadvantages'''''==&lt;br /&gt;
&lt;br /&gt;
As REP is a Cohesion Principle, the disadvantages would be similar to disadvantages of cohesion principles.&lt;br /&gt;
&lt;br /&gt;
1. REP is not simple for the maintainer of the code. The code owner must maintain several versions of the code, as well as large packages.&amp;lt;br&amp;gt;&lt;br /&gt;
2. The package structure cannot be designed from the top down, meaning that it would not be one of the first things about a system that is designed. Because of this, the package structure remains in a constant state of flux. [3]&amp;lt;br&amp;gt;&lt;br /&gt;
3. The best design philosophy cannot depend solely on REP. REP is best suited for a system that has gone through the initial planning, design and development stages to ensure that the package structure can be utilized effectively.&lt;br /&gt;
&lt;br /&gt;
=='''''Example'''''==&lt;br /&gt;
&lt;br /&gt;
The Java Boutique desribes a [http://javaboutique.internet.com/Case_Study/ tutorial] for designing a system with, among other primciples, REP in mind.&lt;br /&gt;
&lt;br /&gt;
A &amp;quot;bad&amp;quot; example of not following REP is to reuse code by copying the source code. Just a few days after Microsoft released its Windows 7 operating system, it had to apologize to the public for violating the [http://en.wikipedia.org/wiki/Gpl GPL] license. http://www.infoworld.com/d/windows/microsoft-will-open-source-windows-7-tool-includes-gpl-code-442 A utility tool it hired the third party to develop contains a chunk of open source code with a [http://en.wikipedia.org/wiki/Gpl GPL] license attached to it. Microsoft had to endure the public humiliation and was &amp;quot;forced&amp;quot; to open its own source code for this utility program.&lt;br /&gt;
&lt;br /&gt;
=='''''Conclusion'''''==&lt;br /&gt;
&lt;br /&gt;
Code should be reused by including the released library, not by copying the code. This ensures the reused code is maintained by a single authority to avoid the divergence of the reused code. In fact the user should never see the source code for reuse except the included header files - &amp;lt;b&amp;gt;The unit of reuse is the unit of release&amp;lt;/b&amp;gt; &lt;br /&gt;
&lt;br /&gt;
The users of the library need to know the version for dependency control and for reliable reversal to the originals after failed upgrade. The author need the same information to maintain and support the released product - &amp;lt;b&amp;gt;Effective reuse requires a change control system&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Though a class is the &amp;lt;i&amp;gt;de facto&amp;lt;/i&amp;gt; unit of reuse, its reuse is mostly confined to the author who also authors related classes and collectively make them a large functional unit - package. The REP is targeting a broad range of audience who are more interested in reuse this large functional unit or a class in that context. Also keeping track of version of individual classes would be burdensome to both the users who, more often than not, use multiple classes within the same package, and the author who need to maintain individual classes and their inter-dependencies within the large functional unit. &amp;lt;b&amp;gt;The effective unit of reuse and release is the package&amp;lt;/B&amp;gt;&lt;br /&gt;
&lt;br /&gt;
REP not only applies to external users, but also applies within the organization among different development groups.&lt;br /&gt;
&lt;br /&gt;
=='''''References'''''==&lt;br /&gt;
&lt;br /&gt;
[1] Design Principles and Patterns: http://www.objectmentor.com/resources/articles/Principles_and_Patterns.pdf &amp;lt;br&amp;gt;&lt;br /&gt;
[2] Reuse Release Equivalence Principle: http://c2.com/cgi/wiki$?ReuseReleaseEquivalencePrinciple&amp;lt;br&amp;gt;&lt;br /&gt;
[3] Granularity: http://www.objectmentor.com/resources/articles/granularity.pdf&amp;lt;br&amp;gt;&lt;br /&gt;
[4] Object Oriented Software Construction, Bertrand Meyer, Prentice Hall, 1988&lt;/div&gt;</summary>
		<author><name>Kanke</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_16_teamhelm&amp;diff=27339</id>
		<title>CSC/ECE 517 Fall 2009/wiki3 16 teamhelm</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_16_teamhelm&amp;diff=27339"/>
		<updated>2009-11-17T16:33:32Z</updated>

		<summary type="html">&lt;p&gt;Kanke: /* '''''Example''''' */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''The Release Reuse Equivalency Principle (REP)''' ==&lt;br /&gt;
Components can be effectively reused only if they are released through a tracking system.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
=='''''Concept'''''==&lt;br /&gt;
&lt;br /&gt;
The Release Reuse Equivalency Principle (REP), first introduced by Bertrand Meyer [3][4], and later laid down in details by [http://en.wikipedia.org/wiki/Robert_Cecil_Martin Bob Martin], is described as follows:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;quot;''The granule of reuse is the granule of release.''&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Martin elaborates: &amp;quot;A reusable element, be it a component, a class, or a cluster of classes, cannot be&lt;br /&gt;
reused unless it is managed by a release system of some kind. Users will be unwilling&lt;br /&gt;
to use the element if they are forced to upgrade every time the author changes it.&lt;br /&gt;
Thus. even though the author has released a new version of his reusable element, he&lt;br /&gt;
must be willing to support and maintain older versions while his customers go about&lt;br /&gt;
the slow business of getting ready to upgrade. Thus, clients will refuse to reuse an element&lt;br /&gt;
unless the author promises to keep track of version numbers, and maintain old&lt;br /&gt;
versions for awhile.&lt;br /&gt;
Therefore, one criterion for grouping classes into packages is reuse. Since packages&lt;br /&gt;
are the unit of release, they are also the unit of reuse. Therefore architects would do&lt;br /&gt;
well to group reusable classes together into packages.&amp;quot; [1]&lt;br /&gt;
&lt;br /&gt;
=='''''Description'''''==&lt;br /&gt;
&lt;br /&gt;
Martin describes a &amp;quot;release system&amp;quot; in his concept, which refers to a system that is able to track versions of code as it is changed. This is also sometimes referred to as [http://en.wikipedia.org/wiki/Version_control version control]. Some common examples of version control are [http://en.wikipedia.org/wiki/Subversion_%28software%29 SVN], [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] and [http://en.wikipedia.org/wiki/Cmvc CMVC].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Martin also states that customers are slow to upgrade newer versions of code. This is commonly true for several reasons, including fear of instability of software, internal process, management approvals, and downtime for software systems.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Another critical concept here is that Martin states clients will refuse to upgrade unless the author tracks version numbers. This is related to the previous concept, where a client or customer, because of the above factors, may need to revert the system to a previous version of the code because the new version has caused a problem or outage.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
REP has also been described in the following way:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;..in order to effectively reuse code it must arrive in a complete, black-box, package that is to be used but not changed. Users of the code are shielded from changes to it because they can choose when to integrate changes from the package into their own code. While this supports code ownership, and even promotes it, it does not enforce it.&amp;quot; [2]&lt;br /&gt;
&lt;br /&gt;
Further elaboration on REP is noted here:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;I reuse code if, and only if, I never need to look at&lt;br /&gt;
the [http://en.wikipedia.org/wiki/Source_code source code] (other than the public portions of header files). I need only link with static&lt;br /&gt;
[http://en.wikipedia.org/wiki/Library_%28computing%29 libraries] or include dynamic libraries. Whenever these libraries are fixed or enhanced, I&lt;br /&gt;
receive a new version which I can then integrate into my system when opportunity allows. That is, I expect the code I am reusing to be treated like a product. It is not maintained&lt;br /&gt;
by me. It is not distributed by me. I am the customer, and the author, or some other entity,&lt;br /&gt;
is responsible for maintaining it. Thus, I can reuse nothing that is not also released. Moreover, when I reuse something&lt;br /&gt;
in a released library, I am in effect a client of the entire library.&amp;quot;[3]&lt;br /&gt;
&lt;br /&gt;
In a nutshell, Martin is stating that reuse (not copying) is useless and meaningless without release. The concept of reuse is vital to elegant [http://en.wikipedia.org/wiki/Object_oriented_design Object-Oriented design] and therefore cannot be properly maintained without release.&lt;br /&gt;
&lt;br /&gt;
=='''''Advantages'''''==&lt;br /&gt;
&lt;br /&gt;
The obvious advantages of REP are:&lt;br /&gt;
&lt;br /&gt;
1. Maintainability. There is no need to maintain reused code. This is done by the owner of the resused (released) code.&amp;lt;br&amp;gt;&lt;br /&gt;
2. Flexibility. The consumer of the reused code can decide what version and on what timetable the reused code is adopted.&amp;lt;br&amp;gt;&lt;br /&gt;
3. Enhancements. There is no need to make the reused code more efficient or to add function. New function can be added by upgrading to a new version of the reused code.&lt;br /&gt;
&lt;br /&gt;
=='''''Disadvantages'''''==&lt;br /&gt;
&lt;br /&gt;
As REP is a Cohesion Principle, the disadvantages would be similar to disadvantages of cohesion principles.&lt;br /&gt;
&lt;br /&gt;
1. REP is not simple for the maintainer of the code. The code owner must maintain several versions of the code, as well as large packages.&amp;lt;br&amp;gt;&lt;br /&gt;
2. The package structure cannot be designed from the top down, meaning that it would not be one of the first things about a system that is designed. Because of this, the package structure remains in a constant state of flux. [3]&amp;lt;br&amp;gt;&lt;br /&gt;
3. The best design philosophy cannot depend solely on REP. REP is best suited for a system that has gone through the initial planning, design and development stages to ensure that the package structure can be utilized effectively.&lt;br /&gt;
&lt;br /&gt;
=='''''Example'''''==&lt;br /&gt;
&lt;br /&gt;
The Java Boutique desribes a [http://javaboutique.internet.com/Case_Study/ tutorial] for designing a system with, among other primciples, REP in mind.&lt;br /&gt;
&lt;br /&gt;
A &amp;quot;bad&amp;quot; example of not following REP is to reuse code by copying the source code. Just a few days after Microsoft released its Windows 7 operating system, it had to apologize to the public for violating the GPL license. [[http://www.infoworld.com/d/windows/microsoft-will-open-source-windows-7-tool-includes-gpl-code-442]] A utility tool it hired the third party to develop contains a chunk of open source code with a GPL license attached to it. Microsoft had to endure the public humiliation and &amp;quot;forced&amp;quot; to open its own source code for this utility program.&lt;br /&gt;
&lt;br /&gt;
=='''''Conclusion'''''==&lt;br /&gt;
&lt;br /&gt;
Code should be reused by including the released library, not by copying the code. This ensures the reused code is maintained by a single authority to avoid the divergence of the reused code. In fact the user should never see the source code for reuse except the included header files - &amp;lt;b&amp;gt;The unit of reuse is the unit of release&amp;lt;/b&amp;gt; &lt;br /&gt;
&lt;br /&gt;
The users of the library need to know the version for dependency control and for reliable reversal to the originals after failed upgrade. The author need the same information to maintain and support the released product - &amp;lt;b&amp;gt;Effective reuse requires a change control system&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Though a class is the &amp;lt;i&amp;gt;de facto&amp;lt;/i&amp;gt; unit of reuse, its reuse is mostly confined to the author who also authors related classes and collectively make them a large functional unit - package. The REP is targeting a broad range of audience who are more interested in reuse this large functional unit or a class in that context. Also keeping track of version of individual classes would be burdensome to both the users who, more often than not, use multiple classes within the same package, and the author who need to maintain individual classes and their inter-dependencies within the large functional unit. &amp;lt;b&amp;gt;The effective unit of reuse and release is the package&amp;lt;/B&amp;gt;&lt;br /&gt;
&lt;br /&gt;
REP not only applies to external users, but also applies within the organization among different development groups.&lt;br /&gt;
&lt;br /&gt;
=='''''References'''''==&lt;br /&gt;
&lt;br /&gt;
[1] Design Principles and Patterns: http://www.objectmentor.com/resources/articles/Principles_and_Patterns.pdf &amp;lt;br&amp;gt;&lt;br /&gt;
[2] Reuse Release Equivalence Principle: http://c2.com/cgi/wiki$?ReuseReleaseEquivalencePrinciple&amp;lt;br&amp;gt;&lt;br /&gt;
[3] Granularity: http://www.objectmentor.com/resources/articles/granularity.pdf&amp;lt;br&amp;gt;&lt;br /&gt;
[4] Object Oriented Software Construction, Bertrand Meyer, Prentice Hall, 1988&lt;/div&gt;</summary>
		<author><name>Kanke</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_16_teamhelm&amp;diff=27334</id>
		<title>CSC/ECE 517 Fall 2009/wiki3 16 teamhelm</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_16_teamhelm&amp;diff=27334"/>
		<updated>2009-11-17T16:00:57Z</updated>

		<summary type="html">&lt;p&gt;Kanke: /* '''''Conclusion''''' */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''The Release Reuse Equivalency Principle (REP)''' ==&lt;br /&gt;
Components can be effectively reused only if they are released through a tracking system.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
=='''''Concept'''''==&lt;br /&gt;
&lt;br /&gt;
The Release Reuse Equivalency Principle (REP), first introduced by Bertrand Meyer [3][4], and later laid down in details by [http://en.wikipedia.org/wiki/Robert_Cecil_Martin Bob Martin], is described as follows:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;quot;''The granule of reuse is the granule of release.''&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Martin elaborates: &amp;quot;A reusable element, be it a component, a class, or a cluster of classes, cannot be&lt;br /&gt;
reused unless it is managed by a release system of some kind. Users will be unwilling&lt;br /&gt;
to use the element if they are forced to upgrade every time the author changes it.&lt;br /&gt;
Thus. even though the author has released a new version of his reusable element, he&lt;br /&gt;
must be willing to support and maintain older versions while his customers go about&lt;br /&gt;
the slow business of getting ready to upgrade. Thus, clients will refuse to reuse an element&lt;br /&gt;
unless the author promises to keep track of version numbers, and maintain old&lt;br /&gt;
versions for awhile.&lt;br /&gt;
Therefore, one criterion for grouping classes into packages is reuse. Since packages&lt;br /&gt;
are the unit of release, they are also the unit of reuse. Therefore architects would do&lt;br /&gt;
well to group reusable classes together into packages.&amp;quot; [1]&lt;br /&gt;
&lt;br /&gt;
=='''''Description'''''==&lt;br /&gt;
&lt;br /&gt;
Martin describes a &amp;quot;release system&amp;quot; in his concept, which refers to a system that is able to track versions of code as it is changed. This is also sometimes referred to as [http://en.wikipedia.org/wiki/Version_control version control]. Some common examples of version control are [http://en.wikipedia.org/wiki/Subversion_%28software%29 SVN], [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] and [http://en.wikipedia.org/wiki/Cmvc CMVC].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Martin also states that customers are slow to upgrade newer versions of code. This is commonly true for several reasons, including fear of instability of software, internal process, management approvals, and downtime for software systems.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Another critical concept here is that Martin states clients will refuse to upgrade unless the author tracks version numbers. This is related to the previous concept, where a client or customer, because of the above factors, may need to revert the system to a previous version of the code because the new version has caused a problem or outage.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
REP has also been described in the following way:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;..in order to effectively reuse code it must arrive in a complete, black-box, package that is to be used but not changed. Users of the code are shielded from changes to it because they can choose when to integrate changes from the package into their own code. While this supports code ownership, and even promotes it, it does not enforce it.&amp;quot; [2]&lt;br /&gt;
&lt;br /&gt;
Further elaboration on REP is noted here:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;I reuse code if, and only if, I never need to look at&lt;br /&gt;
the [http://en.wikipedia.org/wiki/Source_code source code] (other than the public portions of header files). I need only link with static&lt;br /&gt;
[http://en.wikipedia.org/wiki/Library_%28computing%29 libraries] or include dynamic libraries. Whenever these libraries are fixed or enhanced, I&lt;br /&gt;
receive a new version which I can then integrate into my system when opportunity allows. That is, I expect the code I am reusing to be treated like a product. It is not maintained&lt;br /&gt;
by me. It is not distributed by me. I am the customer, and the author, or some other entity,&lt;br /&gt;
is responsible for maintaining it. Thus, I can reuse nothing that is not also released. Moreover, when I reuse something&lt;br /&gt;
in a released library, I am in effect a client of the entire library.&amp;quot;[3]&lt;br /&gt;
&lt;br /&gt;
In a nutshell, Martin is stating that reuse (not copying) is useless and meaningless without release. The concept of reuse is vital to elegant [http://en.wikipedia.org/wiki/Object_oriented_design Object-Oriented design] and therefore cannot be properly maintained without release.&lt;br /&gt;
&lt;br /&gt;
=='''''Advantages'''''==&lt;br /&gt;
&lt;br /&gt;
The obvious advantages of REP are:&lt;br /&gt;
&lt;br /&gt;
1. Maintainability. There is no need to maintain reused code. This is done by the owner of the resused (released) code.&amp;lt;br&amp;gt;&lt;br /&gt;
2. Flexibility. The consumer of the reused code can decide what version and on what timetable the reused code is adopted.&amp;lt;br&amp;gt;&lt;br /&gt;
3. Enhancements. There is no need to make the reused code more efficient or to add function. New function can be added by upgrading to a new version of the reused code.&lt;br /&gt;
&lt;br /&gt;
=='''''Disadvantages'''''==&lt;br /&gt;
&lt;br /&gt;
As REP is a Cohesion Principle, the disadvantages would be similar to disadvantages of cohesion principles.&lt;br /&gt;
&lt;br /&gt;
1. REP is not simple for the maintainer of the code. The code owner must maintain several versions of the code, as well as large packages.&amp;lt;br&amp;gt;&lt;br /&gt;
2. The package structure cannot be designed from the top down, meaning that it would not be one of the first things about a system that is designed. Because of this, the package structure remains in a constant state of flux. [3]&amp;lt;br&amp;gt;&lt;br /&gt;
3. The best design philosophy cannot depend solely on REP. REP is best suited for a system that has gone through the initial planning, design and development stages to ensure that the package structure can be utilized effectively.&lt;br /&gt;
&lt;br /&gt;
=='''''Example'''''==&lt;br /&gt;
&lt;br /&gt;
The Java Boutique desribes a [http://javaboutique.internet.com/Case_Study/ tutorial] for designing a system with, among other primciples, REP in mind.&lt;br /&gt;
&lt;br /&gt;
=='''''Conclusion'''''==&lt;br /&gt;
&lt;br /&gt;
Code should be reused by including the released library, not by copying the code. This ensures the reused code is maintained by a single authority to avoid the divergence of the reused code. In fact the user should never see the source code for reuse except the included header files - &amp;lt;b&amp;gt;The unit of reuse is the unit of release&amp;lt;/b&amp;gt; &lt;br /&gt;
&lt;br /&gt;
The users of the library need to know the version for dependency control and for reliable reversal to the originals after failed upgrade. The author need the same information to maintain and support the released product - &amp;lt;b&amp;gt;Effective reuse requires a change control system&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Though a class is the &amp;lt;i&amp;gt;de facto&amp;lt;/i&amp;gt; unit of reuse, its reuse is mostly confined to the author who also authors related classes and collectively make them a large functional unit - package. The REP is targeting a broad range of audience who are more interested in reuse this large functional unit or a class in that context. Also keeping track of version of individual classes would be burdensome to both the users who, more often than not, use multiple classes within the same package, and the author who need to maintain individual classes and their inter-dependencies within the large functional unit. &amp;lt;b&amp;gt;The effective unit of reuse and release is the package&amp;lt;/B&amp;gt;&lt;br /&gt;
&lt;br /&gt;
REP not only applies to external users, but also applies within the organization among different development groups.&lt;br /&gt;
&lt;br /&gt;
=='''''References'''''==&lt;br /&gt;
&lt;br /&gt;
[1] Design Principles and Patterns: http://www.objectmentor.com/resources/articles/Principles_and_Patterns.pdf &amp;lt;br&amp;gt;&lt;br /&gt;
[2] Reuse Release Equivalence Principle: http://c2.com/cgi/wiki$?ReuseReleaseEquivalencePrinciple&amp;lt;br&amp;gt;&lt;br /&gt;
[3] Granularity: http://www.objectmentor.com/resources/articles/granularity.pdf&amp;lt;br&amp;gt;&lt;br /&gt;
[4] Object Oriented Software Construction, Bertrand Meyer, Prentice Hall, 1988&lt;/div&gt;</summary>
		<author><name>Kanke</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_16_teamhelm&amp;diff=27333</id>
		<title>CSC/ECE 517 Fall 2009/wiki3 16 teamhelm</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_16_teamhelm&amp;diff=27333"/>
		<updated>2009-11-17T15:59:34Z</updated>

		<summary type="html">&lt;p&gt;Kanke: /* '''''Conclusion''''' */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''The Release Reuse Equivalency Principle (REP)''' ==&lt;br /&gt;
Components can be effectively reused only if they are released through a tracking system.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
=='''''Concept'''''==&lt;br /&gt;
&lt;br /&gt;
The Release Reuse Equivalency Principle (REP), first introduced by Bertrand Meyer [3][4], and later laid down in details by [http://en.wikipedia.org/wiki/Robert_Cecil_Martin Bob Martin], is described as follows:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;quot;''The granule of reuse is the granule of release.''&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Martin elaborates: &amp;quot;A reusable element, be it a component, a class, or a cluster of classes, cannot be&lt;br /&gt;
reused unless it is managed by a release system of some kind. Users will be unwilling&lt;br /&gt;
to use the element if they are forced to upgrade every time the author changes it.&lt;br /&gt;
Thus. even though the author has released a new version of his reusable element, he&lt;br /&gt;
must be willing to support and maintain older versions while his customers go about&lt;br /&gt;
the slow business of getting ready to upgrade. Thus, clients will refuse to reuse an element&lt;br /&gt;
unless the author promises to keep track of version numbers, and maintain old&lt;br /&gt;
versions for awhile.&lt;br /&gt;
Therefore, one criterion for grouping classes into packages is reuse. Since packages&lt;br /&gt;
are the unit of release, they are also the unit of reuse. Therefore architects would do&lt;br /&gt;
well to group reusable classes together into packages.&amp;quot; [1]&lt;br /&gt;
&lt;br /&gt;
=='''''Description'''''==&lt;br /&gt;
&lt;br /&gt;
Martin describes a &amp;quot;release system&amp;quot; in his concept, which refers to a system that is able to track versions of code as it is changed. This is also sometimes referred to as [http://en.wikipedia.org/wiki/Version_control version control]. Some common examples of version control are [http://en.wikipedia.org/wiki/Subversion_%28software%29 SVN], [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] and [http://en.wikipedia.org/wiki/Cmvc CMVC].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Martin also states that customers are slow to upgrade newer versions of code. This is commonly true for several reasons, including fear of instability of software, internal process, management approvals, and downtime for software systems.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Another critical concept here is that Martin states clients will refuse to upgrade unless the author tracks version numbers. This is related to the previous concept, where a client or customer, because of the above factors, may need to revert the system to a previous version of the code because the new version has caused a problem or outage.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
REP has also been described in the following way:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;..in order to effectively reuse code it must arrive in a complete, black-box, package that is to be used but not changed. Users of the code are shielded from changes to it because they can choose when to integrate changes from the package into their own code. While this supports code ownership, and even promotes it, it does not enforce it.&amp;quot; [2]&lt;br /&gt;
&lt;br /&gt;
Further elaboration on REP is noted here:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;I reuse code if, and only if, I never need to look at&lt;br /&gt;
the [http://en.wikipedia.org/wiki/Source_code source code] (other than the public portions of header files). I need only link with static&lt;br /&gt;
[http://en.wikipedia.org/wiki/Library_%28computing%29 libraries] or include dynamic libraries. Whenever these libraries are fixed or enhanced, I&lt;br /&gt;
receive a new version which I can then integrate into my system when opportunity allows. That is, I expect the code I am reusing to be treated like a product. It is not maintained&lt;br /&gt;
by me. It is not distributed by me. I am the customer, and the author, or some other entity,&lt;br /&gt;
is responsible for maintaining it. Thus, I can reuse nothing that is not also released. Moreover, when I reuse something&lt;br /&gt;
in a released library, I am in effect a client of the entire library.&amp;quot;[3]&lt;br /&gt;
&lt;br /&gt;
In a nutshell, Martin is stating that reuse (not copying) is useless and meaningless without release. The concept of reuse is vital to elegant [http://en.wikipedia.org/wiki/Object_oriented_design Object-Oriented design] and therefore cannot be properly maintained without release.&lt;br /&gt;
&lt;br /&gt;
=='''''Advantages'''''==&lt;br /&gt;
&lt;br /&gt;
The obvious advantages of REP are:&lt;br /&gt;
&lt;br /&gt;
1. Maintainability. There is no need to maintain reused code. This is done by the owner of the resused (released) code.&amp;lt;br&amp;gt;&lt;br /&gt;
2. Flexibility. The consumer of the reused code can decide what version and on what timetable the reused code is adopted.&amp;lt;br&amp;gt;&lt;br /&gt;
3. Enhancements. There is no need to make the reused code more efficient or to add function. New function can be added by upgrading to a new version of the reused code.&lt;br /&gt;
&lt;br /&gt;
=='''''Disadvantages'''''==&lt;br /&gt;
&lt;br /&gt;
As REP is a Cohesion Principle, the disadvantages would be similar to disadvantages of cohesion principles.&lt;br /&gt;
&lt;br /&gt;
1. REP is not simple for the maintainer of the code. The code owner must maintain several versions of the code, as well as large packages.&amp;lt;br&amp;gt;&lt;br /&gt;
2. The package structure cannot be designed from the top down, meaning that it would not be one of the first things about a system that is designed. Because of this, the package structure remains in a constant state of flux. [3]&amp;lt;br&amp;gt;&lt;br /&gt;
3. The best design philosophy cannot depend solely on REP. REP is best suited for a system that has gone through the initial planning, design and development stages to ensure that the package structure can be utilized effectively.&lt;br /&gt;
&lt;br /&gt;
=='''''Example'''''==&lt;br /&gt;
&lt;br /&gt;
The Java Boutique desribes a [http://javaboutique.internet.com/Case_Study/ tutorial] for designing a system with, among other primciples, REP in mind.&lt;br /&gt;
&lt;br /&gt;
=='''''Conclusion'''''==&lt;br /&gt;
&lt;br /&gt;
Code should be reused by including the released library, not by copying the code. This ensures the reused code is maintained by a single authority to avoid the divergence of the reused code. In fact the user should never see the source code for reuse except the included header files - &amp;lt;b&amp;gt;The unit of reuse is the unit of release&amp;lt;/b&amp;gt; &lt;br /&gt;
&lt;br /&gt;
The users of the library need to know the version for dependency control and for reliable reversal to the originals after failed upgrade. The author need the same information to maintain and support the released product - &amp;lt;b&amp;gt;Effective reuse requires a change control system&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Though a class is the &amp;lt;i&amp;gt;de facto&amp;lt;/i&amp;gt; unit of reuse, its reuse is mostly confined to the author who also authors related classes and collectively make them a large functional unit - package. The REP is targeting a broad range of audience who are more interested in reuse this large functional unit or a class in that context. Also keeping track of version of individual classes would be burdensome to both users who, more often than not, use multiple classes within the same package, and author who need to maintain individual classes and their inter-dependencies within the large functional unit. &amp;lt;b&amp;gt;The effective unit of reuse and release is the package&amp;lt;/B&amp;gt;&lt;br /&gt;
&lt;br /&gt;
REP not only applies to external users, but also applies within the organization among different development groups.&lt;br /&gt;
&lt;br /&gt;
=='''''References'''''==&lt;br /&gt;
&lt;br /&gt;
[1] Design Principles and Patterns: http://www.objectmentor.com/resources/articles/Principles_and_Patterns.pdf &amp;lt;br&amp;gt;&lt;br /&gt;
[2] Reuse Release Equivalence Principle: http://c2.com/cgi/wiki$?ReuseReleaseEquivalencePrinciple&amp;lt;br&amp;gt;&lt;br /&gt;
[3] Granularity: http://www.objectmentor.com/resources/articles/granularity.pdf&amp;lt;br&amp;gt;&lt;br /&gt;
[4] Object Oriented Software Construction, Bertrand Meyer, Prentice Hall, 1988&lt;/div&gt;</summary>
		<author><name>Kanke</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_teamhelm&amp;diff=27328</id>
		<title>CSC/ECE 517 Fall 2009/wiki3 teamhelm</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_teamhelm&amp;diff=27328"/>
		<updated>2009-11-17T15:39:00Z</updated>

		<summary type="html">&lt;p&gt;Kanke: /* '''''Conclusion''''' */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''The Release Reuse Equivalency Principle (REP)''' ==&lt;br /&gt;
Components can be effectively reused only if they are released through a tracking system.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
=='''''Concept'''''==&lt;br /&gt;
&lt;br /&gt;
The Release Reuse Equivalency Principle (REP), first introduced by [http://en.wikipedia.org/wiki/Robert_Cecil_Martin Bob Martin], is described as follows:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;quot;''The granule of reuse is the granule of release.''&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Martin elaborates: &amp;quot;A reusable element, be it a component, a class, or a cluster of classes, cannot be&lt;br /&gt;
reused unless it is managed by a release system of some kind. Users will be unwilling&lt;br /&gt;
to use the element if they are forced to upgrade every time the author changes it.&lt;br /&gt;
Thus. even though the author has released a new version of his reusable element, he&lt;br /&gt;
must be willing to support and maintain older versions while his customers go about&lt;br /&gt;
the slow business of getting ready to upgrade. Thus, clients will refuse to reuse an element&lt;br /&gt;
unless the author promises to keep track of version numbers, and maintain old&lt;br /&gt;
versions for awhile.&lt;br /&gt;
Therefore, one criterion for grouping classes into packages is reuse. Since packages&lt;br /&gt;
are the unit of release, they are also the unit of reuse. Therefore architects would do&lt;br /&gt;
well to group reusable classes together into packages.&amp;quot; [1]&lt;br /&gt;
&lt;br /&gt;
=='''''Description'''''==&lt;br /&gt;
&lt;br /&gt;
Martin describes a &amp;quot;release system&amp;quot; in his concept, which refers to a system that is able to track versions of code as it is changed. This is also sometimes referred to as [http://en.wikipedia.org/wiki/Version_control version control]. Some common examples of version control are [http://en.wikipedia.org/wiki/Subversion_%28software%29 SVN], [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] and [http://en.wikipedia.org/wiki/Cmvc CMVC].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Martin also states that customers are slow to upgrade newer versions of code. This is commonly true for several reasons, including fear of instability of software, internal process, management approvals, and downtime for software systems.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Another critical concept here is that Martin states clients will refuse to upgrade unless the author tracks version numbers. This is related to the previous concept, where a client or customer, because of the above factors, may need to revert the system to a previous version of the code because the new version has caused a problem or outage.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
REP has also been described in the following way:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;..in order to effectively reuse code it must arrive in a complete, black-box, package that is to be used but not changed. Users of the code are shielded from changes to it because they can choose when to integrate changes from the package into their own code. While this supports code ownership, and even promotes it, it does not enforce it.&amp;quot; [2]&lt;br /&gt;
&lt;br /&gt;
Further elaboration on REP is noted here:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;I reuse code if, and only if, I never need to look at&lt;br /&gt;
the [http://en.wikipedia.org/wiki/Source_code source code] (other than the public portions of header files). I need only link with static&lt;br /&gt;
[http://en.wikipedia.org/wiki/Library_%28computing%29 libraries] or include dynamic libraries. Whenever these libraries are fixed or enhanced, I&lt;br /&gt;
receive a new version which I can then integrate into my system when opportunity allows. That is, I expect the code I am reusing to be treated like a product. It is not maintained&lt;br /&gt;
by me. It is not distributed by me. I am the customer, and the author, or some other entity,&lt;br /&gt;
is responsible for maintaining it. Thus, I can reuse nothing that is not also released. Moreover, when I reuse something&lt;br /&gt;
in a released library, I am in effect a client of the entire library.&amp;quot;[3]&lt;br /&gt;
&lt;br /&gt;
In a nutshell, Martin is stating that reuse (not copying) is useless and meaningless without release. The concept of reuse is vital to elegant [http://en.wikipedia.org/wiki/Object_oriented_design Object-Oriented design] and therefore cannot be properly maintained without release.&lt;br /&gt;
&lt;br /&gt;
=='''''Advantages'''''==&lt;br /&gt;
&lt;br /&gt;
The obvious advantages of REP are:&lt;br /&gt;
&lt;br /&gt;
1. Maintainability. There is no need to maintain reused code. This is done by the owner of the resused (released) code.&amp;lt;br&amp;gt;&lt;br /&gt;
2. Flexibility. The consumer of the reused code can decide what version and on what timetable the reused code is adopted.&amp;lt;br&amp;gt;&lt;br /&gt;
3. Enhancements. There is no need to make the reused code more efficient or to add function. New function can be added by upgrading to a new version of the reused code.&lt;br /&gt;
&lt;br /&gt;
=='''''Disadvantages'''''==&lt;br /&gt;
&lt;br /&gt;
As REP is a Cohesion Principle, the disadvantages would be similar to disadvantages of cohesion principles.&lt;br /&gt;
&lt;br /&gt;
1. REP is not simple for the maintainer of the code. The code owner must maintain several versions of the code, as well as large packages.&amp;lt;br&amp;gt;&lt;br /&gt;
2. The package structure cannot be designed from the top down, meaning that it would not be one of the first things about a system that is designed. Because of this, the package structure remains in a constant state of flux. [3]&amp;lt;br&amp;gt;&lt;br /&gt;
3. The best design philosophy cannot depend solely on REP. REP is best suited for a system that has gone through the initial planning, design and development stages to ensure that the package structure can be utilized effectively.&lt;br /&gt;
&lt;br /&gt;
=='''''Example'''''==&lt;br /&gt;
&lt;br /&gt;
The Java Boutique desribes a [http://javaboutique.internet.com/Case_Study/ tutorial] for designing a system with, among other primciples, REP in mind.&lt;br /&gt;
&lt;br /&gt;
=='''''Conclusion'''''==&lt;br /&gt;
&lt;br /&gt;
Code should be reused by including the released library, not by copying the code. This ensures the reused code is maintained by a single authority to avoid the divergence of the reused code. In fact the user should never see the source code for reuse except the included header files - &amp;lt;b&amp;gt;The unit of reuse is the unit of release&amp;lt;/b&amp;gt; &lt;br /&gt;
&lt;br /&gt;
The users of the library need to know the version/signature for dependency control and for reliable reversal to the originals after failed upgrade. The author need the same information to maintain and support the released product - &amp;lt;b&amp;gt;Effective reuse requires a change control system&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Though a class is the &amp;lt;i&amp;gt;de facto&amp;lt;/i&amp;gt; unit of reuse, its reuse is mostly confined to the author who also authors related classes and collectively make them a large functional unit - package. The REP is targeting a broad range of audience who are more interested in reuse this large functional unit or a class in that context. Also keeping track of version of individual classes would be burdensome to both users who, more often than not, use multiple classes within the same package, and author who need to maintain individual classes and their inter-dependencies within the large functional unit. &amp;lt;b&amp;gt;The effective unit of reuse and release is the package&amp;lt;/B&amp;gt;&lt;br /&gt;
&lt;br /&gt;
REP not only applies to external users, but also applies within the organization among different development groups.&lt;br /&gt;
&lt;br /&gt;
=='''''References'''''==&lt;br /&gt;
&lt;br /&gt;
[1] Design Principles and Patterns: http://www.objectmentor.com/resources/articles/Principles_and_Patterns.pdf &amp;lt;br&amp;gt;&lt;br /&gt;
[2] Reuse Release Equivalence Principle: http://c2.com/cgi/wiki$?ReuseReleaseEquivalencePrinciple&amp;lt;br&amp;gt;&lt;br /&gt;
[3] Granularity: http://www.objectmentor.com/resources/articles/granularity.pdf&amp;lt;br&amp;gt;&lt;br /&gt;
[4] Object Oriented Software Construction, Bertrand Meyer, Prentice Hall, 1988&lt;/div&gt;</summary>
		<author><name>Kanke</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_16_teamhelm&amp;diff=27319</id>
		<title>CSC/ECE 517 Fall 2009/wiki3 16 teamhelm</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_16_teamhelm&amp;diff=27319"/>
		<updated>2009-11-17T15:00:38Z</updated>

		<summary type="html">&lt;p&gt;Kanke: /* '''''Conclusion''''' */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''The Release Reuse Equivalency Principle (REP)''' ==&lt;br /&gt;
Components can be effectively reused only if they are released through a tracking system.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
=='''''Concept'''''==&lt;br /&gt;
&lt;br /&gt;
The Release Reuse Equivalency Principle (REP), first introduced by Bertrand Meyer [3][4], and later laid down in details by [http://en.wikipedia.org/wiki/Robert_Cecil_Martin Bob Martin], is described as follows:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;quot;''The granule of reuse is the granule of release.''&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Martin elaborates: &amp;quot;A reusable element, be it a component, a class, or a cluster of classes, cannot be&lt;br /&gt;
reused unless it is managed by a release system of some kind. Users will be unwilling&lt;br /&gt;
to use the element if they are forced to upgrade every time the author changes it.&lt;br /&gt;
Thus. even though the author has released a new version of his reusable element, he&lt;br /&gt;
must be willing to support and maintain older versions while his customers go about&lt;br /&gt;
the slow business of getting ready to upgrade. Thus, clients will refuse to reuse an element&lt;br /&gt;
unless the author promises to keep track of version numbers, and maintain old&lt;br /&gt;
versions for awhile.&lt;br /&gt;
Therefore, one criterion for grouping classes into packages is reuse. Since packages&lt;br /&gt;
are the unit of release, they are also the unit of reuse. Therefore architects would do&lt;br /&gt;
well to group reusable classes together into packages.&amp;quot; [1]&lt;br /&gt;
&lt;br /&gt;
=='''''Description'''''==&lt;br /&gt;
&lt;br /&gt;
Martin describes a &amp;quot;release system&amp;quot; in his concept, which refers to a system that is able to track versions of code as it is changed. This is also sometimes referred to as [http://en.wikipedia.org/wiki/Version_control version control]. Some common examples of version control are [http://en.wikipedia.org/wiki/Subversion_%28software%29 SVN], [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] and [http://en.wikipedia.org/wiki/Cmvc CMVC].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Martin also states that customers are slow to upgrade newer versions of code. This is commonly true for several reasons, including fear of instability of software, internal process, management approvals, and downtime for software systems.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Another critical concept here is that Martin states clients will refuse to upgrade unless the author tracks version numbers. This is related to the previous concept, where a client or customer, because of the above factors, may need to revert the system to a previous version of the code because the new version has caused a problem or outage.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
REP has also been described in the following way:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;..in order to effectively reuse code it must arrive in a complete, black-box, package that is to be used but not changed. Users of the code are shielded from changes to it because they can choose when to integrate changes from the package into their own code. While this supports code ownership, and even promotes it, it does not enforce it.&amp;quot; [2]&lt;br /&gt;
&lt;br /&gt;
Further elaboration on REP is noted here:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;I reuse code if, and only if, I never need to look at&lt;br /&gt;
the [http://en.wikipedia.org/wiki/Source_code source code] (other than the public portions of header files). I need only link with static&lt;br /&gt;
[http://en.wikipedia.org/wiki/Library_%28computing%29 libraries] or include dynamic libraries. Whenever these libraries are fixed or enhanced, I&lt;br /&gt;
receive a new version which I can then integrate into my system when opportunity allows. That is, I expect the code I am reusing to be treated like a product. It is not maintained&lt;br /&gt;
by me. It is not distributed by me. I am the customer, and the author, or some other entity,&lt;br /&gt;
is responsible for maintaining it. Thus, I can reuse nothing that is not also released. Moreover, when I reuse something&lt;br /&gt;
in a released library, I am in effect a client of the entire library.&amp;quot;[3]&lt;br /&gt;
&lt;br /&gt;
In a nutshell, Martin is stating that reuse (not copying) is useless and meaningless without release. The concept of reuse is vital to elegant [http://en.wikipedia.org/wiki/Object_oriented_design Object-Oriented design] and therefore cannot be properly maintained without release.&lt;br /&gt;
&lt;br /&gt;
=='''''Advantages'''''==&lt;br /&gt;
&lt;br /&gt;
The obvious advantages of REP are:&lt;br /&gt;
&lt;br /&gt;
1. Maintainability. There is no need to maintain reused code. This is done by the owner of the resused (released) code.&amp;lt;br&amp;gt;&lt;br /&gt;
2. Flexibility. The consumer of the reused code can decide what version and on what timetable the reused code is adopted.&amp;lt;br&amp;gt;&lt;br /&gt;
3. Enhancements. There is no need to make the reused code more efficient or to add function. New function can be added by upgrading to a new version of the reused code.&lt;br /&gt;
&lt;br /&gt;
=='''''Disadvantages'''''==&lt;br /&gt;
&lt;br /&gt;
As REP is a Cohesion Principle, the disadvantages would be similar to disadvantages of cohesion principles.&lt;br /&gt;
&lt;br /&gt;
1. REP is not simple for the maintainer of the code. The code owner must maintain several versions of the code, as well as large packages.&amp;lt;br&amp;gt;&lt;br /&gt;
2. The package structure cannot be designed from the top down, meaning that it would not be one of the first things about a system that is designed. Because of this, the package structure remains in a constant state of flux. [3]&amp;lt;br&amp;gt;&lt;br /&gt;
3. The best design philosophy cannot depend solely on REP. REP is best suited for a system that has gone through the initial planning, design and development stages to ensure that the package structure can be utilized effectively.&lt;br /&gt;
&lt;br /&gt;
=='''''Example'''''==&lt;br /&gt;
&lt;br /&gt;
The Java Boutique desribes a [http://javaboutique.internet.com/Case_Study/ tutorial] for designing a system with, among other primciples, REP in mind.&lt;br /&gt;
&lt;br /&gt;
=='''''Conclusion'''''==&lt;br /&gt;
&lt;br /&gt;
Code should be reused by including the released library, not by copying the code. This ensures the reused code is maintained by a single authority to avoid the divergence of the reused code. In fact the user should never see the source code for reuse except the included header files - &amp;lt;b&amp;gt;The unit of reuse is the unit of release&amp;lt;/b&amp;gt; &lt;br /&gt;
&lt;br /&gt;
The users of the library need to know the version/signature for dependency control and for reliable reversal to the originals after failed upgrade. The author need the same information to maintain and support the released product - &amp;lt;b&amp;gt;Effective reuse requires a change control system&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Though a class is the &amp;lt;i&amp;gt;de facto&amp;lt;/i&amp;gt; unit of reuse, its reuse is mostly confined to the author who also authors related classes and collectively make them a large functional unit - package. The REP is targeting a broad range of audience who are more interested in reuse this large functional unit or a class in that context. Also keeping track of version of individual classes would be burdensome to both users who, more often than not, use multiple classes within the same package, and author who need to maintain individual classes and their inter-dependencies within the large functional unit. &amp;lt;b&amp;gt;The effective unit of reuse and release is the package&amp;lt;/B&amp;gt;&lt;br /&gt;
&lt;br /&gt;
REP not only applies to external users, but also applies within the organization among different development groups.&lt;br /&gt;
&lt;br /&gt;
=='''''References'''''==&lt;br /&gt;
&lt;br /&gt;
[1] Design Principles and Patterns: http://www.objectmentor.com/resources/articles/Principles_and_Patterns.pdf &amp;lt;br&amp;gt;&lt;br /&gt;
[2] Reuse Release Equivalence Principle: http://c2.com/cgi/wiki$?ReuseReleaseEquivalencePrinciple&amp;lt;br&amp;gt;&lt;br /&gt;
[3] Granularity: http://www.objectmentor.com/resources/articles/granularity.pdf&amp;lt;br&amp;gt;&lt;br /&gt;
[4] Object Oriented Software Construction, Bertrand Meyer, Prentice Hall, 1988&lt;/div&gt;</summary>
		<author><name>Kanke</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_16_teamhelm&amp;diff=27316</id>
		<title>CSC/ECE 517 Fall 2009/wiki3 16 teamhelm</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_16_teamhelm&amp;diff=27316"/>
		<updated>2009-11-17T14:58:44Z</updated>

		<summary type="html">&lt;p&gt;Kanke: /* '''''Conclusion''''' */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''The Release Reuse Equivalency Principle (REP)''' ==&lt;br /&gt;
Components can be effectively reused only if they are released through a tracking system.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
=='''''Concept'''''==&lt;br /&gt;
&lt;br /&gt;
The Release Reuse Equivalency Principle (REP), first introduced by Bertrand Meyer [3][4], and later laid down in details by [http://en.wikipedia.org/wiki/Robert_Cecil_Martin Bob Martin], is described as follows:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;quot;''The granule of reuse is the granule of release.''&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Martin elaborates: &amp;quot;A reusable element, be it a component, a class, or a cluster of classes, cannot be&lt;br /&gt;
reused unless it is managed by a release system of some kind. Users will be unwilling&lt;br /&gt;
to use the element if they are forced to upgrade every time the author changes it.&lt;br /&gt;
Thus. even though the author has released a new version of his reusable element, he&lt;br /&gt;
must be willing to support and maintain older versions while his customers go about&lt;br /&gt;
the slow business of getting ready to upgrade. Thus, clients will refuse to reuse an element&lt;br /&gt;
unless the author promises to keep track of version numbers, and maintain old&lt;br /&gt;
versions for awhile.&lt;br /&gt;
Therefore, one criterion for grouping classes into packages is reuse. Since packages&lt;br /&gt;
are the unit of release, they are also the unit of reuse. Therefore architects would do&lt;br /&gt;
well to group reusable classes together into packages.&amp;quot; [1]&lt;br /&gt;
&lt;br /&gt;
=='''''Description'''''==&lt;br /&gt;
&lt;br /&gt;
Martin describes a &amp;quot;release system&amp;quot; in his concept, which refers to a system that is able to track versions of code as it is changed. This is also sometimes referred to as [http://en.wikipedia.org/wiki/Version_control version control]. Some common examples of version control are [http://en.wikipedia.org/wiki/Subversion_%28software%29 SVN], [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] and [http://en.wikipedia.org/wiki/Cmvc CMVC].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Martin also states that customers are slow to upgrade newer versions of code. This is commonly true for several reasons, including fear of instability of software, internal process, management approvals, and downtime for software systems.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Another critical concept here is that Martin states clients will refuse to upgrade unless the author tracks version numbers. This is related to the previous concept, where a client or customer, because of the above factors, may need to revert the system to a previous version of the code because the new version has caused a problem or outage.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
REP has also been described in the following way:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;..in order to effectively reuse code it must arrive in a complete, black-box, package that is to be used but not changed. Users of the code are shielded from changes to it because they can choose when to integrate changes from the package into their own code. While this supports code ownership, and even promotes it, it does not enforce it.&amp;quot; [2]&lt;br /&gt;
&lt;br /&gt;
Further elaboration on REP is noted here:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;I reuse code if, and only if, I never need to look at&lt;br /&gt;
the [http://en.wikipedia.org/wiki/Source_code source code] (other than the public portions of header files). I need only link with static&lt;br /&gt;
[http://en.wikipedia.org/wiki/Library_%28computing%29 libraries] or include dynamic libraries. Whenever these libraries are fixed or enhanced, I&lt;br /&gt;
receive a new version which I can then integrate into my system when opportunity allows. That is, I expect the code I am reusing to be treated like a product. It is not maintained&lt;br /&gt;
by me. It is not distributed by me. I am the customer, and the author, or some other entity,&lt;br /&gt;
is responsible for maintaining it. Thus, I can reuse nothing that is not also released. Moreover, when I reuse something&lt;br /&gt;
in a released library, I am in effect a client of the entire library.&amp;quot;[3]&lt;br /&gt;
&lt;br /&gt;
In a nutshell, Martin is stating that reuse (not copying) is useless and meaningless without release. The concept of reuse is vital to elegant [http://en.wikipedia.org/wiki/Object_oriented_design Object-Oriented design] and therefore cannot be properly maintained without release.&lt;br /&gt;
&lt;br /&gt;
=='''''Advantages'''''==&lt;br /&gt;
&lt;br /&gt;
The obvious advantages of REP are:&lt;br /&gt;
&lt;br /&gt;
1. Maintainability. There is no need to maintain reused code. This is done by the owner of the resused (released) code.&amp;lt;br&amp;gt;&lt;br /&gt;
2. Flexibility. The consumer of the reused code can decide what version and on what timetable the reused code is adopted.&amp;lt;br&amp;gt;&lt;br /&gt;
3. Enhancements. There is no need to make the reused code more efficient or to add function. New function can be added by upgrading to a new version of the reused code.&lt;br /&gt;
&lt;br /&gt;
=='''''Disadvantages'''''==&lt;br /&gt;
&lt;br /&gt;
As REP is a Cohesion Principle, the disadvantages would be similar to disadvantages of cohesion principles.&lt;br /&gt;
&lt;br /&gt;
1. REP is not simple for the maintainer of the code. The code owner must maintain several versions of the code, as well as large packages.&amp;lt;br&amp;gt;&lt;br /&gt;
2. The package structure cannot be designed from the top down, meaning that it would not be one of the first things about a system that is designed. Because of this, the package structure remains in a constant state of flux. [3]&amp;lt;br&amp;gt;&lt;br /&gt;
3. The best design philosophy cannot depend solely on REP. REP is best suited for a system that has gone through the initial planning, design and development stages to ensure that the package structure can be utilized effectively.&lt;br /&gt;
&lt;br /&gt;
=='''''Example'''''==&lt;br /&gt;
&lt;br /&gt;
The Java Boutique desribes a [http://javaboutique.internet.com/Case_Study/ tutorial] for designing a system with, among other primciples, REP in mind.&lt;br /&gt;
&lt;br /&gt;
=='''''Conclusion'''''==&lt;br /&gt;
&lt;br /&gt;
Code should be reused by including the released library, not by copying the code. This ensures the reused code is maintained by a single authority to avoid the divergence of the reused code. In fact the user should never see the source code for reuse except the included header files - &amp;lt;b&amp;gt;The unit of reuse is the unit of release&amp;lt;/b&amp;gt; &lt;br /&gt;
&lt;br /&gt;
The users of the library need to know the version/signature for dependency control and for reliable reversal to the originals after failed upgrade. The author need the same information to maintain and support the released product - &amp;lt;b&amp;gt;requirement for a change control system&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Though a class is the &amp;lt;i&amp;gt;de facto&amp;lt;/i&amp;gt; unit of reuse, its reuse is mostly confined to the author who also authors related classes and collectively make them a large functional unit - package. The REP is targeting a broad range of audience who are more interested in reuse this large functional unit or a class in that context. Also keeping track of version of individual classes would be burdensome to both users who, more often than not, use multiple classes within the same package, and author who need to maintain individual classes and their inter-dependencies within the large functional unit. &amp;lt;b&amp;gt;The effective unit of reuse and release is the package&amp;lt;/B&amp;gt;&lt;br /&gt;
&lt;br /&gt;
REP not only applies to external developers, but also applies within&lt;br /&gt;
the organization among different development groups.&lt;br /&gt;
&lt;br /&gt;
=='''''References'''''==&lt;br /&gt;
&lt;br /&gt;
[1] Design Principles and Patterns: http://www.objectmentor.com/resources/articles/Principles_and_Patterns.pdf &amp;lt;br&amp;gt;&lt;br /&gt;
[2] Reuse Release Equivalence Principle: http://c2.com/cgi/wiki$?ReuseReleaseEquivalencePrinciple&amp;lt;br&amp;gt;&lt;br /&gt;
[3] Granularity: http://www.objectmentor.com/resources/articles/granularity.pdf&amp;lt;br&amp;gt;&lt;br /&gt;
[4] Object Oriented Software Construction, Bertrand Meyer, Prentice Hall, 1988&lt;/div&gt;</summary>
		<author><name>Kanke</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_16_teamhelm&amp;diff=27308</id>
		<title>CSC/ECE 517 Fall 2009/wiki3 16 teamhelm</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_16_teamhelm&amp;diff=27308"/>
		<updated>2009-11-17T14:28:30Z</updated>

		<summary type="html">&lt;p&gt;Kanke: /* '''''Conclusion''''' */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''The Release Reuse Equivalency Principle (REP)''' ==&lt;br /&gt;
Components can be effectively reused only if they are released through a tracking system.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
=='''''Concept'''''==&lt;br /&gt;
&lt;br /&gt;
The Release Reuse Equivalency Principle (REP), first introduced by Bertrand Meyer [3][4], and later laid down in details by [http://en.wikipedia.org/wiki/Robert_Cecil_Martin Bob Martin], is described as follows:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;quot;''The granule of reuse is the granule of release.''&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Martin elaborates: &amp;quot;A reusable element, be it a component, a class, or a cluster of classes, cannot be&lt;br /&gt;
reused unless it is managed by a release system of some kind. Users will be unwilling&lt;br /&gt;
to use the element if they are forced to upgrade every time the author changes it.&lt;br /&gt;
Thus. even though the author has released a new version of his reusable element, he&lt;br /&gt;
must be willing to support and maintain older versions while his customers go about&lt;br /&gt;
the slow business of getting ready to upgrade. Thus, clients will refuse to reuse an element&lt;br /&gt;
unless the author promises to keep track of version numbers, and maintain old&lt;br /&gt;
versions for awhile.&lt;br /&gt;
Therefore, one criterion for grouping classes into packages is reuse. Since packages&lt;br /&gt;
are the unit of release, they are also the unit of reuse. Therefore architects would do&lt;br /&gt;
well to group reusable classes together into packages.&amp;quot; [1]&lt;br /&gt;
&lt;br /&gt;
=='''''Description'''''==&lt;br /&gt;
&lt;br /&gt;
Martin describes a &amp;quot;release system&amp;quot; in his concept, which refers to a system that is able to track versions of code as it is changed. This is also sometimes referred to as [http://en.wikipedia.org/wiki/Version_control version control]. Some common examples of version control are [http://en.wikipedia.org/wiki/Subversion_%28software%29 SVN], [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] and [http://en.wikipedia.org/wiki/Cmvc CMVC].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Martin also states that customers are slow to upgrade newer versions of code. This is commonly true for several reasons, including fear of instability of software, internal process, management approvals, and downtime for software systems.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Another critical concept here is that Martin states clients will refuse to upgrade unless the author tracks version numbers. This is related to the previous concept, where a client or customer, because of the above factors, may need to revert the system to a previous version of the code because the new version has caused a problem or outage.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
REP has also been described in the following way:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;..in order to effectively reuse code it must arrive in a complete, black-box, package that is to be used but not changed. Users of the code are shielded from changes to it because they can choose when to integrate changes from the package into their own code. While this supports code ownership, and even promotes it, it does not enforce it.&amp;quot; [2]&lt;br /&gt;
&lt;br /&gt;
Further elaboration on REP is noted here:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;I reuse code if, and only if, I never need to look at&lt;br /&gt;
the [http://en.wikipedia.org/wiki/Source_code source code] (other than the public portions of header files). I need only link with static&lt;br /&gt;
[http://en.wikipedia.org/wiki/Library_%28computing%29 libraries] or include dynamic libraries. Whenever these libraries are fixed or enhanced, I&lt;br /&gt;
receive a new version which I can then integrate into my system when opportunity allows. That is, I expect the code I am reusing to be treated like a product. It is not maintained&lt;br /&gt;
by me. It is not distributed by me. I am the customer, and the author, or some other entity,&lt;br /&gt;
is responsible for maintaining it. Thus, I can reuse nothing that is not also released. Moreover, when I reuse something&lt;br /&gt;
in a released library, I am in effect a client of the entire library.&amp;quot;[3]&lt;br /&gt;
&lt;br /&gt;
In a nutshell, Martin is stating that reuse (not copying) is useless and meaningless without release. The concept of reuse is vital to elegant [http://en.wikipedia.org/wiki/Object_oriented_design Object-Oriented design] and therefore cannot be properly maintained without release.&lt;br /&gt;
&lt;br /&gt;
=='''''Advantages'''''==&lt;br /&gt;
&lt;br /&gt;
The obvious advantages of REP are:&lt;br /&gt;
&lt;br /&gt;
1. Maintainability. There is no need to maintain reused code. This is done by the owner of the resused (released) code.&amp;lt;br&amp;gt;&lt;br /&gt;
2. Flexibility. The consumer of the reused code can decide what version and on what timetable the reused code is adopted.&amp;lt;br&amp;gt;&lt;br /&gt;
3. Enhancements. There is no need to make the reused code more efficient or to add function. New function can be added by upgrading to a new version of the reused code.&lt;br /&gt;
&lt;br /&gt;
=='''''Disadvantages'''''==&lt;br /&gt;
&lt;br /&gt;
As REP is a Cohesion Principle, the disadvantages would be similar to disadvantages of cohesion principles.&lt;br /&gt;
&lt;br /&gt;
1. REP is not simple for the maintainer of the code. The code owner must maintain several versions of the code, as well as large packages.&amp;lt;br&amp;gt;&lt;br /&gt;
2. The package structure cannot be designed from the top down, meaning that it would not be one of the first things about a system that is designed. Because of this, the package structure remains in a constant state of flux. [3]&amp;lt;br&amp;gt;&lt;br /&gt;
3. The best design philosophy cannot depend solely on REP. REP is best suited for a system that has gone through the initial planning, design and development stages to ensure that the package structure can be utilized effectively.&lt;br /&gt;
&lt;br /&gt;
=='''''Example'''''==&lt;br /&gt;
&lt;br /&gt;
The Java Boutique desribes a [http://javaboutique.internet.com/Case_Study/ tutorial] for designing a system with, among other primciples, REP in mind.&lt;br /&gt;
&lt;br /&gt;
=='''''Conclusion'''''==&lt;br /&gt;
&lt;br /&gt;
REP not only applies to external developers, but also applies within&lt;br /&gt;
the organization among different development groups.&lt;br /&gt;
&lt;br /&gt;
=='''''References'''''==&lt;br /&gt;
&lt;br /&gt;
[1] Design Principles and Patterns: http://www.objectmentor.com/resources/articles/Principles_and_Patterns.pdf &amp;lt;br&amp;gt;&lt;br /&gt;
[2] Reuse Release Equivalence Principle: http://c2.com/cgi/wiki$?ReuseReleaseEquivalencePrinciple&amp;lt;br&amp;gt;&lt;br /&gt;
[3] Granularity: http://www.objectmentor.com/resources/articles/granularity.pdf&amp;lt;br&amp;gt;&lt;br /&gt;
[4] Object Oriented Software Construction, Bertrand Meyer, Prentice Hall, 1988&lt;/div&gt;</summary>
		<author><name>Kanke</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_16_teamhelm&amp;diff=27307</id>
		<title>CSC/ECE 517 Fall 2009/wiki3 16 teamhelm</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_16_teamhelm&amp;diff=27307"/>
		<updated>2009-11-17T14:24:17Z</updated>

		<summary type="html">&lt;p&gt;Kanke: /* '''''Concept''''' */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''The Release Reuse Equivalency Principle (REP)''' ==&lt;br /&gt;
Components can be effectively reused only if they are released through a tracking system.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
=='''''Concept'''''==&lt;br /&gt;
&lt;br /&gt;
The Release Reuse Equivalency Principle (REP), first introduced by Bertrand Meyer [3][4], and later laid down in details by [http://en.wikipedia.org/wiki/Robert_Cecil_Martin Bob Martin], is described as follows:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;quot;''The granule of reuse is the granule of release.''&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Martin elaborates: &amp;quot;A reusable element, be it a component, a class, or a cluster of classes, cannot be&lt;br /&gt;
reused unless it is managed by a release system of some kind. Users will be unwilling&lt;br /&gt;
to use the element if they are forced to upgrade every time the author changes it.&lt;br /&gt;
Thus. even though the author has released a new version of his reusable element, he&lt;br /&gt;
must be willing to support and maintain older versions while his customers go about&lt;br /&gt;
the slow business of getting ready to upgrade. Thus, clients will refuse to reuse an element&lt;br /&gt;
unless the author promises to keep track of version numbers, and maintain old&lt;br /&gt;
versions for awhile.&lt;br /&gt;
Therefore, one criterion for grouping classes into packages is reuse. Since packages&lt;br /&gt;
are the unit of release, they are also the unit of reuse. Therefore architects would do&lt;br /&gt;
well to group reusable classes together into packages.&amp;quot; [1]&lt;br /&gt;
&lt;br /&gt;
=='''''Description'''''==&lt;br /&gt;
&lt;br /&gt;
Martin describes a &amp;quot;release system&amp;quot; in his concept, which refers to a system that is able to track versions of code as it is changed. This is also sometimes referred to as [http://en.wikipedia.org/wiki/Version_control version control]. Some common examples of version control are [http://en.wikipedia.org/wiki/Subversion_%28software%29 SVN], [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] and [http://en.wikipedia.org/wiki/Cmvc CMVC].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Martin also states that customers are slow to upgrade newer versions of code. This is commonly true for several reasons, including fear of instability of software, internal process, management approvals, and downtime for software systems.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Another critical concept here is that Martin states clients will refuse to upgrade unless the author tracks version numbers. This is related to the previous concept, where a client or customer, because of the above factors, may need to revert the system to a previous version of the code because the new version has caused a problem or outage.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
REP has also been described in the following way:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;..in order to effectively reuse code it must arrive in a complete, black-box, package that is to be used but not changed. Users of the code are shielded from changes to it because they can choose when to integrate changes from the package into their own code. While this supports code ownership, and even promotes it, it does not enforce it.&amp;quot; [2]&lt;br /&gt;
&lt;br /&gt;
Further elaboration on REP is noted here:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;I reuse code if, and only if, I never need to look at&lt;br /&gt;
the [http://en.wikipedia.org/wiki/Source_code source code] (other than the public portions of header files). I need only link with static&lt;br /&gt;
[http://en.wikipedia.org/wiki/Library_%28computing%29 libraries] or include dynamic libraries. Whenever these libraries are fixed or enhanced, I&lt;br /&gt;
receive a new version which I can then integrate into my system when opportunity allows. That is, I expect the code I am reusing to be treated like a product. It is not maintained&lt;br /&gt;
by me. It is not distributed by me. I am the customer, and the author, or some other entity,&lt;br /&gt;
is responsible for maintaining it. Thus, I can reuse nothing that is not also released. Moreover, when I reuse something&lt;br /&gt;
in a released library, I am in effect a client of the entire library.&amp;quot;[3]&lt;br /&gt;
&lt;br /&gt;
In a nutshell, Martin is stating that reuse (not copying) is useless and meaningless without release. The concept of reuse is vital to elegant [http://en.wikipedia.org/wiki/Object_oriented_design Object-Oriented design] and therefore cannot be properly maintained without release.&lt;br /&gt;
&lt;br /&gt;
=='''''Advantages'''''==&lt;br /&gt;
&lt;br /&gt;
The obvious advantages of REP are:&lt;br /&gt;
&lt;br /&gt;
1. Maintainability. There is no need to maintain reused code. This is done by the owner of the resused (released) code.&amp;lt;br&amp;gt;&lt;br /&gt;
2. Flexibility. The consumer of the reused code can decide what version and on what timetable the reused code is adopted.&amp;lt;br&amp;gt;&lt;br /&gt;
3. Enhancements. There is no need to make the reused code more efficient or to add function. New function can be added by upgrading to a new version of the reused code.&lt;br /&gt;
&lt;br /&gt;
=='''''Disadvantages'''''==&lt;br /&gt;
&lt;br /&gt;
As REP is a Cohesion Principle, the disadvantages would be similar to disadvantages of cohesion principles.&lt;br /&gt;
&lt;br /&gt;
1. REP is not simple for the maintainer of the code. The code owner must maintain several versions of the code, as well as large packages.&amp;lt;br&amp;gt;&lt;br /&gt;
2. The package structure cannot be designed from the top down, meaning that it would not be one of the first things about a system that is designed. Because of this, the package structure remains in a constant state of flux. [3]&amp;lt;br&amp;gt;&lt;br /&gt;
3. The best design philosophy cannot depend solely on REP. REP is best suited for a system that has gone through the initial planning, design and development stages to ensure that the package structure can be utilized effectively.&lt;br /&gt;
&lt;br /&gt;
=='''''Example'''''==&lt;br /&gt;
&lt;br /&gt;
The Java Boutique desribes a [http://javaboutique.internet.com/Case_Study/ tutorial] for designing a system with, among other primciples, REP in mind.&lt;br /&gt;
&lt;br /&gt;
=='''''Conclusion'''''==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''References'''''&lt;br /&gt;
&lt;br /&gt;
[1] Design Principles and Patterns: http://www.objectmentor.com/resources/articles/Principles_and_Patterns.pdf &amp;lt;br&amp;gt;&lt;br /&gt;
[2] Reuse Release Equivalence Principle: http://c2.com/cgi/wiki$?ReuseReleaseEquivalencePrinciple&amp;lt;br&amp;gt;&lt;br /&gt;
[3] Granularity: http://www.objectmentor.com/resources/articles/granularity.pdf&amp;lt;br&amp;gt;&lt;br /&gt;
[4] Object Oriented Software Construction, Bertrand Meyer, Prentice Hall, 1988&lt;/div&gt;</summary>
		<author><name>Kanke</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_16_teamhelm&amp;diff=27306</id>
		<title>CSC/ECE 517 Fall 2009/wiki3 16 teamhelm</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_16_teamhelm&amp;diff=27306"/>
		<updated>2009-11-17T14:22:14Z</updated>

		<summary type="html">&lt;p&gt;Kanke: /* '''''Conclusion''''' */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''The Release Reuse Equivalency Principle (REP)''' ==&lt;br /&gt;
Components can be effectively reused only if they are released through a tracking system.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
=='''''Concept'''''==&lt;br /&gt;
&lt;br /&gt;
The Release Reuse Equivalency Principle (REP), first introduced by [http://en.wikipedia.org/wiki/Robert_Cecil_Martin Bob Martin], is described as follows:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;quot;''The granule of reuse is the granule of release.''&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Martin elaborates: &amp;quot;A reusable element, be it a component, a class, or a cluster of classes, cannot be&lt;br /&gt;
reused unless it is managed by a release system of some kind. Users will be unwilling&lt;br /&gt;
to use the element if they are forced to upgrade every time the author changes it.&lt;br /&gt;
Thus. even though the author has released a new version of his reusable element, he&lt;br /&gt;
must be willing to support and maintain older versions while his customers go about&lt;br /&gt;
the slow business of getting ready to upgrade. Thus, clients will refuse to reuse an element&lt;br /&gt;
unless the author promises to keep track of version numbers, and maintain old&lt;br /&gt;
versions for awhile.&lt;br /&gt;
Therefore, one criterion for grouping classes into packages is reuse. Since packages&lt;br /&gt;
are the unit of release, they are also the unit of reuse. Therefore architects would do&lt;br /&gt;
well to group reusable classes together into packages.&amp;quot; [1]&lt;br /&gt;
&lt;br /&gt;
=='''''Description'''''==&lt;br /&gt;
&lt;br /&gt;
Martin describes a &amp;quot;release system&amp;quot; in his concept, which refers to a system that is able to track versions of code as it is changed. This is also sometimes referred to as [http://en.wikipedia.org/wiki/Version_control version control]. Some common examples of version control are [http://en.wikipedia.org/wiki/Subversion_%28software%29 SVN], [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] and [http://en.wikipedia.org/wiki/Cmvc CMVC].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Martin also states that customers are slow to upgrade newer versions of code. This is commonly true for several reasons, including fear of instability of software, internal process, management approvals, and downtime for software systems.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Another critical concept here is that Martin states clients will refuse to upgrade unless the author tracks version numbers. This is related to the previous concept, where a client or customer, because of the above factors, may need to revert the system to a previous version of the code because the new version has caused a problem or outage.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
REP has also been described in the following way:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;..in order to effectively reuse code it must arrive in a complete, black-box, package that is to be used but not changed. Users of the code are shielded from changes to it because they can choose when to integrate changes from the package into their own code. While this supports code ownership, and even promotes it, it does not enforce it.&amp;quot; [2]&lt;br /&gt;
&lt;br /&gt;
Further elaboration on REP is noted here:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;I reuse code if, and only if, I never need to look at&lt;br /&gt;
the [http://en.wikipedia.org/wiki/Source_code source code] (other than the public portions of header files). I need only link with static&lt;br /&gt;
[http://en.wikipedia.org/wiki/Library_%28computing%29 libraries] or include dynamic libraries. Whenever these libraries are fixed or enhanced, I&lt;br /&gt;
receive a new version which I can then integrate into my system when opportunity allows. That is, I expect the code I am reusing to be treated like a product. It is not maintained&lt;br /&gt;
by me. It is not distributed by me. I am the customer, and the author, or some other entity,&lt;br /&gt;
is responsible for maintaining it. Thus, I can reuse nothing that is not also released. Moreover, when I reuse something&lt;br /&gt;
in a released library, I am in effect a client of the entire library.&amp;quot;[3]&lt;br /&gt;
&lt;br /&gt;
In a nutshell, Martin is stating that reuse (not copying) is useless and meaningless without release. The concept of reuse is vital to elegant [http://en.wikipedia.org/wiki/Object_oriented_design Object-Oriented design] and therefore cannot be properly maintained without release.&lt;br /&gt;
&lt;br /&gt;
=='''''Advantages'''''==&lt;br /&gt;
&lt;br /&gt;
The obvious advantages of REP are:&lt;br /&gt;
&lt;br /&gt;
1. Maintainability. There is no need to maintain reused code. This is done by the owner of the resused (released) code.&amp;lt;br&amp;gt;&lt;br /&gt;
2. Flexibility. The consumer of the reused code can decide what version and on what timetable the reused code is adopted.&amp;lt;br&amp;gt;&lt;br /&gt;
3. Enhancements. There is no need to make the reused code more efficient or to add function. New function can be added by upgrading to a new version of the reused code.&lt;br /&gt;
&lt;br /&gt;
=='''''Disadvantages'''''==&lt;br /&gt;
&lt;br /&gt;
As REP is a Cohesion Principle, the disadvantages would be similar to disadvantages of cohesion principles.&lt;br /&gt;
&lt;br /&gt;
1. REP is not simple for the maintainer of the code. The code owner must maintain several versions of the code, as well as large packages.&amp;lt;br&amp;gt;&lt;br /&gt;
2. The package structure cannot be designed from the top down, meaning that it would not be one of the first things about a system that is designed. Because of this, the package structure remains in a constant state of flux. [3]&amp;lt;br&amp;gt;&lt;br /&gt;
3. The best design philosophy cannot depend solely on REP. REP is best suited for a system that has gone through the initial planning, design and development stages to ensure that the package structure can be utilized effectively.&lt;br /&gt;
&lt;br /&gt;
=='''''Example'''''==&lt;br /&gt;
&lt;br /&gt;
The Java Boutique desribes a [http://javaboutique.internet.com/Case_Study/ tutorial] for designing a system with, among other primciples, REP in mind.&lt;br /&gt;
&lt;br /&gt;
=='''''Conclusion'''''==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''References'''''&lt;br /&gt;
&lt;br /&gt;
[1] Design Principles and Patterns: http://www.objectmentor.com/resources/articles/Principles_and_Patterns.pdf &amp;lt;br&amp;gt;&lt;br /&gt;
[2] Reuse Release Equivalence Principle: http://c2.com/cgi/wiki$?ReuseReleaseEquivalencePrinciple&amp;lt;br&amp;gt;&lt;br /&gt;
[3] Granularity: http://www.objectmentor.com/resources/articles/granularity.pdf&amp;lt;br&amp;gt;&lt;br /&gt;
[4] Object Oriented Software Construction, Bertrand Meyer, Prentice Hall, 1988&lt;/div&gt;</summary>
		<author><name>Kanke</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_16_teamhelm&amp;diff=27305</id>
		<title>CSC/ECE 517 Fall 2009/wiki3 16 teamhelm</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_16_teamhelm&amp;diff=27305"/>
		<updated>2009-11-17T14:19:43Z</updated>

		<summary type="html">&lt;p&gt;Kanke: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''The Release Reuse Equivalency Principle (REP)''' ==&lt;br /&gt;
Components can be effectively reused only if they are released through a tracking system.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
=='''''Concept'''''==&lt;br /&gt;
&lt;br /&gt;
The Release Reuse Equivalency Principle (REP), first introduced by [http://en.wikipedia.org/wiki/Robert_Cecil_Martin Bob Martin], is described as follows:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;quot;''The granule of reuse is the granule of release.''&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Martin elaborates: &amp;quot;A reusable element, be it a component, a class, or a cluster of classes, cannot be&lt;br /&gt;
reused unless it is managed by a release system of some kind. Users will be unwilling&lt;br /&gt;
to use the element if they are forced to upgrade every time the author changes it.&lt;br /&gt;
Thus. even though the author has released a new version of his reusable element, he&lt;br /&gt;
must be willing to support and maintain older versions while his customers go about&lt;br /&gt;
the slow business of getting ready to upgrade. Thus, clients will refuse to reuse an element&lt;br /&gt;
unless the author promises to keep track of version numbers, and maintain old&lt;br /&gt;
versions for awhile.&lt;br /&gt;
Therefore, one criterion for grouping classes into packages is reuse. Since packages&lt;br /&gt;
are the unit of release, they are also the unit of reuse. Therefore architects would do&lt;br /&gt;
well to group reusable classes together into packages.&amp;quot; [1]&lt;br /&gt;
&lt;br /&gt;
=='''''Description'''''==&lt;br /&gt;
&lt;br /&gt;
Martin describes a &amp;quot;release system&amp;quot; in his concept, which refers to a system that is able to track versions of code as it is changed. This is also sometimes referred to as [http://en.wikipedia.org/wiki/Version_control version control]. Some common examples of version control are [http://en.wikipedia.org/wiki/Subversion_%28software%29 SVN], [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] and [http://en.wikipedia.org/wiki/Cmvc CMVC].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Martin also states that customers are slow to upgrade newer versions of code. This is commonly true for several reasons, including fear of instability of software, internal process, management approvals, and downtime for software systems.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Another critical concept here is that Martin states clients will refuse to upgrade unless the author tracks version numbers. This is related to the previous concept, where a client or customer, because of the above factors, may need to revert the system to a previous version of the code because the new version has caused a problem or outage.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
REP has also been described in the following way:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;..in order to effectively reuse code it must arrive in a complete, black-box, package that is to be used but not changed. Users of the code are shielded from changes to it because they can choose when to integrate changes from the package into their own code. While this supports code ownership, and even promotes it, it does not enforce it.&amp;quot; [2]&lt;br /&gt;
&lt;br /&gt;
Further elaboration on REP is noted here:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;I reuse code if, and only if, I never need to look at&lt;br /&gt;
the [http://en.wikipedia.org/wiki/Source_code source code] (other than the public portions of header files). I need only link with static&lt;br /&gt;
[http://en.wikipedia.org/wiki/Library_%28computing%29 libraries] or include dynamic libraries. Whenever these libraries are fixed or enhanced, I&lt;br /&gt;
receive a new version which I can then integrate into my system when opportunity allows. That is, I expect the code I am reusing to be treated like a product. It is not maintained&lt;br /&gt;
by me. It is not distributed by me. I am the customer, and the author, or some other entity,&lt;br /&gt;
is responsible for maintaining it. Thus, I can reuse nothing that is not also released. Moreover, when I reuse something&lt;br /&gt;
in a released library, I am in effect a client of the entire library.&amp;quot;[3]&lt;br /&gt;
&lt;br /&gt;
In a nutshell, Martin is stating that reuse (not copying) is useless and meaningless without release. The concept of reuse is vital to elegant [http://en.wikipedia.org/wiki/Object_oriented_design Object-Oriented design] and therefore cannot be properly maintained without release.&lt;br /&gt;
&lt;br /&gt;
=='''''Advantages'''''==&lt;br /&gt;
&lt;br /&gt;
The obvious advantages of REP are:&lt;br /&gt;
&lt;br /&gt;
1. Maintainability. There is no need to maintain reused code. This is done by the owner of the resused (released) code.&amp;lt;br&amp;gt;&lt;br /&gt;
2. Flexibility. The consumer of the reused code can decide what version and on what timetable the reused code is adopted.&amp;lt;br&amp;gt;&lt;br /&gt;
3. Enhancements. There is no need to make the reused code more efficient or to add function. New function can be added by upgrading to a new version of the reused code.&lt;br /&gt;
&lt;br /&gt;
=='''''Disadvantages'''''==&lt;br /&gt;
&lt;br /&gt;
As REP is a Cohesion Principle, the disadvantages would be similar to disadvantages of cohesion principles.&lt;br /&gt;
&lt;br /&gt;
1. REP is not simple for the maintainer of the code. The code owner must maintain several versions of the code, as well as large packages.&amp;lt;br&amp;gt;&lt;br /&gt;
2. The package structure cannot be designed from the top down, meaning that it would not be one of the first things about a system that is designed. Because of this, the package structure remains in a constant state of flux. [3]&amp;lt;br&amp;gt;&lt;br /&gt;
3. The best design philosophy cannot depend solely on REP. REP is best suited for a system that has gone through the initial planning, design and development stages to ensure that the package structure can be utilized effectively.&lt;br /&gt;
&lt;br /&gt;
=='''''Example'''''==&lt;br /&gt;
&lt;br /&gt;
The Java Boutique desribes a [http://javaboutique.internet.com/Case_Study/ tutorial] for designing a system with, among other primciples, REP in mind.&lt;br /&gt;
&lt;br /&gt;
=='''''Conclusion'''''==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''References'''''&lt;br /&gt;
&lt;br /&gt;
[1] Design Principles and Patterns: http://www.objectmentor.com/resources/articles/Principles_and_Patterns.pdf &amp;lt;br&amp;gt;&lt;br /&gt;
[2] Reuse Release Equivalence Principle: http://c2.com/cgi/wiki$?ReuseReleaseEquivalencePrinciple&amp;lt;br&amp;gt;&lt;br /&gt;
[3] Granularity: http://www.objectmentor.com/resources/articles/granularity.pdf&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Kanke</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_teamhelm&amp;diff=27216</id>
		<title>CSC/ECE 517 Fall 2009/wiki3 teamhelm</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki3_teamhelm&amp;diff=27216"/>
		<updated>2009-11-17T03:24:08Z</updated>

		<summary type="html">&lt;p&gt;Kanke: /* '''The Release Reuse Equivalency Principle (REP)''' */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''The Release Reuse Equivalency Principle (REP)''' ==&lt;br /&gt;
Components can be effectively reused only if they are released through a tracking system.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
=='''''Concept'''''==&lt;br /&gt;
&lt;br /&gt;
The Release Reuse Equivalency Principle (REP), first introduced by [http://en.wikipedia.org/wiki/Robert_Cecil_Martin Bob Martin], is described as follows:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;quot;''The granule of reuse is the granule of release.''&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Martin elaborates: &amp;quot;A reusable element, be it a component, a class, or a cluster of classes, cannot be&lt;br /&gt;
reused unless it is managed by a release system of some kind. Users will be unwilling&lt;br /&gt;
to use the element if they are forced to upgrade every time the author changes it.&lt;br /&gt;
Thus. even though the author has released a new version of his reusable element, he&lt;br /&gt;
must be willing to support and maintain older versions while his customers go about&lt;br /&gt;
the slow business of getting ready to upgrade. Thus, clients will refuse to reuse an element&lt;br /&gt;
unless the author promises to keep track of version numbers, and maintain old&lt;br /&gt;
versions for awhile.&lt;br /&gt;
Therefore, one criterion for grouping classes into packages is reuse. Since packages&lt;br /&gt;
are the unit of release, they are also the unit of reuse. Therefore architects would do&lt;br /&gt;
well to group reusable classes together into packages.&amp;quot; [1]&lt;br /&gt;
&lt;br /&gt;
=='''''Description'''''==&lt;br /&gt;
&lt;br /&gt;
Martin describes a &amp;quot;release system&amp;quot; in his concept, which refers to a system that is able to track versions of code as it is changed. This is also sometimes referred to as [http://en.wikipedia.org/wiki/Version_control version control]. Some common examples of version control are [http://en.wikipedia.org/wiki/Subversion_%28software%29 SVN], [http://en.wikipedia.org/wiki/Concurrent_Versions_System CVS] and [http://en.wikipedia.org/wiki/Cmvc CMVC].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Martin also states that customers are slow to upgrade newer versions of code. This is commonly true for several reasons, including fear of instability of software, internal process, management approvals, and downtime for software systems.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Another critical concept here is that Martin states clients will refuse to upgrade unless the author tracks version numbers. This is related to the previous concept, where a client or customer, because of the above factors, may need to revert the system to a previous version of the code because the new version has caused a problem or outage.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
REP has also been described in the following way:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;..in order to effectively reuse code it must arrive in a complete, black-box, package that is to be used but not changed. Users of the code are shielded from changes to it because they can choose when to integrate changes from the package into their own code. While this supports code ownership, and even promotes it, it does not enforce it.&amp;quot; [2]&lt;br /&gt;
&lt;br /&gt;
Further elaboration on REP is noted here:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;I reuse code if, and only if, I never need to look at&lt;br /&gt;
the [http://en.wikipedia.org/wiki/Source_code source code] (other than the public portions of header files). I need only link with static&lt;br /&gt;
[http://en.wikipedia.org/wiki/Library_%28computing%29 libraries] or include dynamic libraries. Whenever these libraries are fixed or enhanced, I&lt;br /&gt;
receive a new version which I can then integrate into my system when opportunity allows. That is, I expect the code I am reusing to be treated like a product. It is not maintained&lt;br /&gt;
by me. It is not distributed by me. I am the customer, and the author, or some other entity,&lt;br /&gt;
is responsible for maintaining it. Thus, I can reuse nothing that is not also released. Moreover, when I reuse something&lt;br /&gt;
in a released library, I am in effect a client of the entire library.&amp;quot;[3]&lt;br /&gt;
&lt;br /&gt;
In a nutshell, Martin is stating that reuse (not copying) is useless and meaningless without release. The concept of reuse is vital to elegant [http://en.wikipedia.org/wiki/Object_oriented_design Object-Oriented design] and therefore cannot be properly maintained without release.&lt;br /&gt;
&lt;br /&gt;
=='''''Advantages'''''==&lt;br /&gt;
&lt;br /&gt;
The obvious advantages of REP are:&lt;br /&gt;
&lt;br /&gt;
1. Maintainability. There is no need to maintain reused code. This is done by the owner of the resused (released) code.&amp;lt;br&amp;gt;&lt;br /&gt;
2. Flexibility. The consumer of the reused code can decide what version and on what timetable the reused code is adopted.&amp;lt;br&amp;gt;&lt;br /&gt;
3. Enhancements. There is no need to make the reused code more efficient or to add function. New function can be added by upgrading to a new version of the reused code.&lt;br /&gt;
&lt;br /&gt;
=='''''Disadvantages'''''==&lt;br /&gt;
&lt;br /&gt;
As REP is a Cohesion Principle, the disadvantages would be similar to disadvantages of cohesion principles.&lt;br /&gt;
&lt;br /&gt;
1. REP is not simple for the maintainer of the code. The code owner must maintain several versions of the code, as well as large packages.&amp;lt;br&amp;gt;&lt;br /&gt;
2. The package structure cannot be designed from the top down, meaning that it would not be one of the first things about a system that is designed. Because of this, the package structure remains in a constant state of flux. [3]&amp;lt;br&amp;gt;&lt;br /&gt;
3. The best design philosophy cannot depend solely on REP. REP is best suited for a system that has gone through the initial planning, design and development stages to ensure that the package structure can be utilized effectively.&lt;br /&gt;
&lt;br /&gt;
=='''''Example'''''==&lt;br /&gt;
&lt;br /&gt;
The Java Boutique desribes a [http://javaboutique.internet.com/Case_Study/ tutorial] for designing a system with, among other primciples, REP in mind.&lt;br /&gt;
&lt;br /&gt;
=='''''Conclusion'''''==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''''References'''''&lt;br /&gt;
&lt;br /&gt;
[1] Design Principles and Patterns: http://www.objectmentor.com/resources/articles/Principles_and_Patterns.pdf &amp;lt;br&amp;gt;&lt;br /&gt;
[2] Reuse Release Equivalence Principle: http://c2.com/cgi/wiki$?ReuseReleaseEquivalencePrinciple&amp;lt;br&amp;gt;&lt;br /&gt;
[3] Granularity: http://www.objectmentor.com/resources/articles/granularity.pdf&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Kanke</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=Written_Report_on_View_(Testing)&amp;diff=26463</id>
		<title>Written Report on View (Testing)</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Written_Report_on_View_(Testing)&amp;diff=26463"/>
		<updated>2009-10-27T00:42:22Z</updated>

		<summary type="html">&lt;p&gt;Kanke: /* Planned Fixes and Enhancement */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''View Layer Analysis and Improvement'''&lt;br /&gt;
&lt;br /&gt;
== View Analysis ==&lt;br /&gt;
&lt;br /&gt;
== Bugs or Undesired Behaviors ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Title&lt;br /&gt;
!  Details&lt;br /&gt;
!  Actual Behavior&lt;br /&gt;
!  Expected Behavior&lt;br /&gt;
!  Solved&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|  Default Amount for split&lt;br /&gt;
|  The default amount is not set to the difference automatically for the new split&lt;br /&gt;
|  Currently, default amount is set to zero&lt;br /&gt;
|  The remaining split amount represents the remaining balance among the splits&lt;br /&gt;
|  No&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|  Hard to use mouse alone when adding new split&lt;br /&gt;
|  The dialog does not offer an easy way to show the effect of amount change in a split&lt;br /&gt;
|  Currently one has to shift the focus to either buttons or other source amount for the purpose&lt;br /&gt;
|  Could be realized by a mouse click in a non-sensitive target with a large surface such as a panel.&lt;br /&gt;
|  No&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|  Category drop down&lt;br /&gt;
|  Category list not filtered&lt;br /&gt;
|  Some items (credit, cash) are not selectable when selecting a split source.&lt;br /&gt;
|  If it's not available for selection, then better take them off the list&lt;br /&gt;
|  No&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|  Split From Source&lt;br /&gt;
|  Transaction involves split from sources didn't show the split when selected&lt;br /&gt;
|  It shows &amp;lt;From&amp;gt; in an unselected mode&lt;br /&gt;
|  Should show &amp;quot;split&amp;quot; entry with &amp;quot;...&amp;quot; button surfaced&lt;br /&gt;
|  No&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|  Create New menu&lt;br /&gt;
|  Undesired behavior. Create new options shouldn't be put under ''Edit'' menu. It's not intuitive for new users.   &lt;br /&gt;
|  Under My Accounts tab, Edit -&amp;gt; Create Account.&lt;br /&gt;
Under My Budget tab, Edit -&amp;gt; Create Budget Category.&lt;br /&gt;
|  Several options:&lt;br /&gt;
# Move to under File menu&lt;br /&gt;
# Create button for &amp;quot;New Account&amp;quot; and &amp;quot;New Budget Category&amp;quot;&lt;br /&gt;
|  No&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|  Create Budget Category using existing category as parent&lt;br /&gt;
|  From &amp;quot;My Budget&amp;quot; tab, &amp;quot;Edit&amp;quot; -&amp;gt; &amp;quot;Create Budget Category&amp;quot; -&amp;gt; create new category and choose one of the parents that does not have any children yet -&amp;gt; &amp;quot;OK&amp;quot;. &lt;br /&gt;
|  Parent does not have + sign next to its name. It will only show up when you highlight parent's row or switch view from Buddi and come back.&lt;br /&gt;
|  Parent's name should have &amp;quot;+&amp;quot; sign next to it right after child creation.&lt;br /&gt;
|  No&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|  &lt;br /&gt;
|  &lt;br /&gt;
|  &lt;br /&gt;
|&lt;br /&gt;
|  No&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Planned Fixes and Enhancement ===&lt;br /&gt;
# The new split amount represents the remaining balance for the total of the splits (SplitTransactionDialog)&lt;br /&gt;
# The dialogue information refreshes after mouse click away from the amount text box (SplitTransactionDialog)&lt;br /&gt;
# Fix the source selection in drop-down list, i.e. when a split source is chosen the other source should not lose its selection.&lt;br /&gt;
# If the above does not automatically solve the problem, find a way to enable both sources to be split type, which the model allows.&lt;br /&gt;
&lt;br /&gt;
=== Changes Accomplished ===&lt;br /&gt;
# The new split amount represents the remaining balance for the total of the splits (SplitTransactionDialog)&lt;br /&gt;
# The dialogue information refreshes after mouse click away from the amount text box (SplitTransactionDialog)&lt;/div&gt;</summary>
		<author><name>Kanke</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=Written_Report_on_Model_(Testing)&amp;diff=26462</id>
		<title>Written Report on Model (Testing)</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Written_Report_on_Model_(Testing)&amp;diff=26462"/>
		<updated>2009-10-27T00:40:04Z</updated>

		<summary type="html">&lt;p&gt;Kanke: /* Pre-existing Tests */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Model Analysis and Testing'''&lt;br /&gt;
&lt;br /&gt;
== Model Analysis ==&lt;br /&gt;
&lt;br /&gt;
=== Ubiquitousness of Split ===&lt;br /&gt;
&lt;br /&gt;
After walking through several transaction scenarios that involves splits, one has to appreciate the usefulness and necessity of a split structure for day-to-day transactions. &lt;br /&gt;
&lt;br /&gt;
Though the current application gives the impression that it's incidental, actually in real life it might happen more frequent than we assume. Considering supermarket shopping experiences, a significant proportion, if not most, of our purchase activities belong to split transactions. It's very often we buy things which belong to different categories: groceries, garments, office supplies (educational or small business for tax purpose), medicine for health (tax, flex-spending), etc. It's less often but still not uncommon that we get cash back from the same transaction, or we foot the bill with two or more payment methods (credit cards, bank cards, cash, etc.). &lt;br /&gt;
&lt;br /&gt;
Assume spit is a generic form of transaction, we might as well consider the &amp;quot;normal&amp;quot; transaction, single-source-single-category, a special case - a transaction comprises of only one From source and one To destination. I wonder if this idea would have an impact on the model design, or if the current model is built upon this. &lt;br /&gt;
&lt;br /&gt;
But definitely we can incorporate this idea into the UI design. Which I might as well discuss it in the [[Report for View (Testing)]] section.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
=== Testing Strategy ===&lt;br /&gt;
*Conformance — Does the value conform to an expected format?&lt;br /&gt;
*Ordering — Is the set of values ordered or unordered as appropriate?&lt;br /&gt;
*Range — Is the value within reasonable minimum and maximum values?&lt;br /&gt;
*Reference — Does the code reference anything external that isn't under direct control of the code itself?&lt;br /&gt;
*Existence — Does the value exist (e.g., is non-null, non-zero, present in a set, etc.)?&lt;br /&gt;
*Cardinality — Are there exactly enough values?&lt;br /&gt;
*Time (absolute and relative) — Is everything happening in order? At the right time? In time?&lt;br /&gt;
&lt;br /&gt;
=== Pre-existing Tests for Split Model ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	public void testCompare() throws Exception {&lt;br /&gt;
		//Splitting To - all attributes are the same&lt;br /&gt;
		//Splitting From - All attributes are the same&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public void testWithoutSplits() throws Exception {}&lt;br /&gt;
&lt;br /&gt;
	public void testWithFromSplits() throws Exception {}&lt;br /&gt;
&lt;br /&gt;
	public void testWithToSplits() throws Exception {}&lt;br /&gt;
&lt;br /&gt;
	public void testWithBothSplits() throws Exception {}&lt;br /&gt;
&lt;br /&gt;
	public void testUnbalancedSplits() throws Exception {}&lt;br /&gt;
&lt;br /&gt;
	public void testWithIncorrectIncomeBCSplits() throws Exception {}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* There are a few method calls in SplitsTest seemed to be redundant. They were in the format of &amp;quot;t.setFrom(new SplitImpl());&amp;quot; or &amp;quot;t.setTo(new SplitImpl());&amp;quot;. The later calls, &amp;quot;t.setFromSplits(fromSplits);&amp;quot; or &amp;quot;t.setToSplits(toSplits);&amp;quot;, seem to always overwrite their effects.&lt;br /&gt;
&lt;br /&gt;
* In the model, one can add a transaction with all &amp;quot;from&amp;quot; and &amp;quot;to&amp;quot; sources, amounts undefined. Because of the this, one can actually adds 0 split to a split source in a transaction as long as the transaction amount is 0L. Is it what author intended?&lt;br /&gt;
&lt;br /&gt;
=== Added Tests ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#public void testSplitsZeroToSplit() throws Exception {}&lt;br /&gt;
#public void testSplitsZeroFromSplit() throws Exception {}&lt;br /&gt;
#public void testSplitsToSplitZeroAmount() throws Exception {}&lt;br /&gt;
#public void testSplitsFromSplitZeroAmount() throws Exception {}&lt;br /&gt;
#public void testSplitToSplitsNullSource() throws Exception {}&lt;br /&gt;
#public void testSplitFromSplitsNullSource() throws Exception {}&lt;br /&gt;
#public void void testSplitsToSplitBCincome() throws Exception {}&lt;br /&gt;
#public void void testSplitsFromSplitBCincome() throws Exception {}&lt;/div&gt;</summary>
		<author><name>Kanke</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=Written_Report_on_Model_(Testing)&amp;diff=26461</id>
		<title>Written Report on Model (Testing)</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Written_Report_on_Model_(Testing)&amp;diff=26461"/>
		<updated>2009-10-27T00:39:22Z</updated>

		<summary type="html">&lt;p&gt;Kanke: /* Pre-existing Tests */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Model Analysis and Testing'''&lt;br /&gt;
&lt;br /&gt;
== Model Analysis ==&lt;br /&gt;
&lt;br /&gt;
=== Ubiquitousness of Split ===&lt;br /&gt;
&lt;br /&gt;
After walking through several transaction scenarios that involves splits, one has to appreciate the usefulness and necessity of a split structure for day-to-day transactions. &lt;br /&gt;
&lt;br /&gt;
Though the current application gives the impression that it's incidental, actually in real life it might happen more frequent than we assume. Considering supermarket shopping experiences, a significant proportion, if not most, of our purchase activities belong to split transactions. It's very often we buy things which belong to different categories: groceries, garments, office supplies (educational or small business for tax purpose), medicine for health (tax, flex-spending), etc. It's less often but still not uncommon that we get cash back from the same transaction, or we foot the bill with two or more payment methods (credit cards, bank cards, cash, etc.). &lt;br /&gt;
&lt;br /&gt;
Assume spit is a generic form of transaction, we might as well consider the &amp;quot;normal&amp;quot; transaction, single-source-single-category, a special case - a transaction comprises of only one From source and one To destination. I wonder if this idea would have an impact on the model design, or if the current model is built upon this. &lt;br /&gt;
&lt;br /&gt;
But definitely we can incorporate this idea into the UI design. Which I might as well discuss it in the [[Report for View (Testing)]] section.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
=== Testing Strategy ===&lt;br /&gt;
*Conformance — Does the value conform to an expected format?&lt;br /&gt;
*Ordering — Is the set of values ordered or unordered as appropriate?&lt;br /&gt;
*Range — Is the value within reasonable minimum and maximum values?&lt;br /&gt;
*Reference — Does the code reference anything external that isn't under direct control of the code itself?&lt;br /&gt;
*Existence — Does the value exist (e.g., is non-null, non-zero, present in a set, etc.)?&lt;br /&gt;
*Cardinality — Are there exactly enough values?&lt;br /&gt;
*Time (absolute and relative) — Is everything happening in order? At the right time? In time?&lt;br /&gt;
&lt;br /&gt;
=== Pre-existing Tests ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	public void testCompare() throws Exception {&lt;br /&gt;
		//Splitting To - all attributes are the same&lt;br /&gt;
		//Splitting From - All attributes are the same&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public void testWithoutSplits() throws Exception {}&lt;br /&gt;
&lt;br /&gt;
	public void testWithFromSplits() throws Exception {}&lt;br /&gt;
&lt;br /&gt;
	public void testWithToSplits() throws Exception {}&lt;br /&gt;
&lt;br /&gt;
	public void testWithBothSplits() throws Exception {}&lt;br /&gt;
&lt;br /&gt;
	public void testUnbalancedSplits() throws Exception {}&lt;br /&gt;
&lt;br /&gt;
	public void testWithIncorrectIncomeBCSplits() throws Exception {}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* There are a few method calls in SplitsTest seemed to be redundant. They were in the format of &amp;quot;t.setFrom(new SplitImpl());&amp;quot; or &amp;quot;t.setTo(new SplitImpl());&amp;quot;. The later calls, &amp;quot;t.setFromSplits(fromSplits);&amp;quot; or &amp;quot;t.setToSplits(toSplits);&amp;quot;, seem to always overwrite their effects.&lt;br /&gt;
&lt;br /&gt;
* In the model, one can add a transaction with all &amp;quot;from&amp;quot; and &amp;quot;to&amp;quot; sources, amounts undefined. Because of the this, one can actually adds 0 split to a split source in a transaction as long as the transaction amount is 0L. Is it what author intended?&lt;br /&gt;
&lt;br /&gt;
=== Added Tests ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#public void testSplitsZeroToSplit() throws Exception {}&lt;br /&gt;
#public void testSplitsZeroFromSplit() throws Exception {}&lt;br /&gt;
#public void testSplitsToSplitZeroAmount() throws Exception {}&lt;br /&gt;
#public void testSplitsFromSplitZeroAmount() throws Exception {}&lt;br /&gt;
#public void testSplitToSplitsNullSource() throws Exception {}&lt;br /&gt;
#public void testSplitFromSplitsNullSource() throws Exception {}&lt;br /&gt;
#public void void testSplitsToSplitBCincome() throws Exception {}&lt;br /&gt;
#public void void testSplitsFromSplitBCincome() throws Exception {}&lt;/div&gt;</summary>
		<author><name>Kanke</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=Written_Report_on_Model_(Testing)&amp;diff=26460</id>
		<title>Written Report on Model (Testing)</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Written_Report_on_Model_(Testing)&amp;diff=26460"/>
		<updated>2009-10-27T00:37:49Z</updated>

		<summary type="html">&lt;p&gt;Kanke: /* Rules for choosing From and To sources */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Model Analysis and Testing'''&lt;br /&gt;
&lt;br /&gt;
== Model Analysis ==&lt;br /&gt;
&lt;br /&gt;
=== Ubiquitousness of Split ===&lt;br /&gt;
&lt;br /&gt;
After walking through several transaction scenarios that involves splits, one has to appreciate the usefulness and necessity of a split structure for day-to-day transactions. &lt;br /&gt;
&lt;br /&gt;
Though the current application gives the impression that it's incidental, actually in real life it might happen more frequent than we assume. Considering supermarket shopping experiences, a significant proportion, if not most, of our purchase activities belong to split transactions. It's very often we buy things which belong to different categories: groceries, garments, office supplies (educational or small business for tax purpose), medicine for health (tax, flex-spending), etc. It's less often but still not uncommon that we get cash back from the same transaction, or we foot the bill with two or more payment methods (credit cards, bank cards, cash, etc.). &lt;br /&gt;
&lt;br /&gt;
Assume spit is a generic form of transaction, we might as well consider the &amp;quot;normal&amp;quot; transaction, single-source-single-category, a special case - a transaction comprises of only one From source and one To destination. I wonder if this idea would have an impact on the model design, or if the current model is built upon this. &lt;br /&gt;
&lt;br /&gt;
But definitely we can incorporate this idea into the UI design. Which I might as well discuss it in the [[Report for View (Testing)]] section.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
=== Testing Strategy ===&lt;br /&gt;
*Conformance — Does the value conform to an expected format?&lt;br /&gt;
*Ordering — Is the set of values ordered or unordered as appropriate?&lt;br /&gt;
*Range — Is the value within reasonable minimum and maximum values?&lt;br /&gt;
*Reference — Does the code reference anything external that isn't under direct control of the code itself?&lt;br /&gt;
*Existence — Does the value exist (e.g., is non-null, non-zero, present in a set, etc.)?&lt;br /&gt;
*Cardinality — Are there exactly enough values?&lt;br /&gt;
*Time (absolute and relative) — Is everything happening in order? At the right time? In time?&lt;br /&gt;
&lt;br /&gt;
=== Pre-existing Tests ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	public void testCompare() throws Exception {&lt;br /&gt;
		//Splitting To - all attributes are the same&lt;br /&gt;
		//Splitting From - All attributes are the same&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public void testWithoutSplits() throws Exception {}&lt;br /&gt;
&lt;br /&gt;
	public void testWithFromSplits() throws Exception {}&lt;br /&gt;
&lt;br /&gt;
	public void testWithToSplits() throws Exception {}&lt;br /&gt;
&lt;br /&gt;
	public void testWithBothSplits() throws Exception {}&lt;br /&gt;
&lt;br /&gt;
	public void testUnbalancedSplits() throws Exception {}&lt;br /&gt;
&lt;br /&gt;
	public void testWithIncorrectIncomeBCSplits() throws Exception {}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There are a few method calls in SplitsTest seemed to be redundant. They were in the format of &amp;quot;t.setFrom(new SplitImpl());&amp;quot; or &amp;quot;t.setTo(new SplitImpl());&amp;quot;. The later calls, &amp;quot;t.setFromSplits(fromSplits);&amp;quot; or &amp;quot;t.setToSplits(toSplits);&amp;quot;, seem to always overwrite their effects.&lt;br /&gt;
&lt;br /&gt;
In the model, one can add a transaction with all &amp;quot;from&amp;quot; and &amp;quot;to&amp;quot; sources, amounts undefined. Because of the this, one can actually adds 0 split to a split source in a transaction as long as the transaction amount is 0L. Is it what author intended?&lt;br /&gt;
&lt;br /&gt;
=== Added Tests ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#public void testSplitsZeroToSplit() throws Exception {}&lt;br /&gt;
#public void testSplitsZeroFromSplit() throws Exception {}&lt;br /&gt;
#public void testSplitsToSplitZeroAmount() throws Exception {}&lt;br /&gt;
#public void testSplitsFromSplitZeroAmount() throws Exception {}&lt;br /&gt;
#public void testSplitToSplitsNullSource() throws Exception {}&lt;br /&gt;
#public void testSplitFromSplitsNullSource() throws Exception {}&lt;br /&gt;
#public void void testSplitsToSplitBCincome() throws Exception {}&lt;br /&gt;
#public void void testSplitsFromSplitBCincome() throws Exception {}&lt;/div&gt;</summary>
		<author><name>Kanke</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=Written_Report_on_Model_(Testing)&amp;diff=26459</id>
		<title>Written Report on Model (Testing)</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Written_Report_on_Model_(Testing)&amp;diff=26459"/>
		<updated>2009-10-27T00:37:29Z</updated>

		<summary type="html">&lt;p&gt;Kanke: /* Model Limitations */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Model Analysis and Testing'''&lt;br /&gt;
&lt;br /&gt;
== Model Analysis ==&lt;br /&gt;
&lt;br /&gt;
=== Ubiquitousness of Split ===&lt;br /&gt;
&lt;br /&gt;
After walking through several transaction scenarios that involves splits, one has to appreciate the usefulness and necessity of a split structure for day-to-day transactions. &lt;br /&gt;
&lt;br /&gt;
Though the current application gives the impression that it's incidental, actually in real life it might happen more frequent than we assume. Considering supermarket shopping experiences, a significant proportion, if not most, of our purchase activities belong to split transactions. It's very often we buy things which belong to different categories: groceries, garments, office supplies (educational or small business for tax purpose), medicine for health (tax, flex-spending), etc. It's less often but still not uncommon that we get cash back from the same transaction, or we foot the bill with two or more payment methods (credit cards, bank cards, cash, etc.). &lt;br /&gt;
&lt;br /&gt;
Assume spit is a generic form of transaction, we might as well consider the &amp;quot;normal&amp;quot; transaction, single-source-single-category, a special case - a transaction comprises of only one From source and one To destination. I wonder if this idea would have an impact on the model design, or if the current model is built upon this. &lt;br /&gt;
&lt;br /&gt;
But definitely we can incorporate this idea into the UI design. Which I might as well discuss it in the [[Report for View (Testing)]] section.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Rules for choosing From and To sources ===&lt;br /&gt;
*Implied Rules?&lt;br /&gt;
*Filtered list with rules&lt;br /&gt;
== Testing ==&lt;br /&gt;
=== Testing Strategy ===&lt;br /&gt;
*Conformance — Does the value conform to an expected format?&lt;br /&gt;
*Ordering — Is the set of values ordered or unordered as appropriate?&lt;br /&gt;
*Range — Is the value within reasonable minimum and maximum values?&lt;br /&gt;
*Reference — Does the code reference anything external that isn't under direct control of the code itself?&lt;br /&gt;
*Existence — Does the value exist (e.g., is non-null, non-zero, present in a set, etc.)?&lt;br /&gt;
*Cardinality — Are there exactly enough values?&lt;br /&gt;
*Time (absolute and relative) — Is everything happening in order? At the right time? In time?&lt;br /&gt;
&lt;br /&gt;
=== Pre-existing Tests ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	public void testCompare() throws Exception {&lt;br /&gt;
		//Splitting To - all attributes are the same&lt;br /&gt;
		//Splitting From - All attributes are the same&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public void testWithoutSplits() throws Exception {}&lt;br /&gt;
&lt;br /&gt;
	public void testWithFromSplits() throws Exception {}&lt;br /&gt;
&lt;br /&gt;
	public void testWithToSplits() throws Exception {}&lt;br /&gt;
&lt;br /&gt;
	public void testWithBothSplits() throws Exception {}&lt;br /&gt;
&lt;br /&gt;
	public void testUnbalancedSplits() throws Exception {}&lt;br /&gt;
&lt;br /&gt;
	public void testWithIncorrectIncomeBCSplits() throws Exception {}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There are a few method calls in SplitsTest seemed to be redundant. They were in the format of &amp;quot;t.setFrom(new SplitImpl());&amp;quot; or &amp;quot;t.setTo(new SplitImpl());&amp;quot;. The later calls, &amp;quot;t.setFromSplits(fromSplits);&amp;quot; or &amp;quot;t.setToSplits(toSplits);&amp;quot;, seem to always overwrite their effects.&lt;br /&gt;
&lt;br /&gt;
In the model, one can add a transaction with all &amp;quot;from&amp;quot; and &amp;quot;to&amp;quot; sources, amounts undefined. Because of the this, one can actually adds 0 split to a split source in a transaction as long as the transaction amount is 0L. Is it what author intended?&lt;br /&gt;
&lt;br /&gt;
=== Added Tests ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#public void testSplitsZeroToSplit() throws Exception {}&lt;br /&gt;
#public void testSplitsZeroFromSplit() throws Exception {}&lt;br /&gt;
#public void testSplitsToSplitZeroAmount() throws Exception {}&lt;br /&gt;
#public void testSplitsFromSplitZeroAmount() throws Exception {}&lt;br /&gt;
#public void testSplitToSplitsNullSource() throws Exception {}&lt;br /&gt;
#public void testSplitFromSplitsNullSource() throws Exception {}&lt;br /&gt;
#public void void testSplitsToSplitBCincome() throws Exception {}&lt;br /&gt;
#public void void testSplitsFromSplitBCincome() throws Exception {}&lt;/div&gt;</summary>
		<author><name>Kanke</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=Written_Report_on_Model_(Testing)&amp;diff=26456</id>
		<title>Written Report on Model (Testing)</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Written_Report_on_Model_(Testing)&amp;diff=26456"/>
		<updated>2009-10-26T13:56:51Z</updated>

		<summary type="html">&lt;p&gt;Kanke: /* Planned Tests */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Model Analysis and Testing'''&lt;br /&gt;
&lt;br /&gt;
== Model Analysis ==&lt;br /&gt;
&lt;br /&gt;
=== Ubiquitousness of Split ===&lt;br /&gt;
&lt;br /&gt;
After walking through several transaction scenarios that involves splits, one has to appreciate the usefulness and necessity of a split structure for day-to-day transactions. &lt;br /&gt;
&lt;br /&gt;
Though the current application gives the impression that it's incidental, actually in real life it might happen more frequent than we assume. Considering supermarket shopping experiences, a significant proportion, if not most, of our purchase activities belong to split transactions. It's very often we buy things which belong to different categories: groceries, garments, office supplies (educational or small business for tax purpose), medicine for health (tax, flex-spending), etc. It's less often but still not uncommon that we get cash back from the same transaction, or we foot the bill with two or more payment methods (credit cards, bank cards, cash, etc.). &lt;br /&gt;
&lt;br /&gt;
Assume spit is a generic form of transaction, we might as well consider the &amp;quot;normal&amp;quot; transaction, single-source-single-category, a special case - a transaction comprises of only one From source and one To destination. I wonder if this idea would have an impact on the model design, or if the current model is built upon this. &lt;br /&gt;
&lt;br /&gt;
But definitely we can incorporate this idea into the UI design. Which I might as well discuss it in the [[Report for View (Testing)]] section.&lt;br /&gt;
&lt;br /&gt;
=== Model Limitations ===&lt;br /&gt;
* One split per transaction - either from or to can be a split but can not be both split within the same transaction. (may not be due to model, but rather buggy implementation.)&lt;br /&gt;
&lt;br /&gt;
* The model allows duplicated data or computed data in two places - split and transaction. This incur duplicate implementations which is potentially error prone.&lt;br /&gt;
&lt;br /&gt;
=== Rules for choosing From and To sources ===&lt;br /&gt;
*Implied Rules?&lt;br /&gt;
*Filtered list with rules&lt;br /&gt;
== Testing ==&lt;br /&gt;
=== Testing Strategy ===&lt;br /&gt;
*Conformance — Does the value conform to an expected format?&lt;br /&gt;
*Ordering — Is the set of values ordered or unordered as appropriate?&lt;br /&gt;
*Range — Is the value within reasonable minimum and maximum values?&lt;br /&gt;
*Reference — Does the code reference anything external that isn't under direct control of the code itself?&lt;br /&gt;
*Existence — Does the value exist (e.g., is non-null, non-zero, present in a set, etc.)?&lt;br /&gt;
*Cardinality — Are there exactly enough values?&lt;br /&gt;
*Time (absolute and relative) — Is everything happening in order? At the right time? In time?&lt;br /&gt;
&lt;br /&gt;
=== Pre-existing Tests ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	public void testCompare() throws Exception {&lt;br /&gt;
		//Splitting To - all attributes are the same&lt;br /&gt;
		//Splitting From - All attributes are the same&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public void testWithoutSplits() throws Exception {}&lt;br /&gt;
&lt;br /&gt;
	public void testWithFromSplits() throws Exception {}&lt;br /&gt;
&lt;br /&gt;
	public void testWithToSplits() throws Exception {}&lt;br /&gt;
&lt;br /&gt;
	public void testWithBothSplits() throws Exception {}&lt;br /&gt;
&lt;br /&gt;
	public void testUnbalancedSplits() throws Exception {}&lt;br /&gt;
&lt;br /&gt;
	public void testWithIncorrectIncomeBCSplits() throws Exception {}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There are a few method calls in SplitsTest seemed to be redundant. They were in the format of &amp;quot;t.setFrom(new SplitImpl());&amp;quot; or &amp;quot;t.setTo(new SplitImpl());&amp;quot;. The later calls, &amp;quot;t.setFromSplits(fromSplits);&amp;quot; or &amp;quot;t.setToSplits(toSplits);&amp;quot;, seem to always overwrite their effects.&lt;br /&gt;
&lt;br /&gt;
In the model, one can add a transaction with all &amp;quot;from&amp;quot; and &amp;quot;to&amp;quot; sources, amounts undefined. Because of the this, one can actually adds 0 split to a split source in a transaction as long as the transaction amount is 0L. Is it what author intended?&lt;br /&gt;
&lt;br /&gt;
=== Added Tests ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#public void testSplitsZeroToSplit() throws Exception {}&lt;br /&gt;
#public void testSplitsZeroFromSplit() throws Exception {}&lt;br /&gt;
#public void testSplitsToSplitZeroAmount() throws Exception {}&lt;br /&gt;
#public void testSplitsFromSplitZeroAmount() throws Exception {}&lt;br /&gt;
#public void testSplitToSplitsNullSource() throws Exception {}&lt;br /&gt;
#public void testSplitFromSplitsNullSource() throws Exception {}&lt;br /&gt;
#public void void testSplitsToSplitBCincome() throws Exception {}&lt;br /&gt;
#public void void testSplitsFromSplitBCincome() throws Exception {}&lt;/div&gt;</summary>
		<author><name>Kanke</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=Written_Report_on_View_(Testing)&amp;diff=26455</id>
		<title>Written Report on View (Testing)</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Written_Report_on_View_(Testing)&amp;diff=26455"/>
		<updated>2009-10-26T13:44:45Z</updated>

		<summary type="html">&lt;p&gt;Kanke: /* Bugs or Undesired Behaviors */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''View Layer Analysis and Improvement'''&lt;br /&gt;
&lt;br /&gt;
== View Analysis ==&lt;br /&gt;
&lt;br /&gt;
== Bugs or Undesired Behaviors ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Title&lt;br /&gt;
!  Details&lt;br /&gt;
!  Actual Behavior&lt;br /&gt;
!  Expected Behavior&lt;br /&gt;
!  Solved&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|  Default Amount for split&lt;br /&gt;
|  The default amount is not set to the difference automatically for the new split&lt;br /&gt;
|  Currently, default amount is set to zero&lt;br /&gt;
|  The remaining split amount represents the remaining balance among the splits&lt;br /&gt;
|  No&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|  Hard to use mouse alone when adding new split&lt;br /&gt;
|  The dialog does not offer an easy way to show the effect of amount change in a split&lt;br /&gt;
|  Currently one has to shift the focus to either buttons or other source amount for the purpose&lt;br /&gt;
|  Could be realized by a mouse click in a non-sensitive target with a large surface such as a panel.&lt;br /&gt;
|  No&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|  Category drop down&lt;br /&gt;
|  Category list not filtered&lt;br /&gt;
|  Some items (credit, cash) are not selectable when selecting a split source.&lt;br /&gt;
|  If it's not available for selection, then better take them off the list&lt;br /&gt;
|  No&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|  Split From Source&lt;br /&gt;
|  Transaction involves split from sources didn't show the split when selected&lt;br /&gt;
|  It shows &amp;lt;From&amp;gt; in an unselected mode&lt;br /&gt;
|  Should show &amp;quot;split&amp;quot; entry with &amp;quot;...&amp;quot; button surfaced&lt;br /&gt;
|  No&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|  Create New menu&lt;br /&gt;
|  Undesired behavior. Create new options shouldn't be put under ''Edit'' menu. It's not intuitive for new users.   &lt;br /&gt;
|  Under My Accounts tab, Edit -&amp;gt; Create Account.&lt;br /&gt;
Under My Budget tab, Edit -&amp;gt; Create Budget Category.&lt;br /&gt;
|  Several options:&lt;br /&gt;
# Move to under File menu&lt;br /&gt;
# Create button for &amp;quot;New Account&amp;quot; and &amp;quot;New Budget Category&amp;quot;&lt;br /&gt;
|  No&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|  Create Budget Category using existing category as parent&lt;br /&gt;
|  From &amp;quot;My Budget&amp;quot; tab, &amp;quot;Edit&amp;quot; -&amp;gt; &amp;quot;Create Budget Category&amp;quot; -&amp;gt; create new category and choose one of the parents that does not have any children yet -&amp;gt; &amp;quot;OK&amp;quot;. &lt;br /&gt;
|  Parent does not have + sign next to its name. It will only show up when you highlight parent's row or switch view from Buddi and come back.&lt;br /&gt;
|  Parent's name should have &amp;quot;+&amp;quot; sign next to it right after child creation.&lt;br /&gt;
|  No&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|  &lt;br /&gt;
|  &lt;br /&gt;
|  &lt;br /&gt;
|&lt;br /&gt;
|  No&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Planned Fixes and Enhancement ===&lt;br /&gt;
# The new split amount represents the remaining balance for the total of the splits (SplitTransactionDialog)&lt;br /&gt;
# The dialogue information refreshes after mouse click away from the amount text box (SplitTransactionDialog)&lt;br /&gt;
# Fix the source selection in drop-down list, i.e. when a split source is chosen the other source lose its selection.&lt;br /&gt;
# If the above does not automatically solve the problem, find a way to enable both sources to be split type, which the model allows.&lt;br /&gt;
&lt;br /&gt;
=== Changes Accomplished ===&lt;br /&gt;
# The new split amount represents the remaining balance for the total of the splits (SplitTransactionDialog)&lt;br /&gt;
# The dialogue information refreshes after mouse click away from the amount text box (SplitTransactionDialog)&lt;/div&gt;</summary>
		<author><name>Kanke</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=Written_Report_on_View_(Testing)&amp;diff=26454</id>
		<title>Written Report on View (Testing)</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Written_Report_on_View_(Testing)&amp;diff=26454"/>
		<updated>2009-10-26T13:38:26Z</updated>

		<summary type="html">&lt;p&gt;Kanke: /* Planned Fixes and Enhancement */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''View Layer Analysis and Improvement'''&lt;br /&gt;
&lt;br /&gt;
== View Analysis ==&lt;br /&gt;
&lt;br /&gt;
== Bugs or Undesired Behaviors ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Title&lt;br /&gt;
!  Details&lt;br /&gt;
!  Actual Behavior&lt;br /&gt;
!  Expected Behavior&lt;br /&gt;
!  Solved&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|  Default Amount for split&lt;br /&gt;
|  The default amount is not set to the difference automatically for the new split&lt;br /&gt;
|  Currently, default amount is set to zero&lt;br /&gt;
|  The remaining split amount represents the remaining balance among the splits&lt;br /&gt;
|  No&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|  Category drop down&lt;br /&gt;
|  Category list not filtered&lt;br /&gt;
|  Some items (credit, cash) are not selectable when selecting a split source.&lt;br /&gt;
|  If it's not available for selection, then better take them off the list&lt;br /&gt;
|  No&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|  Split From Source&lt;br /&gt;
|  Transaction involves split from sources didn't show the split when selected&lt;br /&gt;
|  It shows &amp;lt;From&amp;gt; in an unselected mode&lt;br /&gt;
|  Should show &amp;quot;split&amp;quot; entry with &amp;quot;...&amp;quot; button surfaced&lt;br /&gt;
|  No&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|  Create New menu&lt;br /&gt;
|  Undesired behavior. Create new options shouldn't be put under ''Edit'' menu. It's not intuitive for new users.   &lt;br /&gt;
|  Under My Accounts tab, Edit -&amp;gt; Create Account.&lt;br /&gt;
Under My Budget tab, Edit -&amp;gt; Create Budget Category.&lt;br /&gt;
|  Several options:&lt;br /&gt;
# Move to under File menu&lt;br /&gt;
# Create button for &amp;quot;New Account&amp;quot; and &amp;quot;New Budget Category&amp;quot;&lt;br /&gt;
|  No&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|  Create Budget Category using existing category as parent&lt;br /&gt;
|  From &amp;quot;My Budget&amp;quot; tab, &amp;quot;Edit&amp;quot; -&amp;gt; &amp;quot;Create Budget Category&amp;quot; -&amp;gt; create new category and choose one of the parents that does not have any children yet -&amp;gt; &amp;quot;OK&amp;quot;. &lt;br /&gt;
|  Parent does not have + sign next to its name. It will only show up when you highlight parent's row or switch view from Buddi and come back.&lt;br /&gt;
|  Parent's name should have &amp;quot;+&amp;quot; sign next to it right after child creation.&lt;br /&gt;
|  No&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|  &lt;br /&gt;
|  &lt;br /&gt;
|  &lt;br /&gt;
|&lt;br /&gt;
|  No&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Planned Fixes and Enhancement ===&lt;br /&gt;
# The new split amount represents the remaining balance for the total of the splits (SplitTransactionDialog)&lt;br /&gt;
# The dialogue information refreshes after mouse click away from the amount text box (SplitTransactionDialog)&lt;br /&gt;
# Fix the source selection in drop-down list, i.e. when a split source is chosen the other source lose its selection.&lt;br /&gt;
# If the above does not automatically solve the problem, find a way to enable both sources to be split type, which the model allows.&lt;br /&gt;
&lt;br /&gt;
=== Changes Accomplished ===&lt;br /&gt;
# The new split amount represents the remaining balance for the total of the splits (SplitTransactionDialog)&lt;br /&gt;
# The dialogue information refreshes after mouse click away from the amount text box (SplitTransactionDialog)&lt;/div&gt;</summary>
		<author><name>Kanke</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=Written_Report_on_View_(Testing)&amp;diff=26453</id>
		<title>Written Report on View (Testing)</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Written_Report_on_View_(Testing)&amp;diff=26453"/>
		<updated>2009-10-26T13:37:08Z</updated>

		<summary type="html">&lt;p&gt;Kanke: /* Changes Accomplished */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''View Layer Analysis and Improvement'''&lt;br /&gt;
&lt;br /&gt;
== View Analysis ==&lt;br /&gt;
&lt;br /&gt;
== Bugs or Undesired Behaviors ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Title&lt;br /&gt;
!  Details&lt;br /&gt;
!  Actual Behavior&lt;br /&gt;
!  Expected Behavior&lt;br /&gt;
!  Solved&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|  Default Amount for split&lt;br /&gt;
|  The default amount is not set to the difference automatically for the new split&lt;br /&gt;
|  Currently, default amount is set to zero&lt;br /&gt;
|  The remaining split amount represents the remaining balance among the splits&lt;br /&gt;
|  No&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|  Category drop down&lt;br /&gt;
|  Category list not filtered&lt;br /&gt;
|  Some items (credit, cash) are not selectable when selecting a split source.&lt;br /&gt;
|  If it's not available for selection, then better take them off the list&lt;br /&gt;
|  No&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|  Split From Source&lt;br /&gt;
|  Transaction involves split from sources didn't show the split when selected&lt;br /&gt;
|  It shows &amp;lt;From&amp;gt; in an unselected mode&lt;br /&gt;
|  Should show &amp;quot;split&amp;quot; entry with &amp;quot;...&amp;quot; button surfaced&lt;br /&gt;
|  No&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|  Create New menu&lt;br /&gt;
|  Undesired behavior. Create new options shouldn't be put under ''Edit'' menu. It's not intuitive for new users.   &lt;br /&gt;
|  Under My Accounts tab, Edit -&amp;gt; Create Account.&lt;br /&gt;
Under My Budget tab, Edit -&amp;gt; Create Budget Category.&lt;br /&gt;
|  Several options:&lt;br /&gt;
# Move to under File menu&lt;br /&gt;
# Create button for &amp;quot;New Account&amp;quot; and &amp;quot;New Budget Category&amp;quot;&lt;br /&gt;
|  No&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|  Create Budget Category using existing category as parent&lt;br /&gt;
|  From &amp;quot;My Budget&amp;quot; tab, &amp;quot;Edit&amp;quot; -&amp;gt; &amp;quot;Create Budget Category&amp;quot; -&amp;gt; create new category and choose one of the parents that does not have any children yet -&amp;gt; &amp;quot;OK&amp;quot;. &lt;br /&gt;
|  Parent does not have + sign next to its name. It will only show up when you highlight parent's row or switch view from Buddi and come back.&lt;br /&gt;
|  Parent's name should have &amp;quot;+&amp;quot; sign next to it right after child creation.&lt;br /&gt;
|  No&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|  &lt;br /&gt;
|  &lt;br /&gt;
|  &lt;br /&gt;
|&lt;br /&gt;
|  No&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Planned Fixes and Enhancement ===&lt;br /&gt;
# The new split amount represents the remaining balance for the total of the splits (SplitTransactionDialog)&lt;br /&gt;
# The dialogue information refreshes after mouse click away from the amount text box (SplitTransactionDialog)&lt;br /&gt;
&lt;br /&gt;
=== Changes Accomplished ===&lt;br /&gt;
# The new split amount represents the remaining balance for the total of the splits (SplitTransactionDialog)&lt;br /&gt;
# The dialogue information refreshes after mouse click away from the amount text box (SplitTransactionDialog)&lt;/div&gt;</summary>
		<author><name>Kanke</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=Written_Report_on_View_(Testing)&amp;diff=26452</id>
		<title>Written Report on View (Testing)</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Written_Report_on_View_(Testing)&amp;diff=26452"/>
		<updated>2009-10-26T13:36:36Z</updated>

		<summary type="html">&lt;p&gt;Kanke: /* Planned Fixes and Enhancement */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''View Layer Analysis and Improvement'''&lt;br /&gt;
&lt;br /&gt;
== View Analysis ==&lt;br /&gt;
&lt;br /&gt;
== Bugs or Undesired Behaviors ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Title&lt;br /&gt;
!  Details&lt;br /&gt;
!  Actual Behavior&lt;br /&gt;
!  Expected Behavior&lt;br /&gt;
!  Solved&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|  Default Amount for split&lt;br /&gt;
|  The default amount is not set to the difference automatically for the new split&lt;br /&gt;
|  Currently, default amount is set to zero&lt;br /&gt;
|  The remaining split amount represents the remaining balance among the splits&lt;br /&gt;
|  No&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|  Category drop down&lt;br /&gt;
|  Category list not filtered&lt;br /&gt;
|  Some items (credit, cash) are not selectable when selecting a split source.&lt;br /&gt;
|  If it's not available for selection, then better take them off the list&lt;br /&gt;
|  No&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|  Split From Source&lt;br /&gt;
|  Transaction involves split from sources didn't show the split when selected&lt;br /&gt;
|  It shows &amp;lt;From&amp;gt; in an unselected mode&lt;br /&gt;
|  Should show &amp;quot;split&amp;quot; entry with &amp;quot;...&amp;quot; button surfaced&lt;br /&gt;
|  No&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|  Create New menu&lt;br /&gt;
|  Undesired behavior. Create new options shouldn't be put under ''Edit'' menu. It's not intuitive for new users.   &lt;br /&gt;
|  Under My Accounts tab, Edit -&amp;gt; Create Account.&lt;br /&gt;
Under My Budget tab, Edit -&amp;gt; Create Budget Category.&lt;br /&gt;
|  Several options:&lt;br /&gt;
# Move to under File menu&lt;br /&gt;
# Create button for &amp;quot;New Account&amp;quot; and &amp;quot;New Budget Category&amp;quot;&lt;br /&gt;
|  No&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|  Create Budget Category using existing category as parent&lt;br /&gt;
|  From &amp;quot;My Budget&amp;quot; tab, &amp;quot;Edit&amp;quot; -&amp;gt; &amp;quot;Create Budget Category&amp;quot; -&amp;gt; create new category and choose one of the parents that does not have any children yet -&amp;gt; &amp;quot;OK&amp;quot;. &lt;br /&gt;
|  Parent does not have + sign next to its name. It will only show up when you highlight parent's row or switch view from Buddi and come back.&lt;br /&gt;
|  Parent's name should have &amp;quot;+&amp;quot; sign next to it right after child creation.&lt;br /&gt;
|  No&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|  &lt;br /&gt;
|  &lt;br /&gt;
|  &lt;br /&gt;
|&lt;br /&gt;
|  No&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Planned Fixes and Enhancement ===&lt;br /&gt;
# The new split amount represents the remaining balance for the total of the splits (SplitTransactionDialog)&lt;br /&gt;
# The dialogue information refreshes after mouse click away from the amount text box (SplitTransactionDialog)&lt;br /&gt;
&lt;br /&gt;
=== Changes Accomplished ===&lt;br /&gt;
# The new split amount represents the remaining balance for the total of the splits&lt;br /&gt;
# The dialogue information refreshes after mouse click away from the amount text box&lt;/div&gt;</summary>
		<author><name>Kanke</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=Written_Report_on_View_(Testing)&amp;diff=26451</id>
		<title>Written Report on View (Testing)</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Written_Report_on_View_(Testing)&amp;diff=26451"/>
		<updated>2009-10-26T13:35:23Z</updated>

		<summary type="html">&lt;p&gt;Kanke: /* Planned Fixes and Enhancement */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''View Layer Analysis and Improvement'''&lt;br /&gt;
&lt;br /&gt;
== View Analysis ==&lt;br /&gt;
&lt;br /&gt;
== Bugs or Undesired Behaviors ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Title&lt;br /&gt;
!  Details&lt;br /&gt;
!  Actual Behavior&lt;br /&gt;
!  Expected Behavior&lt;br /&gt;
!  Solved&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|  Default Amount for split&lt;br /&gt;
|  The default amount is not set to the difference automatically for the new split&lt;br /&gt;
|  Currently, default amount is set to zero&lt;br /&gt;
|  The remaining split amount represents the remaining balance among the splits&lt;br /&gt;
|  No&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|  Category drop down&lt;br /&gt;
|  Category list not filtered&lt;br /&gt;
|  Some items (credit, cash) are not selectable when selecting a split source.&lt;br /&gt;
|  If it's not available for selection, then better take them off the list&lt;br /&gt;
|  No&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|  Split From Source&lt;br /&gt;
|  Transaction involves split from sources didn't show the split when selected&lt;br /&gt;
|  It shows &amp;lt;From&amp;gt; in an unselected mode&lt;br /&gt;
|  Should show &amp;quot;split&amp;quot; entry with &amp;quot;...&amp;quot; button surfaced&lt;br /&gt;
|  No&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|  Create New menu&lt;br /&gt;
|  Undesired behavior. Create new options shouldn't be put under ''Edit'' menu. It's not intuitive for new users.   &lt;br /&gt;
|  Under My Accounts tab, Edit -&amp;gt; Create Account.&lt;br /&gt;
Under My Budget tab, Edit -&amp;gt; Create Budget Category.&lt;br /&gt;
|  Several options:&lt;br /&gt;
# Move to under File menu&lt;br /&gt;
# Create button for &amp;quot;New Account&amp;quot; and &amp;quot;New Budget Category&amp;quot;&lt;br /&gt;
|  No&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|  Create Budget Category using existing category as parent&lt;br /&gt;
|  From &amp;quot;My Budget&amp;quot; tab, &amp;quot;Edit&amp;quot; -&amp;gt; &amp;quot;Create Budget Category&amp;quot; -&amp;gt; create new category and choose one of the parents that does not have any children yet -&amp;gt; &amp;quot;OK&amp;quot;. &lt;br /&gt;
|  Parent does not have + sign next to its name. It will only show up when you highlight parent's row or switch view from Buddi and come back.&lt;br /&gt;
|  Parent's name should have &amp;quot;+&amp;quot; sign next to it right after child creation.&lt;br /&gt;
|  No&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|  &lt;br /&gt;
|  &lt;br /&gt;
|  &lt;br /&gt;
|&lt;br /&gt;
|  No&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Planned Fixes and Enhancement ===&lt;br /&gt;
# The new split amount represents the remaining balance for the total of the splits&lt;br /&gt;
# The dialogue information refreshes after mouse click away from the amount text box&lt;br /&gt;
&lt;br /&gt;
=== Changes Accomplished ===&lt;br /&gt;
# The new split amount represents the remaining balance for the total of the splits&lt;br /&gt;
# The dialogue information refreshes after mouse click away from the amount text box&lt;/div&gt;</summary>
		<author><name>Kanke</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=Written_Report_on_View_(Testing)&amp;diff=26450</id>
		<title>Written Report on View (Testing)</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Written_Report_on_View_(Testing)&amp;diff=26450"/>
		<updated>2009-10-26T13:32:01Z</updated>

		<summary type="html">&lt;p&gt;Kanke: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''View Layer Analysis and Improvement'''&lt;br /&gt;
&lt;br /&gt;
== View Analysis ==&lt;br /&gt;
&lt;br /&gt;
== Bugs or Undesired Behaviors ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Title&lt;br /&gt;
!  Details&lt;br /&gt;
!  Actual Behavior&lt;br /&gt;
!  Expected Behavior&lt;br /&gt;
!  Solved&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|  Default Amount for split&lt;br /&gt;
|  The default amount is not set to the difference automatically for the new split&lt;br /&gt;
|  Currently, default amount is set to zero&lt;br /&gt;
|  The remaining split amount represents the remaining balance among the splits&lt;br /&gt;
|  No&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|  Category drop down&lt;br /&gt;
|  Category list not filtered&lt;br /&gt;
|  Some items (credit, cash) are not selectable when selecting a split source.&lt;br /&gt;
|  If it's not available for selection, then better take them off the list&lt;br /&gt;
|  No&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|  Split From Source&lt;br /&gt;
|  Transaction involves split from sources didn't show the split when selected&lt;br /&gt;
|  It shows &amp;lt;From&amp;gt; in an unselected mode&lt;br /&gt;
|  Should show &amp;quot;split&amp;quot; entry with &amp;quot;...&amp;quot; button surfaced&lt;br /&gt;
|  No&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|  Create New menu&lt;br /&gt;
|  Undesired behavior. Create new options shouldn't be put under ''Edit'' menu. It's not intuitive for new users.   &lt;br /&gt;
|  Under My Accounts tab, Edit -&amp;gt; Create Account.&lt;br /&gt;
Under My Budget tab, Edit -&amp;gt; Create Budget Category.&lt;br /&gt;
|  Several options:&lt;br /&gt;
# Move to under File menu&lt;br /&gt;
# Create button for &amp;quot;New Account&amp;quot; and &amp;quot;New Budget Category&amp;quot;&lt;br /&gt;
|  No&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|  Create Budget Category using existing category as parent&lt;br /&gt;
|  From &amp;quot;My Budget&amp;quot; tab, &amp;quot;Edit&amp;quot; -&amp;gt; &amp;quot;Create Budget Category&amp;quot; -&amp;gt; create new category and choose one of the parents that does not have any children yet -&amp;gt; &amp;quot;OK&amp;quot;. &lt;br /&gt;
|  Parent does not have + sign next to its name. It will only show up when you highlight parent's row or switch view from Buddi and come back.&lt;br /&gt;
|  Parent's name should have &amp;quot;+&amp;quot; sign next to it right after child creation.&lt;br /&gt;
|  No&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|  &lt;br /&gt;
|  &lt;br /&gt;
|  &lt;br /&gt;
|&lt;br /&gt;
|  No&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Planned Fixes and Enhancement ===&lt;/div&gt;</summary>
		<author><name>Kanke</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/program2_buddi_wn&amp;diff=26449</id>
		<title>CSC/ECE 517 Fall 2009/program2 buddi wn</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/program2_buddi_wn&amp;diff=26449"/>
		<updated>2009-10-25T21:05:28Z</updated>

		<summary type="html">&lt;p&gt;Kanke: /* Required Results */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Buddi Project'''&lt;br /&gt;
&lt;br /&gt;
== Important Information ==&lt;br /&gt;
* Submission: October 23 (Friday)&lt;br /&gt;
* First Feedback: October 30 (Friday)&lt;br /&gt;
* Resubmission: November 6 (Friday)&lt;br /&gt;
* Final Review: November 9 (Monday)&lt;br /&gt;
* Metareview: November 11 (Wednesday)&lt;br /&gt;
&lt;br /&gt;
E-mail for Buddi questions:&lt;br /&gt;
wyatt@digitalcave.ca or wyatt.olson+buddi-ncsu@gmail.com.&lt;br /&gt;
&lt;br /&gt;
=== Required Results ===&lt;br /&gt;
&lt;br /&gt;
This project is more about QA and usability testing, rather than pure &lt;br /&gt;
development. While some coding may be required to enhance the view&lt;br /&gt;
layer, the vast majority of the code written will be in JUnit tests.&lt;br /&gt;
The following is required for your results:&lt;br /&gt;
# A '''.zip or .tgz archive''' containing the entire Buddi project (or at a minimum, all files which have changed OR a .diff of your changes, as you desire).&lt;br /&gt;
# A '''written report ([[Written Report on Model %28Testing%29|Model]]) on the model testing''', indicating what your unit tests test (paying attention to edge cases where problems are more likely to occur) and the results of these tests. (The actual unit tests themselves will be included in the archive in part a)&lt;br /&gt;
# A w'''ritten report ([[Written Report on View %28Testing%29|View]]) on the view testing''', indicating what tests you performed, and what the results were. Screenshots taken throughout the test procedure are optional, but a very good idea to demonstrate what problems (if any) you have found.&lt;br /&gt;
# '''A written report on what changes''' you have made to the view (or the model) as a result of your testing. If there were failures or potential improvements discovered in either your tests, this report should include a re-run of the failed tests, showing that they are now working.&lt;br /&gt;
&lt;br /&gt;
== Objectives ==&lt;br /&gt;
&lt;br /&gt;
=== Functionality ===&lt;br /&gt;
* Verify that '''splits''' in the data model have been implemented correctly. Ensure that the API wrapper functions allow transparent access to the model. Ensure that there are no edge cases where data corruption occurs. &lt;br /&gt;
* Refine and complete the '''view layer''', and verify that it works as desired in all cases.&lt;br /&gt;
&lt;br /&gt;
=== Testing ===&lt;br /&gt;
* Verify Model using JUnit.&lt;br /&gt;
There are already some model and API tests in the junit source folder - you can use these as a basis for creating more. You should construct some tests to only test the model, others to test the plugin API, and still others to verify that changes written to the API are accessible to the model (and vice-versa). &lt;br /&gt;
&lt;br /&gt;
Be sure to test the edge cases and exceptional input, for instance:&lt;br /&gt;
what happens if you try to split a transaction 1000 ways? &lt;br /&gt;
What happens if you try to include 0 splits? &lt;br /&gt;
What happens when you try to pass null to various setter methods? &lt;br /&gt;
&lt;br /&gt;
* Verify UI&lt;br /&gt;
Using your understanding gained from the model tests, you must construct written documents detailing what tests you are planning on doing, and how you plan to go about them. You must then carry out these tests, and document the results. In addition to data integrity, the view tests should include a usability component - is the way which split transactions are expressed intuitive? Are there better ways to do this?&lt;br /&gt;
&lt;br /&gt;
== Bugs or Undesired Behaviors ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Title&lt;br /&gt;
!  Details&lt;br /&gt;
!  Actual Behavior&lt;br /&gt;
!  Expected Behavior&lt;br /&gt;
!  Solved&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|  Default Amount for split&lt;br /&gt;
|  The default amount is not set to the difference automatically for the new split&lt;br /&gt;
|  Currently, default amount is set to zero&lt;br /&gt;
|  The remaining split amount represents the remaining balance among the splits&lt;br /&gt;
|  No&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|  Category drop down&lt;br /&gt;
|  Category list not filtered&lt;br /&gt;
|  Some items (credit, cash) are not selectable when selecting a split source.&lt;br /&gt;
|  If it's not available for selection, then better take them off the list&lt;br /&gt;
|  No&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|  Split From Source&lt;br /&gt;
|  Transaction involves split from sources didn't show the split when selected&lt;br /&gt;
|  It shows &amp;lt;From&amp;gt; in an unselected mode&lt;br /&gt;
|  Should show &amp;quot;split&amp;quot; entry with &amp;quot;...&amp;quot; button surfaced&lt;br /&gt;
|  No&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|  Create New menu&lt;br /&gt;
|  Undesired behavior. Create new options shouldn't be put under ''Edit'' menu. It's not intuitive for new users.   &lt;br /&gt;
|  Under My Accounts tab, Edit -&amp;gt; Create Account.&lt;br /&gt;
Under My Budget tab, Edit -&amp;gt; Create Budget Category.&lt;br /&gt;
|  Several options:&lt;br /&gt;
# Move to under File menu&lt;br /&gt;
# Create button for &amp;quot;New Account&amp;quot; and &amp;quot;New Budget Category&amp;quot;&lt;br /&gt;
|  No&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|  Create Budget Category using existing category as parent&lt;br /&gt;
|  From &amp;quot;My Budget&amp;quot; tab, &amp;quot;Edit&amp;quot; -&amp;gt; &amp;quot;Create Budget Category&amp;quot; -&amp;gt; create new category and choose one of the parents that does not have any children yet -&amp;gt; &amp;quot;OK&amp;quot;. &lt;br /&gt;
|  Parent does not have + sign next to its name. It will only show up when you highlight parent's row or switch view from Buddi and come back.&lt;br /&gt;
|  Parent's name should have &amp;quot;+&amp;quot; sign next to it right after child creation.&lt;br /&gt;
|  No&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|  &lt;br /&gt;
|  &lt;br /&gt;
|  &lt;br /&gt;
|&lt;br /&gt;
|  No&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
* [[Unit Test for Buddi]]&lt;br /&gt;
* [[Buddi Existing Test code]]&lt;br /&gt;
&lt;br /&gt;
== Useful Links ==&lt;br /&gt;
# [http://devel.buddi.digitalcave.ca/en/ Buddi docs for Developers]&lt;br /&gt;
# [http://buddi.digitalcave.ca/ Buddi docs for Users]&lt;/div&gt;</summary>
		<author><name>Kanke</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=Written_Report_on_Model_(Testing)&amp;diff=26448</id>
		<title>Written Report on Model (Testing)</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Written_Report_on_Model_(Testing)&amp;diff=26448"/>
		<updated>2009-10-25T19:41:41Z</updated>

		<summary type="html">&lt;p&gt;Kanke: /* Pre-existing Tests */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Model Analysis and Testing'''&lt;br /&gt;
&lt;br /&gt;
== Model Analysis ==&lt;br /&gt;
&lt;br /&gt;
=== Ubiquitousness of Split ===&lt;br /&gt;
&lt;br /&gt;
After walking through several transaction scenarios that involves splits, one has to appreciate the usefulness and necessity of a split structure for day-to-day transactions. &lt;br /&gt;
&lt;br /&gt;
Though the current application gives the impression that it's incidental, actually in real life it might happen more frequent than we assume. Considering supermarket shopping experiences, a significant proportion, if not most, of our purchase activities belong to split transactions. It's very often we buy things which belong to different categories: groceries, garments, office supplies (educational or small business for tax purpose), medicine for health (tax, flex-spending), etc. It's less often but still not uncommon that we get cash back from the same transaction, or we foot the bill with two or more payment methods (credit cards, bank cards, cash, etc.). &lt;br /&gt;
&lt;br /&gt;
Assume spit is a generic form of transaction, we might as well consider the &amp;quot;normal&amp;quot; transaction, single-source-single-category, a special case - a transaction comprises of only one From source and one To destination. I wonder if this idea would have an impact on the model design, or if the current model is built upon this. &lt;br /&gt;
&lt;br /&gt;
But definitely we can incorporate this idea into the UI design. Which I might as well discuss it in the [[Report for View (Testing)]] section.&lt;br /&gt;
&lt;br /&gt;
=== Model Limitations ===&lt;br /&gt;
* One split per transaction - either from or to can be a split but can not be both split within the same transaction. (may not be due to model, but rather buggy implementation.)&lt;br /&gt;
&lt;br /&gt;
* The model allows duplicated data or computed data in two places - split and transaction. This incur duplicate implementations which is potentially error prone.&lt;br /&gt;
&lt;br /&gt;
=== Rules for choosing From and To sources ===&lt;br /&gt;
*Implied Rules?&lt;br /&gt;
*Filtered list with rules&lt;br /&gt;
== Testing ==&lt;br /&gt;
=== Testing Strategy ===&lt;br /&gt;
*Conformance — Does the value conform to an expected format?&lt;br /&gt;
*Ordering — Is the set of values ordered or unordered as appropriate?&lt;br /&gt;
*Range — Is the value within reasonable minimum and maximum values?&lt;br /&gt;
*Reference — Does the code reference anything external that isn't under direct control of the code itself?&lt;br /&gt;
*Existence — Does the value exist (e.g., is non-null, non-zero, present in a set, etc.)?&lt;br /&gt;
*Cardinality — Are there exactly enough values?&lt;br /&gt;
*Time (absolute and relative) — Is everything happening in order? At the right time? In time?&lt;br /&gt;
&lt;br /&gt;
=== Pre-existing Tests ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	public void testCompare() throws Exception {&lt;br /&gt;
		//Splitting To - all attributes are the same&lt;br /&gt;
		//Splitting From - All attributes are the same&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public void testWithoutSplits() throws Exception {}&lt;br /&gt;
&lt;br /&gt;
	public void testWithFromSplits() throws Exception {}&lt;br /&gt;
&lt;br /&gt;
	public void testWithToSplits() throws Exception {}&lt;br /&gt;
&lt;br /&gt;
	public void testWithBothSplits() throws Exception {}&lt;br /&gt;
&lt;br /&gt;
	public void testUnbalancedSplits() throws Exception {}&lt;br /&gt;
&lt;br /&gt;
	public void testWithIncorrectIncomeBCSplits() throws Exception {}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There are a few method calls in SplitsTest seemed to be redundant. They were in the format of &amp;quot;t.setFrom(new SplitImpl());&amp;quot; or &amp;quot;t.setTo(new SplitImpl());&amp;quot;. The later calls, &amp;quot;t.setFromSplits(fromSplits);&amp;quot; or &amp;quot;t.setToSplits(toSplits);&amp;quot;, seem to always overwrite their effects.&lt;br /&gt;
&lt;br /&gt;
In the model, one can add a transaction with all &amp;quot;from&amp;quot; and &amp;quot;to&amp;quot; sources, amounts undefined. Because of the this, one can actually adds 0 split to a split source in a transaction as long as the transaction amount is 0L. Is it what author intended?&lt;br /&gt;
&lt;br /&gt;
=== Planned Tests ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#public void testSplitsZeroToSplit() throws Exception {}&lt;br /&gt;
#public void testSplitsZeroFromSplit() throws Exception {}&lt;br /&gt;
#public void testSplitsToSplitZeroAmount() throws Exception {}&lt;br /&gt;
#public void testSplitsFromSplitZeroAmount() throws Exception {}&lt;br /&gt;
#public void testSplitToSplitsNullSource() throws Exception {}&lt;br /&gt;
#public void testSplitFromSplitsNullSource() throws Exception {}&lt;br /&gt;
#public void void testSplitsToSplitBCincome() throws Exception {}&lt;br /&gt;
#public void void testSplitsFromSplitBCincome() throws Exception {}&lt;br /&gt;
#public void test&lt;br /&gt;
#public void test&lt;/div&gt;</summary>
		<author><name>Kanke</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=Written_Report_on_Model_(Testing)&amp;diff=26447</id>
		<title>Written Report on Model (Testing)</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Written_Report_on_Model_(Testing)&amp;diff=26447"/>
		<updated>2009-10-25T19:09:33Z</updated>

		<summary type="html">&lt;p&gt;Kanke: /* Pre-existing Tests */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Model Analysis and Testing'''&lt;br /&gt;
&lt;br /&gt;
== Model Analysis ==&lt;br /&gt;
&lt;br /&gt;
=== Ubiquitousness of Split ===&lt;br /&gt;
&lt;br /&gt;
After walking through several transaction scenarios that involves splits, one has to appreciate the usefulness and necessity of a split structure for day-to-day transactions. &lt;br /&gt;
&lt;br /&gt;
Though the current application gives the impression that it's incidental, actually in real life it might happen more frequent than we assume. Considering supermarket shopping experiences, a significant proportion, if not most, of our purchase activities belong to split transactions. It's very often we buy things which belong to different categories: groceries, garments, office supplies (educational or small business for tax purpose), medicine for health (tax, flex-spending), etc. It's less often but still not uncommon that we get cash back from the same transaction, or we foot the bill with two or more payment methods (credit cards, bank cards, cash, etc.). &lt;br /&gt;
&lt;br /&gt;
Assume spit is a generic form of transaction, we might as well consider the &amp;quot;normal&amp;quot; transaction, single-source-single-category, a special case - a transaction comprises of only one From source and one To destination. I wonder if this idea would have an impact on the model design, or if the current model is built upon this. &lt;br /&gt;
&lt;br /&gt;
But definitely we can incorporate this idea into the UI design. Which I might as well discuss it in the [[Report for View (Testing)]] section.&lt;br /&gt;
&lt;br /&gt;
=== Model Limitations ===&lt;br /&gt;
* One split per transaction - either from or to can be a split but can not be both split within the same transaction. (may not be due to model, but rather buggy implementation.)&lt;br /&gt;
&lt;br /&gt;
* The model allows duplicated data or computed data in two places - split and transaction. This incur duplicate implementations which is potentially error prone.&lt;br /&gt;
&lt;br /&gt;
=== Rules for choosing From and To sources ===&lt;br /&gt;
*Implied Rules?&lt;br /&gt;
*Filtered list with rules&lt;br /&gt;
== Testing ==&lt;br /&gt;
=== Testing Strategy ===&lt;br /&gt;
*Conformance — Does the value conform to an expected format?&lt;br /&gt;
*Ordering — Is the set of values ordered or unordered as appropriate?&lt;br /&gt;
*Range — Is the value within reasonable minimum and maximum values?&lt;br /&gt;
*Reference — Does the code reference anything external that isn't under direct control of the code itself?&lt;br /&gt;
*Existence — Does the value exist (e.g., is non-null, non-zero, present in a set, etc.)?&lt;br /&gt;
*Cardinality — Are there exactly enough values?&lt;br /&gt;
*Time (absolute and relative) — Is everything happening in order? At the right time? In time?&lt;br /&gt;
&lt;br /&gt;
=== Pre-existing Tests ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	public void testCompare() throws Exception {&lt;br /&gt;
		//Splitting To - all attributes are the same&lt;br /&gt;
		//Splitting From - All attributes are the same&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public void testWithoutSplits() throws Exception {}&lt;br /&gt;
&lt;br /&gt;
	public void testWithFromSplits() throws Exception {}&lt;br /&gt;
&lt;br /&gt;
	public void testWithToSplits() throws Exception {}&lt;br /&gt;
&lt;br /&gt;
	public void testWithBothSplits() throws Exception {}&lt;br /&gt;
&lt;br /&gt;
	public void testUnbalancedSplits() throws Exception {}&lt;br /&gt;
&lt;br /&gt;
	public void testWithIncorrectIncomeBCSplits() throws Exception {}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There are a few method calls in SplitsTest seemed to be redundant. They were in the format of &amp;quot;t.setFrom(new SplitImpl());&amp;quot; or &amp;quot;t.setTo(new SplitImpl());&amp;quot;. The later calls, &amp;quot;t.setFromSplits(fromSplits);&amp;quot; or &amp;quot;t.setToSplits(toSplits);&amp;quot;, seem to always overwrite their effects.&lt;br /&gt;
&lt;br /&gt;
=== Planned Tests ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#public void testSplitsZeroToSplit() throws Exception {}&lt;br /&gt;
#public void testSplitsZeroFromSplit() throws Exception {}&lt;br /&gt;
#public void testSplitsToSplitZeroAmount() throws Exception {}&lt;br /&gt;
#public void testSplitsFromSplitZeroAmount() throws Exception {}&lt;br /&gt;
#public void testSplitToSplitsNullSource() throws Exception {}&lt;br /&gt;
#public void testSplitFromSplitsNullSource() throws Exception {}&lt;br /&gt;
#public void void testSplitsToSplitBCincome() throws Exception {}&lt;br /&gt;
#public void void testSplitsFromSplitBCincome() throws Exception {}&lt;br /&gt;
#public void test&lt;br /&gt;
#public void test&lt;/div&gt;</summary>
		<author><name>Kanke</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=Written_Report_on_Model_(Testing)&amp;diff=26446</id>
		<title>Written Report on Model (Testing)</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Written_Report_on_Model_(Testing)&amp;diff=26446"/>
		<updated>2009-10-25T00:14:21Z</updated>

		<summary type="html">&lt;p&gt;Kanke: /* Planned Tests */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Model Analysis and Testing'''&lt;br /&gt;
&lt;br /&gt;
== Model Analysis ==&lt;br /&gt;
&lt;br /&gt;
=== Ubiquitousness of Split ===&lt;br /&gt;
&lt;br /&gt;
After walking through several transaction scenarios that involves splits, one has to appreciate the usefulness and necessity of a split structure for day-to-day transactions. &lt;br /&gt;
&lt;br /&gt;
Though the current application gives the impression that it's incidental, actually in real life it might happen more frequent than we assume. Considering supermarket shopping experiences, a significant proportion, if not most, of our purchase activities belong to split transactions. It's very often we buy things which belong to different categories: groceries, garments, office supplies (educational or small business for tax purpose), medicine for health (tax, flex-spending), etc. It's less often but still not uncommon that we get cash back from the same transaction, or we foot the bill with two or more payment methods (credit cards, bank cards, cash, etc.). &lt;br /&gt;
&lt;br /&gt;
Assume spit is a generic form of transaction, we might as well consider the &amp;quot;normal&amp;quot; transaction, single-source-single-category, a special case - a transaction comprises of only one From source and one To destination. I wonder if this idea would have an impact on the model design, or if the current model is built upon this. &lt;br /&gt;
&lt;br /&gt;
But definitely we can incorporate this idea into the UI design. Which I might as well discuss it in the [[Report for View (Testing)]] section.&lt;br /&gt;
&lt;br /&gt;
=== Model Limitations ===&lt;br /&gt;
* One split per transaction - either from or to can be a split but can not be both split within the same transaction. (may not be due to model, but rather buggy implementation.)&lt;br /&gt;
&lt;br /&gt;
* The model allows duplicated data or computed data in two places - split and transaction. This incur duplicate implementations which is potentially error prone.&lt;br /&gt;
&lt;br /&gt;
=== Rules for choosing From and To sources ===&lt;br /&gt;
*Implied Rules?&lt;br /&gt;
*Filtered list with rules&lt;br /&gt;
== Testing ==&lt;br /&gt;
=== Testing Strategy ===&lt;br /&gt;
*Conformance — Does the value conform to an expected format?&lt;br /&gt;
*Ordering — Is the set of values ordered or unordered as appropriate?&lt;br /&gt;
*Range — Is the value within reasonable minimum and maximum values?&lt;br /&gt;
*Reference — Does the code reference anything external that isn't under direct control of the code itself?&lt;br /&gt;
*Existence — Does the value exist (e.g., is non-null, non-zero, present in a set, etc.)?&lt;br /&gt;
*Cardinality — Are there exactly enough values?&lt;br /&gt;
*Time (absolute and relative) — Is everything happening in order? At the right time? In time?&lt;br /&gt;
&lt;br /&gt;
=== Pre-existing Tests ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	public void testCompare() throws Exception {&lt;br /&gt;
		//Splitting To - all attributes are the same&lt;br /&gt;
		//Splitting From - All attributes are the same&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public void testWithoutSplits() throws Exception {}&lt;br /&gt;
&lt;br /&gt;
	public void testWithFromSplits() throws Exception {}&lt;br /&gt;
&lt;br /&gt;
	public void testWithToSplits() throws Exception {}&lt;br /&gt;
&lt;br /&gt;
	public void testWithBothSplits() throws Exception {}&lt;br /&gt;
&lt;br /&gt;
	public void testUnbalancedSplits() throws Exception {}&lt;br /&gt;
&lt;br /&gt;
	public void testWithIncorrectIncomeBCSplits() throws Exception {}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Planned Tests ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#public void testSplitsZeroToSplit() throws Exception {}&lt;br /&gt;
#public void testSplitsZeroFromSplit() throws Exception {}&lt;br /&gt;
#public void testSplitsToSplitZeroAmount() throws Exception {}&lt;br /&gt;
#public void testSplitsFromSplitZeroAmount() throws Exception {}&lt;br /&gt;
#public void testSplitToSplitsNullSource() throws Exception {}&lt;br /&gt;
#public void testSplitFromSplitsNullSource() throws Exception {}&lt;br /&gt;
#public void void testSplitsToSplitBCincome() throws Exception {}&lt;br /&gt;
#public void void testSplitsFromSplitBCincome() throws Exception {}&lt;br /&gt;
#public void test&lt;br /&gt;
#public void test&lt;/div&gt;</summary>
		<author><name>Kanke</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=Written_Report_on_Model_(Testing)&amp;diff=26445</id>
		<title>Written Report on Model (Testing)</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Written_Report_on_Model_(Testing)&amp;diff=26445"/>
		<updated>2009-10-24T23:53:36Z</updated>

		<summary type="html">&lt;p&gt;Kanke: /* Planned Tests */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Model Analysis and Testing'''&lt;br /&gt;
&lt;br /&gt;
== Model Analysis ==&lt;br /&gt;
&lt;br /&gt;
=== Ubiquitousness of Split ===&lt;br /&gt;
&lt;br /&gt;
After walking through several transaction scenarios that involves splits, one has to appreciate the usefulness and necessity of a split structure for day-to-day transactions. &lt;br /&gt;
&lt;br /&gt;
Though the current application gives the impression that it's incidental, actually in real life it might happen more frequent than we assume. Considering supermarket shopping experiences, a significant proportion, if not most, of our purchase activities belong to split transactions. It's very often we buy things which belong to different categories: groceries, garments, office supplies (educational or small business for tax purpose), medicine for health (tax, flex-spending), etc. It's less often but still not uncommon that we get cash back from the same transaction, or we foot the bill with two or more payment methods (credit cards, bank cards, cash, etc.). &lt;br /&gt;
&lt;br /&gt;
Assume spit is a generic form of transaction, we might as well consider the &amp;quot;normal&amp;quot; transaction, single-source-single-category, a special case - a transaction comprises of only one From source and one To destination. I wonder if this idea would have an impact on the model design, or if the current model is built upon this. &lt;br /&gt;
&lt;br /&gt;
But definitely we can incorporate this idea into the UI design. Which I might as well discuss it in the [[Report for View (Testing)]] section.&lt;br /&gt;
&lt;br /&gt;
=== Model Limitations ===&lt;br /&gt;
* One split per transaction - either from or to can be a split but can not be both split within the same transaction. (may not be due to model, but rather buggy implementation.)&lt;br /&gt;
&lt;br /&gt;
* The model allows duplicated data or computed data in two places - split and transaction. This incur duplicate implementations which is potentially error prone.&lt;br /&gt;
&lt;br /&gt;
=== Rules for choosing From and To sources ===&lt;br /&gt;
*Implied Rules?&lt;br /&gt;
*Filtered list with rules&lt;br /&gt;
== Testing ==&lt;br /&gt;
=== Testing Strategy ===&lt;br /&gt;
*Conformance — Does the value conform to an expected format?&lt;br /&gt;
*Ordering — Is the set of values ordered or unordered as appropriate?&lt;br /&gt;
*Range — Is the value within reasonable minimum and maximum values?&lt;br /&gt;
*Reference — Does the code reference anything external that isn't under direct control of the code itself?&lt;br /&gt;
*Existence — Does the value exist (e.g., is non-null, non-zero, present in a set, etc.)?&lt;br /&gt;
*Cardinality — Are there exactly enough values?&lt;br /&gt;
*Time (absolute and relative) — Is everything happening in order? At the right time? In time?&lt;br /&gt;
&lt;br /&gt;
=== Pre-existing Tests ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	public void testCompare() throws Exception {&lt;br /&gt;
		//Splitting To - all attributes are the same&lt;br /&gt;
		//Splitting From - All attributes are the same&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public void testWithoutSplits() throws Exception {}&lt;br /&gt;
&lt;br /&gt;
	public void testWithFromSplits() throws Exception {}&lt;br /&gt;
&lt;br /&gt;
	public void testWithToSplits() throws Exception {}&lt;br /&gt;
&lt;br /&gt;
	public void testWithBothSplits() throws Exception {}&lt;br /&gt;
&lt;br /&gt;
	public void testUnbalancedSplits() throws Exception {}&lt;br /&gt;
&lt;br /&gt;
	public void testWithIncorrectIncomeBCSplits() throws Exception {}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Planned Tests ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#public void testSplitsZeroToSplit() throws Exception {}&lt;br /&gt;
#public void testSplitsZeroFromSplit() throws Exception {}&lt;br /&gt;
#public void testSplitsFromSplitZeroAmount() throws Exception {}&lt;br /&gt;
#public void testSplitFromSplitsNullSource() throws Exception {}&lt;br /&gt;
#public void testSplitsToSplitZeroAmount() throws Exception {}&lt;br /&gt;
#public void testSplitToSplitsNullSource() throws Exception {}&lt;br /&gt;
#public void test&lt;br /&gt;
#public void test&lt;br /&gt;
#public void test&lt;br /&gt;
#public void test&lt;/div&gt;</summary>
		<author><name>Kanke</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=Written_Report_on_Model_(Testing)&amp;diff=26443</id>
		<title>Written Report on Model (Testing)</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Written_Report_on_Model_(Testing)&amp;diff=26443"/>
		<updated>2009-10-22T22:07:00Z</updated>

		<summary type="html">&lt;p&gt;Kanke: /* Model Limitations */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Model Analysis and Testing'''&lt;br /&gt;
&lt;br /&gt;
== Model Analysis ==&lt;br /&gt;
&lt;br /&gt;
=== Ubiquitousness of Split ===&lt;br /&gt;
&lt;br /&gt;
After walking through several transaction scenarios that involves splits, one has to appreciate the usefulness and necessity of a split structure for day-to-day transactions. &lt;br /&gt;
&lt;br /&gt;
Though the current application gives the impression that it's incidental, actually in real life it might happen more frequent than we assume. Considering supermarket shopping experiences, a significant proportion, if not most, of our purchase activities belong to split transactions. It's very often we buy things which belong to different categories: groceries, garments, office supplies (educational or small business for tax purpose), medicine for health (tax, flex-spending), etc. It's less often but still not uncommon that we get cash back from the same transaction, or we foot the bill with two or more payment methods (credit cards, bank cards, cash, etc.). &lt;br /&gt;
&lt;br /&gt;
Assume spit is a generic form of transaction, we might as well consider the &amp;quot;normal&amp;quot; transaction, single-source-single-category, a special case - a transaction comprises of only one From source and one To destination. I wonder if this idea would have an impact on the model design, or if the current model is built upon this. &lt;br /&gt;
&lt;br /&gt;
But definitely we can incorporate this idea into the UI design. Which I might as well discuss it in the [[Report for View (Testing)]] section.&lt;br /&gt;
&lt;br /&gt;
=== Model Limitations ===&lt;br /&gt;
* One split per transaction - either from or to can be a split but can not be both split within the same transaction. (may not be due to model, but rather buggy implementation.)&lt;br /&gt;
&lt;br /&gt;
* The model allows duplicated data or computed data in two places - split and transaction. This incur duplicate implementations which is potentially error prone.&lt;br /&gt;
&lt;br /&gt;
=== Rules for choosing From and To sources ===&lt;br /&gt;
*Implied Rules?&lt;br /&gt;
*Filtered list with rules&lt;br /&gt;
== Testing ==&lt;br /&gt;
=== Testing Strategy ===&lt;br /&gt;
*Conformance — Does the value conform to an expected format?&lt;br /&gt;
*Ordering — Is the set of values ordered or unordered as appropriate?&lt;br /&gt;
*Range — Is the value within reasonable minimum and maximum values?&lt;br /&gt;
*Reference — Does the code reference anything external that isn't under direct control of the code itself?&lt;br /&gt;
*Existence — Does the value exist (e.g., is non-null, non-zero, present in a set, etc.)?&lt;br /&gt;
*Cardinality — Are there exactly enough values?&lt;br /&gt;
*Time (absolute and relative) — Is everything happening in order? At the right time? In time?&lt;br /&gt;
&lt;br /&gt;
=== Pre-existing Tests ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	public void testCompare() throws Exception {&lt;br /&gt;
		//Splitting To - all attributes are the same&lt;br /&gt;
		//Splitting From - All attributes are the same&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public void testWithoutSplits() throws Exception {}&lt;br /&gt;
&lt;br /&gt;
	public void testWithFromSplits() throws Exception {}&lt;br /&gt;
&lt;br /&gt;
	public void testWithToSplits() throws Exception {}&lt;br /&gt;
&lt;br /&gt;
	public void testWithBothSplits() throws Exception {}&lt;br /&gt;
&lt;br /&gt;
	public void testUnbalancedSplits() throws Exception {}&lt;br /&gt;
&lt;br /&gt;
	public void testWithIncorrectIncomeBCSplits() throws Exception {}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Planned Tests ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#public void testZeroSplitSplits() throws Exception {}&lt;br /&gt;
#public void testZeroAmountSplit() throws Exception {}&lt;br /&gt;
#public void testNullSourceSplit() throws Exception {}&lt;br /&gt;
#public void testNullAmountSplit() throws Exception {}&lt;br /&gt;
#public void testOutOfContextSourceSplit() throws Exception {}&lt;br /&gt;
#public void test&lt;br /&gt;
#public void test&lt;br /&gt;
#public void test&lt;br /&gt;
#public void test&lt;br /&gt;
#public void test&lt;/div&gt;</summary>
		<author><name>Kanke</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=Written_Report_on_Model_(Testing)&amp;diff=26442</id>
		<title>Written Report on Model (Testing)</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Written_Report_on_Model_(Testing)&amp;diff=26442"/>
		<updated>2009-10-22T20:45:39Z</updated>

		<summary type="html">&lt;p&gt;Kanke: /* Planned Tests */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Model Analysis and Testing'''&lt;br /&gt;
&lt;br /&gt;
== Model Analysis ==&lt;br /&gt;
&lt;br /&gt;
=== Ubiquitousness of Split ===&lt;br /&gt;
&lt;br /&gt;
After walking through several transaction scenarios that involves splits, one has to appreciate the usefulness and necessity of a split structure for day-to-day transactions. &lt;br /&gt;
&lt;br /&gt;
Though the current application gives the impression that it's incidental, actually in real life it might happen more frequent than we assume. Considering supermarket shopping experiences, a significant proportion, if not most, of our purchase activities belong to split transactions. It's very often we buy things which belong to different categories: groceries, garments, office supplies (educational or small business for tax purpose), medicine for health (tax, flex-spending), etc. It's less often but still not uncommon that we get cash back from the same transaction, or we foot the bill with two or more payment methods (credit cards, bank cards, cash, etc.). &lt;br /&gt;
&lt;br /&gt;
Assume spit is a generic form of transaction, we might as well consider the &amp;quot;normal&amp;quot; transaction, single-source-single-category, a special case - a transaction comprises of only one From source and one To destination. I wonder if this idea would have an impact on the model design, or if the current model is built upon this. &lt;br /&gt;
&lt;br /&gt;
But definitely we can incorporate this idea into the UI design. Which I might as well discuss it in the [[Report for View (Testing)]] section.&lt;br /&gt;
&lt;br /&gt;
=== Model Limitations ===&lt;br /&gt;
* One split per transaction - either from or to can be a split but can not be both split within the same transaction.&lt;br /&gt;
&lt;br /&gt;
=== Rules for choosing From and To sources ===&lt;br /&gt;
*Implied Rules?&lt;br /&gt;
*Filtered list with rules&lt;br /&gt;
== Testing ==&lt;br /&gt;
=== Testing Strategy ===&lt;br /&gt;
*Conformance — Does the value conform to an expected format?&lt;br /&gt;
*Ordering — Is the set of values ordered or unordered as appropriate?&lt;br /&gt;
*Range — Is the value within reasonable minimum and maximum values?&lt;br /&gt;
*Reference — Does the code reference anything external that isn't under direct control of the code itself?&lt;br /&gt;
*Existence — Does the value exist (e.g., is non-null, non-zero, present in a set, etc.)?&lt;br /&gt;
*Cardinality — Are there exactly enough values?&lt;br /&gt;
*Time (absolute and relative) — Is everything happening in order? At the right time? In time?&lt;br /&gt;
&lt;br /&gt;
=== Pre-existing Tests ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	public void testCompare() throws Exception {&lt;br /&gt;
		//Splitting To - all attributes are the same&lt;br /&gt;
		//Splitting From - All attributes are the same&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public void testWithoutSplits() throws Exception {}&lt;br /&gt;
&lt;br /&gt;
	public void testWithFromSplits() throws Exception {}&lt;br /&gt;
&lt;br /&gt;
	public void testWithToSplits() throws Exception {}&lt;br /&gt;
&lt;br /&gt;
	public void testWithBothSplits() throws Exception {}&lt;br /&gt;
&lt;br /&gt;
	public void testUnbalancedSplits() throws Exception {}&lt;br /&gt;
&lt;br /&gt;
	public void testWithIncorrectIncomeBCSplits() throws Exception {}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Planned Tests ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#public void testZeroSplitSplits() throws Exception {}&lt;br /&gt;
#public void testZeroAmountSplit() throws Exception {}&lt;br /&gt;
#public void testNullSourceSplit() throws Exception {}&lt;br /&gt;
#public void testNullAmountSplit() throws Exception {}&lt;br /&gt;
#public void testOutOfContextSourceSplit() throws Exception {}&lt;br /&gt;
#public void test&lt;br /&gt;
#public void test&lt;br /&gt;
#public void test&lt;br /&gt;
#public void test&lt;br /&gt;
#public void test&lt;/div&gt;</summary>
		<author><name>Kanke</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=Written_Report_on_Model_(Testing)&amp;diff=26441</id>
		<title>Written Report on Model (Testing)</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Written_Report_on_Model_(Testing)&amp;diff=26441"/>
		<updated>2009-10-22T19:55:41Z</updated>

		<summary type="html">&lt;p&gt;Kanke: /* Planned Tests */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Model Analysis and Testing'''&lt;br /&gt;
&lt;br /&gt;
== Model Analysis ==&lt;br /&gt;
&lt;br /&gt;
=== Ubiquitousness of Split ===&lt;br /&gt;
&lt;br /&gt;
After walking through several transaction scenarios that involves splits, one has to appreciate the usefulness and necessity of a split structure for day-to-day transactions. &lt;br /&gt;
&lt;br /&gt;
Though the current application gives the impression that it's incidental, actually in real life it might happen more frequent than we assume. Considering supermarket shopping experiences, a significant proportion, if not most, of our purchase activities belong to split transactions. It's very often we buy things which belong to different categories: groceries, garments, office supplies (educational or small business for tax purpose), medicine for health (tax, flex-spending), etc. It's less often but still not uncommon that we get cash back from the same transaction, or we foot the bill with two or more payment methods (credit cards, bank cards, cash, etc.). &lt;br /&gt;
&lt;br /&gt;
Assume spit is a generic form of transaction, we might as well consider the &amp;quot;normal&amp;quot; transaction, single-source-single-category, a special case - a transaction comprises of only one From source and one To destination. I wonder if this idea would have an impact on the model design, or if the current model is built upon this. &lt;br /&gt;
&lt;br /&gt;
But definitely we can incorporate this idea into the UI design. Which I might as well discuss it in the [[Report for View (Testing)]] section.&lt;br /&gt;
&lt;br /&gt;
=== Model Limitations ===&lt;br /&gt;
* One split per transaction - either from or to can be a split but can not be both split within the same transaction.&lt;br /&gt;
&lt;br /&gt;
=== Rules for choosing From and To sources ===&lt;br /&gt;
*Implied Rules?&lt;br /&gt;
*Filtered list with rules&lt;br /&gt;
== Testing ==&lt;br /&gt;
=== Testing Strategy ===&lt;br /&gt;
*Conformance — Does the value conform to an expected format?&lt;br /&gt;
*Ordering — Is the set of values ordered or unordered as appropriate?&lt;br /&gt;
*Range — Is the value within reasonable minimum and maximum values?&lt;br /&gt;
*Reference — Does the code reference anything external that isn't under direct control of the code itself?&lt;br /&gt;
*Existence — Does the value exist (e.g., is non-null, non-zero, present in a set, etc.)?&lt;br /&gt;
*Cardinality — Are there exactly enough values?&lt;br /&gt;
*Time (absolute and relative) — Is everything happening in order? At the right time? In time?&lt;br /&gt;
&lt;br /&gt;
=== Pre-existing Tests ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	public void testCompare() throws Exception {&lt;br /&gt;
		//Splitting To - all attributes are the same&lt;br /&gt;
		//Splitting From - All attributes are the same&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public void testWithoutSplits() throws Exception {}&lt;br /&gt;
&lt;br /&gt;
	public void testWithFromSplits() throws Exception {}&lt;br /&gt;
&lt;br /&gt;
	public void testWithToSplits() throws Exception {}&lt;br /&gt;
&lt;br /&gt;
	public void testWithBothSplits() throws Exception {}&lt;br /&gt;
&lt;br /&gt;
	public void testUnbalancedSplits() throws Exception {}&lt;br /&gt;
&lt;br /&gt;
	public void testWithIncorrectIncomeBCSplits() throws Exception {}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Planned Tests ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#public void testZeroSplit() throws Exception {}&lt;br /&gt;
#public void testNullSetter() throws Exception {}&lt;br /&gt;
#public void test&lt;br /&gt;
#public void test&lt;br /&gt;
#public void test&lt;br /&gt;
#public void test&lt;br /&gt;
#public void test&lt;br /&gt;
#public void test&lt;br /&gt;
#public void test&lt;br /&gt;
#public void test&lt;/div&gt;</summary>
		<author><name>Kanke</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=Written_Report_on_Model_(Testing)&amp;diff=26440</id>
		<title>Written Report on Model (Testing)</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Written_Report_on_Model_(Testing)&amp;diff=26440"/>
		<updated>2009-10-22T17:31:03Z</updated>

		<summary type="html">&lt;p&gt;Kanke: /* Planned Tests */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Model Analysis and Testing'''&lt;br /&gt;
&lt;br /&gt;
== Model Analysis ==&lt;br /&gt;
&lt;br /&gt;
=== Ubiquitousness of Split ===&lt;br /&gt;
&lt;br /&gt;
After walking through several transaction scenarios that involves splits, one has to appreciate the usefulness and necessity of a split structure for day-to-day transactions. &lt;br /&gt;
&lt;br /&gt;
Though the current application gives the impression that it's incidental, actually in real life it might happen more frequent than we assume. Considering supermarket shopping experiences, a significant proportion, if not most, of our purchase activities belong to split transactions. It's very often we buy things which belong to different categories: groceries, garments, office supplies (educational or small business for tax purpose), medicine for health (tax, flex-spending), etc. It's less often but still not uncommon that we get cash back from the same transaction, or we foot the bill with two or more payment methods (credit cards, bank cards, cash, etc.). &lt;br /&gt;
&lt;br /&gt;
Assume spit is a generic form of transaction, we might as well consider the &amp;quot;normal&amp;quot; transaction, single-source-single-category, a special case - a transaction comprises of only one From source and one To destination. I wonder if this idea would have an impact on the model design, or if the current model is built upon this. &lt;br /&gt;
&lt;br /&gt;
But definitely we can incorporate this idea into the UI design. Which I might as well discuss it in the [[Report for View (Testing)]] section.&lt;br /&gt;
&lt;br /&gt;
=== Model Limitations ===&lt;br /&gt;
* One split per transaction - either from or to can be a split but can not be both split within the same transaction.&lt;br /&gt;
&lt;br /&gt;
=== Rules for choosing From and To sources ===&lt;br /&gt;
*Implied Rules?&lt;br /&gt;
*Filtered list with rules&lt;br /&gt;
== Testing ==&lt;br /&gt;
=== Testing Strategy ===&lt;br /&gt;
*Conformance — Does the value conform to an expected format?&lt;br /&gt;
*Ordering — Is the set of values ordered or unordered as appropriate?&lt;br /&gt;
*Range — Is the value within reasonable minimum and maximum values?&lt;br /&gt;
*Reference — Does the code reference anything external that isn't under direct control of the code itself?&lt;br /&gt;
*Existence — Does the value exist (e.g., is non-null, non-zero, present in a set, etc.)?&lt;br /&gt;
*Cardinality — Are there exactly enough values?&lt;br /&gt;
*Time (absolute and relative) — Is everything happening in order? At the right time? In time?&lt;br /&gt;
&lt;br /&gt;
=== Pre-existing Tests ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	public void testCompare() throws Exception {&lt;br /&gt;
		//Splitting To - all attributes are the same&lt;br /&gt;
		//Splitting From - All attributes are the same&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public void testWithoutSplits() throws Exception {}&lt;br /&gt;
&lt;br /&gt;
	public void testWithFromSplits() throws Exception {}&lt;br /&gt;
&lt;br /&gt;
	public void testWithToSplits() throws Exception {}&lt;br /&gt;
&lt;br /&gt;
	public void testWithBothSplits() throws Exception {}&lt;br /&gt;
&lt;br /&gt;
	public void testUnbalancedSplits() throws Exception {}&lt;br /&gt;
&lt;br /&gt;
	public void testWithIncorrectIncomeBCSplits() throws Exception {}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Planned Tests ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#public void test&lt;br /&gt;
#public void test&lt;br /&gt;
#public void test&lt;br /&gt;
#public void test&lt;br /&gt;
#public void test&lt;br /&gt;
#public void test&lt;br /&gt;
#public void test&lt;br /&gt;
#public void test&lt;br /&gt;
#public void test&lt;br /&gt;
#public void test&lt;/div&gt;</summary>
		<author><name>Kanke</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=Written_Report_on_Model_(Testing)&amp;diff=26439</id>
		<title>Written Report on Model (Testing)</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Written_Report_on_Model_(Testing)&amp;diff=26439"/>
		<updated>2009-10-22T17:29:54Z</updated>

		<summary type="html">&lt;p&gt;Kanke: /* Planned Tests */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Model Analysis and Testing'''&lt;br /&gt;
&lt;br /&gt;
== Model Analysis ==&lt;br /&gt;
&lt;br /&gt;
=== Ubiquitousness of Split ===&lt;br /&gt;
&lt;br /&gt;
After walking through several transaction scenarios that involves splits, one has to appreciate the usefulness and necessity of a split structure for day-to-day transactions. &lt;br /&gt;
&lt;br /&gt;
Though the current application gives the impression that it's incidental, actually in real life it might happen more frequent than we assume. Considering supermarket shopping experiences, a significant proportion, if not most, of our purchase activities belong to split transactions. It's very often we buy things which belong to different categories: groceries, garments, office supplies (educational or small business for tax purpose), medicine for health (tax, flex-spending), etc. It's less often but still not uncommon that we get cash back from the same transaction, or we foot the bill with two or more payment methods (credit cards, bank cards, cash, etc.). &lt;br /&gt;
&lt;br /&gt;
Assume spit is a generic form of transaction, we might as well consider the &amp;quot;normal&amp;quot; transaction, single-source-single-category, a special case - a transaction comprises of only one From source and one To destination. I wonder if this idea would have an impact on the model design, or if the current model is built upon this. &lt;br /&gt;
&lt;br /&gt;
But definitely we can incorporate this idea into the UI design. Which I might as well discuss it in the [[Report for View (Testing)]] section.&lt;br /&gt;
&lt;br /&gt;
=== Model Limitations ===&lt;br /&gt;
* One split per transaction - either from or to can be a split but can not be both split within the same transaction.&lt;br /&gt;
&lt;br /&gt;
=== Rules for choosing From and To sources ===&lt;br /&gt;
*Implied Rules?&lt;br /&gt;
*Filtered list with rules&lt;br /&gt;
== Testing ==&lt;br /&gt;
=== Testing Strategy ===&lt;br /&gt;
*Conformance — Does the value conform to an expected format?&lt;br /&gt;
*Ordering — Is the set of values ordered or unordered as appropriate?&lt;br /&gt;
*Range — Is the value within reasonable minimum and maximum values?&lt;br /&gt;
*Reference — Does the code reference anything external that isn't under direct control of the code itself?&lt;br /&gt;
*Existence — Does the value exist (e.g., is non-null, non-zero, present in a set, etc.)?&lt;br /&gt;
*Cardinality — Are there exactly enough values?&lt;br /&gt;
*Time (absolute and relative) — Is everything happening in order? At the right time? In time?&lt;br /&gt;
&lt;br /&gt;
=== Pre-existing Tests ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	public void testCompare() throws Exception {&lt;br /&gt;
		//Splitting To - all attributes are the same&lt;br /&gt;
		//Splitting From - All attributes are the same&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public void testWithoutSplits() throws Exception {}&lt;br /&gt;
&lt;br /&gt;
	public void testWithFromSplits() throws Exception {}&lt;br /&gt;
&lt;br /&gt;
	public void testWithToSplits() throws Exception {}&lt;br /&gt;
&lt;br /&gt;
	public void testWithBothSplits() throws Exception {}&lt;br /&gt;
&lt;br /&gt;
	public void testUnbalancedSplits() throws Exception {}&lt;br /&gt;
&lt;br /&gt;
	public void testWithIncorrectIncomeBCSplits() throws Exception {}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Planned Tests ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
#&lt;br /&gt;
#&lt;br /&gt;
#&lt;br /&gt;
#&lt;br /&gt;
#&lt;br /&gt;
#&lt;br /&gt;
#&lt;br /&gt;
#&lt;br /&gt;
#&lt;/div&gt;</summary>
		<author><name>Kanke</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=Written_Report_on_Model_(Testing)&amp;diff=26438</id>
		<title>Written Report on Model (Testing)</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Written_Report_on_Model_(Testing)&amp;diff=26438"/>
		<updated>2009-10-22T17:27:20Z</updated>

		<summary type="html">&lt;p&gt;Kanke: /* Pre-existing Tests */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Model Analysis and Testing'''&lt;br /&gt;
&lt;br /&gt;
== Model Analysis ==&lt;br /&gt;
&lt;br /&gt;
=== Ubiquitousness of Split ===&lt;br /&gt;
&lt;br /&gt;
After walking through several transaction scenarios that involves splits, one has to appreciate the usefulness and necessity of a split structure for day-to-day transactions. &lt;br /&gt;
&lt;br /&gt;
Though the current application gives the impression that it's incidental, actually in real life it might happen more frequent than we assume. Considering supermarket shopping experiences, a significant proportion, if not most, of our purchase activities belong to split transactions. It's very often we buy things which belong to different categories: groceries, garments, office supplies (educational or small business for tax purpose), medicine for health (tax, flex-spending), etc. It's less often but still not uncommon that we get cash back from the same transaction, or we foot the bill with two or more payment methods (credit cards, bank cards, cash, etc.). &lt;br /&gt;
&lt;br /&gt;
Assume spit is a generic form of transaction, we might as well consider the &amp;quot;normal&amp;quot; transaction, single-source-single-category, a special case - a transaction comprises of only one From source and one To destination. I wonder if this idea would have an impact on the model design, or if the current model is built upon this. &lt;br /&gt;
&lt;br /&gt;
But definitely we can incorporate this idea into the UI design. Which I might as well discuss it in the [[Report for View (Testing)]] section.&lt;br /&gt;
&lt;br /&gt;
=== Model Limitations ===&lt;br /&gt;
* One split per transaction - either from or to can be a split but can not be both split within the same transaction.&lt;br /&gt;
&lt;br /&gt;
=== Rules for choosing From and To sources ===&lt;br /&gt;
*Implied Rules?&lt;br /&gt;
*Filtered list with rules&lt;br /&gt;
== Testing ==&lt;br /&gt;
=== Testing Strategy ===&lt;br /&gt;
*Conformance — Does the value conform to an expected format?&lt;br /&gt;
*Ordering — Is the set of values ordered or unordered as appropriate?&lt;br /&gt;
*Range — Is the value within reasonable minimum and maximum values?&lt;br /&gt;
*Reference — Does the code reference anything external that isn't under direct control of the code itself?&lt;br /&gt;
*Existence — Does the value exist (e.g., is non-null, non-zero, present in a set, etc.)?&lt;br /&gt;
*Cardinality — Are there exactly enough values?&lt;br /&gt;
*Time (absolute and relative) — Is everything happening in order? At the right time? In time?&lt;br /&gt;
&lt;br /&gt;
=== Pre-existing Tests ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	public void testCompare() throws Exception {&lt;br /&gt;
		//Splitting To - all attributes are the same&lt;br /&gt;
		//Splitting From - All attributes are the same&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public void testWithoutSplits() throws Exception {}&lt;br /&gt;
&lt;br /&gt;
	public void testWithFromSplits() throws Exception {}&lt;br /&gt;
&lt;br /&gt;
	public void testWithToSplits() throws Exception {}&lt;br /&gt;
&lt;br /&gt;
	public void testWithBothSplits() throws Exception {}&lt;br /&gt;
&lt;br /&gt;
	public void testUnbalancedSplits() throws Exception {}&lt;br /&gt;
&lt;br /&gt;
	public void testWithIncorrectIncomeBCSplits() throws Exception {}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Planned Tests ===&lt;/div&gt;</summary>
		<author><name>Kanke</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=Written_Report_on_Model_(Testing)&amp;diff=26437</id>
		<title>Written Report on Model (Testing)</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Written_Report_on_Model_(Testing)&amp;diff=26437"/>
		<updated>2009-10-22T01:35:48Z</updated>

		<summary type="html">&lt;p&gt;Kanke: /* Model Limitations */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Model Analysis and Testing'''&lt;br /&gt;
&lt;br /&gt;
== Model Analysis ==&lt;br /&gt;
&lt;br /&gt;
=== Ubiquitousness of Split ===&lt;br /&gt;
&lt;br /&gt;
After walking through several transaction scenarios that involves splits, one has to appreciate the usefulness and necessity of a split structure for day-to-day transactions. &lt;br /&gt;
&lt;br /&gt;
Though the current application gives the impression that it's incidental, actually in real life it might happen more frequent than we assume. Considering supermarket shopping experiences, a significant proportion, if not most, of our purchase activities belong to split transactions. It's very often we buy things which belong to different categories: groceries, garments, office supplies (educational or small business for tax purpose), medicine for health (tax, flex-spending), etc. It's less often but still not uncommon that we get cash back from the same transaction, or we foot the bill with two or more payment methods (credit cards, bank cards, cash, etc.). &lt;br /&gt;
&lt;br /&gt;
Assume spit is a generic form of transaction, we might as well consider the &amp;quot;normal&amp;quot; transaction, single-source-single-category, a special case - a transaction comprises of only one From source and one To destination. I wonder if this idea would have an impact on the model design, or if the current model is built upon this. &lt;br /&gt;
&lt;br /&gt;
But definitely we can incorporate this idea into the UI design. Which I might as well discuss it in the [[Report for View (Testing)]] section.&lt;br /&gt;
&lt;br /&gt;
=== Model Limitations ===&lt;br /&gt;
* One split per transaction - either from or to can be a split but can not be both split within the same transaction.&lt;br /&gt;
&lt;br /&gt;
=== Rules for choosing From and To sources ===&lt;br /&gt;
*Implied Rules?&lt;br /&gt;
*Filtered list with rules&lt;br /&gt;
== Testing ==&lt;br /&gt;
=== Testing Strategy ===&lt;br /&gt;
*Conformance — Does the value conform to an expected format?&lt;br /&gt;
*Ordering — Is the set of values ordered or unordered as appropriate?&lt;br /&gt;
*Range — Is the value within reasonable minimum and maximum values?&lt;br /&gt;
*Reference — Does the code reference anything external that isn't under direct control of the code itself?&lt;br /&gt;
*Existence — Does the value exist (e.g., is non-null, non-zero, present in a set, etc.)?&lt;br /&gt;
*Cardinality — Are there exactly enough values?&lt;br /&gt;
*Time (absolute and relative) — Is everything happening in order? At the right time? In time?&lt;br /&gt;
&lt;br /&gt;
=== Pre-existing Tests ===&lt;br /&gt;
&lt;br /&gt;
=== Planned Tests ===&lt;/div&gt;</summary>
		<author><name>Kanke</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=Written_Report_on_Model_(Testing)&amp;diff=26434</id>
		<title>Written Report on Model (Testing)</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Written_Report_on_Model_(Testing)&amp;diff=26434"/>
		<updated>2009-10-20T16:01:10Z</updated>

		<summary type="html">&lt;p&gt;Kanke: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Model Analysis and Testing'''&lt;br /&gt;
&lt;br /&gt;
== Model Analysis ==&lt;br /&gt;
&lt;br /&gt;
=== Ubiquitousness of Split ===&lt;br /&gt;
&lt;br /&gt;
After walking through several transaction scenarios that involves splits, one has to appreciate the usefulness and necessity of a split structure for day-to-day transactions. &lt;br /&gt;
&lt;br /&gt;
Though the current application gives the impression that it's incidental, actually in real life it might happen more frequent than we assume. Considering supermarket shopping experiences, a significant proportion, if not most, of our purchase activities belong to split transactions. It's very often we buy things which belong to different categories: groceries, garments, office supplies (educational or small business for tax purpose), medicine for health (tax, flex-spending), etc. It's less often but still not uncommon that we get cash back from the same transaction, or we foot the bill with two or more payment methods (credit cards, bank cards, cash, etc.). &lt;br /&gt;
&lt;br /&gt;
Assume spit is a generic form of transaction, we might as well consider the &amp;quot;normal&amp;quot; transaction, single-source-single-category, a special case - a transaction comprises of only one From source and one To destination. I wonder if this idea would have an impact on the model design, or if the current model is built upon this. &lt;br /&gt;
&lt;br /&gt;
But definitely we can incorporate this idea into the UI design. Which I might as well discuss it in the [[Report for View (Testing)]] section.&lt;br /&gt;
&lt;br /&gt;
=== Model Limitations ===&lt;br /&gt;
*Cash back&lt;br /&gt;
*ATM transaction&lt;br /&gt;
&lt;br /&gt;
=== Rules for choosing From and To sources ===&lt;br /&gt;
*Implied Rules?&lt;br /&gt;
*Filtered list with rules&lt;br /&gt;
== Testing ==&lt;br /&gt;
=== Testing Strategy ===&lt;br /&gt;
*Conformance — Does the value conform to an expected format?&lt;br /&gt;
*Ordering — Is the set of values ordered or unordered as appropriate?&lt;br /&gt;
*Range — Is the value within reasonable minimum and maximum values?&lt;br /&gt;
*Reference — Does the code reference anything external that isn't under direct control of the code itself?&lt;br /&gt;
*Existence — Does the value exist (e.g., is non-null, non-zero, present in a set, etc.)?&lt;br /&gt;
*Cardinality — Are there exactly enough values?&lt;br /&gt;
*Time (absolute and relative) — Is everything happening in order? At the right time? In time?&lt;br /&gt;
&lt;br /&gt;
=== Pre-existing Tests ===&lt;br /&gt;
&lt;br /&gt;
=== Planned Tests ===&lt;/div&gt;</summary>
		<author><name>Kanke</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=Report_for_View_(Testing)&amp;diff=26433</id>
		<title>Report for View (Testing)</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Report_for_View_(Testing)&amp;diff=26433"/>
		<updated>2009-10-20T15:50:25Z</updated>

		<summary type="html">&lt;p&gt;Kanke: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''View Analysis and Testing'''&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
=== Testing Strategy ===&lt;br /&gt;
==== Testing method ====&lt;br /&gt;
:*Interactive (manual)&lt;br /&gt;
==== Testing Scenario ====&lt;br /&gt;
:*Complete Story&lt;br /&gt;
:*Split focused&lt;br /&gt;
:*Testing matrix&lt;br /&gt;
&lt;br /&gt;
=== Planned Tests ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Tests Done===&lt;br /&gt;
&lt;br /&gt;
== View Analysis (Based on tests) ==&lt;br /&gt;
&lt;br /&gt;
== View Changes ==&lt;br /&gt;
=== Planned Changes ===&lt;br /&gt;
#Commit Button&lt;br /&gt;
#&amp;quot;+&amp;quot;, &amp;quot;-&amp;quot; =&amp;gt; &amp;quot;Add&amp;quot;, &amp;quot;Remove&amp;quot; or icons&lt;br /&gt;
#non-purpose? square in transaction dialog&lt;br /&gt;
=== Changes Made ===&lt;/div&gt;</summary>
		<author><name>Kanke</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=Report_for_View_(Testing)&amp;diff=26432</id>
		<title>Report for View (Testing)</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Report_for_View_(Testing)&amp;diff=26432"/>
		<updated>2009-10-20T15:47:00Z</updated>

		<summary type="html">&lt;p&gt;Kanke: /* Testing Strategy */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''View Analysis and Testing'''&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
=== Testing Strategy ===&lt;br /&gt;
#Testing method&lt;br /&gt;
:*Interactive (manual)&lt;br /&gt;
#Testing Scenario&lt;br /&gt;
:*Complete Story&lt;br /&gt;
:*Split focused&lt;br /&gt;
:*Testing matrix&lt;br /&gt;
&lt;br /&gt;
=== Done Tests ===&lt;br /&gt;
&lt;br /&gt;
=== Planned Tests ===&lt;br /&gt;
&lt;br /&gt;
== View Analysis ==&lt;br /&gt;
&lt;br /&gt;
== View Changes ==&lt;br /&gt;
=== Planned Changes ===&lt;br /&gt;
#Commit Button&lt;br /&gt;
#&amp;quot;+&amp;quot;, &amp;quot;-&amp;quot; =&amp;gt; &amp;quot;Add&amp;quot;, &amp;quot;Remove&amp;quot; or icons&lt;br /&gt;
#non-purpose? square in transaction dialog&lt;br /&gt;
=== Changes Made ===&lt;/div&gt;</summary>
		<author><name>Kanke</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=Report_for_View_(Testing)&amp;diff=26431</id>
		<title>Report for View (Testing)</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Report_for_View_(Testing)&amp;diff=26431"/>
		<updated>2009-10-20T15:45:42Z</updated>

		<summary type="html">&lt;p&gt;Kanke: /* Testing Strategy */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''View Analysis and Testing'''&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
=== Testing Strategy ===&lt;br /&gt;
#Test method&lt;br /&gt;
*Interactive (manual)&lt;br /&gt;
#Test Scenario&lt;br /&gt;
*Complete Story&lt;br /&gt;
*Split focused&lt;br /&gt;
*Testing matrix&lt;br /&gt;
&lt;br /&gt;
=== Done Tests ===&lt;br /&gt;
&lt;br /&gt;
=== Planned Tests ===&lt;br /&gt;
&lt;br /&gt;
== View Analysis ==&lt;br /&gt;
&lt;br /&gt;
== View Changes ==&lt;br /&gt;
=== Planned Changes ===&lt;br /&gt;
#Commit Button&lt;br /&gt;
#&amp;quot;+&amp;quot;, &amp;quot;-&amp;quot; =&amp;gt; &amp;quot;Add&amp;quot;, &amp;quot;Remove&amp;quot; or icons&lt;br /&gt;
#non-purpose? square in transaction dialog&lt;br /&gt;
=== Changes Made ===&lt;/div&gt;</summary>
		<author><name>Kanke</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=Report_for_View_(Testing)&amp;diff=26430</id>
		<title>Report for View (Testing)</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Report_for_View_(Testing)&amp;diff=26430"/>
		<updated>2009-10-20T15:45:17Z</updated>

		<summary type="html">&lt;p&gt;Kanke: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''View Analysis and Testing'''&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
=== Testing Strategy ===&lt;br /&gt;
#Test method&lt;br /&gt;
*Interactive (manual)&lt;br /&gt;
#Test SCenario&lt;br /&gt;
*Complete Story&lt;br /&gt;
*Split focused&lt;br /&gt;
*Testing matrix&lt;br /&gt;
&lt;br /&gt;
=== Done Tests ===&lt;br /&gt;
&lt;br /&gt;
=== Planned Tests ===&lt;br /&gt;
&lt;br /&gt;
== View Analysis ==&lt;br /&gt;
&lt;br /&gt;
== View Changes ==&lt;br /&gt;
=== Planned Changes ===&lt;br /&gt;
#Commit Button&lt;br /&gt;
#&amp;quot;+&amp;quot;, &amp;quot;-&amp;quot; =&amp;gt; &amp;quot;Add&amp;quot;, &amp;quot;Remove&amp;quot; or icons&lt;br /&gt;
#non-purpose? square in transaction dialog&lt;br /&gt;
=== Changes Made ===&lt;/div&gt;</summary>
		<author><name>Kanke</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=Written_Report_on_Model_(Testing)&amp;diff=26429</id>
		<title>Written Report on Model (Testing)</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Written_Report_on_Model_(Testing)&amp;diff=26429"/>
		<updated>2009-10-20T15:14:02Z</updated>

		<summary type="html">&lt;p&gt;Kanke: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Model Analysis and Testing'''&lt;br /&gt;
&lt;br /&gt;
== Model Analysis ==&lt;br /&gt;
&lt;br /&gt;
=== Ubiquitousness of Split ===&lt;br /&gt;
&lt;br /&gt;
After walking through several transaction scenarios that involves splits, one has to appreciate the usefulness and necessity of a split structure for day-to-day transactions. &lt;br /&gt;
&lt;br /&gt;
Though the current application gives the impression that it's incidental, actually in real life it might happen more frequent than we assume. Considering supermarket shopping experiences, a significant proportion, if not most, of our purchase activities belong to split transactions. It's very often we buy things which belong to different categories: groceries, garments, office supplies (educational or small business for tax purpose), medicine for health (tax, flex-spending), etc. It's less often but still not uncommon that we get cash back from the same transaction, or we foot the bill with two or more payment methods (credit cards, bank cards, cash, etc.). &lt;br /&gt;
&lt;br /&gt;
Assume spit is a generic form of transaction, we might as well consider the &amp;quot;normal&amp;quot; transaction, single-source-single-category, a special case - a transaction comprises of only one From source and one To destination. I wonder if this idea would have an impact on the model design, or if the current model is built upon this. &lt;br /&gt;
&lt;br /&gt;
But definitely we can incorporate this idea into the UI design. Which I might as well discuss it in the [[Report for View (Testing)]] section.&lt;br /&gt;
&lt;br /&gt;
=== Rules for choosing From and To sources ===&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
=== Testing Strategy ===&lt;br /&gt;
*Conformance — Does the value conform to an expected format?&lt;br /&gt;
*Ordering — Is the set of values ordered or unordered as appropriate?&lt;br /&gt;
*Range — Is the value within reasonable minimum and maximum values?&lt;br /&gt;
*Reference — Does the code reference anything external that isn't under direct control of the code itself?&lt;br /&gt;
*Existence — Does the value exist (e.g., is non-null, non-zero, present in a set, etc.)?&lt;br /&gt;
*Cardinality — Are there exactly enough values?&lt;br /&gt;
*Time (absolute and relative) — Is everything happening in order? At the right time? In time?&lt;br /&gt;
&lt;br /&gt;
=== Pre-existing Tests ===&lt;br /&gt;
&lt;br /&gt;
=== Planned Tests ===&lt;/div&gt;</summary>
		<author><name>Kanke</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=Written_Report_on_Model_(Testing)&amp;diff=26428</id>
		<title>Written Report on Model (Testing)</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Written_Report_on_Model_(Testing)&amp;diff=26428"/>
		<updated>2009-10-20T15:04:56Z</updated>

		<summary type="html">&lt;p&gt;Kanke: /* Model Analysis */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Model Analysis and Testing'''&lt;br /&gt;
&lt;br /&gt;
== Model Analysis ==&lt;br /&gt;
&lt;br /&gt;
# Ubiquitousness of Split&lt;br /&gt;
&lt;br /&gt;
After walking through several transaction scenarios that involves splits, one has to appreciate the usefulness and necessity of a split structure for day-to-day transactions. &lt;br /&gt;
&lt;br /&gt;
Though the current application gives the impression that it's incidental, actually in real life it might happen more frequent than we assume. Considering supermarket shopping experiences, a significant proportion, if not most, of our purchase activities belong to split transactions. It's very often we buy things which belong to different categories: groceries, garments, office supplies (educational or small business for tax purpose), medicine for health (tax, flex-spending), etc. It's less often but still not uncommon that we get cash back from the same transaction, or we foot the bill with two or more payment methods (credit cards, bank cards, cash, etc.). &lt;br /&gt;
&lt;br /&gt;
Assume spit is a generic form of transaction, we might as well consider the &amp;quot;normal&amp;quot; transaction, single-source-single-category, a special case - a transaction comprises of only one From source and one To destination. I wonder if this idea would have an impact on the model design, or if the current model is built upon this. &lt;br /&gt;
&lt;br /&gt;
But definitely we can incorporate this idea into the UI design. Which I might as well discuss it in the [[Report for View (Testing)]] section.&lt;br /&gt;
&lt;br /&gt;
# Rules for choosing From and To sources&lt;br /&gt;
&lt;br /&gt;
== Testing ==&lt;br /&gt;
=== Testing Strategy ===&lt;br /&gt;
=== Pre-existing Testing ===&lt;br /&gt;
=== Planned Testing ===&lt;/div&gt;</summary>
		<author><name>Kanke</name></author>
	</entry>
</feed>