La importancia sobre las Pruebas Unitarias
Aplicar el TDD no es fácil, ya que requiere un cambio de mentalidad y profundizar bastante en las metodologías ágiles de programación. Este concepto pretende que primero se diseñen los test para nuestro módulo y luego se escriba el módulo. De esta manera el Software tiente a estar mejor diseñado, menos acoplado y más fácilmente mantenible, porque el programador es libre de hacer decisiones de diseño y hacer refactoring en cualquier momento con la seguridad de que el software todavía funciona. El test actúa evitando los bugs, si el desarrollador encuentra un bug, se crear un test que verifique que existe y luego se cambia en el módulo y se vuelve a pasar el test. Con todos estos test, el tiempo de depuración se reduce.
En la siguiente figura podemos ver que cuanto más complejo se vuelve el software y más grande, menos productivo es. Con el crecimiento del tamaño de los proyectos de software, y la complejidad del testeo del código Orientado a Objetos, las aplicaciones tienen millones de combinaciones, estados y caminos. Es imposible para alguien imaginar cada posible estado, incluso cada posible solución.

Numerosos estudios nos muestran que el coste de arreglar un defecto o error en nuestro programa se ve magnificado en función de la fase en que se encuentre. Esto significa que reparar un bug en la fase release puede costar 100 veces más que en la fase de codificación.
Las pruebas unitarias son necesarias (y obligatorias). Idealmente cada desarrollador debería producir un juego de test para validad cada método individual y clase que hayan escrito. Toma bastante tiempo identificar las áreas más problemáticas, escribir los tests, ejecutarlos, monitorizar los resultados, ficheros de seguimiento, etc. Y además, es bastante complicado para nosotros como seres humanos esperar lo "inesperado" (cosas que nunca habíamos imaginado que pasarían). La automatización de las pruebas ayuda mucho y es esencial. Hay que habituarse a utilizarlos ya sea mediante los xUnit o con Mock Objects o Stubs.- Que nos aporta Agile Development?
En un post anterior sobre las nueve reglas de oro hice una pequeña introducción al desarrollo ágil y la programación extrema. Agile nos entrega una serie de herramientas que permiten mejorar la calidad de nuestro software haciendo que todo el equipo de desarrollo se involucre en esta metodología de trabajo.
El desarrollo Agile, nos introduce muchas herramientas muy interesantes para mejorar nuestra productividad y hacer que nuestro producto salga con una gran calidad y con muy pocos errores. Aquí os dejo un enlace con los axiomas del movimiento ágil: http://www.agileaxioms.com/- Scrum
- Unit testing
- Test Driven Development
- Pair programming
- Sprints/Iterations
- Writing user stories
- Continuous integration
- Bug Tracking
PD: En los enlaces de interés hay una historia muy interesante sobre la complejidad del software de las naves espaciales, y como resuelven todo este tema.- Enlaces de interés:
http://haacked.com/archive/2006/10/20/The_Misuse_of_the_Space_Shuttle_Analogy.aspx
http://www.codinghorror.com/blog/archives/000113.html
%20applied%20to%20Transformer%20models%20in%20machine%20learning.%20The%20image%20shows%20a%20neural%20networ.webp)

Comments
Post a Comment