Transcription TDD and FDD: XP-Derived Approaches
Within the ecosystem of agile practices, and closely related to Extreme Programming (XP), more specific approaches such as Test-Driven Development (TDD) and Feature-Driven Development (FDD) emerge.
Although sometimes considered independent frameworks or variants, they are often viewed as disciplines or sets of practices that delve into particular aspects of agile software development, emphasizing quality through rigorous testing (TDD) or organizing work around tangible customer functionality (FDD).
Both seek to improve quality, efficiency and value delivery in software development, especially in projects of a certain scale or complexity.
Test-Driven Development (TDD): Red-Green-Refactor Cycle
Test-Driven Development (TDD) is a software development practice that reverses the traditional flow: first write an automated test that defines a desired result or improvement, and then write the minimum code necessary for that test to pass.
It is founded on two main rules: don't write functional code unless there is a test that fails, and eliminate code duplication.
The core TDD cycle is known as Red-Green-Refactor:
- Red: Write an automated test for the new functionality. The test will initially fail because the code does not yet exist.
- Green: Write the simplest code possible for the test to pass.
- Refactor: Improve the newly written (and existing) code to make it cleaner, simpler and more maintainable, ensuring that all tests still pass. TDD uses unit and acceptance testing to guide design and ensure continuous quality.
Feature-Driven Development (FDD): Focusing on Features of Value
Feature-Driven Development (FDD) is an iterative and incremental development process designed specifically to meet the needs of large software projects.
Its primary focus is to organize development around features, defined as small pieces of functionality that have direct value to the customer.
Each feature is small enough to be implemented in a short period (typically no more than two weeks), allowing for frequent and tangible deliveries of value.
FDD seeks to provide a more formalized structure than other agile methods for managing the complexity inherent in large projects.
FDD Phases and Roles
FDD is organized into five main phases that are developed iteratively:
Develop General Model: Create a high-level object model of the problem domain.
Build Feature List: Identify and list all required features, grouping them by subject area.
Plan by Feature: Sequence the implementation of features and assign feature sets to lead programmers.
- Design by Feature: The feature team produces a detailed design package for each feature.
- Build by Feature: The team implements the code corresponding to the feature, tests it and integrates it.
FDD also defines specific roles to manage this process, including: Project Manager, Lead Architect, Development Manager, Lead Programmer, Class Owner and Domain Expert.
This set of roles and phases provides a clear structure for large-scale development.
Summary
TDD (Test-Driven Development) and FDD (Feature-Driven Development) are specific approaches related to XP. TDD focuses on quality through rigorous testing, while FDD organizes work around features.
TDD reverses the traditional flow, writing the test first. Its cycle is Red (test fails), Green (code passes) and Refactor (improve code).
FDD is an iterative process for large projects, focused on features with direct customer value. It is organized in five phases and includes specific roles.
tdd and fdd xp derived approaches