| Software development process | |
| Activities and steps | |
|---|---|
| Requirements · Architecture Design · Implementation Testing · Deployment |
|
| Models | |
| Agile · Cleanroom · Iterative · RAD RUP · Spiral · Waterfall · XP · Scrum |
|
| Supporting disciplines | |
| Configuration management Documentation Quality assurance (SQA) Project management User experience design |
|
Extreme Programming (or XP) is a software engineering methodology (and a form of agile software development)[1][2][3] prescribing a set of daily stakeholder practices that embody and encourage particular XP values (below). A software development process is a structure imposed on the development of a software product Requirements analysis in Systems engineering and Software engineering, encompasses those tasks that go into determining the needs or conditions to meet for a new or The software architecture of a program or computing system is the structure or structures of the system, which comprise software components the externally visible properties Software design is a process of problem-solving and planning for a Software solution Software testing is an Empirical investigation conducted to provide stakeholders with information about the quality of the product or service under test, with respect to the Software deployment is all of the activities that make a Software system available for use Agile software development refers to a group of Software development methodologies that are based on similar principles The Cleanroom Software Engineering process is a Software development process intended to produce software with a certifiable level of Reliability. Iterative and Incremental development is a cyclic Software development process developed in response to the weaknesses of the Waterfall model. Rapid application development ( RAD) is a Software development process, which involves iterative development and the construction of Prototypes The Rational Unified Process ( RUP) is an Iterative Software development process framework created by the Rational Software Corporation a division The spiral model is a Software development process combining elements of both Design and Prototyping -in-stages in an effort to combine advantages of The waterfall model is a sequential Software development process (a process for the creation of software in which development is seen as flowing steadily downwards Scrum is an iterative incremental process of software development commonly used with Agile software development. In Software engineering, software configuration Software documentation or source code documentation is written text that accompanies Computer Software. Software quality assurance ( SQA) consists of a means of monitoring the Software engineering processes and methods used to ensure quality Project Management is the discipline of planning organizing and managing resources to bring about the successful completion of specific project goals and objectives User experience design is a subset of the field of Experience design which pertains to the creation of the architecture and interaction models which impact a user's perception Software engineering is the application of a systematic disciplined quantifiable approach to the development operation and maintenance of Software. Agile software development refers to a group of Software development methodologies that are based on similar principles Extreme Programming (or XP) is a Software engineering methodology (and a form of Agile software development) Proponents of Extreme Programming and agile Extreme Programming (or XP) is a Software engineering methodology (and a form of Agile software development) Proponents of Extreme Programming and agile Proponents believe that exercising these practices—traditional software engineering practices taken to so-called "extreme" levels—leads to a development process that is more responsive to customer needs ("agile") than traditional methods, while creating software of better quality. [2][3][4]
Proponents of Extreme programming and agile methodologies in general regard ongoing changes to requirements as a natural, inescapable and desirable aspect of software development projects; they believe that adaptability to changing requirements at any point during the project life is a more realistic and better approach than attempting to define all requirements at the beginning of a project and then expending effort to control changes to the requirements. In Engineering, a requirement is a singular documented need of what a particular product or service should be or do
However, XP has been noted for several potential drawbacks,[5] as compared to more document-based methodologies, including problems with unstable requirements, no documented compromises of user conflicts, and lack of an overall design spec or document (see below: Controversial aspects).
Contents |
Extreme Programming was created by Kent Beck during his work on the Chrysler Comprehensive Compensation System (C3) payroll project. Kent Beck is the creator of Extreme Programming Beck has pioneered software design patterns, the rediscovery of Test-driven development, as well as The Chrysler Comprehensive Compensation System (commonly referred to as 'C3' was a project in the Chrysler Corporation to replace several Payroll applications with [5] Beck became the C3 project leader in March 1996 and began to refine the development method used in the project and wrote a book on the method (in October 1999, Extreme Programming Explained was published). The word leadership can refer to Those entities that perform one or more acts of leading [5] Chrysler canceled the C3 project in February 2000, and although some see that initial failure as a problem with XP, the method had caught on in the software engineering field. Software engineering is the application of a systematic disciplined quantifiable approach to the development operation and maintenance of Software. As of 2007, a number of software-development projects continue to use Extreme Programming as their method.
Although Extreme Programming itself is relatively new, many of its practices have been around for some time; the methodology, after all, takes "best practices" to extreme levels. For example, the "practice of test-first development, planning and writing tests before each micro-increment" was used as early as NASA's Project Mercury, in the early 1960s (Larman 2003). Refactoring, modularity, bottom-up and incremental design were described by Leo Brodie in his book published in 1984[6]. Modular programming is a software design technique that increases the extent to which software is composed from separate parts called modules Iterative and Incremental development is a cyclic Software development process developed in response to the weaknesses of the Waterfall model.
Most software development in the 1990s was shaped by two major influences: internally, object-oriented programming replaced procedural programming as the programming paradigm favored by some in the industry; externally, the rise of the Internet and the dot-com boom emphasized speed-to-market and company-growth as competitive business factors. Object-oriented programming (OOP is a Programming paradigm that uses " objects " and their interactions to design applications and computer programs Procedural programming can sometimes be used as a synonym for Imperative programming (specifying the steps the program must take to reach the desired state but can also The " dot-com bubble " (or sometimes the " IT bubble " was a speculative bubble covering roughly 1995–2001 (with a climax on March 10 Rapidly-changing requirements demanded shorter product life-cycles, and were often incompatible with traditional methods of software development. Product Life Cycle Management is the succession of strategies used by management as a product goes through its product life cycle
The Chrysler Comprehensive Compensation project was started in order to determine the best way to use object technologies, using the payroll systems at Chrysler as the object of research, with Smalltalk as the language and GemStone as the data access layer. Smalltalk is an object-oriented, dynamically typed, reflective programming language. GemStone is a proprietary Application framework that was first available for Smalltalk as an Object database. A data access layer (DAL is a layer of a Computer program which provides simplified Access to Data stored in Persistent storage of They brought in Kent Beck,[5] a prominent Smalltalk practitioner, to do performance tuning on the system, but his role expanded as he noted several issues they were having with their development process. Kent Beck is the creator of Extreme Programming Beck has pioneered software design patterns, the rediscovery of Test-driven development, as well as Performance tuning is the improvement of System Performance. This is typically a computer application but the same methods can be applied to economic markets bureaucracies He took this opportunity to propose and implement some changes in their practices based on his work with his frequent collaborator, Ward Cunningham.
Beck invited Ron Jeffries to the project to help develop and refine these methods. Ron Jeffries is one of the 3 founders of the Extreme Programming (XP Software development methodology circa Jeffries thereafter acted as a coach to instill the practices as habits in the C3 team.
Information about the principles and practices behind XP was disseminated to the wider world through discussions on the original Wiki, Cunningham's WikiWikiWeb. A wiki is a page or collection of Web pages designed to enable anyone who accesses it to contribute or modify content using a simplified Markup language. WikiWikiWeb (also known as WardsWiki) was the first Wiki application ever written Various contributors discussed and expanded upon the ideas, and some spin-off methodologies resulted (see agile software development). Agile software development refers to a group of Software development methodologies that are based on similar principles Also, XP concepts have been explained, for several years, using a hyper-text system map on the XP website at "www. extremeprogramming. org" circa 1999 (website XPorg).
Beck edited a series of books on XP, beginning with his own Extreme Programming Explained (1999, ISBN 0-201-61641-6), spreading his ideas to a much larger, yet very receptive, audience. Authors in the series went through various aspects attending XP and its practices, even a book critical of the practices.
XP created quite a buzz in the late 1990s and early 2000s, seeing adoption in a number of environments radically different from its origins.
The high discipline required by the original practices often went by the wayside, causing certain practices to be deprecated or left undone on individual sites. Agile development practices have not stood still, and XP is still evolving, assimilating more lessons from experiences in the field. In the second edition of Extreme Programming Explained, Beck added more values and practices and differentiated between primary and corollary practices.
Extreme Programming Explained describes Extreme Programming as being:
The main aim of XP is to reduce the cost of change. In traditional system development methods (such as SSADM) the requirements for the system are determined at the beginning of the development project and often fixed from that point on. Structured Systems Analysis and Design Method ( SSADM) is a systems approach to the analysis and design of information systems This means that the cost of changing the requirements at a later stage (a common feature of software engineering projects) will be high.
XP sets out to reduce the cost of change by introducing basic values, principles and practices. By applying XP, a system development project should be more flexible with respect to changes.
Extreme Programming initially recognized four values in 1999. A new value was added in the second edition of Extreme Programming Explained. The five values are:
Building software systems requires communicating system requirements to the developers of the system. Communication is the process of conveying information from a sender to a receiver with the use of a medium in which the communicated information is understood the same way Simplicity is the property condition or quality of being simple or un-combined Feedback is a circular causal Process whereby some proportion of a system's output is returned (fed back to the Input. Gallantry redirects here Or see Gallant for other meanings Courage, also known as bravery, will, intrepidity Respect is esteem for or a sense of the worth or excellence of a person a personal quality or ability or something considered as a manifestation of a personal quality or ability In formal software development methodologies, this task is accomplished through documentation. Extreme Programming techniques can be viewed as methods for rapidly building and disseminating institutional knowledge among members of a development team. The goal is to give all developers a shared view of the system which matches the view held by the users of the system. To this end, Extreme Programming favors simple designs, common metaphors, collaboration of users and programmers, frequent verbal communication, and feedback.
Extreme Programming encourages starting with the simplest solution. Extra functionality can then be added later. The difference between this approach and more conventional system development methods is the focus on designing and coding for the needs of today instead of those of tomorrow, next week, or next month. Proponents of XP acknowledge the disadvantage that this can sometimes entail more effort tomorrow to change the system; their claim is that this is more than compensated for by the advantage of not investing in possible future requirements that might change before they become relevant. Coding and designing for uncertain future requirements implies the risk of spending resources on something that might not be needed. Related to the "communication" value, simplicity in design and coding should improve the quality of communication. A simple design with very simple code could be easily understood by most programmers in the team.
Within Extreme Programming, feedback relates to different dimensions of the system development:
Feedback is closely related to communication and simplicity. Flaws in the system are easily communicated by writing a unit test that proves a certain piece of code will break. The direct feedback from the system tells programmers to recode this part. A customer is able to test the system periodically according to the functional requirements, known as user stories. A user story is a software system Requirement formulated as one ortwo sentences in the everyday language of the user [5] To quote Kent Beck, "Optimism is an occupational hazard of programming, feedback is the treatment. Kent Beck is the creator of Extreme Programming Beck has pioneered software design patterns, the rediscovery of Test-driven development, as well as "
Several practices embody courage. One is the commandment to always design and code for today and not for tomorrow. This is an effort to avoid getting bogged down in design and requiring a lot of effort to implement anything else. Courage enables developers to feel comfortable with refactoring their code when necessary. [5] This means reviewing the existing system and modifying it so that future changes can be implemented more easily. Another example of courage is knowing when to throw code away: courage to remove source code that is obsolete, no matter how much effort was used to create that source code. Also, courage means persistence: A programmer might be stuck on a complex problem for an entire day, then solve the problem quickly the next day, if only they are persistent.
The respect value manifests in several ways. In Extreme Programming, team members respect each other because programmers should never commit changes that break compilation, that make existing unit-tests fail, or that otherwise delay the work of their peers. Members respect their work by always striving for high quality and seeking for the best design for the solution at hand through refactoring.
Adopting four earlier values led to respect gained from others in team. Nobody on the team should feel unappreciated or ignored. This ensures high level of motivation and encourages loyalty toward the team, and the goal of the project. This value is very dependent upon the other values, and is very much oriented toward people in a team.
The principles that form the basis of XP are based on the values just described and are intended to foster decisions in a system development project. The principles are intended to be more concrete than the values and more easily translated to guidance in a practical situation.
Extreme Programming sees feedback as most useful if it is done rapidly and expresses that the time between an action and its feedback is critical to learning and making changes. Unlike traditional system development methods, contact with the customer occurs in more frequent iterations. The customer has clear insight into the system that is being developed. He or she can give feedback and steer the development as needed.
Unit tests also contribute to the rapid feedback principle. When writing code, the unit test provides direct feedback as to how the system reacts to the changes one has made. If, for instance, the changes affect a part of the system that is not in the scope of the programmer who made them, that programmer will not notice the flaw. There is a large chance that this bug will appear when the system is in production.
Assuming simplicity is about treating every problem as if its solution were "extremely simple". Traditional system development methods say to plan for the future and to code for reusability. Extreme programming rejects these ideas.
The advocates of Extreme Programming say that making big changes all at once does not work. Extreme Programming applies incremental changes: for example, a system might have small releases every three weeks. By making many little steps the customer has more control over the development process and the system that is being developed.
The principle of embracing change is about not working against changes but embracing them. For instance, if at one of the iterative meetings it appears that the customer's requirements have changed dramatically, programmers are to embrace this and plan the new requirements for the next iteration.
XP describes four basic activities that are performed within the software development process.
The advocates of XP argue that the only truly important product of the system development process is code (a concept to which they give a somewhat broader definition than might be given by others). Without code you have nothing.
Coding can be drawing diagrams that will generate code, scripting a web-based system or coding a program that needs to be compiled.
Coding can also be used to figure out the most suitable solution. For instance, XP would advocate that faced with several alternatives for a programming problem, one should simply code all solutions and determine with automated tests (discussed in the next section) which solution is most suitable.
Coding can also help to communicate thoughts about programming problems. A programmer dealing with a complex programming problem and finding it hard to explain the solution to fellow programmers might code it and use the code to demonstrate what he or she means. Code, say the exponents of this position, is always clear and concise and cannot be interpreted in more than one way. Other programmers can give feedback on this code by also coding their thoughts.
One cannot be certain of anything unless one has tested it. Testing is not a perceived, primary need for the customer. Software testing is an Empirical investigation conducted to provide stakeholders with information about the quality of the product or service under test, with respect to the A lot of software is shipped without proper testing and still works. In software development, XP says this means that one cannot be certain that a function works unless one tests it. This raises the question of defining what one can be uncertain about.
A "testathon" is an event when programmers meet to do collaborative test writing, a kind of brainstorming relative to software testing.
Programmers do not necessarily know anything about the business side of the system under development. The function of the system is determined by the business side. For the programmers to find what the functionality of the system should be, they have to listen to business.
Programmers have to listen "in the large": they have to listen to what the customer needs. Also, they have to try to understand the business problem, and to give the customer feedback about his or her problem, to improve the customer's own understanding of his or her problem.
Communication between the customer and programmer is further addressed in The Planning Game. Extreme Programming (XP is a popular Agile software development methodology used to implement Software projects
From the point of view of simplicity, one could say that system development doesn't need more than coding, testing and listening. If those activities are performed well, the result should always be a system that works. In practice, this will not work. One can come a long way without designing but at a given time one will get stuck. Design is used both as a Noun and a Verb. The term is often tied to the various Applied arts and Engineering (See design disciplines The system becomes too complex and the dependencies within the system cease to be clear.
One can avoid this by creating a design structure that organizes the logic in the system. Good design will avoid lots of dependencies within a system; this means that changing one part of the system will not affect other parts of the system.
Extreme Programming has 12 practices, grouped into four areas, derived from the best practices of software engineering:
Fine scale feedback
Continuous process
Shared understanding
Programmer welfare
The practices in XP have been heavily debated[5] with strong opinions for or against using XP. Best Practice is an idea that asserts that there is a technique, method process activity incentive or reward that is more effective at delivering a particular outcome than Software engineering is the application of a systematic disciplined quantifiable approach to the development operation and maintenance of Software. Pair programming is a Software development technique in which two programmers work together at one keyboard Extreme Programming (XP is a popular Agile software development methodology used to implement Software projects Test-Driven Development (TDD is a Software development technique consisting of short iterations where new Test cases covering the desired improvement or Extreme Programming (XP is a popular Agile software development methodology used to implement Software projects Continuous integration describes a set of Software engineering practices that speed up the delivery of software by decreasing integration times Extreme Programming (XP is a popular Agile software development methodology used to implement Software projects Extreme Programming (XP is a popular Agile software development methodology used to implement Software projects Extreme Programming (XP is a popular Agile software development methodology used to implement Software projects Extreme Programming (XP is a popular Agile software development methodology used to implement Software projects Extreme Programming (XP is a popular Agile software development methodology used to implement Software projects Extreme Programming (XP is a popular Agile software development methodology used to implement Software projects Some of the controversial aspects of XP include:
Unstable Requirements: Proponents of Extreme Programming claim that by having the on-site customer[5] request changes informally, the process becomes flexible, and saves the cost of formal overhead. Critics of XP claim this can lead to costly rework and project scope creep beyond what was previously agreed or funded. Scope creep (also called focus creep, requirement creep, feature creep, and sometimes kitchen sink syndrome) in Project management
User Conflicts: Change control boards are a sign that there are potential conflicts in project objectives and constraints between multiple users. XP's expedited methodology is somewhat dependent on programmers being able to assume a unified client viewpoint so the programmer can concentrate on coding rather than documentation of compromise objectives and constraints. This also applies when multiple programming organizations are involved, particularly organizations which compete for shares of projects.
Other Aspects: Other controversial aspects of Extreme Programming include:
Dependence upon all other aspects of XP: "XP is like a ring of poisonous snakes, daisy-chained together. All it takes is for one of them to wriggle loose, and you've got a very angry, poisonous snake heading your way. " [7]
Scalability: Historically, XP only works on teams of twelve or fewer people. One way to circumvent this limitation is to break up the project into smaller pieces and the team into smaller groups. It has been claimed that XP has been used successfully on teams of over a hundred developers. ThoughtWorks has claimed reasonable success on distributed XP projects with up to sixty people. ThoughtWorks is a global IT Consultancy which focuses on Agile software development.
Controversy in Book: In 2003, Matt Stephens and Doug Rosenberg published a book under Apress called Extreme Programming Refactored: The Case Against XP which questioned the value of the XP process and suggested ways in which it could be improved. This triggered a lengthy debate in articles, internet newsgroups, and web-site chat areas. The core argument of the book is that XP's practices are interdependent but that few practical organizations are willing/able to adopt all the practices; therefore the entire process fails. The book also makes other criticisms and it draws a likeness of XP's "collective ownership" model to socialism in a negative manner. Socialism refers to a broad set of economic theories of social organization advocating state or collective ownership and administration of the Means of production and distribution
XP Evolution: Certain aspects of XP have changed since the book Extreme Programming Refactored (2003) was published; in particular, XP now accommodates modifications to the practices as long as the required objectives are still met. XP also uses increasingly generic terms for processes. Some argue that these changes invalidate previous criticisms; others claim that this is simply watering the process down.
In 2004 Industrial Extreme Programming (IXP) [8] was introduced as an evolution of XP. It brings ability to work in big and distributed teams. It now has 23 practices and flexible changeable values. As it is a new member of Agile family, there is not enough data to prove its usability, however it claims to be an answer to XP's imperfections.
Hybrid/Unified Methodologies: Other authors have tried to reconcile XP with the older methods in order to form a unified methodology. Some of these XP sought to replace, such as the waterfall method; example: Project Lifecycles: Waterfall, Rapid Application Development, and All That. The waterfall model is a sequential Software development process (a process for the creation of software in which development is seen as flowing steadily downwards
JPMorgan Chase & Co. tried combining XP with the computer programming methodologies of Capability Maturity Model Integration (CMMI), and Six Sigma. JPMorgan Chase & Co ( is the largest Banking institution in the United States by deposits and market capitalization and is one of the oldest operating Capability Maturity Model Integration ( CMMI) is a Process improvement approach that provides organizations with the essential elements of effective processes Six Sigma is a Business management strategy originally developed by Motorola, that today enjoys wide-spread application in many sectors of industry They found that the three systems reinforced each other well, leading to better development, and did not mutually contradict, see Extreme Programming (XP) Six Sigma CMMI.
Controversial aspects notwithstanding, Extreme Programming remains a viable choice for some projects. Projects suited to Extreme Programming are those that:
Projects suited for more traditional methodologies are those that:
Project Managers must weigh project aspects against available methodologies to make an appropriate selection. A prototype is an original type form or instance of something serving as a typical example basis or standard for other things of the same category The term mission critical (or mission-critical) refers to any factor (equipment process procedure software etc A life-critical system or safety-critical system is a system whose failure or malfunction may result in Death or serious injury to people or In Computer science and Software engineering, formal methods are particular kind of Mathematically -based techniques for the specification, development Insurance, in Law and Economics, is a form of Risk management primarily used to hedge against the Risk of a contingent loss hiyaA project manager is a professional in the field of Project management. However, some XP concepts could be applied outside, such as using Pair Programming to expedite related technical changes to the documentation set of a large project.
ThoughtWorks' experiences with implementing XP in large distributed projects can be found at Using an Agile Software Process with Offshore Development
General
Pro-XP
Nuanced opinion or Anti-XP
Background reading