Técnicas de detección y diagnosis de errores en consultas de bases de datos

  1. García Ruiz, Yolanda
Zuzendaria:
  1. Rafael Caballero Roldán Zuzendaria

Defentsa unibertsitatea: Universidad Complutense de Madrid

Fecha de defensa: 2014(e)ko ekaina-(a)k 08

Epaimahaia:
  1. Francisco Javier López Fraguas Presidentea
  2. Purificación Arenas Sánchez Idazkaria
  3. Antonio José Fernández Leiva Kidea
  4. Damiano Zanardini Kidea
  5. María Alpuente Frasnedo Kidea
Saila:
  1. Sistemas Informáticos y Computación

Mota: Tesia

Laburpena

El objetivo de esta tesis es el diseño y desarrollo de técnicas para la detección y diagnosis de errores en el campo de las bases de datos y en particular, en consultas a bases de datos. Para ayudar a la detección de errores se desarrollan técnicas para la generación automática de casos de prueba. Estos casos de prueba no son más que instancias válidas de la base de datos que facilitan al usuario probar de forma sencilla la corrección de los resultados de las consultas. Para realizar el diagnóstico de errores se proponen técnicas relacionadas con la depuración declarativa o algorítmica. Estas técnicas se basan en la exploración de una estructura que representa el cómputo de la consulta a depurar, conteniendo, además de la información del resultado final, información de todos los resultados intermedios. Para localizar la causa del error, se realizan consultas a un oráculo al que se supone conocimiento de los resultados esperados. Dentro del ámbito de las bases de datos, nos hemos centrado en las bases de datos deductivas, relacionales y semiestructuradas. Las bases de datos deductivas se basan en la utilización de la Programación Lógica para mantener y consultar los datos. El lenguaje más conocido dentro de este campo es Datalog, cuya sintaxis puede verse como un subconjunto del lenguaje lógico Prolog. La mayor parte de las propuestas para depurar programas Datalog utilizan métodos usados tradicionalmente en depuración imperativa, tratando de explorar el cómputo para encontrar errores. Otros se basan en el análisis de los árboles de prueba asociados a un programa transformado, que resulta difícil de relacionar con el programa original. En esta tesis se propone una herramienta de depuración basada más en la semántica del programa que en el modelo de cómputo, extendiendo y adaptando las ideas genéricas de la depuración declarativa al caso de Datalog. En el caso de las bases de datos relacionales, el tamaño de la instancia de la base de datos suele ser un obstáculo cuando se desea probar las consultas. En general, la fase de pruebas requiere el previo diseño de casos de prueba (instancias válidas y de tamaño reducido) para su posterior ejecución. Este diseño se realiza, en la mayoría de los casos, de forma manual y se vuelve especialmente difícil en el caso de consultas que involucran gran cantidad de relaciones. Los trabajos relacionados con la generación de casos de prueba para consultas SQL, se centran especialmente en el estudio del nivel de cobertura, más que en la propia generación. En esta tesis tratamos el problema de la generación automática de dichos casos de prueba. Los casos de prueba permiten evaluar de forma sencilla si el resultado de una consulta es el esperado. Sin embargo, en el caso de consultas SQL que se basan en vistas, el que una vista produzca un resultado incorrecto no implica necesariamente que sea incorrecta; una vista puede producir un resultado inesperado a causa de la errónea definición de otras vistas de las cuales depende. En estos casos, la falta de herramientas apropiadas hace difícil encontrar el fragmento de código al que achacar el error. Los complejos mecanismos de ejecución de estos lenguajes dificultan la ejecución paso a paso típica de otros paradigmas. Es por ello que en esta tesis aplicamos las técnicas de depuración declarativa como mecanismo para la detección y diagnosis de errores en consultas SQL que involucran varias vistas. En los últimos tiempos se ha incrementado el interés por los lenguajes de acceso a bases de datos semiestructuradas como XML. En este ámbito se incluyen lenguajes de consulta como XQuery y XPath (subconjunto del anterior). Al igual que sucedía en los casos de las bases de datos relacionales, se trata generalmente de consultas sobre documentos de gran tamaño, lo que dificulta tanto la prueba como la depuración de las consultas. En esta tesis se ha realizado una inmersión del lenguaje de consulta XPath/XQuery en el lenguaje lógico-funcional T OY desarrollado por nuestro grupo. Esto nos ha permitido utilizar patrones de orden superior y las capacidades de generación y prueba propias de la programación lógico-funcional para localizar errores en las consultas y obtener casos de prueba en forma de documentos XML