He estado leyendo sobre pruebas unitarias, TDD y los principios SÓLIDOS, y necesito algunas aclaraciones. Según entiendo, si se sigue el principio de abierto/cerrado, las pruebas unitarias podrían resultar innecesarias debido a que el código está cerrado a modificaciones, por lo que no es necesario volver a realizar la prueba si el código se ha aislado y desacoplado correctamente. El beneficio a largo plazo del costo inicial agregado de las pruebas unitarias se pierde si una vez que el código pasa las pruebas de unidades relacionadas, no cambiará. El código siempre pasará porque nunca cambiará, ¿verdad? Las clases heredadas deberán probarse, pero una vez que pasen las pruebas relacionadas, también estarán cerradas a la modificación y no necesitarán volver a someterse a prueba. The Wikipedia article on OCP refuerza esta línea de pensamiento en el primer párrafo, (me doy cuenta de que eso no lo convierte en ley).
La mejor explicación que he encontrado para OCP y TDD viviendo en armonía is here, aunque parece que Arnon dice que OCP complementa TDD en que se desaconseja a los desarrolladores modificar el código fuente porque los métodos de prueba existentes pueden volverse complejos cuando se modifican para probar nueva funcionalidad.
¿Eso es todo lo que hay que hacer? Ten en cuenta que no estoy buscando una discusión, soy nuevo en esto y estoy buscando una aclaración de aquellos con más experiencia con el tema que yo.¿Cómo funcionan el desarrollo basado en pruebas y el principio abierto/cerrado?
Respuesta
Incluso si aceptaras que una vez que el software funciona y no cambia, no es necesario que lo pruebe (lo que yo no), aún necesita mostrar que un componente funciona en primer lugar. Yo diría que una de las mejores maneras de hacerlo es una prueba de unidad (es).
Además, en términos prácticos, una vez que tiene la prueba, cuesta muy poco ejecutarla. Entonces, incluso si los componentes no cambian, no está perdiendo mucho ejecutando continuamente las pruebas. Además, algunas veces los cambios de diseño necesitan volver atrás y volver a hacer algunos componentes. Tener pruebas unitarias definitivamente ayuda en este caso ...
Recuerde, uno de los resultados de tener un conjunto de pruebas es que promueve el mantenimiento mostrando cuando algo cambios. Entonces, incluso si su equipo sigue a la O en SOLIDO, eso no significa que las cosas no se cambien accidentalmente. Entonces, las pruebas ayudan allí al mostrar si algo ha cambiado inadvertidamente, y le muestran exactamente qué se vio afectado por el cambio.
unidad de pruebas podría convertirse en gran medida innecesaria debido al hecho de que el código está cerrado a la modificación
Bueno, no del todo. ¿Cómo sabes que la implementación original, cerrada, es correcta?
El beneficio a largo plazo del costo inicial agregado de las pruebas unitarias se pierde
Un hallazgo importante de la economía de la ingeniería de software es que es mucho más costoso para detectar y corregir un defecto más tarde en la vida de una producto. IIRC, por un orden de magnitud para cada etapa en un proceso clásico de desarrollo de "cascada". Como las pruebas unitarias (ya sea TDD o prueba primero) detectan los defectos de manera temprana, pueden recuperar rápidamente sus costos.
no va a cambiar
Si tiene un defecto en ella tendrá que ser cambiado. Por supuesto, si puede garantizar que su código no contenga defectos, lo que diga es cierto. Pero si puede garantizar que no necesita ningún tipo de prueba. Pero muy pocos proyectos de software pueden hacer tal afirmación.
- 1. Probando el desarrollo basado en pruebas
- 2. Desarrollo basado en pruebas para JSP específicamente
- 3. ¿Cómo evitar los usuarios en desarrollo basado en pruebas?
- 4. F # desarrollo y pruebas unitarias?
- 5. Desarrollo basado en pruebas con ASP.NET MVC: ¿por dónde empezar?
- 6. Desarrollo basado en pruebas que no funciona para mi clase
- 7. ¿Cómo funcionan las pruebas unitarias en el iPhone?
- 8. ¿Cómo debo comenzar el desarrollo web basado en Java?
- 9. desarrollo en el dispositivo basado en Android de forma inalámbrica
- 10. Desarrollo basado en web para el lenguaje C
- 11. ¿cuál es el principio del patrón de diseño en el desarrollo de Android?
- 12. ¿Cómo se relacionan entre sí la arquitectura orientada a servicios y el desarrollo basado en componentes?
- 13. ¿Cómo encontrar errores relacionados con el negocio al principio de las prácticas de desarrollo de software?
- 14. ¿Las pruebas unitarias son adecuadas para el desarrollo de BPM?
- 15. ¿Cómo añado el archivo al principio?
- 16. ¿Cómo funcionan el trabajo libre y malloc en C?
- 17. ¿Cómo funcionan el almacenamiento en caché 'Prioridad' y 'AbsoluteExpiration'?
- 18. ¿Cómo funcionan exactamente MbUnit [Parallelizable] y DegreeOfParallelism?
- 19. ¿Cómo pruebo el desarrollo de GWT?
- 20. Siguiendo el principio DRY en ASP.NET
- 21. campo relacional y el desarrollo
- 22. ¿Cuándo utilizar el desarrollo impulsado por dominio y el desarrollo impulsado por base de datos?
- 23. ¿Cómo comenzar en el desarrollo de Windows?
- 24. ¿Cómo inicializar el singleton basado en Java?
- 25. AVAudioPlayer detener un sonido y reproducirlo desde el principio
- 26. Servidor SMTP local que se puede usar para pruebas y desarrollo: no entregará realmente el correo
- 27. ¿Cómo se ve realmente el principio DRY en ASP.NET MVC?
- 28. ¿Cómo configuro el corredor de pruebas VS2012 para recoger y ejecutar las pruebas unitarias de Gallio?
- 29. ¿Alguna idea sobre las pruebas A/B en el proyecto basado en Django?
- 30. Cómo configurar encabezados y bibliotecas para el desarrollo de Linux
Recuerda siempre que SOLID es una mejor práctica, no una ley de la física de la que depende el equilibrio armonioso del universo; las reglas SOLIDAS se pueden romper fácilmente. Incluso si se sigue religiosamente, un diseño SOLIDO simplemente no puede cerrarse a todos los cambios posibles; cerrándose a un tipo de cambio a menudo hace que otro tipo de cambio sea más probable y/o más difícil. – KeithS