software engineering chapter 3 Agile software development
why agile mwthods
Because these businesses are operating in a changing environment, it is often practically impossible to derive a complete set of stable software requirements
Maintain simplicity and agile methodology
Focus on simplicity in both the software being developed and in the development process. Wherever possible, actively work to eliminate complexity from the system.
Is an incremental delivery strategy, where you deliver the software to customers and get rapid feedback from them, realistic?
If so, consider using agile methods.
Is it important to have a very detailed specification and design before moving to implementation?
If so, you probably need to use a plan-driven approach
7. How is the development team organized?
If the development team is distributed or if part of the development is being outsourced, then you may need to develop design documents to communicate across the development teams. You may need to plan in advance what these are.
In practice, the principles underlying agile methods are sometimes difficult to realize
1. Although the idea of customer involvement in the development process is an attractive one, its success depends on having a customer who is willing and able to spend time with the development team and who can represent all system stakeholders. Frequently, the customer representatives are subject to other pressures and cannot take full part in the software development. 2. Individual team members may not have suitable personalities for the intense involvement that is typical of agile methods, and therefore not interact well with other team members. 3. Prioritizing changes can be extremely difficult, especially in systems for which there are many stakeholders. Typically, each stakeholder gives different priorities to different changes. 4. Maintaining simplicity requires extra work. Under pressure from delivery schedules, the team members may not have time to carry out desirable system simplifications
There are two questions that should be considered when considering agile methods and maintenance
1. Are systems that are developed using an agile approach maintainable, given the emphasis in the development process of minimizing formal documentation? 2. Can agile methods be used effectively for evolving a system in response to customer change requests?
Extreme programming involves a number of practices, summarized in Figure 3.4, which reflect the principles of agile methods
1. Incremental development is supported through small, frequent releases of the system. Requirements are based on simple customer stories or scenarios that are used as a basis for deciding what functionality should be included in a system increment. 2. Customer involvement is supported through the continuous engagement of the customer in the development team. The customer representative takes part in the development and is responsible for defining acceptance tests for the system. 3. People, not process, are supported through pair programming, collective ownership of the system code, and a sustainable development process that does not involve excessively long working hours. 4. Change is embraced through regular system releases to customers, test-first development, refactoring to avoid code degeneration, and continuous integration of new functionality.
Agile methods have been very successful for some types of system development:
1. Product development where a software company is developing a small or medium-sized product for sale. 2. 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
Testing in XP
1. Test-first development, 2. incremental test development from scenarios, 3. user involvement in the test development and validation, and 4. the use of automated testing frameworks.
rapid software development, they share some fundamental characteristics:
1. The processes of specification, design, and implementation are interleaved. 2. The system is developed in a series of versions 3. System user interfaces are often developed using an interactive development system that allows the interface design to be quickly created by drawing and placing icons on the interface
general probelm in incremental development
A general problem with incremental development is that it tends to degrade the software structure, so changes to the software become harder and harder to implement.
6. What technologies are available to support system development?
Agile methods often rely on good tools to keep track of an evolving design. If you are developing a system using an IDE that does not have good tools for program visualization and analysis, then more design documentation may be required.
How large is the system that is being developed?
Agile methods are most effective when the system can be developed with a small co-located team who can communicate informally. This may not be possible for large systems that require larger development teams so a plan-driven approach may have to be used
agile practices
Agile practices, used in the maintenance process itself, are likely to be effective, whether or not an agile approach has been used for system development.
The principles of agile methods
CUSTOMER INVOLVEMENT incremental delivery people not process embrace changes maintain simplicity
Customer involvement in agile methodology
Customers should be closely involved throughout the development process. Their role is provide and prioritize new system requirements and to evaluate the iterations of the system
Embrace change and agile emthodology
Expect the system requirements to change and so design the system to accommodate these changes.
Extreme Programming
Extreme programming (XP) is perhaps the best known and most widely used of the agile methods
agile software manifesto
Individuals and interactions over processes and tools Working software over comprehensive documentation Customer collaboration over contract negotiation Responding to change over following a plan
9. How good are the designers and programmers in the development team?
It is sometimes argued that agile methods require higher skill levels than plan-based approaches in which programmers simply translate a detailed design into code. If you have a team with relatively low skill levels, you may need to use the best people to develop the design, with others responsible for programming.
5. What is the expected system lifetime?
Long-lifetime systems may require more design documentation to communicate the original intentions of the system
how programmers works in extreme programming
Programmers work in pairs and develop tests for each task before writing the code. All tests must be successfully executed when new code is integrated into the system
why rapid software
Rapid software development processes are designed to produce useful software quickly
Incremental planning in extreme programmming
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'
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.
4. What type of system is being developed?
Systems that require a lot of analysis before implementation (e.g., real-time system with complex timing requirements) usually need a fairly detailed design to carry out this analysis. A plandriven approach may be best in those circumstances.
Small releases in extreme programming
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.
Agile methods
The philosophy behind agile methods is reflected in the agile manifesto that was agreed on by many of the leading developers of these method
People not process in agile methodology
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
Incremental delivery and agile methodology
The software is developed in increments with the customer specifying the requirements to be included in each increment.
8. Are there cultural issues that may affect the system development?
Traditional engineering organizations have a culture of plan-based development, as this is the norm in engineering. This usually requires extensive design documentation, rather than the informal knowledge used in agile processes
fast moving development
agile approach should be used
test first development in extreme programming
an autmated unit test framework
design and implementation in agile methodology
are central activities in the software development
Simple design in extreme programming
enough desgin is carried out to meet the current requirement
most software projects include practices
from plan-driven and agile approaches
The need for rapid system development and processes
hat can handle changing requirements has been recognized for some time
agile development
incremental development related
a plan-driven approach
iteration occurs within activities with formal documents used to communicate between stages of the process
difference between agile and plan driven
phases in pkan driven are sequence in whcih one phase should be finished before the other phase begin
For some types of software, such as safety-critical control systems
plan driven approach should be used
requirement in extreme programming
requirements are expressed as scenarios (called user stories), which are implemented directly as a series of tasks