infuerno.github.io

Martin: Agile Principles, Patterns, and Practices in C#

Section I: Agile Development

Chapter 1. Agile Practices

Many of us have lived through the nightmare of a project with no practices to guide it. The lack of effective practices leads to unpredictability, repeated error, and wasted effort. Customers are disappointed by slipping schedules, growing budgets, and poor quality. Developers are disheartened by working ever-longer hours to produce ever-poorer software.

Agile Manifesto

Principles

Chapter 2. Overview of Extreme Programming

Chapter 3. Planning

Many developers find it helpful to use “perfect programming hours” as their task points

Chapter 4. Testing

Unit tests drive the architecture at a class and module level, exposing areas which ought to be decoupled. The need to isolate the module under test forces us to decouple in ways that are beneficial to the structure of the whole program.

Acceptance tests are black box tests (where unit tests are white box tests), written by people who don’t know the internals of the system e.g. custoemr, BAs, testers, QAs. Writing acceptance tests has a profound effect on the architecture. The system needs to be decoupled at the high architecture level e.g. UI decoupled from business rules.

Chapter 5. Refactoring

A module has three functions:

  1. The function it performs while executing - reason for existence
  2. To afford change - all modules will change, responsibility of the developers to ensure future changes will be simple to make
  3. To communicate to its readers - readily understandable - a module which isn’t readable is broken and needs to be fixed.

It takes something more than just principles and patterns to make a module that is easy to read and change. It takes attention. It takes discipline. It takes a passion for creating beauty.

Chapter 6. A Programming Episode

Section II. Agile Design