XP Final
XP Final
XP Final
ABSTRACT
Software reliability has been found to be an important part for measuring success and
longevity of software product. Though there hasn’t really been methods developed to truly can
be considered “accurate” at measuring reliability because all use assumptions and different types
of metrics, they still provide a good guideline as to the reliability of a software product. Because
in today’s development communities that demand for software has increased so dramatically it is
important that software products are reliable, with that said this high demand for software has
pushed many development teams to adopt agile programming practices to keep up with the high
demand. Though agile programming has been proven to be efficient it is important to provide
development teams that do not have the luxury of spending the desired time testing their systems
reliability, that they adopt practices that will ensure their system is more reliable.
Critics have noted several potential drawbacks, including problems with unstable
requirements, no documented compromises of user conflicts, and lack of an overall design spec
or document.
INTRODUCTION
OVERVIEW
A software development methodology refers to the framework that is used to structure, plan, and
control the process of developing an information system. A wide variety of such frameworks
have evolved over the years, each with its own recognized strengths and weaknesses. One system
development methodology is not necessarily suitable for use by all projects. Each of the available
methodologies is best suited to specific kinds of projects, based on various technical,
organizational, project and team considerations.
Multiple tools, models and methods, to assist in the software development process.
These frameworks are often bound to some kind of organization, which further develops,
supports the use, and promotes the methodology. The methodology is often documented in some
kind of formal documentation.
Every software development methodology has more or less its own approach to software
development. There is a set of more general approaches, which are developed into several
specific methodologies. These approaches are:
OVERVIEW
There are many specific agile development methods. Most promote development,
teamwork, collaboration, and process adaptability throughout the life-cycle of the project. One of
the early metrics showing Agile method is more productive than other methods is a Dr. Dobb's
Journal survey. Others claim that agile development methods are still too young to require
extensive academic proof of their success.
Agile methods break tasks into small increments with minimal planning, and do not
directly involve long-term planning. Iterations are short time frames ("timeboxes") that typically
last from one to four weeks. Each iteration involves a team working through a full software
development cycle including planning, requirements analysis, design, coding, unit testing, and
acceptance testing when a working product is demonstrated to stakeholders. This helps minimize
overall risk, and lets the project adapt to changes quickly. Stakeholders produce documentation
as required.
members. Team members normally take responsibility for tasks that deliver the functionality an
iteration requires. They decide individually how to meet an iteration's requirements.
Agile methods emphasize face-to-face communication over written documents when the
team is all in the same location. When a team works in different locations, they maintain daily
contact through videoconferencing, voice, e-mail, etc.
Most agile teams work in a single open office (called bullpen), which facilitates such
communication. Team size is typically small (5-9 people) to help make team communication and
team collaboration easier. Larger development efforts may be delivered by multiple teams
working toward a common goal or different parts of an effort. This may also require a
coordination of priorities across teams.
No matter what development disciplines are required, each agile team will contain a
customer representative. This person is appointed by stakeholders to act on their behalf and
makes a personal commitment to being available for developers to answer mid-iteration problem-
domain questions. At the end of each iteration, stakeholders and the customer representative
review progress and re-evaluate priorities with a view to optimizing the return on investment and
ensuring alignment with customer needs and company goals.
Agile emphasizes working software as the primary measure of progress. This, combined
with the preference for face-to-face communication, produces less written documentation than
other methods. The agile method encourages stakeholders to prioritize wants with other iteration
outcomes based exclusively on business value perceived at the beginning of the iteration.
Specific tools and techniques such as continuous integration, automated or xUnit test, pair
programming, test driven development, design patterns, domain-driven design, code refactoring
and other techniques are often used to improve quality and enhance project agility.
HISTORY
The modern definition of agile software development evolved in the mid-1990s as part of
a reaction against "heavyweight" methods, perceived to be typified by a heavily regulated,
regimented, micro-managed use of the waterfall model of development. The processes
originating from this use of the waterfall model were seen as bureaucratic, slow, demeaning, and
inconsistent with the ways that software developers actually perform effective work. A case can
be made that agile and iterative development methods mark a return to development practice
from early in the history of software development.Initially, agile methods were called
"lightweight methods."
In 2001, 17 prominent figures in the field of agile development (then called "light-weight
methods") came together at the Snowbird ski resort in Utah to discuss ways of creating software
in a lighter, faster, more people-centric way. They coined the terms "Agile Software
Development" and "agile methods", and they created the Agile Manifesto, widely regarded as the
canonical definition of agile development and accompanying agile principles. Later, some of
these people formed The Agile Alliance, a non-profit organization that promotes agile
development.
PRINCIPLES
Agile methods are a family of development processes, not a single approach to software
development. The Agile Manifesto states:
We are uncovering better ways of developing software by doing it and helping others do
it. Through this work we have come to value:
That is, while there is value in the items on the right, we value the items on the left more.
Simplicity
Self-organizing teams
The manifesto spawned a movement in the software industry known as agile software
development.
In 2005, Alistair Cockburn and Jim Highsmith gathered another group of people—
management experts, this time—and wrote an addendum, known as the PM Declaration of
Interdependence.
The functioning principles of Agile can be found in lean manufacturing and six sigma.
These concepts include error proofing, eliminating waste, creating flow, adding customer value,
and empowering workers. The concepts were first formally espoused in the 14 principles of the
Toyota Way, the two pillars of the Toyota Production System (Just-in-time and smart
automation), the 5S methodology, and Deming’s 14 points. These have been summarized in the
seven points of lean software development.
Agile methods are sometimes characterized as being at the opposite end of the spectrum
from "plan-driven" or "disciplined" methods. This distinction is misleading, as it implies that
agile methods are "unplanned" or "undisciplined". A more accurate distinction is that methods
exist on a continuum from "adaptive" to "predictive". Agile methods lie on the "adaptive" side of
this continuum.
Adaptive methods focus on adapting quickly to changing realities. When the needs of a
project change, an adaptive team changes as well. An adaptive team will have difficulty
describing exactly what will happen in the future. The further away a date is, the more vague an
adaptive method will be about what will happen on that date. An adaptive team can report
exactly what tasks are being done next week, but only which features are planned for next month.
When asked about a release six months from now, an adaptive team may only be able to report
the mission statement for the release, or a statement of expected value vs. cost.
Predictive methods, in contrast, focus on planning the future in detail. A predictive team
can report exactly what features and tasks are planned for the entire length of the development
process. Predictive teams have difficulty changing direction. The plan is typically optimized for
the original destination and changing direction can cause completed work to be thrown away and
done over differently. Predictive teams will often institute a change control board to ensure that
only the most valuable changes are considered.
Agile methods have much in common with the "Rapid Application Development"
techniques from the 1980/90s as espoused by James Martin and others.
Most agile methods share other iterative and incremental development methods' emphasis
on building releasable software in short time periods. Agile development differs from other
development models: in this model time periods are measured in weeks rather than months and
work is performed in a highly collaborative manner. Most agile methods also differ by treating
their time period as a timebox.
Agile development has little in common with the waterfall model. The Waterfall
methodology is the most structured of the methods, stepping through requirements, analysis,
design, coding, and testing in a strict, pre-planned, "all at once" sequence. Progress is often
measured in terms of deliverable artifacts: requirement specifications, design documents, test
plans, code reviews and the like.
A common criticism of the waterfall model is its inflexible division of a project into
separate stages, where commitments are made early on, making it difficult to react to changes in
requirements as the project executes. This means that the waterfall model is likely to be
unsuitable if requirements are not well understood/defined or change in the course of the project.
Agile methods, in contrast, produce completely developed and tested features (but a very
small subset of the whole) every few weeks. The emphasis is on obtaining the smallest workable
piece of functionality to deliver business value early and continually improving it and/or adding
further functionality throughout the life of the project. If a project being delivered under
Waterfall is cancelled at any point up to the end, there is often nothing to show for it beyond a
huge resources bill. With Agile, being cancelled at any point will still leave the customer with
some worthwhile code that has likely already been put into live operation.
Adaptations of Scrum show how agile methods are augmented to produce and
continuously improve a strategic plan.
Some agile teams use the waterfall model on a small scale, repeating the entire waterfall
cycle in every iteration.Other teams, most notably Extreme Programming teams, work on
activities simultaneously.
There is little if any consensus on what types of software projects are best suited for the
agile approach. Many large organizations have difficulty bridging the gap between the traditional
waterfall method and an agile one.
Some things that can negatively impact the success of an agile project are:
Large scale development efforts (>20 developers), though scaling strategies and evidence
to the contrary have been described.
Mission critical systems where failure is not an option at any cost (Software for surgical
procedures).
Several successful large scale agile projects have been documented.BT has had several
hundred developers situated in the UK, Ireland and India working collaboratively on projects and
using Agile methods. While questions undoubtedly still arise about the suitability of some Agile
methods to certain project types, it would appear that scale or geography, by themselves, are not
necessarily barriers to success.
Barry Boehm and Richard Turner suggest that risk analysis be used to choose between
adaptive ("agile") and predictive ("plan-driven") methods. The authors suggest that each side of
the continuum has its own home ground as follows:
Low criticality
Senior developers
High criticality
Junior developers
EXTREME PROGRAMMING
A traditional software development model proceeds incrementally from specification,
through design, coding, integration and testing, and package release. A single release cycle
typically lasts several months – perhaps even a year or more. While this approach allows a great
level of planning and thoughtful design, difficulties may arise when customers change their
minds or conditions change.
This session will highlight the twelve practices of XP, compare this approach to a
traditional model, and consider advantages and disadvantages of the approach.
The first Extreme Programming project was started March 6, 1996. Extreme
Programming is one of several popular Agile Processes. It has already been proven to be very
successful at many companies of all different sizes and industries worldwide.
Extreme Programming (XP) is about social change. It is about letting go of habits and patterns
that were adaptive in the past, but now get in the way of us doing our best work. It is about
giving up the defenses that protect us but interfere with our productivity. It may leave us feel-
ing exposed. It is about being open about what we are capable of doing and then doing it. And,
allowing and expecting others to do the same. It is about getting past our adolescent surety that “I
know better than everyone else and all I need is to be left alone to be the greatest.” It is about
finding our adult place in the larger world, finding our place in the community including the
realm of business/work. It is about the process of becoming more of our best selves and in the
process our best as developers. And, it is about writing great code that is really good for business.
Good relationships lead to good business. Productivity and confidence are related to our human
relationships in the workplace as well as to our coding or other work activities. You need both
technique and good relationships to be successful. XP addresses both. Prepare for success. Don’t
protect yourself from success by holding ack. Do your best and then deal with the consequences.
That xtreme. You leave yourself exposed. For some people that is incredily scary, for others it’s
daily life. That is why there are such polarized eactions to XP.
A set of complementary principles, intellectual techniques for translating the values into
practice, useful when there isn’t a practice handy for your particular problem.
A community that shares these values and many of the same practices.
Its short development cycles, resulting in early, concrete, and continuing feedback.
Its incremental planning n approach, which quickly comes up with an overall plan that is
expected to evolve through the life of the project.
Its reliance on the close collaboration of actively engaged individuals with ordinary
talent.
Its reliance on practices that work with both the short-term instincts
XP is a software development discipline that addresses risk at all levels of the development
process. XP is also productive, produces high quality software, and is a lot of fun to execute.
How does XP address the risks in the development process?
Schedule slips—XP calls for short release cycles, a few months at most, so the scope of
any slip is limited. Within a release, XP uses one-week iterations of customer-requested
features to create fine-grained feedback about progress. Within an iteration, XP plans
with short tasks, so the team can solve problems during the cycle.Finally, XP calls for
implementing the highest priority features first,so any features that slip past the release
will be of lower value.
Project canceled—XP asks the business-oriented part of the team to choose the smallest
release that makes the most business sense, so there is less to go wrong before deploying
and the value of the software is greatest.
System goes sour—XP creates and maintains a comprehensive suite of automated tests,
which are run and rerun after every change (many times a day) to ensure a quality
baseline. XP always keeps the system in deployable condition. Problems are not allowed
to accumulate.
Defect rate—XP tests from the perspective of both programmers writing tests function-
by-function and customers writing tests program-feature-by-program-feature.
Business changes—XP shortens the release cycle, so there is less change during the
development of a single release. During a release, the customer is welcome to substitute
new functionality for functionality not yet completed. The team doesn’t even notice if it
is working on newly discovered functionality or features defined years ago.
False feature rich—XP insists that only the highest priority tasks are addressed.
XP assumes that you see yourself as part of a team, ideally one withclear goals and a plan of
execution. XP assumes that you want to work together. XP assumes that change can be made
inexpensive using this method. XP assumes that you want to grow, to improve your skills, and
to improve your relationships. XP assumes you are willing to make changes to meet those goals.
shared goals.
XP is asking to get some of your human needs met through software development.
the customers as early as possible and implement changes as suggested. Every small success
deepens their respect for the unique contributions of each and every team member. With this
foundation Extreme Programmers are able to courageously respond to changing requirements
and technology.
It is highly encouraged to start with the simplest solution and work your way up from
there. The idea behind this is to code for today and not for tomorrow. There is a disadvantage and
an advantage to this; it is more difficult to change the system is something where to change in the
tomorrow. But at the same time, the costs of investments for future might be reduced or not
wasted if something where to change.
Feedback entails three different purposes. Feedback from the system in the form of unit
tests, or running integration tests, feedback from the customer in the form of acceptance tests
written by the users and customers, and feedback from the team when the customers come up
with new ideas, the team gives an estimate of time for it to be implemented.
Courage has several meanings in XP. One is to always design and code for today, not for
tomorrow, similar to what simplicity says. Another is to know when to throw away or discard
obsolete source code, no matter how much time was spent on it. And last but not least,
persistence.
Respect comes in many ways, but easily the most recognizable forms of them is in
respecting the other members of the team, for a programmer should never make sudden changes
that break the compilation, make the existing version fail, or otherwise delay the work of the
project.
However, XP didn’t simply start out of nowhere. Back in 1996, it was originally thought
by Kent Beck, Ward Cunningham, and Jon Refries during their payroll project on the C3
(Chrysler Comprehensive Compensation System). Kent became the leader of the project in the
aforementioned year and began to redefine the development methodology for the work. Kent
started to write a book on this methodology and then, in 1999, it was published under the name
of Extreme Programming Explained. Chrysler closed the failing project in 2000, but the
methodology was good enough to catch on in the software engineering field. As of this date,
many software-development projects still use XP as their main methodology.
In further detail, software development back in 1990 was influenced by two things:
object-oriented programming replaced procedural programming as the paradigm favored by the
industry, also, the rise of the Internet with the dot-com boom in business also made speed-to-
market a competitive business factor.
A path to improvement.
A style of development.
The main point of XP is to reduce the cost of change. This is attained by introducing
basic values, principles and practices. This way, a system should be more flexible to change.
.
The most surprising aspect of Extreme Programming is its simple rules. Extreme
Programming is a lot like a jig saw puzzle. There are many small pieces. Individually the pieces
make no sense, but when combined together a complete picture can be seen. The rules may seem
awkward and perhaps even naive at first, but are based on sound values and principles.
Our rules set expectations between team members but are not the end goal themselves.
You will come to realize these rules define an environment that promotes team collaboration and
empowerment, that is your goal. Once achieved productive teamwork will continue even as rules
are changed to fit your company's specific needs.
This flow chart shows how Extreme Programming's rules work together. Customers enjoy
being partners in the software process, developers actively contribute regardless of experience
level, and managers concentrate on communication and relationships. Unproductive activities
have been trimmed to reduce costs and frustration of everyone involved.
HISTORY
SSEC I.T. Page 22
EXTREME PROGRAMMING
Extreme Programming was created by Kent Beck during his work on the Chrysler
Comprehensive Compensation System (C3) payroll project.
Kent lives in Medford, Oregon where he makes goat cheese. 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).
Chrysler cancelled the C3 project in February 2000, after the company was acquired by Daimler-
Benz.
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.
SSEC I.T. Page 23
EXTREME PROGRAMMING
ORIGIN
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. Rapidly-
changing requirements demanded shorter product life-cycles, and were often incompatible with
traditional methods of software development.
The Chrysler Comprehensive Compensation System 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. They brought in
Kent Beck, 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. He
took this opportunity to propose and implement some changes in their practices based on his
work with his frequent collaborator, Ward Cunningham.
Beck describes the early conception of the methods: The first time I was asked to lead a
team, I asked them to do a little bit of the things I thought were sensible, like testing and reviews.
The second time there was a lot more on the line. I thought, "Damn the torpedoes, at least this
will make a good article," asked the team to crank up all the knobs to 10 on the things I thought
were essential and leave out everything else.
Beck invited Ron Jeffries to the project to help develop and refine these methods. Jeffries
thereafter acted as a coach to instill the practices as habits in the C3 team.
Ron Jeffries is one of the 3 founders of the Extreme Programming (XP) software
development methodology circa 1996, along with Kent Beck and Ward Cunningham. He was
from 1996, an XP coach on the Chrysler Comprehensive Compensation System project, which
was where XP was invented. He is an author of Extreme Programming Installed, the second book
published about XP. He has also written Extreme Programming Adventures in C#. He is one of
the 17 original signatories of the Agile Manifesto.
Information about the principles and practices behind XP was disseminated to the wider
world through discussions on the original Wiki, Cunningham's WikiWikiWeb. Various
contributors discussed and expanded upon the ideas, and some spin-off methodologies resulted
(see agile software development). Also, XP concepts have been explained, for several years,
using a hyper-text system map on the XP website at "http://www.extremeprogramming.org" circa
1999.
Beck edited a series of books on XP, beginning with his own Extreme Programming
Explained, 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.
CURRENT
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
some of these practices that were thought too rigid 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
CONCEPT
GOAL
In traditional system development methods (such as SSADM or the waterfall model) the
requirements for the system are determined at the beginning of the development project and often
fixed from that point on. This means that the cost of changing the requirements at a later stage (a
common feature of software engineering projects) will be high. Like other agile software
development methods, XP attempts to reduce the cost of change by having multiple short
development cycles, rather than one long one. In this doctrine changes are a natural, inescapable
and desirable aspect of software development projects, and should be planned for instead of
attempting to define a stable set of requirements.
Extreme Programming also introduces a number of basic values, principles and practices
on top of the agile programming framework.
ACTIVITIES
XP describes four basic activities that are performed within the software development
process.
CODING
The advocates of XP argue that the only truly important product of the system
development process is code - software instructions a computer can interpret. Without code,
there is no work product.
Those who practice XP say that the only important part is the code. After all, without
code you have nothing to work with. Coding has several ways to be used in reality, such as, but
not limited to, drawing diagrams that will generate code later on, scripting a web-based system,
or coding a program needed to be compiled. It can also be used to find the most suitable solution
for the problem at hand. For example, if you have multiple solutions, you can try coding them all
and then running a series of test to find out which one of them is the most optimized option.
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 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 proponents 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.
TESTING
One can not be certain that a function works unless one tests it. Bugs(A software bug is
the common term used to describe an error, flaw, mistake, failure, or fault in a computer program
or system that produces an incorrect or unexpected result, or causes it to behave in unintended
ways. Most bugs arise from mistakes and errors made by people in either a program's source
code or its design, and a few are caused by compilers producing incorrect code. A program that
contains a large number of bugs, and/or bugs that seriously interfere with its functionality, is said
to be buggy.) and design errors are pervasive problems in software development. Extreme
Programming's approach is that if a little testing can eliminate a few flaws, a lot of testing can
eliminate many more flaws.
means that new acceptance tests must be created for each iteration or the
development team will report zero progress.
You can never be sure of anything unless you’ve tested it. Testing is, in the long run, not
absolutely necessary; a lot of software ships without proper testing and it stills works to a certain
degree. In XP however, you can never assure a function will work unless you’ve tested it. If you
are uncertain that what you coded works, XP offers several Unit Tests, automated tests that test
the code. The programmer will try to make as many tests as possible to try and break the code. If
it stands over all, then it works. There are also Acceptance Tests, which test the code according
to what the user needs in order to see if it provides the expected results.
LISTENING
Programmers must listen to what the customers need the system to do, what "business
logic" is needed. They must understand these needs well enough to give the customer feedback
about the technical aspects of how the problem might be solved, or cannot be solved.
Understanding of his or her problem. Communication between the customer and programmer is
further addressed in The Planning Game.
The function and the way the software will work are determined by the business side.
That is, it is up to the client or the user to say what the functionality of the system should be, and
the developing team has to listen to this. This, the communication between both sides is a main
part of ‘The Planning Game’, one of the core practices of XP which will be explained further on.
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:
I. Exploration Phase: In this phase the customer will provide a short list of high-value
requirements for the system. These will be written down on user story cards.
II. Commitment Phase: Within the commitment phase business and developers will
commit themselves to the functionality that will be included and the date of the next
release.
III. Steering Phase: In the steering phase the plan can be adjusted, new requirements can
be added and/or existing requirements can be changed or removed.
Iteration Planning: This plans the activities and tasks of the developers. In this process
the customer is not involved. Iteration Planning also consists of three phases:
II. Commitment Phase: The tasks will be assigned to the programmers and the time
it takes to complete will be estimated.
III. Steering Phase: The tasks are performed and the end result is matched with the
original user story.
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.
DESIGNING
From the point of view of simplicity, of course 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. 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.
From a simple point of view, one could go as far as to say that a software development
doesn’t need anything besides coding, testing, and listening. But in practice, it tends to not be
enough. Thus, the idea behind this is to design a ‘sketch’ or design structure of how the system
will work and what it will entail. Good design allows for little dependencies, so that changing
one part of the system will not break something else.
VALUES
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:
COMMUNICATION
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.
SIMPLICITY
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. This is sometimes summed up as the "you ain't
gonna need it" approach. 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.
FEEDBACK
Feedback from the system: by writing unit tests, or running periodic integration
tests, the programmers have direct feedback from the state of the system after
implementing changes.
Feedback from the customer: The functional tests are written by the customer
and the testers. They will get concrete feedback about the current state of their
system. This review is planned once in every two or three weeks so the customer
can easily steer the development.
Feedback from the team: When customers come up with new requirements in
the planning game the team directly gives an estimation of the time that it will
take to implement.
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 or more sentences in the
everyday or business language of the user. User stories are used with Agile software
development methodologies for the specification of requirements (together with acceptance
tests). Each user story is limited, so it fits on a small paper note card—usually a 3×5 inches card
—to ensure that it does not grow too large. The user stories should be written by the customers
for a software project and are their main instrument to influence the development of the software.
User stories are a quick way of handling customer requirements without having to elaborate vast
formalized requirement documents and without performing overloaded administrative tasks
related to maintaining them. The intention with the user story is to be able to respond faster and
with less overhead to rapidly changing real-world requirements.
COURAGE
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. 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.
RESPECT
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.
Code refactoring is the process of changing a computer program's source code without
modifying its external functional behavior in order to improve some of the nonfunctional
attributes of the software. Advantages include improved code readability and reduced complexity
to improve the maintainability of the source code, as well as a more expressive internal
architecture or object model to improve extensibility.
Adopting the four earlier values leads to respect gained from others in the 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.
RULES
The first version of XP rules was proposed by Ken Hauer in XP/Agile Universe 2003. He
felt XP was defined by its rules, not its practices (which are subject to more variation and
ambiguity). He defined two categories: "Rules of Engagement" which dictate the environment in
which software development can take place effectively, and "Rules of Play" which define the
minute-by-minute activities and rules within the framework of the Rules of Engagement.
In the APSO workshop at ICSE 2008 Conference, Mehdi Mirakhorli proposed a new and
more precise and comprehensive version of the Extreme Programming Rules, more independent
of the practices, and intended to be more "agile".
RULES OF ENGAGEMENT
Business people and developers do joint work: Business people and developers must
work together daily throughout the project.
Our highest priority is customer satisfaction: The customer must set and continuously
adjust the objectives and priorities based on estimates and other information provided by
the developers or other members of the team. Objectives are defined in terms of what not
how.
Deliver working software frequently: Deliver working software frequently, from a couple
of weeks to a couple of months, with a preference to the shorter time scale (timeboxing).
Global awareness: At any point, any member of the team must be able to measure the
team’s progress towards the customer’s objectives and the team reflects on how to
become more effective, then tunes and adjusts its behavior accordingly.
II. Minimal degrees of separation from what is needed by the team to make progress
and the people/resources that can meet those needs.
PRINCIPLES
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.
FEEDBACK
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
This 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. When many little steps are made, the customer has more
control over the development process and the system that is being developed.
EMBRACING CHANGE
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.
PAIR PROGRAMMING
Pair programming means that all code is produced by two people programming on one
task on one workstation. 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 regularly.
All production in an XP project is done by two software engineers, sitting side by side in
the same computer. The logic behind this is that while one writes the code, the other reviews the
code to ensure it is optimized and correct. Some object against it, but in the long run, it seems
that pair programming is very good technique.
The pairs are not fixed: it's recommended that programmers try to mix as much as
possible, so that everyone knows what everyone is doing, and everybody can become familiar
with the whole system. This way, pair programming also can enhance team-wide
communication.
While reviewing, the observer also considers the strategic direction of the work, coming
up with ideas for improvements and likely future problems to address. This frees the driver to
focus all of his or her attention on the "tactical" aspects of completing the current task, using the
observer as a safety net and guide.
BENEFITS
Design quality: Shorter programs, better designs, fewer bugs. Program code must be
readable to both partners, not just the driver, in order to be checked in. Pairs typically consider
more design alternatives than programmers working solo, and arrive at simpler, more-
maintainable designs, as well as catch design defects very early.
Improved morale: Programmers report greater joy in their work and greater
confidence that their work is correct.
Increased discipline and better time management: Programmers are less likely
to skip writing unit tests, spend time web-surfing or on personal email, or other
violations of discipline, when they are working with a pair partner. The pair
partner "keeps them honest".
Resilient flow. Pairing leads to a different kind of flow than programming alone,
but it does lead to flow. Pairing flow happens more quickly: one programmer asks
the other, "What were we working on?" Pairing flow is also more resilient to
interruptions: one programmer deals with the interruption while the other keeps
working.
Fewer interruptions: People are more reluctant to interrupt a pair than they are to
interrupt someone working alone.
DRAWBACKS
Egos and potential conflict: Personality conflicts can result in one or both
developers feeling awkward or uncomfortable. Differences in coding style may
result in conflict.
SCIENTIFIC STUDIES
"Laurie Williams of the University of Utah in Salt Lake City has shown that paired
programmers are only 15% slower than two independent individual programmers, but produce
15% fewer bugs. (N.B.: The original study showed that 'error-free' code went from 70% to 85%;
it may be more intuitive to call this a 50% decrease of errors, from 30% to 15%.) Since testing
and debugging are often many times more costly than initial programming, this is an impressive
result."
The Williams et al. 2000 study showed an improvement in correctness of around 15%
and 20 to 40% decrease in time, but between a 15 and 60% increase in effort. Williams et al.
2000 also cites an earlier study (Nosek 1998) which also had a 40% decrease in time for a 60%
increase in effort.
A larger recent study (Arisholm et al. 2007) had 48% increase in correctness for complex
systems, but no significant difference in time, whilst simple systems had 20% decrease in time,
but no significant difference in correctness. Overall there was no general reduction in time or
increase in correctness, but an overall 84% increase in effort.
Lui, Chan, and Nosek (2008) shows that pair programming outperforms for design tasks.
Remote pair programming, also known as virtual pair programming or distributed pair
programming, is the practice of pair programming where the two programmers comprising the
pair are in different locations, working via a collaborative real-time editor, shared desktop, or a
remote pair programming IDE plugin.
Remote pair programming might be useful to do pair programming with offshore teams
or in open source projects with distributed contributors.
Some teams have tried VNC and RealVNC with each programmer using their own
computer. OtherS use the multi-display mode (-x) of the text-based GNU screen. Apple Inc.
OSX has a built-in Screen Sharing application.
Also of notice, IDEs like Eclipse and NetBeans offer their own solutions. For NetBeans
there is the The NetBeans Collaboration Project and for Eclipse, the Eclipse Communication
Framework comes with the Cola plugin, another option is Saros. Other alternatives for product
such as Visual Studio are wave-vs.net commercial or free Version Add-In, able to enable Pair
Programming for Visual Studio, (internally relays on Google Wave Federation Protocol to enable
collaborative editing), or beWeeVee for Visual Studio, still in concept phase. As for Cola, two
videos are available. A tech talk on the algorithmic internals of Cola, given at the Googleplex in
SSEC I.T. Page 44
EXTREME PROGRAMMING
June 2008, has been made available on Google's YouTube tech talks channel. A Cola demo is
available in HD via vimeo.
Some agile teams use a different style of pair programming called "ping pong pair
programming". In this pattern, documented as early as 2003 on the c2.com wiki, the observer
writes a failing unit test, the driver modifies the code to pass the unit test(s), the observer writes a
new unit test, and so on. This loop continues as long as the observer is able to write failing unit
tests. The technique can result in the driver role switching as often as a few minutes or less.
PLANNING GAME
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:
I. Exploration Phase: In this phase the customer will provide a short list of high-value
requirements for the system. These will be written down on user story cards.
II. Commitment Phase: Within the commitment phase business and developers will
commit themselves to the functionality that will be included and the date of the
next release.
III. Steering Phase: In the steering phase the plan can be adjusted, new requirements can
be added and/or existing requirements can be changed or removed.
Iteration Planning: This plans the activities and tasks of the developers. In this process
the customer is not involved. Iteration Planning also consists of three phases:
II. Commitment Phase: The tasks will be assigned to the programmers and the time
it takes to complete will be estimated.
III. Steering Phase: The tasks are performed and the end result is matched with the
original user story.
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
XP has two main questions or key concerns; predicting what will be done and by when,
and what to do next. This is to steer the project in the right direction instead of just doing what
comes to mind so that the system is better optimized and the team can work better.
RELEASE PLANNING
EXPLORATION PHASE
This is an iterative process of gathering requirements and estimating the work impact of
each of those requirements.
Estimate a Story: Development estimates how long it will take to implement the
work implied by the story card. Development can also create spike solutions to
analyze or solve the problem. These solutions are used for estimation and
discarded once everyone gets clear visualization of the problem. Again, this may
not influence the business requirements.
Split a Story: Every design critical complexity has to be addressed before starting
the iteration planning. If development isn't able to estimate the story, it needs to be
split up and written again.
When business cannot come up with any more requirements, one proceeds to the
commitment phase.
COMMITMENT PHASE
This phase involves the determination of costs, benefits, and schedule impact. It has four
components:
Set Velocity: Development determines at what speed they can perform the
project.
Choose scope: The user stories that will be finished in the next release will be
picked. Based on the user stories the release date is determined.
Sort by value
The business side sorts the user stories by business value. They will arrange them into
three piles:
Critical: stories without which the system cannot function or has no meaning.
Nice to have: User stories that do not have significant business value.
Sort by risk
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:
Determine Risk Index: Give each user story an index from 0 to 2 on each of the
following factors:
I. Complete (0)
I. low (0)
I. simple (0)
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
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
EXPLORATION PHASE
The exploration phase of the iteration planning is about creating tasks and estimating
their implementation time.
Combine/Split task: If the programmer cannot estimate the task because it is too
small or too big, the programmer will need to combine or split the task.
Estimate task: Estimate the time it will take to implement the task.
COMMITMENT PHASE
Within the commitment phase of the iteration planning programmers are assigned tasks
that reference the different user stories.
Programmer estimates the task: Because the programmer is now responsible for
the task, he or she should give the eventual estimation of the task.
Set load factor: The load factor represents the ideal amount of hands-on
development time per programmer within one iteration. For example, in a 40-hour
week, with 5 hours dedicated to meetings, this would be no more than 35 hours.
Balancing: When all programmers within the team have been assigned tasks, a
comparison is made between the estimated time of the tasks and the load factor.
Then the tasks are balanced out among the programmers. If a programmer is
overcommitted, other programmers must take over some of his or her tasks and
vice versa.
STEERING PHASE
The implementation of the tasks is done during the steering phase of the iteration
planning.
Get a task card: The programmer gets the task card for one of the tasks to which
he or she has committed.
Find a Partner: The programmer will implement this task along with another
programmer. This is further discussed in the practice Pair Programming.
Design the task: If needed, the programmers will design the functionality of the
task.
Write unit test: Before the programmers start coding the functionality they first
write automated tests. This is further discussed in the practice Unit Testing.
Run test: The unit tests are run to test the code.
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 condition on which the code may fail.
XP runs with feedback. In other words, XP almost depends on feedback. And good
feedback requires good testing, so the idea behind TDD is to run periodic tests in periodic cycles
to make sure everything is perfect.
WHOLE TEAM
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.
: All the team, engineers and the customer, sit together to discuss requirements, priorities
and steer the project overall.
CONTINUOUS PROCESS
CONTINUOUS INTEGRATION
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.
XP teams keep the system fully integrated at all times. XP teams build the system
multiples times a day, contrary to the usual daily build (They even go as a far as saying daily
builds are for wimps!).
DESIGN IMPROVEMENT
SMALL RELEASES
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.
: The XP team practices small releases chosen by the customer. They also release to their
end-users frequently.
SHARED UNDERSTANDING
CODING STANDARD
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. 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.
XP teams follow a very thorough coding standard so that the program looks like it was
written by a single individual. The specifics of the standard are not important; what’s important
is that everything looks similar in the sake of collective ownership.
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.
By giving every programmer the right to change the code, there is risk of errors being
introduced by programmers who think they know what they are doing, but do not foresee certain
dependencies. Sufficiently well defined unit tests address this problem: if unforeseen
dependencies create errors, then when unit tests are run, they will show failures.
Since a project of XP belongs to everyone in the team, everyone can make changes to any
part of the code so that it works for the best. In systems built by individual persons, if someone
discovers a missing function that shouldn’t go in his code, it’s hard to get the owner of the
correct code to add it, leading to bad cohesion and often repeated pieces of code.
SIMPLE DESIGN
XP teams build software under a simple design. Through programmer testing and design
improvement, they keep the system that way: Simple.
SYSTEM METAPHOR
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.
The SM is the way the team envisions how the system will work. If a sufficiently poetic
metaphor fails to come up, XP teams can fall back to a common system of names for the sake of
understanding what this vision or idea is.
PROGRAMMER WELFARE
SUSTAINABLE PACE
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
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.
XP teams work for a long time. This means they learn to work overtime when it is
deemed effective and in a way to maximize productivity instead of simply cramming code into
the system to finish faster. “XP teams are in it to win, not to die.”
XP will always (for the time being at least, unless something better arises) remain as a
sensible choice for some projects. Projects that are, or look suited for the use of XP are, but not
limited to:
Projects that should be considered under a different methodology other than XP are, but
not limited to:
CODING
No Overtime
TESTING
All code must pass all Unit tests before it can be released.
When a Bug is found tests are created before the bug is addressed (a bug is not an
error in logic, it is a test you forgot to write)
Acceptance tests are run often and the results are published
We use the concept of net present value to study for which project settings a lightweight
programming paradigm such as Extreme Programming can be an advantage over a conventional
development process. If the project is small to medium scale, the product must be of high quality,
and time to market is the decisive factor, Extreme Programming can be the right paradigm to
choose.
In this paper, we study XP from an economics point of view. We analyze the cost and
benefit of XP for a sample software project under different settings, systematically varying key
project parameters which are influenced when using XP techniques. In the XP community, the
techniques of XP are considered to be most beneficial if the requirements are unstable and time
to market is a decisive factor. Therefore, we use the discount rate in the formula for a project’s
net present value to explicitly take into account the impact of time to market.
increments. Designing for change is explicitly prohibited; only the simplest possible design
satisfying the most important set of features is chosen. However, XP prescribes a combination of
special practices instead. All programming tasks must be performed by pairs of programmers
SSEC I.T. Page 58
EXTREME PROGRAMMING
using one display, keyboard, and mouse. The test cases must be re- run continuously during
development. The code must be occasionally re-structured while retaining its functionality
(refactoring ). For more details on XP practices and typical difficulties when implementing XP.
From the project economics point of view, the most important practices of XP are pair
programming and test-first. Since developers team up to work on the same task, personnel cost
basically is doubled. The main claim of XP is that the increased cost is more than outweighted by
three factors :
• Continuously checking the code against the test cases improves the quality of the code.
• The code produced by a pair of programmers has a reduced defect rate as compared to a
single programmer.
Two studies provide empirical evidence for the advantages of pair programming [3, 8] . A
possible explanation for a reduction in the defect rate is that pair programming leads to an
ongoing review of the program code by the second developer, and that the two developers can
readily share their ideas. The studies also provide some quantitative figures. The
PairSpeedAdvantage of a pair of programmers over a single programmer is claimed to be 29
percent on average [8] . The PairDefectAdvantage of a pair of programmers over a single
programmer is claimed to be 15 percent on average [3] .
ECONOMIC MODELLING
To compare XP with conventional development, we use the concept of net present value. The net
present value of a project [4, 5] is defined as
Since in our study time to market is assumed to be the decisive factor, a delay in the project’s
completion time will lead to a loss of market share, thus drastically decreasing the value of the
whole project. We account for time to market by choosing successively higher values for the
DiscountRate in the formula for the net present value. The Asset Value is assumed fixed. The XP
development practices have a mixed impact on the net present value of a project, as we shall see
shortly.
DEVELOPMENT TIME
Figures for the productivity of a developer range between 300 and 350 lines of code per month,
including design and coding, but excluding testing. For conventional projects, the development
time is
The time needed for quality assurance is special here: it’s the time needed to equalize the defect
rate advantage which XP has over the conventional process, see the next subsection. For an XP
project, no additional time for quality assurance is required, but pair programming must be taken
into account :
For both conventional and XP projects we implicitly make the simplifying assumption that the
productivity of the developers, respectively, programmer pairs, adds up; we do not take into
account any increase in the team communication overhead as the team size increases.
QUALITY ASSURANCE
A programmer typically inserts 100 defects per thousand lines of code . A good conventional
software process eliminates up to 70 percent of these defects . Therefore, using conventional
development there are :
defects left in the software after coding. In contrast, XP claims to lead to an improved defect rate.
In that case, the conventional project must make up for the quality difference of
defects in a separate quality assurance phase before entering the market. With XP, no separate
quality assurance phase is required.
The length of the quality assurance phase for the conventional process depends on the time
needed to remove a single defect :
DEVELOPMENT COST
For simplicity, the development cost is assumed to consist just of the salaries for the developers
and the project leader :
RESULTS
SAMPLE PROJECT
To study the cost and benefit of XP, we compute the net present value of a hypothetical sample
project under different settings. The fixed parameters of the sample project areas follows :
There also are some project parameters which we vary sysematically in the study. They are
summarized in Table 1.
We visualize the difference between the net present value of the conventional project and the net
present value of the XP project using different scales of grey:
For fixed DefectRemovalTime and DiscountRate, the difference between XP and the
conventional project is visualized as a “checkboard” as the parameters PairSpeedAdvantage
FOUR PAIRS
Assume that the number of developers available for the project is bounded by eight. In that case,
XP can run the project with four pairs only. The difference between the net present value of the
conventional project and the net present value of the XP project is visualized in Figure 1.
Pair programming will lead to such an increase in development time that – even for high
discount rates and high eefect removal times – the net present value of the conventional project is
larger than the net present value of the XP project. The reason is that only four tasks can be
worked on at the same time in the XP project, as compared to eight tasks in the conventional
project. This disadvantage is not balanced by the speed advantage that a programmer pair has
over a single programmer, nor by the defect rate advantage of programmer pairs.
For example, even when assuming that the discount rate is 75 percent per year, the time
needed to remove a defect is 15 hours, and the optimistic figures given in the literature for the
pair speed advantage (30 percent) and the pair defect advantage (15 percent) actually hold, the
value of the XP project is 34 percent smaller than the value of the conventional project, see the
field with the solid
dot in Figure 1.
EIGHT PAIRS
On the other hand, assume that there is a pool of developers available who could be
added to the project, but that it does not make sense to subdivide the tasks in the project any
further due to the size and structure of the project. In that case, the project leader might choose to
SSEC I.T. Page 65
EXTREME PROGRAMMING
run the project using XP with eight pairs instead of only four pairs, doubling the personnel as
compared to the conventional project. The difference between the net present value of the
conventional project with eight developers and the net present value of the XP project with
sixteen developers (eight pairs) is visualized in Figure 2.
Despite the increased personnel cost, for high discount rates and high defect removal
times the net present value of the XP project is larger than the net present value of the
conventional project. The reason is that the speed advantage and the defect rate advantage of
programmer pairs come into full play. As a result, the increase in personnel cost is outweighted
by the gain in market share. For example, when assuming that the discount rate is 75 percent per
SSEC I.T. Page 66
EXTREME PROGRAMMING
year, the time needed to remove a defect is 15 hours, the pair speed advantage is 30 percent, and
the pair defect advantage is 15 percent, the value of the XP project is about 6 percent higher than
the value of the conventional project, see the field with the solid dot in Figure 2.
The conclusions to be drawn from the results of the computations are clear. As long as
there is a good way to assign tasks to additional developers, using XP does not provide an
advantage. On the other hand, if the size and structure of a project are such that the tasks can not
be reasonably subdivided any further, adding developers in such a way that they team up to pairs
can reduce the development time and thus increase the value of the project despite the increased
cost for personnel. This holds especially if time to market is the decisive factor. The smaller the
market pressure, the more the potential advantages of XP diminish.
One of the key requirements of eXtreme Programming (XP) is strong and effective
communication between the team members. To enable this strong level of communication among
team members, XP emphasizes the need to have the team members physically located close to
each other. However, for various reasons, it may not be feasible to have team members
physically located close to each other.
XP advocates a strong level of communication among team members. Among all of the
XP practices, one of the key practices is pair programming. Pair programming is not just one
person programming and the other observing. Instead, it is a dialog between people trying to
simultaneously design, program, analyze, test, and understand together how to program better. It
is a conversation at many levels, assisted and focused on a computer . Therefore, a key
assumption made by XP is strong and effective communication between the team members,
enabling the diffusion of know-how and expertise throughout the group. To enable this strong
level of communication among team members, the literature on XP emphasizes that it is
important to have the team members physically located close to each other. Ideally, the team
members should be all in one room. The reason for this is to enhance the communication among
team members through incidental over-hearing of conversations and to minimize any hesitation
that the team members might have in communicating to each other.
customer working with the team all the time. The customer or one of its representatives thus
becomes an integral part of the team. Therefore, a proper communication channel between the
customer and the rest of the team can easily be realized if the customer is physically located on-
site. Thus, close physical proximity of team members along with close customer involvement are
key assumptions made by XP.
We describe the assumptions made by DXP, the rationale behind DXP, the challenges in
DXP and finally how to address these challenges. In we present our experience report on using
DXP and in we present our conclusions.
arbitrarily far apart as well as highly mobile. Some ideas towards DXP have already been
mentioned at the "eXtreme Programming and Flexible Processes in Software Engineering
XP2000" conference. DXP addresses all aspects of XP although to varying degrees. There are in
general certain things that are irrelevant to the locality of the team, while others are totally bound
to the fact that the team members are colocated.
The following Table summarizes some of the aspects that are relevant to DXP and some that are
not.
From this table it becomes clear that for effective DXP, we need to address the practices of
Planning Game, Pair Programming, Continuous-Integration, and On-Site Customer in a
distributed team environment. We will see how these practices are addressed. Note that we
consider Refactoring, by itself, to not require co-location. The actual implementation of a
refactor relies on Pair Programming. However, deciding whether it is needed or its high level
form is separate. Even more concrete design tasks may best be initiated alone ; we consider this
to be part of the Refactoring, while the implementation tasks fall under Pair Programming.
DXP ASSUMPTIONS
Connectivity: Some form of connectivity needs to exist between the team members. If
communication is performed across long distances, it is assumed that the Internet is used
as communication media. For company-local communication an intranet can be used.
E-Mail: The ubiquitous availability of e-mail makes it a key enabling technology for
DXP. It can be used as a convenient means to exchange information as well to schedule
any DXP sessions.
Video Conferencing: For effective communication using audio and video among distant
team members, some kind of video conferencing support is needed.
Familiarity: We expect that DXP can succeed only when team members know each
other well, and can view it as an extension of their prior work arrangements.
WHY DXP?
XP stresses the need for close physical proximity of team members. However, circumstances
may prevent a team from working in close physical proximity, thus mandating the need for using
DXP. A company or a project may therefore be forced to adopt DXP for the following reasons:
DXP thus addresses both circumstantial constraints of companies and projects as well as
offers tangible benefits in addition to those offered by XP.
CHALLENGES IN DXP
In relaxing the requirement of XP of close physical proximity, DXP faces several challenges.
DXP offers many challenges. However, each of these challenges can be addressed and in most
cases overcome.
Important factors in choosing the software are ease of use, interoperability with
other tools, and availability on different platforms. The hardware should be
chosen with particular care as well; in fact, each developer will needthe power of
a classical development workstation, combined with the features of a multimedia
workstation.
Availability: The DXP team needs to formulate rules and guidelines in order to
ensure availability of the team members. The general XP spirit of not denying
help to anyone asking for it should be leveraged to being available for remote
communication. A daily or a weekly schedule of availability of each team
member should be made available and easily accessible to all the team members.
Pair programming sessions or testing sessions should then be scheduled based on
the availability of the team members and to allow maximum amount of
knowledge diffusion to take place.
Management: Project leaders and the upper management need to learn how to
handle distributed teams. In particular, project leaders need to learn how to
manage team members who are at different locations. This can include requiring
daily or weekly reports from all the team members, whether local or remote. It can
also include giving regular feedback to team members to give them a feel that
they are connected and hence an integral part of the team. In addition, regular
team events can help build trust and motivation among all the team members.
In addressing the challenges of DXP it is important that the practices and values of DXP are not
violated.Only four XP practices get affected in a distributed team environment Planning Game,
Pair programming, Continuous Integration, and On-site Customer. This section examines each of
these practices in the light of DXP and proposes possible solutions that can be applied to keep
DXP within the realms of XP practices.
Planning Game - For the planning game with the customer being remote, video
conferencing and application sharing software support is needed. For example,
application sharing can be used to write the story cards. Ideally more than two
participants should be supported. Though this is possible with certain solutions, such as
CUseeMe , most video conferencing software support only one pair of participants.
Simplicity - The philosophy “Make it Simple” doesn’t depend on the physical location of
the team members, so DXP does not affect this value.
Feedback – The value of Feedback is equally important in DXP as it is in XP. The only
difference is that feedback needs to be propagated across distribution boundaries. If there
are no hurdles in communication among team members, providing effective feedback
should not be an issue in DXP.
Courage - This value is not affected directly by the distribution of the team. Therefore,
DXP does not modify the four XP values.
DXP can efficiently integrate remote and mobile team members into the development process
and is therefore a valuable extension to traditional XP. In addition, it allows a much more
effective involvement of the customer compared to XP, especially in situations where it seems
impossible to have an on-site customer. DXP can therefore actively broaden the acceptance of
XP as lightweight software development process. We are aware That a virtual meeting through a
computer-supported interaction can never replace direct human interaction. However, there are
situations where such interaction is not feasible, and where a form of XP can still be successfully
employed.
CONTROVERSIAL ASPECTS
The practices in XP have been heavily debated with strong opinions for or against using
XP.
Proponents of Extreme Programming claim that by having the on-site customer 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.
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
Requirements are defined incrementally, rather than trying to get them all in
advance.
There is no Big Design Up Front. Most of the design activity takes place on the
fly and incrementally, starting with "the simplest thing that could possibly work"
and adding complexity only when it's required by failing tests. Critics compare
this to "debugging a system into appearance" and fear this will result in more re-
design effort than only re-designing when requirements change.
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."
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[citation needed]. ThoughtWorks has claimed reasonable success on distributed XP
projects with up to sixty people.
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.
RDP Practice is a technique for tailoring Extreme Programming. This practice was
initially proposed as a long research paper in a workshop organized by Philippe Kruchten and
Steve Adolph( See APSO workshop at ICSE 2008) and yet it is the only proposed and applicable
method for customizing XP. The valuable concepts behind RDP practice, in a short time
provided the rationale for applicability of it in industries. RDP Practice tries to customize XP by
relying on technique XP Rules.
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. JPMorgan Chase &
Co. tried combining XP with the computer programming methodologies of Capability Maturity
Model Integration (CMMI), and Six Sigma. They found that the three systems reinforced each
other well, leading to better development, and did not mutually contradict.
CRITICISM
Extreme Programming's initial buzz and controversial tenets, such as pair programming
and continuous design, have attracted particular criticisms, such as the ones coming from
McBreen and Boehm and Turner.Many of the criticisms, however, are believed by Agile
practitioners to be misunderstandings of agile development.
Criticisms include:
A methodology is only as effective as the people involved, Agile does not solve
this
SSEC I.T. Page 83
EXTREME PROGRAMMING
Often used as a means to bleed money from customers through lack of defining a
deliverable
Can be very inefficient—if the requirements for one area of code change through
various iterations, the same programming may need to be done several times over.
Whereas if a plan were there to be followed, a single area of code is expected to
be written once.
Can increase the risk of scope creep due to the lack of detailed requirements
documentation
XP FAQ’S
III. Is XP a methodology?
No and yes. No, it's not a methodology in the sense of a lot of paperwork and additional
hoops for developers to jump through. But yes, in the sense that it is a repeatable process for
developing software, it is in fact a methodology, although a lightweight one.
1. Pair programming
2. Planning game
3. Test-driven development
4.Whole team
5.Continuous integration
7. Small releases
8. Coding standards
At the beginning of each iteration, the team gets together with the customer for a planning
meeting. In that meeting, they go over the features the customer wants done in that iteration,
breaking each feature down into individual engineering tasks. Individual developers then sign up
for specific tasks, and estimate those tasks. No developer is allowed to sign up for more work in
the coming iteration than he completed in the previous iteration.
During the rest of the iteration, the team will implement the features they signed up for,
pair programming on all production code. All code is written test-first -- that is, the developers
don't write any code until they have a failing test case. The developers write unit tests to test
individual classes and subsystems. The customer provides functional or acceptance tests to
validate the features that the programmers are developing.
At the end of the iteration (usually on a Friday), the programmers deliver a working
system to the customer. The system may not be complete, but all functionality that is
implemented works completely, without bugs. The customer accepts delivery, and the team goes
home early. The next Monday everyone meets again to plan the next iteration, and the cycle
repeats itself.
Actual product release is almost a non-event. The customer takes the delivered system
from some iteration, and distributes it to end users. The system is always very nearly defect-free,
so the only question is when the developers have added enough functionality to make it
worthwhile for the end users to upgrade.
IX. How does XP compare to other lightweight processes, like Scrum, and
FDD?
Scrum is a lightweight process that is philosophically very close XP. SCRUM focuses
more effort removing impediments, with daily stand-up meetings where programmers list any
outside issues that are impeding progress, and a Scrum Master who is tasked with removing those
impediments.
Peter Coad's Feature Driven Development is an iterative lightweight process, but is much
more hierarchical than XP, with a chief programmer, who directs class owners, who direct feature
teams.
For an in-depth comparison of various lightweight processes, see Martin Fowler's paper
The New Methodology.
1. The system (code plus tests) clearly communicates everything that needs to be
communicated at the current instant in its development. This means that it runs every
existing test, and that the source code clearly reveals the intention behind it to anyone
who reads it.
2. The system contains no duplicate code, unless that would violate (1).
3. The system contains the minimum number of classes possible without violating .
4.The system contains the minimum number of methods possible, consistent with (1) (2)
and (3).
Common Objections
Laurie Williams has done empirical studies of pair programming. Her work is
summarized in the paper The Costs and Benefits of Pair Programming, which she co-wrote with
Alistair Cockburn. In this study, after only a few pairing sessions, pairs of programmers were
roughly as twice as productive as solo programmers, yet produced substantially fewer defects.
XIV. With pair programming and collective code ownership, how are
programmers supposed to be recognized and compensated?
XP has collective code ownership, but individual task ownership. Each developer signs
up for tasks at the beginning of each iteration. He is then responsible for completing those tasks
(by pairing with one or more other developers). At the end of each iteration, the customer decides
if the task is complete or not. After a year of doing this, the programmer has a long list of
completed tasks to show his manager.
XV. Isn't it annoying having someone looking over your shoulder while you
program?
Pair programming means two people working side-by-side on the same problem on the
same computer; if someone is looking over your shoulder, you're doing it wrong. Typically, the
person "driving" the keyboard and mouse will be focused primarily on tactical issues in coding
the current method, while the non-driver will focus more on strategic issues, like how the method
fits into the system, and is it needed at all in the first places. It's kind of like a road rally, where a
driver and a navigator collaborate to get over a given course in the best time.
XVI. Won't pair programming interfere with "flow", which requires solitude
and silence?
Pair programming appears to access another kind of flow, which is shared between the
two people pairing. There's some talking, but not a lot of idle chitchat, and and it's easier to return
to the state if someone interrupts you.
As a practical matter, when a pair is facing a particularly tough or puzzling task, they
often will call in one or more additional people for help, effectively producing a temporary trio or
even quad programming situation.
XVIII. Won't simple design leave you with a program that won't scale well?
Simple design, practiced alone typically would have this result. But XP says that after
you do the simplest thing that could possibly work, you go back and refactor your code until
everything your code needs to express appears once and only once within the code base.
CONCLUSION
REFERENCES
III. http://en.wikipedia.org/wiki/Extreme_Programming#Shared_understandig
IV. www.scribd.com
V. www.a2zbooks.com
VI. www.ebookdirectory.com
VII. http://c2.com/cgi/wiki?XpGlossary.