Testing y análisis de software

Calificaciones

  • Notas de alumnos aprobados [ pdf ]

Cualquier duda respecto de las notas, consultar a eci@dc.uba.ar

Apuntes

Turno:

Mañana (9 a 12 hs)

Idioma:

Castellano

Requisitos

Se asumirán conocimientos generales en Ciencias de la Computación. En particular, los alumnos deberán estar familiarizados con al menos un lenguaje de programación, como C, C++, o Java, y tener un entendimiento básico de algoritmos y estructura de datos. Conocimientos previos de conceptos de testing es un plus, pero no es requerido.

Síntesis:

Los sistemas de software son cada vez más complejos, dinámicos y se encuentran en más lugares. La calidad de tales sistemas no puede ser garantizada a menos que se utilicen técnicas efectivas y eficaces para analizar y/o testear los elementos generados durante el desarrollo del software.
Este curso seminario examinará técnicas de análisis y testing que permitan validar, evaluar y mantener sistemas de software. Este curso estudiará técnicas fundamentales y avanzadas del testingt y análisis del software, con especial énfasis en técnicas orientadas a la identificación de defectos en el sofware.
El curso también abarcará algunas de las herramientas disponibles que implementan técnicas de testeo y análisis. Sobre el final del curso, los estudiantes estarán familiarizados con los enfoques actuales fundamentales del análisis y testing del software. También, tendrán conocimiento de los principales problemas abiertos en cuanto a la demostración de la calidad del software mediante el testing y/o el análisis, de manera que la investigación en este dominio sea una continuación natural de este curso.

El material para el curso consiste principalmente de publicaciones dado que muchos de los temas presentados son resultados de investigaciones que no son cubiertas por ningún libro de texto. Todas las publicaciones serán proveídas a los estudiantes antes de comenzar el curso.

Programa:

 

  • Parte 1 (5 horas) -- Análisis estático de programas.

Esta primera parte abarca los conceptos fundamentales de análisis de programas, los cuales son necesarios para entender el resto del curso. Luego, se discuten algunos análisis avanzados de programas, como software slicing (tomar "tajadas" del software convenientemente), y técnicas de análisis utilizadas para manipular construcciones de programa (por ejemplo, punteros, arreglos, recursión).

- Análisis de control de flujo.

- Análisis "Data-flow".

- Análisis de dependencias de control.

- Slicing.

- Complicaciones en el análisis.

 

  • Parte 2 (5 horas) -- Análisis dinámico de programas.

En esta segunda parte se comparan las características del análisis estático y dinámico de programas, y se discuten varias técnicas para recopilar datos en tiempo de ejecución. También se analizan técnicas de análisis dinámico útiles para depuración de software, como por ejemplo slicing dinámico y técnicas 'record-and-play'.

- Distintos enfoques de análisis dinámico.

- Técnicas de instrumentación.

- Slicing dinámico.

- Análisis de cobertura dinámico.

- Técnicas 'record and replay'.

 

  • Parte 3 (5 horas) -- Testing

La parte final del curso refuerza el material presentado en las dos partes anteriores. Como en la Parte 1, esta tercera parte incluye una discusión inicial de los conceptos fundamentales de testing de software. Luego se discuten resultados recientes de investigación en áreas de testing, con particular énfasis en testing de depuración y testing de regresión.

- Conceptos básicos de testing.

- Criterios de adecuacion.

- Depuración.

- Test de regresión.

 

Profesor:

  • Alessandro Orso, Georgia Institute of Technology, USA.

    Alessandro Orso received an MS degree in electrical engineering (1995) and a Ph.D. in computer science (1999) from Politecnico di Milano, Italy. He was a visiting researcher at the University of Illinois at Chicago in 1999. Since March 2000, he has been with the College of Computing at the Georgia Institute of Technology, first as a research faculty (2000-2004), then an assistant professor (2004-2008), and finally as an associate professor (2008-present). His area of research is software engineering, with emphasis on software testing and program analysis. His interests include the development of techniques and tools for improving software reliability, trustworthiness, and security, and the validation of such techniques on real systems. He is a member of the ACM and the IEEE Computer Society. Dr. Orso's CV is available here.