SWLec 4
SWLec 4
Revision
• XP
Rapid software development
• Rapid development and delivery is now often the most
important requirement for software systems
• Businesses operate in a fast –changing requirement and it
is practically impossible to produce a set of stable
software requirements.
• Software has to evolve quickly to reflect changing
business needs.
Rapid software development
• Specification, design and implementation are inter-leaved
• System is developed as a series of versions with
stakeholders involved in version evaluation.
• User interfaces are often developed using an IDE and
graphical toolset.
Agile methods
The aim of agile methods is :
to reduce overheads in the software process (e.g. by limiting
documentation)
to be able to respond quickly to changing requirements
without excessive rework.
Agile manifesto
• We are uncovering better ways of developing software by doing
it and helping others do it. Through this work we have come to
value:
• Individuals and interactions over processes and tools
• Working software over comprehensive documentation
• Customer collaboration over contract negotiation
• Responding to change over following a plan
• That is, while there is value in the items on the right, we value the
items on the left more
The principles of agile methods
Principle Description
Customer Customers should be closely involved throughout the development
involvement process. Their role is provide and prioritize new system requirements
and to evaluate the iterations of the system.
Incremental The software is developed in increments with the customer specifying
delivery the requirements to be included in each increment.
People not The skills of the development team should be recognized and
process 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 Focus on simplicity in both the software being developed and in the
simplicity development process. Wherever possible, actively work to eliminate
complexity from the system.
Agile method applicability
• Product development where a software company is developing
a small or medium-sized product for sale.
• Custom system development within an organization,
• where there is a clear commitment from the customer to
become involved in the development process
• and where there are not a lot of external rules and
regulations that affect the software.
• Because of their focus on small, tightly-integrated teams, there
are problems in scaling agile methods to large systems.
Problems with agile methods
• It can be difficult to keep the interest of customers who are
involved in the process.
• Team members may be unsuited to the intense involvement
that characterises agile methods.
• Prioritising changes can be difficult where there are
multiple stakeholders.
• Maintaining simplicity requires extra work.
Plan-driven and agile development
• Plan-driven development
• A plan-driven approach to software engineering is based around
separate development stages with the outputs to be produced
at each of these stages planned in advance.
• Not necessarily waterfall model – plan-driven, incremental
development is possible
Plan-driven and agile development
• Agile development
• Specification, design, implementation and testing are
interleaved
• and the outputs from the development process are decided
through a process of negotiation during the software
development process.
Technical, human, organizational issues
realistic?
Technical, human, organizational issues
realistic?
communicate informally.
communicate informally.
• is responsible for the product backlog and accountable for maximizing the
value that the team delivers.
Small The minimal useful set of functionality that provides business value is
releases developed first. Releases of the system are frequent and incrementally add
functionality to the first release
Simple Enough design is carried out to meet the current requirements and no
design more.
Test-first An automated unit test framework is used to write tests for a new piece of
development functionality before that functionality itself is implemented.
Extreme programming practices
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.
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.
Extreme programming practices
Continuous As soon as the work on a task is complete, it is integrated into the
integration whole system. After any such integration, all the unit tests in the
system must pass.
Sustainable Large amounts of overtime are not considered acceptable as the net
pace effect is often to reduce code quality and medium-term productivity