720 likes | 965 Views
Departamento de Informática. Tesis Doctoral. Clasificación de usuarios basada en la detección de errores usando técnicas de procesadores de lenguaje. Juan Ramón Pérez Pérez Director: Dr. Juan Manuel Cueva Lovelle. Contenidos. Planteamiento del problema Objetivos de la tesis
E N D
Departamento de Informática Tesis Doctoral Clasificación de usuarios basada en la detección de errores usando técnicas de procesadores de lenguaje Juan Ramón Pérez Pérez Director: Dr. Juan Manuel Cueva Lovelle
Contenidos • Planteamiento del problema • Objetivos de la tesis • Análisis de las soluciones actuales • Definición de un modelo para el aprendizaje de la programación • Prototipo: Sistema SICODE • Clasificación de usuarios basada en detección de errores • Conclusiones • Líneas futuras de investigación
Contenidos • Planteamiento del problema • Objetivos de la tesis • Análisis de las soluciones actuales • Definición de un modelo para el aprendizaje de la programación • Prototipo: Sistema SICODE • Clasificación de usuarios basada en detección de errores • Conclusiones • Líneas futuras de investigación
Planteamiento del problema El problema de ensañar a programar • Cada día los entornos de desarrollo profesionales son más complejos. • ¿Cómo facilitar el aprendizaje de la programación a alumnos principiantes con un entorno de desarrollo profesional? • ¿Cómo lograr que los alumnos relacionen los mensajes de error con las causas reales de ese error?
Planteamiento del problema La comprensión de los errores • Corrección de errores de un programa: • Entender el mensaje de error • Comprender las causas • Proporcionar la solución. • ¿Podemos diseñar un entorno que guíe al desarrollador para corregir y prevenir errores de forma efectiva?
Planteamiento del problema Limitaciones de los entornos de desarrollo actuales • Difíciles de integrar en una dinámica de aprendizaje. • Explicación de los errores es pobre para un programador sin experiencia. • Carecen de herramientas que permitan guiar al programador para mejorar su estilo de programación. • Son sistemas pasivos que analizan el código de forma superficial [Jacobson 2002]
Planteamiento del problema El difícil trabajo del desarrollo del software • El desarrollo de software nunca ha sido tan complejo como lo es ahora. Los desarrolladores de software trabajan intensivamente con el conocimiento. No sólo deben comprender nuevas tendencias y tecnologías, sino que necesitan saber cómo aplicarlas de forma rápida y productiva. [Ivar Jacobson, 2002]
Planteamiento del problema Software de calidad: gestión de errores • El primer aspecto de la calidad está relacionado necesariamente con los defectos del software. • Gestión de errores trabajo habitual en un proceso de desarrollo de software: • Mantenimiento de software: corregir errores de software defectuoso. • Existen técnicas de ingeniería del software centradas en el análisis y diseño, para evitar errores. • Subproceso de escritura de software: es un punto clave para evitar y subsanar errores. • La fuente de muchos defectos software son simples descuidos y errores del programador [Humphrey, 1997]
Planteamiento del problema Prevenir errores aumentando la experiencia de los programadores • La calidad del software producido depende inevitablemente de la destreza y experiencia de los programadores involucrados [Allen 2002]. • Aprendizaje de técnicas de detección y corrección de errores. • Es necesario unos conocimientos teóricos; pero sobre todo adquirir unas habilidades prácticas. • A programar se aprende programando. • Este es un proceso continuo debido a los constantes cambios en el mundo del desarrollo.
Objetivos de la tesis Contenidos • Planteamiento del problema • Objetivos de la tesis • Análisis de las soluciones actuales • Definición de un modelo para el aprendizaje de la programación • Prototipo: Sistema SICODE • Clasificación de usuarios basada en detección de errores • Conclusiones • Líneas futuras de investigación
Objetivos de la tesis Objetivos principales • Diseñar un sistema para • Mejorar el aprendizaje de la programación. • Incrementar la calidad del software. • Clasificar usuarios en base a la detección de errores.
Objetivos de la tesis Diseñar un sistema de aprendizaje de la programación (I) • Orientado a la mejora de la calidad del código fuente • Permite detectar, eliminar y prevenir errores de forma más eficiente a través técnicas de procesadores de lenguaje. • Gestiona una historia de errores. • Analiza los errores de programación cometidos por los desarrolladores.
Objetivos de la tesis Diseñar un sistema de aprendizaje de la programación (II) • Capaz de asistir al alumno en cualquier momento y desde cualquier sitio • Proporciona información de forma activa, que ayuda a una escritura del código. • Facilita la colaboración en el desarrollo y revisión de programas. • Permite aprender y adquirir experiencia en las nuevas técnicas de construcción de aplicaciones.
Objetivos de la tesis Diseñar un sistema de aprendizaje de la programación (III) • Usando y construyendo una base de conocimientos colaborativa • Asocia información semántica a cada uno de los tipos de error. • Recoge información contextualizada y derivada de la experiencia de los desarrolladores lo que permite que cualquier desarrollador pueda aprender de la experiencia de los demás. • Se realimenta dinámicamente.
Objetivos de la tesis Diseñar un sistema para mejorar la calidad del software (IV) • Analizando en profundidad del código • Elaborando estadísticas sobre los errores • Construyendo una base de conocimiento colaborativamente • Utilizando la experiencia acumulada de otros desarrollos • Permitiendo el desarrollo en equipo de los proyectos
Objetivos de la tesis Clasificación de usuarios basada en la detección de errores • Caracterizar los errores que cometen los desarrolladores en distintos niveles de aprendizaje basándose en el sistema. • Obtener un perfil de desarrollador dependiendo de su experiencia, utilizando los datos del análisis anterior.
Proyectos Clasificación Modelado del Desarrollo usuario sistema del sistema basándose en los errores Resultados del Análisis de error Objetivos de la tesis Metodología de trabajo Segundo objetivo Primer objetivo
Contenidos • Planteamiento del problema • Objetivos de la tesis • Análisis de las soluciones actuales • Definición de un modelo para el aprendizaje de la programación • Prototipo: Sistema SICODE • Clasificación de usuarios basada en detección de errores • Conclusiones • Líneas futuras de investigación
Análisis de las soluciones actuales Distintas soluciones analizadas • Sistemas de aprendizaje virtual de la programación • Entornos para el aprendizaje de la programación • Entornos de desarrollo comerciales • Entornos colaborativos • Gestores de prácticas avanzados • Herramientas de detección de errores
Análisis de las soluciones actuales Sistemas de aprendizaje virtual de la programación • Entornos analizados: • Algorithms in action, JCAT, HalVis, KBS-Hyperbook Introduction to Java Programming, Curso interactivo de programación en Pascal, Exploring Computer Science Concepts with Scheme, ELM-ART, WWW-Based C++ Course, DSTool • Ventajas • Web como medio de comunicación entre el estudiante y el sistema. • Carencias: • Son demasiado teóricos. • Muy pocos disponen de herramientas de programación. • Los ejemplos de código alejados de los problemas reales.
Análisis de las soluciones actuales Entornos de desarrollo aprendizaje • Entornos analizados: • BlueJ [Kölling 2003], • AnimPascal [Satratzemi 2001] • Carencias • No proporcionan ayuda: • Sobre la interpretación de los errores cometidos, • Sobre la solución de los mismos. • Necesitan instalación y configuración por parte del usuario. • Los estudiantes tienen problemas en la transición hacia entornos comerciales
Análisis de las soluciones actuales Entornos de desarrollo comerciales • Entornos analizados: • Eclipse, NetBeans, JBuilder • Carencias • Gestión de errores pobre. • No señalan errores conceptuales. • Es necesaria una experiencia para poder relacionar los síntomas de los defectos con sus verdaderas causas para poder repararlos. • Información ambigua. • No siempre la información del error es correcta. • No proporcionan ayuda para solucionar errores. • Complejos para programadores principiantes
Análisis de las soluciones actuales Entornos de colaboración • Entornos analizados • RECIPE, (Real-time Collabortive Interactive Programming Environment) [Shen 2000] • COLLEGE [Bravo C. 2004], PlanEdit [Redondo 2002] • Ventajas • Facilita la revisión del código por personas distintas al autor lo que permite detectar y eliminar. • Permiten realizar el trabajo de forma síncrona. • Carencias • No utilizan la información de los errores para generar conocimiento. • Muchas veces es difícil aprovechar el conocimiento aportado por un usuario para reutilizarlo en un futuro.
Análisis de las soluciones actuales Gestores de prácticas avanzados • Sistemas analizados: • Sistema de entrega y evaluación de objetivos de aprendizaje [Huizinga 2001], Praktomat [Zeller 2000] • Carencias: • Informe sobre errores de compilación y prueba • Información proporcionada no es muy reveladora de los verdaderos problemas • Protocolo petición-respuesta • Sistema sólo ayuda a corregir errores; pero no a evitarlos. • No permite revisar del proceso de desarrollo que ha seguido el alumno.
Análisis de las soluciones actuales Técnicas de detección de errores • Inspección manual • Técnica muy eficiente. • Consumen tiempo y se requiere práctica para aplicarlas correctamente. • Técnicas dinámicas (pruebas y asertos) • Técnica imprescindible para comprobar que se cumplen los requisitos. • Es difícil construir un conjunto de prueba adecuado en programas complejos. • Técnicas estáticas • No están limitados a la calidad de los casos de prueba. • El análisis no siempre es suficientemente preciso y exceciva cantidad de información poco relevante.
Análisis de las soluciones actuales Herramientas de análisis estático • Herramientas que buscan errores / herramientas que comprueban el estilo. • Distintas herramientas pueden complementarse.
Análisis de las soluciones actuales Resumen de la situación actual (I) • Sistemas no sirven para las distintas etapas de experiencia de un programador • Sistemas y entornos orientados al aprendizaje, están planteados para etapas iniciales de aprendizaje. • Sistemas profesionales sólo accesible con cierto grado de experiencia. • Importancia fundamental de utilizar la Web como interfaz; pero sólo se utiliza para proporcionar contenidos. • Colaboración es fundamental, sin embargo se utiliza de forma limitada: • Proceso de desarrollo: sistemas de control de versiones • Pocos sistemas utilizan la colaboración para recoger la experiencia de los desarrolladores.
Análisis de las soluciones actuales Resumen de la situación actual (II) • Gestión de errores • Proporcionan poca ayuda para comprender cada mensaje de error • Es difícil relacionar el mensaje con las causas del error. • Carecen de un registro de las compilaciones que va realizando el desarrollador • Análisis de errores sólo para generar código. • Herramientas para la detección automática de errores • Pueden ahorrar tiempo • Generan gran cantidad de warnings que son difíciles de analizar para un usuario
Contenidos • Planteamiento del problema • Objetivos de la tesis • Análisis de los planteamientos actuales • Definición de un modelo para la mejora de la calidad del código fuente. • Prototipo diseñado: Sistema SICODE • Clasificación de usuarios basada en detección de errores • Conclusiones • Líneas futuras de investigación
Definición de un modelo Detección automática de errores • ¿Por qué no diseñamos un entorno activo que con la información sobre los errores guíe al estudiante para construir software sin errores? • ¿Por qué no articular todo este proceso de mejora en la calidad del software en base a los errores detectados automáticamente en el código usando técnicas de procesadores de lenguaje?
Definición de un modelo Definición de un modelo para el aprendizaje de la programación • Características • Búsqueda, almacenamiento y visualización de errores • Análisis de los errores de programación • Aprendizaje continuo con información de los propios desarrolladores • Colaboración en el desarrollo
Definición de un modelo Esquema del modelo del sistema Fichero fuente Búsqueda, almacenamiento y visualización de errores Errores Genera avisos para prevenir errores Análisis de los errores de programación Base de conocimiento sobre errores Información semántica sobre el error Aprendizaje continuo con información de los propios desarrolladores Colaboración en el desarrollo
Definición de un modelo Definición de un modelo para el aprendizaje de la programación (I) • Búsqueda, almacenamiento y visualización de errores • Búsqueda de errores mediante técnicas de procesadores de lenguaje. • Creación de una historia de compilación. • Visualización de los errores. • Todo se realiza en tiempo de escritura de código.
Definición del modelo Busqueda y almacenamiento de errores Historia de compilación • Para realizar una búsqueda exhaustiva de posibles errores se han combinado una serie de herramientas de análisis estático. • Se invocarán cada vez que el desarrollador quiera compilar su código. • Todos los avisos generados se guardan en un base de datos para formar la historia de compilación: • Asociados a un desarrollador y a un proyecto. • Clasificados por el tipo de error
Definición de un modelo Definición del modelo (II) • Análisis de los errores de programación • Obtención de métricas de errores mediante el análisis de la historia de compilación. • Análisis de evolución por tipo de errores. • Análisis de frecuencias. • Análisis comparados entre un usuario y el grupo. • Generación de avisos personalizados adaptados al perfil de los desarrolladores.
Definición de un modelo Definición del modelo (III) • Aprendizaje continuo con información de los propios desarrolladores • Base de conocimientos con información semántica sobre errores. • Colaboración entre los usuarios para completar la información de la base de conocimientos. • Información orientada a la solución y prevención de errores. • Accesible continuamente y de forma deslocalizada.
Definición del modelo Aprendizaje continuo Base de conocimientos colaborativa • La importancia no es su estructuración • Facilidad para llegar hasta la información relevante • Sistema crea hiperenlaces automáticamente. • Creación de índices que relacionan contenidos. • Facilidad para introducir nuevos contenidos: • Cualquier desarrollador puede hacerlo en cualquier momento sin necesidad de herramientas extra. • Con este modelo la información crece constantemente • Se va enriqueciendo con la experiencia de los desarrolladores. • El conocimiento se realimenta.
Definición de un modelo Definición del modelo (IV) • Colaboración en el desarrollo de aplicaciones • Características del entorno para permitir este objetivo: • Entorno integrado. • Entorno orientado hacia código real. • Entorno fácil y disponible en cualquier sitio. • Soporte para trabajo en grupo. • Seguimiento mediante una historia de trabajo.
Definición de un modelo Entorno de desarrollo colaborativo e historia de trabajo • La historia de trabajo permite hacer una navegación por la evolución del proyecto de forma asíncrona: • Permite buscar el origen de un problema • Permite estudiar el trabajo de cada desarrollador • Entorno de desarrollo que requiera la mínima instalación y configuración. • Herramientas de comunicación y coordinación entre los desarrolladores.
Contenidos • Planteamiento del problema • Objetivos de la tesis • Análisis de los planteamientos actuales • Definición de un modelo para la mejora de la calidad del código fuente. • Prototipo diseñado: Sistema SICODE • Clasificación de usuarios basada en detección de errores • Conclusiones • Líneas futuras de investigación
Prototipo diseñado: Sistema SICODE Base de conocimientos Colaborativa Añadir nuevos conocimientos Crear nuevas páginas IDEWeb: Entorno Integrado de desarrollo en Web Lanza la compilación Mensajes error PBA: Sistema de análisis de errores de los programas Avisos e Informe análisis errores Intercambio ficheros dir compartido Historia de compilación COLLDEV: Entorno de colaboración en el desarrollo Envío y Recepción De mensajes Ficheros del proyecto / historia de trabajo Mecanismo De toma de decisiones
Prototipo diseñado: Sistema SICODE COLLDEV: Entorno para la colaboración en el desarrollo de aplicaciones • Sistema colaborativo asíncrono que facilita la coordinación y colaboración de grupos para trabajar sobre un proyecto software. • Facilita la comunicación, coordinación y toma de decisiones conjunta por parte de los usuarios. • Gestiona los espacios de trabajo compartidos para los proyectos y permite el trabajo simultáneo de varios usuarios con los archivos. • Permite realizar un seguimiento del proceso de desarrollo mediante una historia activa de trabajo.
Prototipo diseñado: Sistema SICODE Base de conocimientos Colaborativa Añadir nuevos conocimientos Crear nuevas páginas IDEWeb: Entorno Integrado de desarrollo en Web Lanza la compilación Mensajes error PBA: Sistema de análisis de errores de los programas Avisos e Informe análisis errores Intercambio ficheros dir compartido Historia de compilación COLLDEV: Entorno de colaboración en el desarrollo Envío y Recepción De mensajes Ficheros del proyecto / historia de trabajo Mecanismo De toma de decisiones
Prototipo diseñado: Sistema SICODE IDEWeb: Entorno de desarrollo integrado en Web • Entorno de desarrollo sobre Web • El usuario puede ponerse a programar sin necesidad de instalar nada • Arquitectura Web permite centralizar la información sobre el proceso de desarrollo • Independencia del lugar de trabajo • Permite la creación, modificación y compilación de programas • Es un entorno abierto que permite la programación en distintos lenguajes
Prototipo diseñado: Sistema SICODE IDEWeb: Base de conocimiento colaborativa • Los desarrolladores pueden: • Consultar ayuda sobre los errores: • Descripción • Contexto • Causas según contexto • Forma de solucionarlo • Introducir experiencia sobre los errores • El prototipo lo implementa sobre un Wiki • Información introducida manualmente por los desarrolladores. • Sistema enlaza automáticamente la información del error con cada de los avisos procedentes del análisis de errores
Prototipo diseñado: Sistema SICODE Base de conocimientos Colaborativa Añadir nuevos conocimientos Crear nuevas páginas IDEWeb: Entorno Integrado de desarrollo en Web Lanza la compilación Mensajes error PBA: Sistema de análisis de errores de los programas Avisos e Informe análisis errores Intercambio ficheros dir compartido Historia de compilación COLLDEV: Entorno de colaboración en el desarrollo Envío y Recepción De mensajes Ficheros del proyecto / historia de trabajo Mecanismo De toma de decisiones
Prototipo diseñado: Sistema SICODE PBA: Sistema de análisis de errores de programas • Sistema de gestión de errores utilizando compiladores y herramientas de análisis estático • El tratamiento incluye: • Captura, clasificación, almacenamiento y análisis de los errores. • El sistema genera estadísticas sobre los errores • Crea documentos HTML con los datos y las gráficas. • Objetivo resaltar errores más importantes del usuario para que trate de evitarlos