Jump to content
 







Main menu
   


Navigation  



Main page
Contents
Current events
Random article
About Wikipedia
Contact us
Donate
 




Contribute  



Help
Learn to edit
Community portal
Recent changes
Upload file
 








Search  

































Create account

Log in
 









Create account
 Log in
 




Pages for logged out editors learn more  



Contributions
Talk
 



















Contents

   



(Top)
 


1 Fine scale feedback  



1.1  Pair programming  





1.2  Planning game  



1.2.1  Release planning  



1.2.1.1  Exploration phase  





1.2.1.2  Commitment phase  



1.2.1.2.1  Sort by value  





1.2.1.2.2  Sort by risk  







1.2.1.3  Steering phase  







1.2.2  Iteration Planning  



1.2.2.1  Exploration phase  





1.2.2.2  Commitment phase  





1.2.2.3  Steering phase  









1.3  Test driven development  





1.4  Whole team  







2 Continuous process  



2.1  Continuous integration  





2.2  Design improvement  





2.3  Small releases  







3 Shared understanding  



3.1  Coding standard  





3.2  Collective code ownership  





3.3  Simple design  





3.4  System metaphor  







4 Programmer welfare  



4.1  Sustainable pace  







5 See also  





6 References  





7 External links  














Extreme programming practices






Magyar

 

Edit links
 









Article
Talk
 

















Read
Edit
View history
 








Tools
   


Actions  



Read
Edit
View history
 




General  



What links here
Related changes
Upload file
Special pages
Permanent link
Page information
Cite this page
Get shortened URL
Download QR code
Wikidata item
 




Print/export  



Download as PDF
Printable version
 
















Appearance
   

 






From Wikipedia, the free encyclopedia
 


Extreme programming (XP) is an agile software development methodology used to implement software systems. This article details the practices used in this methodology. Extreme programming has 12 practices, grouped into four areas, derived from the best practicesofsoftware engineering.[1]

Fine scale feedback[edit]

Pair programming[edit]

Pair programming is a way of programming where code is produced by two people programming together on one task. One programmer has control over the workstation and is thinking mostly about the coding in detail. The other programmer is more focused on the big picture, and is continually reviewing the code that is being produced by the first programmer. Programmers trade roles after minute to hour periods.

The pairs are not fixed; programmers switch partners frequently, so that everyone knows what everyone is doing, and everybody remains familiar with the whole system, even the parts outside their skill set. This way, pair programming also can enhance team-wide communication. (This also goes hand-in-hand with the concept of Collective Ownership).

Planning game[edit]

The main planning process within extreme programming is called the Planning Game. The game is a meeting that occurs once per iteration, typically once a week. The planning process is divided into two parts:

The purpose of the Planning Game is to guide the product into delivery. Instead of predicting the exact dates of when deliverables will be needed and produced, which is difficult to do, it aims to "steer the project" into delivery using a straightforward approach.[2] The Planning Game approach is used in development frameworks beyond just software systems. For example, it is used by teams in the context of business agility.[3]

Release planning[edit]

Exploration phase[edit]

This is an iterative process of gathering requirements and estimating the work impact of each of those requirements.

When business cannot come up with any more requirements, one proceeds to the commitment phase.

Commitment phase[edit]

This phase involves the determination of costs, benefits, and schedule impact. It has four components:

Sort by value[edit]

The business side sorts the user stories by business value. They will arrange them into three piles:

Sort by risk[edit]

The developers sort the user stories by risk. They also categorize into three piles: low, medium and high risk user stories. The following is an example of an approach to this:

All indexes for a user story are added, assigning the user stories a risk index of low (0–1), medium (2–4), or high (5–6).

Steering phase[edit]

Within the steering phase the programmers and business people can "steer" the process. That is to say, they can make changes. Individual user stories, or relative priorities of different user stories, might change; estimates might prove wrong. This is the chance to adjust the plan accordingly.

Iteration Planning[edit]

Considering team velocity storypoints to be planned. Iteration duration can be 1 to 3 weeks.

Exploration phase[edit]

The exploration phase of the iteration planning is about creating tasks and estimating their implementation time.

Commitment phase[edit]

Within the commitment phase of the iteration planning programmers are assigned tasks that reference the different user stories.

Steering phase[edit]

The implementation of the tasks is done during the steering phase of the iteration.

Test driven development[edit]

Unit tests are automated tests that test the functionality of pieces of the code (e.g. classes, methods). Within XP, unit tests are written before the eventual code is coded. This approach is intended to stimulate the programmer to think about conditions in which his or her code could fail. XP says that the programmer is finished with a certain piece of code when he or she cannot come up with any further conditions under which the code may fail.

Test driven development proceeds by quickly cycling through the following steps, with each step taking minutes at most, preferably much less. Since each user story will usually require one to two days of work, a very large number of such cycles will be necessary per story.

For a more intense version of the above process, see Uncle Bob's Three Rules of TDD.[4]

Whole team[edit]

Within XP, the "customer" is not the one who pays the bill, but the one who really uses the system. XP says that the customer should be on hand at all times and available for questions. For instance, the team developing a financial administration system should include a financial administrator.

Continuous process[edit]

Continuous integration[edit]

The development team should always be working on the latest version of the software. Since different team members may have versions saved locally with various changes and improvements, they should try to upload their current version to the code repository every few hours, or when a significant break presents itself. Continuous integration will avoid delays later on in the project cycle, caused by integration problems.

Design improvement[edit]

Because XP doctrine advocates programming only what is needed today, and implementing it as simply as possible, at times this may result in a system that is stuck. One of the symptoms of this is the need for dual (or multiple) maintenance: functional changes start requiring changes to multiple copies of the same (or similar) code. Another symptom is that changes in one part of the code affect many other parts. XP doctrine says that when this occurs, the system is telling you to refactor your code by changing the architecture, making it simpler and more generic.

Small releases[edit]

The delivery of the software is done via frequent releases of live functionality creating concrete value. The small releases help the customer to gain confidence in the progress of the project. This helps maintain the concept of the whole team as the customer can now come up with his suggestions on the project based on real experience.

Shared understanding[edit]

Coding standard[edit]

Coding standard is an agreed upon set of rules that the entire development team agree to adhere to throughout the project. The standard specifies a consistent style and format for source code, within the chosen programming language, as well as various programming constructs and patterns that should be avoided in order to reduce the probability of defects.[5] The coding standard may be a standard conventions specified by the language vendor (e.g. The Code Conventions for the Java Programming Language, recommended by Sun), or custom defined by the development team.

Extreme Programming backers advocate code that is self-documenting to the furthest degree possible. This reduces the need for code comments, which can get out of sync with the code itself.[6]

Collective code ownership[edit]

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."[7] 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 may accelerate development because a developer who spots an error can fix it immediately, which can reduce bugs overall. However, programmers may also introduce bugs when changing code that they do not understand well. Sufficiently well-defined unit tests should mitigate this problem: if unforeseen dependencies create errors, then when unit tests are run, they will show failures.

Collective code ownership may lead to better member backup, greater distribution of knowledge and learning, shared responsibility of the code, greater code quality, and reduced rework. But it may as well lead to increased member conflict, increase of bugs, changes of developers mental flow and breaks of their reasoning, increased development time, or less understanding of the code.[8]

Simple design[edit]

Programmers should take a "simple is best" approach to software design. Whenever a new piece of code is written, the author should ask themselves 'is there a simpler way to introduce the same functionality?'. If the answer is yes, the simpler course should be chosen. Refactoring should also be used to make complex code simpler.

System metaphor[edit]

The system metaphor is a story that everyone - customers, programmers, and managers - can tell about how the system works. It's a naming concept for classes and methods that should make it easy for a team member to guess the functionality of a particular class/method, from its name only. For example a library system may create loan_records(class) for borrowers(class), and if the item were to become overdue it may perform a make_overdue operation on a catalogue(class). For each class or operation the functionality is obvious to the entire team.

Programmer welfare[edit]

Sustainable pace[edit]

The concept is that programmers or software developers should not work more than 40 hour weeks, and if there is overtime one week, that the next week should not include more overtime. Since the development cycles are short cycles of continuous integration, and full development (release) cycles are more frequent, the projects in XP do not follow the typical crunch time that other projects require (requiring overtime).

Also, included in this concept is that people perform best and most creatively if they are well rested.

A key enabler to achieve sustainable pace is frequent code-merge and always executable & test covered high quality code. The constant refactoring way of working enforces team members with fresh and alert minds. The intense collaborative way of working within the team drives a need to recharge over weekends.

Well-tested, continuously integrated, frequently deployed code and environments also minimize the frequency of unexpected production problems and outages, and the associated after-hours nights and weekends work that is required.

See also[edit]

References[edit]

  1. ^ Beck, K. Extreme Programming Explained: Embrace Change 2nd. ed. Addison-Wesley, 2000 pp. 54
  • ^ Melnik, Grigori; Maurer, Frank (2004). "Introducing Agile Methods: Three Years of Experience". Proceedings. 30th Euromicro Conference, 2004. Proceedings of the 30th Euromicro Conference. IEEE. pp. 334–341. CiteSeerX 10.1.1.296.4732. doi:10.1109/EURMIC.2004.1333388. ISBN 0-7695-2199-1.
  • ^ Leybourn, E. (2013). Directing the Agile Organisation: A Lean Approach to Business Management. London: IT Governance Publishing: 146–150.
  • ^ Martin, Robert. "Three Rules of TDD".
  • ^ Kolawa, Adam; Huizinga, Dorota (2007). Automated Defect Prevention: Best Practices in Software Management. Wiley-IEEE Computer Society Press. p. 75. ISBN 978-0-470-04212-0.
  • ^ "XP-eXtreme Programming". Archived from the original (PPT) on 2021-12-17. Retrieved 2015-01-31.
  • ^ Sedano, Todd; Ralph, Paul; Péraire, Cécile (2016). "Practice and Perception of Team Code Ownership". Proceedings of the 20th International Conference on Evaluation and Assessment in Software Engineering. ACM. pp. 1–6. doi:10.1145/2915970.2916002. ISBN 9781450336918. S2CID 10016345.
  • ^ Ribeiro, Danilo & Silva, Fabio & Valença, Diana & Freitas, Elyda & França, César. (2016). Advantages and Disadvantages of using Shared code from the Developers Perspective: A qualitative study.
  • External links[edit]


    Retrieved from "https://en.wikipedia.org/w/index.php?title=Extreme_programming_practices&oldid=1215301041"

    Categories: 
    Software development process
    Extreme programming
    Hidden categories: 
    Wikipedia articles needing clarification from June 2023
    All Wikipedia articles needing clarification
    Articles needing additional references from December 2008
    All articles needing additional references
     



    This page was last edited on 24 March 2024, at 08:24 (UTC).

    Text is available under the Creative Commons Attribution-ShareAlike License 4.0; additional terms may apply. By using this site, you agree to the Terms of Use and Privacy Policy. Wikipedia® is a registered trademark of the Wikimedia Foundation, Inc., a non-profit organization.



    Privacy policy

    About Wikipedia

    Disclaimers

    Contact Wikipedia

    Code of Conduct

    Developers

    Statistics

    Cookie statement

    Mobile view



    Wikimedia Foundation
    Powered by MediaWiki