Lecture 4 - Agile Software Development
Lecture 4 - Agile Software Development
1
Chapter Outline
• Agile methods
• Plan-driven and agile development
• Agile development techniques
• Agile project management
2
Rapid Software Development
3
Fundamentals of Rapid Software Development
❑ Plan-driven development
▪ A plan-driven approach is based around separate development stages with
the outputs to be produced at each of these stages planned in advance.
▪ Iteration occurs within activities with formal documents used to
communicate between stages of the process.
▪ Good for safety-critical systems
❑ Agile development
▪ The software development approach based on iterative development
where specification, design, implementation and testing are interleaved.
▪ Good for fast moving business environment
▪ May include a documentation ‘spike’, where, instead of producing a new
version of a system, the team produces system documentation
5
Plan-driven Vs Agile development
6
Agile Methods
7
Agile Methods
8
The Principles of Agile Methods
Principle Description
Customer involvement Customers should be closely involved throughout the development
process. Their role is to provide and prioritize new system
requirements and to evaluate the iterations of the system.
People not process The skills of the development team should be recognized and
exploited. Team members should be left to develop their own ways
of working without prescriptive processes.
Embrace change Expect the system requirements to change and so design the system
to accommodate these changes.
Maintain simplicity Focus on simplicity in both the software being developed and in
the development process. Wherever possible, actively work to
eliminate complexity from the system.
9
Agile Development Techniques
10
Agile Methods
11
Extreme Programming (XP)
12
Extreme Programming (XP)
❑ Extreme Programming (XP) takes an ‘extreme’ approach to iterative
development.
▪ Requirements are expressed as scenarios (called user stories)
▪ Stories are implemented directly as a series of tasks;
▪ Programmers develop tests for each task before writing the code.
▪ All tests must be successfully executed when new code is integrated into the
system
13
The XP Release Cycle
14
The Extreme Programming Process
15
The Extreme Programming Process
✧ Exploration
▪ The customers write out the story cards
▪ Project team familiarize themselves with the tools and technology
▪ Takes between a few weeks to a few months
16
The Extreme Programming Process
✧ Productionizing phase
▪ Requires extra testing and checking
▪ New changes may still be found
▪ The iterations may need to be quickened
▪ The postponed ideas and suggestions are documented for later
implementation, e.g., the maintenance phase.
✧ Death phase
▪ When the customer no longer have any stories to be implemented.
▪ System satisfies customer needs
▪ Necessary documentation of the system is finally written
▪ Death may also occur if the system is not delivering the desired
outcomes, or if it becomes too expensive for further development
17
XP and Agile Principles
18
Extreme Programming Practices (a)
Principle or practice Description
Incremental planning Requirements are recorded on story cards and the stories to be included
in a release are determined by the time available and their relative
priority. The developers break these stories into development ‘Tasks’.
See Figures 3.5 and 3.6.
Small releases The minimal useful set of functionality that provides business value is
developed first. Releases of the system are frequent and incrementally
add functionality to the first release.
Simple design Enough design is carried out to meet the current requirements and no
more.
Test-first development An automated unit test framework is used to write tests for a new piece
of functionality before that functionality itself is implemented.
Refactoring All developers are expected to refactor the code continuously as soon
as possible code improvements are found. This keeps the code simple
and maintainable.
19
Extreme programming practices (b)
Pair programming Developers work in pairs, checking each other’s work and providing
the support to always do a good job.
Collective ownership The pairs of developers work on all areas of the system, so that no
islands of expertise develop and all the developers take responsibility
for all of the code. Anyone can change anything.
Continuous integration As soon as the work on a task is complete, it is integrated into the
whole system. After any such integration, all the unit tests in the
system must pass.
Sustainable pace Large amounts of overtime are not considered acceptable as the net
effect is often to reduce code quality and medium term productivity
On-site customer A representative of the end-user of the system (the customer) should be
available full time for the use of the XP team. In an extreme
programming process, the customer is a member of the development
team and is responsible for bringing system requirements to the team
for implementation.
20
Key Practices in XP
❖ Key practices
User stories for specification
Refactoring
Test-first development
Pair programming
21
User stories for requirements
22
A ‘prescribing medication’ story
23
Examples of task cards for prescribing
medication
24
Refactoring
✧ Incremental development tends to degrade the software structure, so changes to the software
become harder to implement
▪ code is often duplicated
▪ parts of the software are reused in inappropriate ways
▪ overall structure degrades as code is added to the system
✧ Refactoring is the process of restructuring code, while not changing its original functionality
yet improves its internal structure.
✧ The goal of refactoring is to improve internal code by making many small changes without
altering the code's external behavior.
✧ When carried out manually, refactoring is applied directly to the source code and is generally
a labor-intensive, ad hoc, and potentially error-prone process.
✧ Program development environments, such as Eclipse (Carlson, 2005), include tools for
refactoring which simplify the process of finding dependencies between code sections and
making global code modifications
25
Benefits of Refactoring
26
Examples of Refactoring
27
Testing with XP
✧ XP testing features:
▪ Test-first development.
▪ Incremental test development from scenarios.
▪ Customer involvement in test development and validation.
▪ Use of automated testing frameworks
28
Customer Involvement
✧ The 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.
✧ The customer who is part 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.
They may feel that providing the requirements was enough of a
contribution and so may be reluctant to get involved in the testing
process.
29
Test case description for dose checking
30
Test automation
✧ Test automation means that tests are written as executable
components before the task is implemented
▪ These testing components should be stand-alone, should simulate the
submission of input to be tested and should check that the result meets
the output specification. 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 can be caught
immediately.
31
Problems with test-first development
32
Pair programming
✧ Pair programming involves programmers working in pairs,
developing code together.
✧ This helps develop common ownership of code and spreads
knowledge across the team.
✧ It serves 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 benefit from
improving the system code.
33
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.
✧ The sharing of knowledge that happens during pair
programming is very important as it reduces the overall risks
to a project when team members leave.
✧ Pair programming is not necessarily inefficient and there is
some evidence that suggests that a pair working together is
more efficient than 2 programmers working separately.
34
Agile project management
35
Agile Project Management
38
Scrum Process
39
Pre-game
45
The Sprint Cycle
❑ During this stage the team is isolated from the customer and the
organization, with all communications channelled through the
so-called ‘Scrum master’.
❑ ‘Scrum master’ is a facilitator who arranges daily meetings, tracks
the backlog of work to be done, records decisions, measures
progress against the backlog, and communicates with customers and
management outside of the team.
❑ At the end of the sprint, the work done is reviewed and presented to
stakeholders. The next sprint cycle then begins.
46
Post-game
Development team A self-organizing group of software developers, which should be no more than 7
people. They are responsible for developing the software and other essential
project documents.
Potentially shippable The software increment that is delivered from a sprint. The idea is that this
product increment should be ‘potentially shippable’ which means that it is in a finished state and
no further work, such as testing, is needed to incorporate it into the final
product. In practice, this is not always achievable.
Product backlog This is a list of ‘to do’ items which the Scrum team must tackle. They may be
feature definitions for the software, software requirements, user stories or
descriptions of supplementary tasks that are needed, such as architecture
definition or user documentation.
Product owner An individual (or possibly a small group) whose job is to identify product
features or requirements, prioritize these for development and continuously
review the product backlog to ensure that the project continues to meet critical
business needs. The Product Owner can be a customer but might also be a
product manager in a software company or other stakeholder representative.
48
Scrum Terminology (b)
ScrumMaster The ScrumMaster is responsible for ensuring that the Scrum process is
followed and guides the team in the effective use of Scrum
49
Scrum Benefits
50