Curso Dr. Nazareno Aguirre

Generación Automática de Tests Unitarios

 

Programa tentativo

  1. Conceptos básicos de validación y verificación de software. Especificaciones de programas. Programas con anotaciones: pre y postcondiciones. Contratos. Conceptos fundamentales de testing, sus objetivos y principios. Uso de tests como especificaciones. Tests unitarios. Construcción de suites de testing. Revisión de criterios y técnicas de diseño de casos de tests.
  2. Generación automática de tests basada en aleatoriedad. Técnicas para mejorar el desempeño de testing aleatorio: eliminación de tests redundantes, eliminación de tests inválidos. Uso de especificaciones en la generación de tests basada en aleatoriedad. Herramientas de generación automática de tests basada en aleatoriedad: Randoop y QuickCheck.
  3. Generación automática de tests basada en constraint solving. SAT solving. Reducción de problemas de constraint solving a SAT Solving. Generalización de SAT a problemas de satisfactibilidad con teorías decidibles: SMT Solving. Uso de especificaciones en la generación de tests basada en constraint solving. Constraint-solving para caja blanca. Generación de condiciones de camino.  Herramientas basadas en constraint solving usando SAT/SMT: PEX y FAJITA.
  4. Testing exhaustivo acotado. Principios y motivaciones. La small scope hypothesis. Problemas en la generación exhaustiva de tests. Estructuras simétricas, y rotura de simetrías. Ámbitos de aplicación de testing exhaustivo acotado. Herramientas de testing exhaustivo acotado: TestEra (Alloy), Korat, UDITA.
  5. Principios básicos de Model Checking. Utilización de model checkers para la generación de tests. Testing basado en modelos. Model checking y ejecución simbólica. Herramientas de testing basadas en model checking/ejecución simbólica: Java PathFinder, UDITA, Kiasan.

 

Bibliografía

La bibliografía estará casi por completo compuesta de artículos que presenten las diferentes herramientas/técnicas de generación automática de tests, con la excepción de una selección de material del siguiente libro para la primera unidad del curso:

  • M. Pezzè y M. Young, Software Testing and Analysis, Wiley, 2007.

Artículos

  • Chandrasekhar Boyapati, Sarfraz Khurshid, Darko Marinov: Korat: automated testing based on Java predicates. ISSTA 2002: 123-133
  • Darko Marinov, Sarfraz Khurshid: TestEra: A Novel Framework for Automated Testing of Java Programs. ASE 2001: 22-
  • Carlos Pacheco, Shuvendu K. Lahiri, Michael D. Ernst, Thomas Ball: Feedback-Directed Random Test Generation. ICSE 2007: 75-84
  • Nikolai Tillmann, Wolfram Schulte: Unit Tests Reloaded: Parameterized Unit Testing with Symbolic Execution. IEEE Software 23(4): 38-47 (2006)
  • Jonathan de Halleux, Nikolai Tillmann: Parameterized Unit Testing with Pex. TAP 2008: 171-181
  • Koen Claessen, John Hughes: QuickCheck: a lightweight tool for random testing of Haskell programs. ICFP 2000: 268-279
  • Juan P. Galeotti, Nicolás Rosner, Carlos López Pombo, Marcelo F. Frias: Analysis of invariants for efficient bounded verification.ISSTA 2010: 25-36
  • Daniel Jackson: Alloy: a lightweight object modelling notation. ACM Trans. Softw. Eng. Methodol. 11(2): 256-290 (2002)
  • Milos Gligoric, Tihomir Gvero, Vilas Jagannath, Sarfraz Khurshid, Viktor Kuncak, Darko Marinov: Test generation through programming in UDITA. ICSE (1) 2010: 225-234