Prólogo
Prefacio
1. Artesanía
Parte I. Las disciplinas
Programación Extrema
El círculo de la vida
Desarrollo guiado por pruebas
La refactorización
Diseño simple
Programación colaborativa
Pruebas de aceptación
2. Desarrollo guiado por pruebas (TDD)
Panorama general
Software
Las tres leyes del TDD
La cuarta ley
Conceptos básicos
Ejemplos simples
Stack
Factores primos
La partida de bolos
Conclusión
3. TDD avanzado
Ordenamiento 1
Ordenamiento 2
Atascarse
Arrange, Act, Assert
Llega el BDD
Máquina de estados finitos
Otra vez el BDD
Dobles de pruebas
Dummy
Stub
Spy
Mock
Fake
El principio de incertidumbre del TDD
Londres frente a Chicago
El problema de la certeza
Londres
Chicago
Síntesis
Arquitectura
Conclusión
4. Diseño de pruebas
Probar bases de datos
Probar GUI
Entrada de GUI
Patrones de pruebas
Test-specific subclass
Self-Shunt
Humble Object
Diseño de pruebas
El problema de las pruebas frágiles
La correspondencia uno a uno
Romper la correspondencia
El videoclub
Especificidad frente a generalidad
Premisa de prioridad de transformación
{} Nulo
Nulo Constante
Constante Variable
Incondicional Selección
Valor Lista
Sentencia Recursividad
Selección Iteración
Valor Valor mutado
Ejemplo: Fibonacci
La premisa de prioridad de transformación
Conclusión
5. Refactorización
¿Qué es la refactorización
El kit de herramientas básico
Cambiar nombre
Extraer método
Extraer variable
Extraer campo
El cubo de Rubik
Las disciplinas
Pruebas
Pruebas rápidas
Romper todas las correspondencias uno a uno profundas
Refactorice continuamente
Refactorice sin piedad
¡Que sigan pasándose las pruebas!
Déjese una salida
Conclusión
6. Diseño simple
YAGNI
Cubierto por pruebas
Cobertura
Un objetivo asintótico
¿Diseño?
Pero hay más
Maximizar la expresión
La abstracción subyacente
Pruebas: la otra mitad del problema
Minimizar la duplicación
Duplicación accidental
Minimizar el tamaño
Diseño simple
7. Programación colaborativa
8. Pruebas de aceptación
La disciplina
La construcción continua
Parte II. Los estándares
Su nuevo director de tecnología
9. Productividad
Nunca enviaremos c**a
Adaptabilidad barata
Siempre estaremos listos
Productividad estable
10. Calidad
Mejora continua
Competencia sin miedo
Calidad extrema
No le echamos el muerto a QA
La enfermedad de QA
QA no encontrará nada
Automatización de pruebas
Pruebas automatizadas e interfaces de usuario
Probar la interfaz de usuario
11. Valor
Nos cubrimos unos a otros
Estimaciones honestas
Debe decir "no"
Aprendizaje agresivo continuo
Enseñanza
Parte III. La ética
El primer programador
Setenta y cinco años
Empollones y salvadores
Modelos a imitar y villanos
Gobernamos el mundo
Catástrofes
El juramento
12. Daño
Primero, no cause daño
No causar daño a la sociedad
No causar daño a la función
No causar daño a la estructura
Soft
Pruebas
El mejor trabajo
Hacerlo bien
¿Qué es una buena estructura?
La matriz de Eisenhower
Programadores como partes interesadas
Lo mejor
Prueba repetible
Dijkstra
Demostrar la corrección
Programación estructurada
Descomposición funcional
Desarrollo guiado por pruebas
13. Integridad
Ciclos pequeños
La historia del control del código fuente
Git
Ciclos cortos
Integración continua
Ramas frente a toggles
Despliegue continuo
Construcción continua
Mejora incansable
Cobertura de las pruebas
Prueba de mutaciones
Estabilidad semántica
Limpieza
Creaciones
Mantener una productividad alta
Viscosidad
Gestionar las distracciones
Gestión del tiempo
14. Trabajo en equipo
Trabajar como un equipo
Oficina abierta/virtual
Estimar de forma honesta y justa
Mentiras
Honestidad, exactitud, precisión
Historia 1: Vectores
Historia 2: pCCU
La lección
Exactitud
Precisión
Agregación
Honestidad
Respeto
Nunca deje de aprender
Índice alfabético