Agile Methods in Software Development
Posted on Feb 25, 2025 in Software Engineering
Agile Methods
- Dissatisfaction with the overheads involved in software design methods of the 1980s and 1990s led to the creation of agile methods. These methods:
- Focus on the code rather than the design.
- Are based on an iterative approach to software development.
- Are intended to deliver working software quickly and evolve it rapidly to meet changing requirements.
- The aim of agile methods is to reduce overheads in the software process (e.g., by limiting documentation) and to be able to respond quickly to changing requirements without excessive rework.
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 characterizes agile methods.
- Prioritizing changes can be difficult when there are multiple stakeholders.
- Maintaining simplicity requires extra work.
- Contracts may be a problem, as with other approaches to iterative development.
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 a waterfall model – plan-driven, incremental development is possible.
- Iteration occurs within activities.
- 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.
Extreme Programming (XP)
- Perhaps the best-known and most widely used agile method.
- Extreme Programming (XP) takes an ‘extreme’ approach to iterative development.
- New versions may be built several times per day.
- Increments are delivered to customers every two weeks.
- All tests must be run for every build, and the build is only accepted if tests run successfully.
XP and Agile Principles
- Incremental development is supported through small, frequent system releases.
- Customer involvement means full-time customer engagement with the team.
- People, not process, through pair programming, collective ownership, and a process that avoids long working hours.
- Change is supported through regular system releases.
- Maintaining simplicity through constant refactoring of code.
Refactoring
- Programming teams look for possible software improvements and make these improvements even when there is no immediate need for them.
- This improves the understandability of the software and thus reduces the need for documentation.
- Changes are easier to make because the code is well-structured and clear.
- However, some changes require architecture refactoring, and this is much more expensive.
Pair Programming
- In XP, programmers work in pairs, sitting together to develop code.
- 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 one person.
- It encourages refactoring, as the whole team can benefit from this.
- Measurements suggest that development productivity with pair programming is similar to that of two people working independently.
Advantages of Pair Programming
- It supports the idea of collective ownership and responsibility for the system.
- Individuals are not held responsible for problems with the code. Instead, the team has collective responsibility for resolving these problems.
- It acts as an informal review process because each line of code is looked at by at least two people.
- It helps support refactoring, which is a process of software improvement.
- When pair programming and collective ownership are used, others benefit immediately from the refactoring, so they are likely to support the process.
Agile Project Management
- The principal responsibility of software project managers is to manage the project so that the software is delivered on time and within the planned budget.
- The standard approach to project management is plan-driven. Managers draw up a plan for the project, showing what should be delivered, when it should be delivered, and who will work on the development of the project deliverables.
- Agile project management requires a different approach, which is adapted to incremental development and the particular strengths of agile methods.
Scrum
- The Scrum approach is a general agile method, but its focus is on managing iterative development rather than specific agile practices.
- There are three phases in Scrum.
- The initial phase is an outline planning phase where you establish the general objectives for the project and design the software architecture.
- This is followed by a series of sprint cycles, where each cycle develops an increment of the system.
- The project closure phase wraps up the project, completes required documentation such as system help frames and user manuals, and assesses the lessons learned from the project.
Scaling Out and Scaling Up Agile Methods
- ‘Scaling up’ is concerned with using agile methods for developing large software systems that cannot be developed by a small team.
- ‘Scaling out’ is concerned with how agile methods can be introduced across a large organization with many years of software development experience.
- When scaling agile methods, it is essential to maintain agile fundamentals:
- Flexible planning, frequent system releases, continuous integration, test-driven development, and good team communications.