Personal notes on software development.
For Java technologies check my dedicated site

Pages

Resources:

Agile software development on wikipedia

Overview

Agile software development is a group of software development methodologies based on iterative and incremental development, where requirements and solutions evolve through collaboration between self-organizing, cross-functional teams. The Agile Manifesto introduced the term in 2001.
In what concerns to software development life cycle, the Agile methods are focused on different aspects of the software development life-cycle. Some focus on the practices (extreme programming, pragmatic programming, agile modeling), while others focus on managing the software projects (Scrum).

Agile main characteristics

  • promote development, teamwork, collaboration, and process adaptability throughout the life-cycle of the project;
  • break tasks into small increments with minimal planning, and do not directly involve long-term planning;
  • iterations are short time frames that typically last from one to four weeks. Each iteration involves a team working through a full software development cycle including planning,requirements analysis, design, coding, unit testing, and acceptance testing when a working product is demonstrated to stakeholders. This minimizes overall risk and allows the project to adapt to changes quickly. Stakeholders produce documentation as required. An iteration may not add enough functionality to warrant a market release, but the goal is to have an available release (with minimal bugs) at the end of each iteration. Multiple iterations may be required to release a product or new features.
  • team composition in an agile project is usually cross-functional and self-organizing without consideration for any existing corporate hierarchy or the corporate roles of team members; Agile methods emphasize face-to-face communication over written documents when the team is all in the same location;
  • Agile development emphasizes working software as the primary measure of progress. This, combined with the preference for face-to-face communication, produces less written documentation than other methods ;
  • no matter what development disciplines are required, each agile team will contain a customer representative. This person is appointed by stakeholders to act on their behalf and makes a personal commitment to being available for developers to answer mid-iteration problem-domain questions;
  • specific tools and techniques such as continuous integration, automated or xUnit test, pair programming, test driven development, design patterns, domain-driven design, code refactoring and other techniques are often used to improve quality and enhance project agility.

Comparison with other methods

Agile methods are sometimes characterized as being at the opposite end of the spectrum from plan-driven or disciplined methods; agile teams may, however, employ highly disciplined formal methods. A more accurate distinction is that methods exist on a continuum from adaptive to predictiveAgile methods lie on the adaptive side of this continuum.
  • Adaptive methods focus on adapting quickly to changing realities. When the needs of a project change, an adaptive team changes as well. An adaptive team will have difficulty describing exactly what will happen in the future. The further away a date is, the more vague an adaptive method will be about what will happen on that date;
  • Predictive methods, in contrast, focus on planning the future in detail. A predictive team can report exactly what features and tasks are planned for the entire length of the development process. Predictive teams have difficulty changing direction. The plan is typically optimized for the original destination and changing direction can require completed work to be started over. Predictive teams will often institute a change control board to ensure that only the most valuable changes are considered.

No comments:

Post a Comment