Programación extrema

La versión actual de la página aún no ha sido revisada por colaboradores experimentados y puede diferir significativamente de la versión revisada el 27 de abril de 2019; las comprobaciones requieren 18 ediciones .

Extreme Programming ( Programación Extrema , XP ) es una de las metodologías ágiles de desarrollo de software .  Los autores de la metodología son Kent Beck , Ward Cunningham , Martin Fowler y otros.

El nombre de la metodología proviene de la idea de aplicar prácticas y métodos tradicionales útiles de desarrollo de software, llevándolos a un nuevo nivel "extremo". Así, por ejemplo, la práctica de realizar revisión de código , que consiste en comprobar por un programador el código escrito por otro programador, en la versión "extrema" es "programación en pareja", cuando un programador está escribiendo código, y su compañero en el Al mismo tiempo, está revisando continuamente qué código está escrito.

Historia

La metodología fue desarrollada por Kent Beck durante su trabajo en el proyecto de nómina Chrysler Comprehensive Compensation System (C3) . Beck se convirtió en el especialista principal del proyecto en marzo de 1996. Comenzó a mejorar la metodología de desarrollo utilizada en el proyecto y escribió un libro al respecto, Explicación de la programación extrema (publicado en octubre de 1999). [1] El proyecto se cerró en febrero de 2000.

Trucos básicos de XP

Las doce técnicas básicas de Programación Extrema (según la primera edición de Programación Extrema explicada ) se pueden agrupar en cuatro grupos:

Pruebas

XP implica escribir pruebas automatizadas (código escrito específicamente para probar la lógica de otro código). Se presta especial atención a dos tipos de pruebas:

Un desarrollador no puede estar seguro de la corrección del código que escribe hasta que funcionen absolutamente todas las pruebas unitarias del sistema que desarrolla. Las pruebas unitarias (unit tests) permiten a los desarrolladores asegurarse de que cada uno de ellos individualmente funcione correctamente. También ayudan a otros desarrolladores a comprender por qué se necesita una pieza de código en particular y cómo funciona: en el curso del estudio del código de prueba, la lógica del código bajo prueba se vuelve clara, ya que está claro cómo debe usarse. Las pruebas unitarias también permiten al desarrollador refactorizar sin ningún temor .

Las pruebas funcionales están diseñadas para probar el funcionamiento de la lógica formada por la interacción de varias partes (a menudo de un tamaño bastante impresionante). Son menos detallados que las pruebas unitarias, pero cubren mucho más, es decir, las pruebas que, cuando se ejecutan, afectan una mayor cantidad de código, obviamente tienen una mayor probabilidad de detectar cualquier comportamiento incorrecto. Por esta razón, en la programación industrial, escribir pruebas funcionales a menudo tiene prioridad sobre escribir pruebas unitarias.

Para XP, un enfoque llamado TDD (del inglés  test-driven development  - desarrollo a través de pruebas ) es una prioridad más alta. De acuerdo con este enfoque, primero se escribe una prueba que inicialmente falla (ya que la lógica que debe verificar simplemente no existe todavía), luego se implementa la lógica necesaria para que la prueba pase. TDD, en cierto sentido, le permite escribir código que es más conveniente de usar, porque al escribir una prueba, cuando aún no hay lógica, es más fácil ocuparse de la conveniencia del futuro sistema.

El juego de planificación

El objetivo principal del juego de planificación es formar rápidamente un plan de trabajo aproximado y actualizarlo constantemente a medida que las condiciones de la tarea se vuelven más claras. Los artefactos del juego de planificación son un conjunto de tarjetas de papel que contienen los deseos del cliente (historias de clientes) y un plan de trabajo aproximado para el lanzamiento de la siguiente o más pequeñas versiones del producto. El factor crítico que hace que este estilo de planificación sea efectivo es que en este caso el cliente es el responsable de tomar las decisiones comerciales y el equipo de desarrollo es responsable de tomar las decisiones técnicas. Si no se sigue esta regla, todo el proceso se desmorona.

El cliente siempre está ahí

El "cliente" en XP no es quien paga las facturas, sino el usuario final del producto de software. XP afirma que el cliente debe estar en contacto todo el tiempo y disponible para preguntas.

Programación en pareja

La programación en pares asume que todo el código es creado por pares de programadores que trabajan en la misma computadora. Uno de ellos trabaja directamente con el texto del programa, el otro mira su trabajo y sigue el panorama general de lo que está sucediendo. Si es necesario, el teclado se transfiere libremente de uno a otro. Mientras se trabaja en un proyecto, los pares no son fijos: se recomienda mezclarlos para que cada programador del equipo tenga una buena idea de todo el sistema. Por lo tanto, la programación en pareja mejora la interacción dentro del equipo.

Integración Continua

Si integra el sistema en desarrollo con la suficiente frecuencia, puede evitar la mayoría de los problemas asociados con él. En los métodos tradicionales, la integración, por regla general, se realiza al final del trabajo en el producto, cuando se considera que todos los componentes del sistema que se está desarrollando están completamente listos. En XP, la integración del código de todo el sistema se realiza varias veces al día, después de que los desarrolladores se hayan asegurado de que todas las pruebas unitarias funcionen correctamente.

Refactorización

La refactorización es una técnica para mejorar el código sin cambiar su funcionalidad. XP implica que una vez que se escribe el código, es casi seguro que se rehará muchas veces durante el transcurso de un proyecto. Los desarrolladores de XP están reelaborando despiadadamente el código escrito previamente para mejorarlo. Este proceso se llama refactorización. La falta de cobertura de pruebas provoca el rechazo a la refactorización por temor a romper el sistema, lo que conduce a la degradación paulatina del código.

Pequeños lanzamientos frecuentes

Las versiones (lanzamientos) del producto deben entrar en producción con la mayor frecuencia posible. El trabajo en cada versión debe tomar el menor tiempo posible. Al mismo tiempo, cada versión debe ser lo suficientemente significativa en términos de utilidad para el negocio.

Cuanto antes se lance la primera versión funcional del producto, antes comenzará el cliente a recibir beneficios adicionales debido a ello. Recuerda que el dinero ganado hoy vale más que el dinero ganado mañana. Cuanto antes el cliente comience a usar el producto, antes los desarrolladores recibirán información de él sobre lo que cumple con los requisitos del cliente. Esta información puede ser extremadamente útil al planificar su próximo lanzamiento.

Facilidad de diseño

XP proviene del hecho de que, en el curso del trabajo, las condiciones del problema pueden cambiar repetidamente, lo que significa que el producto que se está desarrollando no debe diseñarse de antemano por completo y por completo. Intentar diseñar el sistema en detalle al comienzo del trabajo es una pérdida de tiempo. XP sugiere que el diseño es un proceso tan importante que debe realizarse continuamente durante la vida del proyecto. El diseño debe llevarse a cabo en pequeños pasos, teniendo en cuenta los requisitos en constante cambio. En cada momento, debe tratar de usar el diseño más simple que se adapte al problema actual y cambiarlo a medida que cambien las condiciones del problema.

Kent Beck y Martin Fowler [2] proponen describir el "diseño simple" como el cumplimiento de los siguientes cuatro criterios:

  1. El sistema pasa todas las pruebas.
  2. Cada elemento del sistema tiene su propio propósito claro.
  3. No hay duplicidad en el sistema.
  4. El sistema contiene la menor cantidad de elementos posible.

Robert Martin está de acuerdo [3] con estas reglas, pero en su trabajo anterior [4] también sugiere describir el "diseño simple" con los siguientes tres principios:

Metáfora del sistema

La arquitectura es una representación de los componentes de un sistema y sus relaciones entre sí. Los desarrolladores deben analizar la arquitectura del software para comprender en qué parte del sistema necesitan agregar una nueva funcionalidad y con qué interactuará el nuevo componente.

La metáfora del sistema es análoga a lo que la mayoría de las técnicas llaman arquitectura. La metáfora del sistema le da al equipo una idea de cómo funciona el sistema actualmente, dónde se agregan nuevos componentes y qué forma deben tomar.

Elegir una buena metáfora facilita que el equipo de desarrollo entienda cómo funciona el sistema. A veces esto no es fácil de hacer.

En este punto, Bob Martin ha reconocido que la metáfora del sistema está desactualizada y debería ser reemplazada por Domain Driven Design .

Estándares de formato de código

Todos los miembros del equipo en el curso del trabajo deben cumplir con los requisitos de los estándares de codificación comunes. De este modo:

Si el equipo no usa estándares de codificación uniformes, se vuelve más difícil para los desarrolladores refactorizar; al cambiar de pareja en parejas, hay más dificultades; en general, el progreso del proyecto es difícil. En el marco de XP, es necesario dificultar la comprensión de quién es el autor de este o aquel código: todo el equipo trabaja de manera unificada, como una sola persona. El equipo debe formar un conjunto de reglas y luego cada miembro del equipo debe seguir estas reglas mientras escribe el código. La lista de normas no debe ser exhaustiva ni demasiado voluminosa. La tarea es formular pautas generales que harán que el código sea comprensible para cada uno de los miembros del equipo. El estándar de codificación debe ser simple al principio, luego puede volverse más complejo gradualmente a medida que el equipo de desarrollo adquiere experiencia. No es necesario dedicar demasiado tiempo a la redacción previa de una norma.

Propiedad colectiva

La propiedad colectiva significa que cada miembro del equipo es responsable de todo el código fuente . Por lo tanto, todos tienen derecho a realizar cambios en cualquier parte del programa. La programación en pares apoya esta práctica: trabajando en diferentes pares, todos los programadores se familiarizan con todas las partes del código del sistema. Un beneficio importante de la propiedad colectiva del código es que acelera el proceso de desarrollo, ya que cuando ocurre un error, cualquier programador puede corregirlo.

El derecho de cada programador a cambiar el código corre el riesgo de que los programadores introduzcan errores que creen que saben lo que están haciendo pero no consideran algunas dependencias. Los programadores extremos creen que las pruebas unitarias bien definidas resuelven este problema: si las dependencias no revisadas generan errores, la próxima ejecución de las pruebas unitarias fallará y revelará el problema.

Notas

  1. Lee Copeland. Programación extrema  . Computerworld (3 de diciembre de 2001). Recuperado: 26 de noviembre de 2019.
  2. Reglas de diseño de Beck
  3. Artesanía limpia: disciplinas, estándares y ética, Robert C. Martin, ISBN 978-0136915713
  4. Desarrollo de software ágil, principios, patrones y prácticas, Robert C. Martin
  5. El programador pragmático, edición del vigésimo aniversario, David Thomas y Andrew Hunt, 2019, Addison Wesley, ISBN 978-0135957059

Literatura

Véase también

Enlaces