Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Pruebas unitarias
En resumen, las pruebas unitarias son lo más simples posibles, fáciles de depurar,
confiables (debido a factores externos reducidos), de ejecución rápida y ayudan a
demostrar que los componentes más pequeños de su programa funcionan como
se esperaba antes de que se ensamblen. La advertencia es que, aunque puede
probar que funcionan perfectamente de forma aislada, las unidades de código
pueden explotar cuando se combinan, lo que nos lleva a ...
Pruebas de integración
Pruebas funcionales
Pruebas de aceptación
Las pruebas de aceptación parecen dividirse en dos tipos:
Conclusión
https://es.switch-case.com/52200167
PRUEBAS DE SOFTWARE
La definición de las pruebas se hace con base en los requerimientos de la clase que se está
implementando y las mismas se escriben utilizando herramientas de pruebas unitarias xUnit, luego
se escribe la especificación de la clase acorde a la prueba diseñada, se ejecuta la prueba, la cual
debe fallar, posteriormente se implementa el código, cuando se ejecuta nuevamente la prueba ésta
debe pasar satisfactoriamente. El ciclo TDD se muestra en el siguiente diagrama de actividades:
El código debe pasar diferentes casos de prueba, el abordaje del desarrollo es ir implementando el
código necesario, para ir pasando cada caso de prueba que se haya definido de forma gradual,
esto hace necesario ir modificando el código desarrollado a medida que se van verificando cada
uno de los casos de prueba, a este proceso de modificar el código sin cambiar la interfaz de los
métodos o clases se denomina Refactorizar.
Escribir la menor cantidad de código posible, puesto que solo se debe escribir el código
necesario, para satisfacer las pruebas diseñadas.
Favorecer que el diseño de las clases, cumpla con los principios de alta cohesión y bajo
acoplamiento.
Garantizar la calidad del software que se produce.
Minimizar el esfuerzo de los desarrolladores, puesto que el esfuerzo de codificación se
centra en escribir solo el código necesario para satisfacer las pruebas, sin distraerse en otros
temas.
Propende por la obtención de un código de calidad, limpio, claro, cada pasada dentro del
proceso de refactorización, debe ir acompañada de un refinamiento del código y del algoritmo que
se está implementando.
Reducir a cero el uso de las herramientas de debug.
Proporcionar una retroalimentación temprana, para la detección y corrección, de errores de
codificación y diseño.
Desventajas de TDD
Lo que escribo a continuación es una posición personal de reflexión acerca de TDD, lo que a mi
juicio pueden ser las desventajas de este enfoque.
El hecho de escribir las pruebas antes que el código y hacer que éste último las satisfaga,
no es garantía de que haya un sesgo tanto en la selección de las pruebas como en el desarrollo
mismo del código, sobretodo si es la misma persona quien realiza los dos procesos. Para evitar
esto, se podría apoyar o más bien complementar con técnicas como eXtreme Programming, donde
haya una segunda persona que diseñe las pruebas o que verifique que las mismas sean objetivas
respecto al producto que se desea obtener.
Es una técnica que requiere disciplina por parte de quien decide aplicarla, y es muy fácil
saltarla, o no aplicarla con la debida rigurosidad.
Para ciertas funcionalidades, es muy difícil hacer un set de pruebas suficiente, que
garantice que todos los casos posibles están cubiertos, en estos casos aunque una adecuada
selección de los casos de pruebas puede ayudar, no se puede garantizar un cubrimiento total ni
descartar que el código es correcto para todos los casos.
En el caso de las interfaces de usuario, esta técnica no es de fácil aplicación, puesto que el
diseño de estas pruebas, requiere de tiempo y herramientas especiales, y la idea de TDD como
apoyo a las metodologías ágiles, es propender por ciclos cortos de desarrollo y pruebas.
Al igual que TDD, ATDD exige la definición de las pruebas antes de empezar a codificar, pero
estas pruebas se expresan en términos del comportamiento esperado del software, es decir, que
se deben definir las pruebas de aceptación a nivel funcional antes de escribir el código. Para la
codificación se sugiere que se apoye en la técnica TDD como un complemento de ATDD.
1. Discusión: En las reuniones de planeación, se discute con el equipo de trabajo, las historias de
usuario o casos de uso que se van abordar durante ese ciclo, de tal manera que todo el equipo
conozca en detalle el producto que se espera obtener al finalizar el ciclo en términos de
requerimientos funcionales. Como esta técnica es parte de las metodologías de desarrollo ágil, en
estas reuniones de planeación, generalmente se evalúan los resultados del ciclo de desarrollo
anterior, se hace la retroalimentación y se discuten los refinamientos funcionales del software que
se abordarán en el ciclo que comienza.
3. Desarrollar el código: Se debe abordar el desarrollo del código, éste puede estar apoyado en
técnicas TDD con pruebas unitarias, pero el equipo de desarrollo, debe también ir verificando el
software contra las pruebas funcionales diseñadas, si el software no cumple se debe refactorizar
hasta que pueda pasar las pruebas funcionales.
4. Producir un Demo: Con una determinada frecuencia se debe integrar el código producido por
los diferentes miembros del equipo de desarrollo, con el fin de producir una versión preliminar del
software y aplicarle el set de pruebas diseñado previamente, para ver si pasa o no las pruebas
funcionales de aceptación, si una o varias de las pruebas fallan, se vuelve al proceso de
codificación para hacer los ajustes correspondientes, y se repite el proceso hasta que el software
pase las pruebas de aceptación.
TDD y ATTD, son procesos similares, aunque con enfoques distintos, ATDD apunta al
cumplimiento de requerimientos funcionales o de comportamiento del software de manera general,
mientras que TDD está más orientado a las pruebas detalladas sobre los diferentes métodos de las
clases, estas dos técnicas son complementarias y pueden o no ser aplicadas de forma simultánea.
Para que la integración continua sea posible, se requiere de herramientas que permitan
automatizar el proceso de integración, a estas herramientas se les conoce como servidores de
integración continua, existen muchos como Jenkins, Hudson, Cruise Control, también se hace
necesario un sistema de control de versiones que permita almacenar de forma centralizada las
versiones que se van produciendo del software de tal forma que de ahí se pueda obtener la versión
actualizada que va a ser compilada y probada. otro componente importante son las herramientas
de pruebas que se integran a los servidores de integración continua, para permitir la
automatización de las pruebas.
http://pruebassotfware.blogspot.com/2013/05/tdd-atdd-e-integracion-continua.html