Calculator Engine – Sample TDD

Buenas amigos.

Hacia ya bastante tiempo que no publicaba, hoy estamos de regreso.

Recordando…! Hace un par de meses atrás había comenzado la lectura del libro Diseño Ägil con TDD de Carlos Blé Jurado. He escrito mi primera aplicación, comenzando desde el análisis, diseño e implementación y las formas de iteraccion. Incialmente se comenzo por escuchar al cliente, identificar los requerimientos y requisitos, luego se formuló los criterios de aceptación ATDD (Test de Aceptación), que no son mas que frases cortas y precisas de lo que el cliente quiere.

Los test de aceptación son el punto de partida para todo desarrollo por TDD. A partir de ahí, se presentan los test de desarrollo que no son mas que los hijos* de los ATDD, y estos pueden convertirse en Test Unitarios o Test de Integración.

Muy divertido. Los invito a leer el libro y comenzar el desarrollo de los ejemplos! La implementación y los ejemplos estan en C# y Python.

Aquí puedes descargar la Calculadora desarrollada con TDD. 

A practicar se ha dicho!

Saludos!

 

Principios de Diseño Orientado a Objetos – SOLID

Hace un par de semanas he comenzado a leer sobre Diseño Ágil con TDD (Test Driven Development) de Carlos Blé Jurado. Un libro con bastante ejemplos sobre TDD – Desarrollo Dirigido por Pruebas él cual recomiendo darle una lectura e introducirnos al Desarrollo Ágil con TDD.

En el cápitulo de Diseño Orientado a Objetos se describe la gran importancia de los principios de diseño orientado a objetos en términos de la gestión de dependencias  –  SOLID (Single responsibility, Open-closed, Liskov substitution, Interface segregation and Dependency inversion), los cuales fueron introducidos por Robert C. Martin en 1995. Estos principios son los siguientes:

Principio de Única Responsabilidad – Single Responsibility Principle (SRP)

Cada clase debería tener un único motivo para ser modificada. Si estamos delante de una clase que se podría ver obligada a cambiar ante una modificación en la base de datos y a la vez, ante un cambio en el proceso de negocio, podemos afirmar que dicha clase tiene más de una responsabilidad o más de un motivo para cambiar. Se aplica tanto a clases como a cada uno de sus métodos.

Principio Abierto/Cerrado – The Open Closed Principle (OCP)

Una entidad software (una clase, módulo o función) debe estar abierta a extensiones pero cerrada a modificaciones.  el comportamiento de una entidad debe poder ser alterado sin tener que modificar su propio código fuente.  El nombre de Open-Closed se debe a Bertrand Meyer en 1998.

Principio de Sustitución de Liskov – Liskov Substitution Principle (LSP)

Introducido por Barbara Liskov en 1987. Si una función recibe un objeto como parámetro, de tipo X y en su lugar le pasamos otro de tipo Y, que hereda de X, dicha función debe proceder correctamente por el propio polimorfismo existente. El diseño por contrato (Design by Contract) es otra forma de llamar al LSP.

Principio Segregación de Interfaz – Interface Segregation Principle (ISP)

No obliguemos a los clientes a depender de clases o interfaces que no necesitan usar.  Tal imposición ocurre cuando una clase o interfaz tiene más métodos de los que un cliente (otra clase o entidad) necesita para sí mismo.

Principio de Inversión de Dependencias – Dependency Inversi´on Principle (DIP)

DIP explica que un módulo concreto A, no debe depender directamente de otro módulo concreto B, sino de una abstracción de B. Tal abstracción es una interfaz o una clase (que podría ser abstracta) que sirve de base para un conjunto de clases hijas.

Estos principios describen principalmente la gestión de dependencias entre clases, algo que no se ocupa el modelado tradicional ya que pone más énfasis en la conceptualización de clases.

Saludos!