Articulo de referencia

Premisa de prioridad de la transformación

La premisa de prioridad de transformación ( TPP , por sus siglas en inglés) es un enfoque de programación desarrollado por Robert C. Martin (Tío Bob) como un perfeccionamiento p...

La premisa de prioridad de transformación ( TPP , por sus siglas en inglés) es un enfoque de programación desarrollado por Robert C. Martin (Tío Bob) como un perfeccionamiento para hacer que el proceso de desarrollo guiado por pruebas (TDD, por sus siglas en inglés) sea más fácil y efectivo para un programador informático.

La premisa de prioridad de transformación establece que se deben preferir las transformaciones más simples:

[...] Las refactorizaciones tienen su contraparte, las transformaciones . Las refactorizaciones son operaciones sencillas que modifican la estructura del código sin alterar su comportamiento. Las transformaciones, en cambio, modifican el comportamiento del código. Pueden utilizarse como único método para superar la prueba que está fallando en el red/green/refactorciclo. Las transformaciones tienen una prioridad, o un orden preferido, que, si se mantiene, mediante el orden de las pruebas, evitará bloqueos o interrupciones prolongadas en el red/green/refactorciclo.

Robert Martin , "La premisa de la prioridad de la transformación", [ 1 ] Blog del tío Bob

Este enfoque facilita que el programador haga lo más sencillo posible para los fines del desarrollo guiado por pruebas, ya que puede referirse explícitamente a la lista de transformaciones y dar preferencia a las transformaciones más simples (las que están al principio de la lista) sobre las que están más abajo en la lista en primera instancia.

La premisa de prioridad de transformación es el nombre que se le da a la estructura mental que los desarrolladores de TDD construyen con el tiempo para equilibrar el código, evitando que sea demasiado específico o demasiado genérico. La idea es que, con cada ejemplo que se agrega a las pruebas, se avanza en la lista de prioridad de transformación, lo que hace que el código sea más genérico y, por lo tanto, capaz de manejar más casos. Por el contrario, con más ejemplos, las pruebas se vuelven cada vez más específicas y se centran en el problema. Así, se comienza con una constante para la primera prueba, para la siguiente prueba se podría cambiar esa constante por una condición "if", y para el siguiente paso se podría introducir un bucle. Cada vez se avanza en la premisa de prioridad. El objetivo de seguir esta estructura es evitar complicaciones accidentales y agregar solo lo esencial. Cada paso es el cambio más pequeño posible que se puede hacer para implementar solo el código necesario para implementar los ejemplos proporcionados en la prueba.

Billie Thompson, Transform Priority Premise - Tema del día de ingeniería de software n.° 21 [ 2 ]

Las transformaciones

Fuente: [ 3 ]

  1. ({} → nil) ningún código → código que emplea nil
  2. (nulo → constante)
  3. (constante → constante+) una constante simple a una constante más compleja
  4. (constante → escalar) reemplazar una constante por una variable o un argumento.
  5. (declaración → declaraciones) agregando más declaraciones incondicionales.
  6. (incondicional → if) dividiendo la ruta de ejecución
  7. (escalar → matriz)
  8. (matriz → contenedor)
  9. (sentencia → recursión de cola)
  10. (si → mientras)
  11. (sentencia → recursión no de cola)
  12. (expresión → función) reemplazar una expresión por una función o algoritmo.
  13. (variable → asignación) reemplazar el valor de una variable.
  14. (caso) agregar un caso (o otro) a un interruptor existente o si

Robert Martin también declaró explícitamente: "Es probable que haya otros", [ 1 ] y

[Creo] que la lista de prioridades es específica del lenguaje... En Java, por ejemplo, podríamos mover (if→while) y (variable→assignment) por encima de (statement→tail-recursion) de modo que la iteración siempre se prefiera a la recursión, y la asignación se prefiera al paso de parámetros... porque Java no es un lenguaje funcional.

Robert Martin, entrada de blog "Fib. La premisa TP" [ 3 ]

Cómo utilizar las transformaciones en la práctica

Ridlehoover aclara que las transformaciones ayudan a elegir qué pruebas escribir y en qué orden.

Las transformaciones pueden ayudarnos a elegir qué pruebas escribir y en qué orden. Por ejemplo, si decidimos escribir una prueba que requiere agregar una sentencia `if` a nuestro código, esa prueba requiere la transformación `incondicional -> if`. Sabiendo esto, podemos pensar en otras pruebas que dependan exclusivamente de transformaciones más avanzadas. La ventaja final es que, al escribir nuestras pruebas siguiendo el orden de prioridad de las transformaciones, nunca llegaremos al punto en que una prueba nos obligue a reescribir un método completo.

Alan Ridlehoover, La premisa de la prioridad de la transformación [ 4 ]

Corey Haines ofrece una demostración de programación en vivo ( Kata de números romanos ) donde resuelve un desafío de programación utilizando las transformaciones.

Referencias

  1. 1 2 Martin, Robert (2010). "La premisa de prioridad de la transformación" .
  2. Thompson, Billie (2021). "La premisa de prioridad de la transformación" .
  3. 1 2 Martin, Robert (2010). "Fib. La premisa TP" .
  4. Ridlehoover, Alan (2011). "La premisa de prioridad de la transformación" . Code Gardener .
  • Kata de números romanos con comentarios
  • Se aplica la premisa de prioridad de transformación
  • La premisa de prioridad de la transformación explicada por el tío Bob
  • Publicación original del blog de Bob Martin sobre el TPP
  • Una entrada de blog posterior en la que Bob Martin amplió la lista de transformaciones.
  • Grabación en vídeo de su presentación original de TPP en la NDC (Conferencia Noruega de Desarrolladores) de 2011 en YouTube.