Extreme programming practices: Difference between revisions

Content deleted Content added
Paulralph (talk | contribs)
Collective code ownership: Updated based on new research in this area. Attempted to improve wording while I was at it.
Line 146:
 
=== Collective code ownership ===
Collective code ownership (also known as "team code ownership" and "shared code") means that everyone is responsible for all the code; therefore, everybody is allowed to change any part of the code. Collective code ownership is not only an organizational policy but also a feeling. "Developers feel team code ownership more when they understand the system context, have contributed to the code in question, perceive code quality as high, believe the product will satisfy the user needs, and perceive high team cohesion."<ref>{{cite web|last1=Sedano|first1=Todd|last2=Ralph|first2=Paul|last3=Péraire|first3=Cécile|title=Practice and Perception of Team Code Ownership|url=http://dl.acm.org/citation.cfm?doid=2915970.2916002|publisher=ACM}}</ref> Pair programming, especially overlapping pair rotation, contributes to this practice: by working in different pairs, programmers better understand the system context and contribute to more areas of the code base.
Collective code ownership means that everyone is responsible for all the code; this, in turn, means that everybody is allowed to change any part of the code. Pair programming contributes to this practice: by working in different pairs, all the programmers get to see all the parts of the code. A major advantage claimed for collective ownership is that it speeds up the development process, because if an error occurs in the code any programmer may fix it.
 
ByCollective givingcode everyownership programmermay theaccelerate rightdevelopment tobecause changea thedeveloper code,who therespots isan riskerror ofcan errorsfix beingit introducedimmediately, bywhich can reduce bugs overall. However, programmers whomay thinkalso theyintroduce knowbugs whatwhen theychanging arecode doing,that butthey do not foreseeunderstand certain dependencieswell. Sufficiently well -defined unit tests addressshould mitigate this problem: if unforeseen dependencies create errors, then when unit tests are run, they will show failures.
 
=== Simple design ===