Unidad 3: Diseño y realización de prueba
Last updated
Last updated
En esta Unidad aprenderemos a:
Identificar los diferentes tipos de pruebas.
Definir casos de prueba.
Efectuar pruebas unitarias de clases y funciones.
Efectuar pruebas de integración, de sistema y de aceptación.
Realizar medidas de calidad sobre el software desarrollado.
Una buena prueba debe centrarse en dos objetivos:
probar si el software no hace lo que debe hacer
probar si el software hace lo que no debe hacer.
Existen distintos frameworks para la realización de pruebas.
En general, un framework (marco de trabajo) está compuesto por:
un conjunto de las mejores prácticas y suposiciones
herramientas comunes
bibliotecas
Permite unificar el proceso de desarrollo entre desarrolladores.
Pruebas dinámicas: Requieren la ejecución de la aplicación. Permiten medir el comportamiento de la aplicación desarrollada.
Pruebas estáticas: Se realizan sin ejecutar el código de la aplicación. Se examina el código fuente.
Caja negra: Se estudia el sistema desde fuera. Son pruebas funcionales.
Caja blanca: Se examina el código fuente y su ejecución. Son pruebas estructurales.
Se estudia el sistema desde fuera.
Se trabaja sobre la interfaz.
No se tienen en cuenta los detalles internos de funcionamiento.
Se proporcionan entradas y se estudian las salidas.
Principales técnicas:
Particiones de equivalencia
Valores límite
Se examina el código fuente y su ejecución.
Se comprueban los flujos de ejecución dentro de cada unidad (función, clase, módulo, etc.)
También pueden comprobarse los flujos entre unidades durante la integración.
E incluso entre subsistemas, durante las pruebas de sistema.
Principales técnicas:
Cobertura lógica
Prueba de bucles
Funcionales: Evaluan el cumplimiento de los requisitos.
No funcionales: Evaluan aspectos adicionales como rendimiento, seguridad, ...
Pruebas unitarias (o de unidad)
Pruebas de regresión
Pruebas de integración
Pruebas del sistema
Pruebas de humo (smoke test)
Pruebas alfa y beta
Pruebas de aceptación (validación por parte del cliente)
Pruebas de usabilidad
Pruebas de rendimiento
Pruebas de stress
Pruebas de seguridad
Pruebas de compatibilidad
Pruebas de portabilidad
...
Manual
Mediante pruebas realizadas por personal de la empresa o externo.
Automático
Mediante software que ejecuta código de forma automatizada y compara los resultados obtenidos y los resultados esperados.
Puntos de ruptura
Ejecución paso a paso
Análisis de variables
Frameworks de pruebas (xUnit)
Aserciones
https://en.wikipedia.org/wiki/XUnit
Java: JUnit, TestNG
C++: CppUnit, Google Test
PHP: PHPUnit
Javascript: Mocha
https://en.wikipedia.org/wiki/List_of_unit_testing_frameworks
precondición --> postcondición
Una entrada conocida --> Una salida esperada
http://www.jtech.ua.es/j2ee/publico/lja-2012-13/sesion04-apuntes.html
@BeforeClass / @BeforeAll
@Before / @BeforeEach
@Test
@After / @AfterEach
@AfterClass / @AfterAll
@Ignore / @Disabled
https://junit.org/junit5/docs/5.0.1/api/org/junit/jupiter/api/Assertions.html
Desarrollo guiado por pruebas de software, o Test-Driven Development (TDD)
Escribir las pruebas primero (Test First Development).
Refactorización (Refactoring).
Integración Big bang
Integración Descendente
Integración Ascendente
Integración Continua (CI)
CI : Integración continua CD : Despliegue continuo
Jenkins
Bamboo
TravisCI
CircleCI
Note: CI=Continuous Integration / CD=Continuous Delivery.
Control de calidad = medición de la calidad de un producto --> Pruebas
QA es un conjunto de actividades para garantizar la calidad en los procesos mediante los cuales se desarrollan los productos.
QC es un conjunto de actividades para garantizar la calidad de los productos. Las actividades se centran en identificar defectos en los productos reales producidos.
Note: QA = Quality Assurance / QC = Quality Control
Corrección
Fiabilidad
Eficiencia
Seguridad
Facilidad de uso
Mantenibilidad
Flexibilidad
Facilidad de prueba
Portabilidad
Reusabilidad
Interoperatividad