Testing
75.52 - Taller de programación II
¿Que vamos a ver?
- Introducción
- Historia
- The box approach
- Métodos de testing
- Niveles de test
- Tipos de test
- TDD
- Pruebas Unitarias
- Análisis estático de código
- Code Coverage
- Linting
- Continous Integration
- Continous Delivery
- Continous Deployment
- Demo
¿Por qué hacer tests?
- Calidad del software.
- Tienen un costo.
- Relación con metodologías.
Introducción
Historia
1950
1960
1970
1980
1990
2000
Fix bugs
Exhaustive
Testing
Prove It
Works
Prove It does not
Works
Defect
prevention
& Test process
Test
automation
tools
Early
test
design
Advanced
test
automation
Agile
Historia
The box approach
White Box
Gray Box
Black Box
Se tiene conocimiento del funcionamiento interno del sistema
Se utilizan ambos conceptos
No se tiene conocimiento del funcionamiento interno del sistema
Code debugging
Primitive manual testing
Designed manual testing
Scripted manual testing
Data-driven tests
Automated test scripts
Keyword-driven testing
Advanced Keyword-driven testing
MÉTODOS
DE TESTING
Niveles de Test
(*)Top-down and bottom-up design
Smoke test
donde hay humo, hay fuego”
Acceptance testing
Las pruebas de aceptación son las últimas pruebas realizadas donde el cliente prueba el software y verifica que cumpla con sus expectativas. Estas pruebas generalmente son funcionales y se basan en los requisitos definidos por el cliente y deben hacerse antes de la salida a producción.
Tipos de tests
Conjunto de pruebas a alto nivel que tienen como objetivo comprobar el funcionamiento de las partes críticas de un determinado firmware o software. Esencialmente se utiliza para verificar que una nueva versión de código no ha afectado a las funcionalidades existentes y, por consiguiente, que se puede proceder a realizar un ciclo de pruebas más exhaustivo.
alpha testing
Son realizadas cuando el sistema está en desarrollo y cuyo objetivo es asegurar que lo que estamos desarrollando es probablemente correcto y útil para el cliente.Son normalmente realizadas contra un prototipo desarrollado rápidamente y con poco coste realizado para poder experimentar con él
betha testing
Se realizan cuando el sistema está teóricamente correcto y pasa a ejecutarse en un entorno real. Es la fase siguiente a las pruebas Alpha. Las pruebas beta son pruebas para localizar esos problemas que no han sido detectados y poder corregirlos antes de liberar una versión. Debería ser realizada por usuarios finales
Tipos de tests
regression testing
As a consequence of the introduction of new bugs, program maintenance requires far more system testing per statement written than any other programming. Theoretically, after each fix one must run the entire bank of test cases previously run against the system, to ensure that it has not been damaged in an obscure way. In practice such regression testing must indeed approximate this theoretical ideal, and it is very costly.
Fred Brooks, The Mythical Man month
Tipos de tests
- Variaciones en el software.
- Riesgo asociado.
Performance testing
Tipos de tests
LOAD TESTING
VOLUME TESTING
STRESS TESTING
- Observar el comportamiento de una aplicación bajo una cantidad de peticiones esperada
- Mostrar los tiempos de respuesta de todas las transacciones importantes de la aplicación
- Detectar cuellos de botella.
- Observar el comportamiento de una aplicación ante cambios considerables de tamaño (ej: base de datos)
- Se incrementa de manera extrema la cantidad de usuarios utilizando la aplicación y se observa el comportamiento de la misma.
Security testing
Tipos de tests
Discovery
Vulnerability Scan
Vulnerability Assessment
Security Assessment
Penetration Test
Security Audit
Security Review
Usability testing
Tipos de tests
AcceSsibility testing
- Se relaciona con User Centred Design
- Chequea si la interfaz de usuario es fácil de utilizar y entendible.
- Verifican que la aplicación cumpla con los estándares adecuados para el uso inclusivo de todas las personas
A/B testing
Tipos de tests
TDD
PRUEBAS UNITARIAS
-
Testability
- El código debe ser testeable.
- Evitar variables globales, singletons.
- Evitar código con dependencias ocultas.
- Inversión de dependencias
- Pasar dependencias en el test (polimorfismo).
- Utilizar factory
- El código debe ser testeable.
PRUEBAS UNITARIAS
-
Neccesity
- No es necesario escribir un test por método.
- Se debe probar comportamiento.
- Algunos métodos pueden no necesitar tests.
- Seleccionar variantes del test
- Condiciones de borde
- Input
- Manejo de errores
- No es necesario escribir un test por método.
PRUEBAS UNITARIAS
-
Granularity
- Probar solo un comportamiento por test
void sortAndCheckSize(){
TreeSet<String> animals = new TreeSet<String>();
set.add("lol");
set.add("cat");
assertEquals(2, animals.size());
assertEquals(“lol”, animals.first());
assertEquals(“cat”, animals.last());
}
PRUEBAS UNITARIAS
-
Undersitability
-
Utilizar nombres que describan la naturaleza del test
-
El test verifica precondiciones?
-
El test verifica condiciones de error?
-
-
Nombres precisos
-
Utilizar nombres que describan la naturaleza del test
-
Independently
-
La ejecución de una prueba no debe afectar a la ejecución de otra.
-
PRUEBAS UNITARIAS
-
Maintainability
- Deben tener la misma calidad que código en producción
-
Organizar unit test en suites
-
Refactorizar evita duplicación
-
Extraer código común en métodos
-
Extraer funcionalidad común en clases
-
-
Eliminar test redundantes
-
Automatability
- No debería requerirse una intervención manual
Análisis estático de código
CODE COVERAGE
- Tener en claro que se esta midiendo con esta cobertura.
- No cumplir con métricas sin sentido.
- Poco y bueno > Mucho y malo
CODE COVERAGE
Linting
Linting is the process of running a program that will analyse code for potential errors.
- Algunas ventajas:
- Estandarizar estilo de código bajo convenciones.
- Detección de bugs.
- Utilizar mejores prácticas.
CONTINUOUS integration
CONTINUOUS Delivery
CONTINUOUS deployment
DEMO
Bibliografía
-
Continous Delivery https://martinfowler.com/bliki/ContinuousDelivery.html (accessed Apr 27, 2018)
-
Test Coverage https://martinfowler.com/bliki/TestCoverage.html (accessed Apr 27, 2018)
-
What is the history of automated software testing? https://www.quora.com/What-is-the-history-of-automated-software-testing/answer/Thuc-Nguyen-51 (accessed Apr 28, 2018)
-
Software testing tactics https://en.wikipedia.org/wiki/Software_testing_tactics (accessed Apr 28, 2018)
-
Frederik Brooks The Mytical Man Month [Online]; pp 122. https://is.muni.cz/www/208322/The.Mythical.Man.Month.F.Brooks.pdf (accessed May 1, 2018).
¿Preguntas?
¡Muchas gracias!
TESTING 1C-2018
By Agustin Rojas
TESTING 1C-2018
- 255