Lecture 12-Extreme Programing (XP)
Lecture 12-Extreme Programing (XP)
30/10/201
4 Chapter 3 Agile Software
Development 2
Extreme programming
Extreme programming (XP) is a software
development method which is intended
to improve software quality and
responsiveness to changing customer
requirements. As a type of agile software
development, it advocates frequent "
releases" in sho development cycles,
which is intended to improve productivity
and introduce checkpoints at which new
customer requirements can be adopted.
30/10/201
4 Chapter 3 Agile Software
Development 3
e extreme programming release cycle
30/10/201
4 Chapter 3 Agile Software
Development 4
Extreme Programming Practices
• Programming in pairs or doing extensive code review,
• Unit testing of all code,
• Avoiding programming of features until they are
actually needed,
• Code simplicity and clarity,
• Expecting changes in the customer's requirements as
time passes and the problem is better understood,
• Frequent communication with the customer and among
programmers
Extreme programming practices (a)
Principle or practice Description
Incremental planning Requirements are recorded on sto cards and the stories to be
included in a release are determined by the time available and
their relative priority. e developers break these stories into
development ‘Tasks’.
Small releases e minimal useful set of functionality that provides business
value is developed rst. Releases of the system are frequent
and incrementally add functionality to the rst release.
Simple design Enough design is carried out to meet the current requirements
and no more.
Test- rst development An automated unit test framework is used to write tests for
new pieceof functionality before that functionality itself is a
implemented.
Refactoring All developers are expected to refactor the code continuously
as soon as possible code improvements are found. is keeps
the code simple and maintainable.
30/10/201
4 Chapter 3 Agile Software
Development 6
Extreme programming practices (b)
30/10/201
4 Chapter 3 Agile Software
Development 11
Examples of task cards for prescribing
medication
30/10/201
4 Chapter 3 Agile Software
Development 12
2. Refactoring
Conventional wisdom in software engineering is to
design for change. It is wo h spending time and e o
anticipating changes as this reduces costs later in the
life cycle.
XP, however, maintains that this is not wo hwhile as
changes cannot be reliably anticipated.
Rather, it proposes constant code improvement
(refactoring) to make changes easier when they have to
be implemented.
30/10/201
4 Chapter 3 Agile Software
Development 13
2. Refactoring
Programming team look for possible software
improvements and make these improvements even
where there is no immediate need for them.
is improves the understandability of the software
and so reduces the need for documentation.
Changes are easier to make because the code is well-
structured and clear.
However, some changes requires architecture
refactoring and this is much more expensive.
30/10/201
4 Chapter 3 Agile Software
Development 14
Examples of refactoring
Re-organization of a class hierarchy to remove
duplicate code.
Tidying up and renaming attributes and methods to
make them easier to understand.
e replacement of inline code with calls to methods
that
have been included in a program libra .
30/10/201
4 Chapter 3 Agile Software
Development 15
3. Test- rst development
Testing is central to XP and XP has developed an
approach where the program is tested after eve
change has been made.
XP testing features:
Test- rst development.
Incremental test development from scenarios.
User involvement in test development and validation.
Automated test harnesses are used to run all component
tests each time that a new release is built.
30/10/201
4 Chapter 3 Agile Software
Development 16
3. Test-driven development
Writing tests before code clari es the requirements to
be implemented.
Tests are written as programs rather than data so that
they can be executed automatically. e test includes a
check that it has executed correctly.
Usually relies on a testing framework such as Junit / Nunit.
All previous and new tests are run automatically when
new functionality is added, thus checking that the new
functionality has not introduced errors.
30/10/201
4 Chapter 3 Agile Software
Development 17
Customer involvement
e role of the customer in the testing process is to
help develop acceptance tests for the stories that are
to be implemented in the next release of the system.
e customer who is pa of the team writes tests as
development proceeds. All new code is therefore
validated to ensure that it is what the customer needs.
However, people adopting the customer role have
limited time available and so cannot work full-time
with the development team. ey may feel that
providing the requirements was enough of a
contribution and so may be reluctant to get involved in
the testing process.
30/10/201
4 Chapter 3 Agile Software
Development 18
Test case description for dose checking
30/10/201
4 Chapter 3 Agile Software
Development 19
Test automation
Test automation means that tests are written as
executable components before the task is
implemented
ese testing components should be stand-alone, should
simulate the submission of input to be tested and should
check that the result meets the output speci cation. An
automated test framework (e.g. Junit) is a system that makes it
easy to write executable tests and submit a set of tests for
execution.
As testing is automated, there is always a set of tests
that can be quickly and easily executed
Whenever any functionality is added to the system, the tests
can be run and problems that the new code has introduced
30/10/201
can be caught immediately.
Chapter 3 Agile Software 20
4 Development
TDD Example
Problems with test- rst development
Programmers prefer programming to testing and
sometimes they take sho cuts when writing tests.
For example, they may write incomplete tests that
do not check for all possible exceptions that may
occur.
Some tests can be ve di cult to write
incrementally. For example, in a complex user
inte ace, it is often di cult to write unit tests for
the code that implements the ‘display logic’ and
work ow between screens.
It di cult to judge the completeness of a set of tests.
Although you may have a lot of system tests, your
test
30/10/201
4
set may not provide
Chapter 3 complete
Agile
Development Software coverage. 22
4. Pair programming
Pair programming involves programmers working in
pairs, developing code together.
is helps develop common ownership of code and
spreads knowledge across the team.
It se es as an informal review process as each line of
code is looked at by more than 1 person.
It encourages refactoring as the whole team can
bene t from improving the system code.
30/10/201
4 Chapter 3 Agile Software
Development 23
4. Pair programming
In pair programming, programmers sit together at the
same computer to develop the software.
Pairs are created dynamically so that all team members
work with each other during the development process.
e sharing of knowledge that happens during pair
programming is ve impo ant as it reduces the
overall risks to a project when team members leave.
Pair programming is not necessarily ine cient and
there is some evidence that suggests that a pair
working together is more e cient than 2
programmers working separately.
30/10/201
4 Chapter 3 Agile Software
Development 24