clasificación de usuarios basada en la detección de errores usando técnicas de procesadores de...
TRANSCRIPT
Clasificación de usuarios basada en la detección de errores usando técnicas de procesadores de lenguaje
Juan Ramón Pérez PérezDirector: Dr. Juan Manuel Cueva Lovelle
Departamento de Informática
Tesis Doctoral
28 de marzo de 2006 2
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
28 de marzo de 2006 3
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
28 de marzo de 2006 4
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
28 de marzo de 2006 5
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
28 de marzo de 2006 6
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
28 de marzo de 2006 7
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
28 de marzo de 2006 8
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
28 de marzo de 2006 9
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.
Planteamiento del problema
28 de marzo de 2006 10
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
28 de marzo de 2006 11
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
28 de marzo de 2006 12
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
28 de marzo de 2006 13
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
28 de marzo de 2006 14
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
28 de marzo de 2006 15
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
28 de marzo de 2006 16
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.
Objetivos de la tesis
28 de marzo de 2006 17
Metodología de trabajo
Modelado delsistema
Desarrollodel sistema
Proyectos
Resultados delAnálisis de error
Clasificaciónusuario
basándose enlos errores
Objetivos de la tesis
Primer objetivoSegundo objetivo
28 de marzo de 2006 18
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
28 de marzo de 2006 19
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
28 de marzo de 2006 20
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
28 de marzo de 2006 21
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
28 de marzo de 2006 22
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
28 de marzo de 2006 23
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
28 de marzo de 2006 24
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
28 de marzo de 2006 25
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
28 de marzo de 2006 26
Herramientas de análisis estático Herramientas que buscan errores / herramientas que
comprueban el estilo. Distintas herramientas pueden complementarse.
Nombre Versión Entrada Interfaces Técnica de análisis Comprobaciones
JLint 3.0 Bytecode LC Sintaxis, Flujo de datos
Incorrecciones, problemas de concurrencia
FindBugs 0.7.3 (2004)
Bytecode LC, GUI, IDE, Ant
Sintaxis (patrones de error), Flujo de datos
Incorrecciones, problemas de concurrencia, mal rendimiento
PMD 1.6 Fuente LC, GUI, IDE, Ant
Sintaxis (patrones de error)
Incorrecciones, normas de estilo
Checkstyle Fuente LC, Ant Sintaxis Normas de estilo
JCSC LC, Ant Sintaxis Normas de estilo
DoctorJ LC Sintaxis Coherencia entre documentación y código
Jwiz Fuente LC Sintaxis Incorrecciones
Análisis de las soluciones actuales
28 de marzo de 2006 27
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
28 de marzo de 2006 28
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
Análisis de las soluciones actuales
28 de marzo de 2006 29
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
28 de marzo de 2006 30
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
28 de marzo de 2006 31
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
28 de marzo de 2006 32
Esquema del modelo del sistema
Base deconocimientosobre errores
Búsqueda, almacenamiento y visualización de errores
Fichero fuente
Genera avisos para prevenir errores
Errores
Información semánticasobre el error
Definición de un modelo
Análisis de los errores de programación
Aprendizaje continuo con información de los propios desarrolladores
Colaboración enel desarrollo
28 de marzo de 2006 33
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 de un modelo
28 de marzo de 2006 34
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 del modelo Busqueda y almacenamiento de errores
28 de marzo de 2006 35
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
28 de marzo de 2006 36
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 de un modelo
28 de marzo de 2006 37
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 del modelo Aprendizaje continuo
28 de marzo de 2006 38
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
28 de marzo de 2006 39
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.
Definición de un modelo
28 de marzo de 2006 40
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
28 de marzo de 2006 41
PBA: Sistema de análisis
de errores de los programas
IDEWeb: Entorno Integrado
de desarrolloen Web
COLLDEV:Entorno
de colaboración en el desarrollo
Historia decompilación
Base de conocimientos
Colaborativa
Ficherosdel proyecto
/historia de
trabajo
Añadir nuevos conocimientos
Crear nuevaspáginas
Avisos eInforme análisis errores
Lanza la compilación
Mensajeserror
Envío yRecepciónDe mensajes
MecanismoDe toma dedecisiones
Intercambioficheros dircompartido
Prototipo diseñado: Sistema SICODE
28 de marzo de 2006 42
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
28 de marzo de 2006 43
Prototipo diseñado: Sistema SICODE
28 de marzo de 2006 44
IDEWeb: Entorno Integrado
de desarrolloen Web
COLLDEV:Entorno
de colaboración en el desarrollo
Historia decompilación
Base de conocimientosColaborativa
PBA: Sistema de análisis
de errores de los programas
Ficherosdel proyecto
/historia de
trabajo
Añadir nuevos conocimientos
Crear nuevaspáginas
Avisos eInforme análisis errores
Lanza la compilación
Mensajeserror
Envío yRecepciónDe mensajes
MecanismoDe toma dedecisiones
Intercambioficheros dircompartido
Prototipo diseñado: Sistema SICODE
28 de marzo de 2006 45
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
28 de marzo de 2006 46
Prototipo diseñado: Sistema SICODE
28 de marzo de 2006 47
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
28 de marzo de 2006 48
28 de marzo de 2006 49
Ficherosdel proyecto
/historia de
trabajo
IDEWeb: Entorno Integrado
de desarrolloen Web
COLLDEV:Entorno
de colaboración en el desarrollo
Historia decompilación
Base de conocimientos
Colaborativa
PBA: Sistema de análisis
de errores de los programas
Añadir nuevos conocimientos
Crear nuevaspáginas
Avisos eInforme análisis errores
Lanza la compilación
Mensajeserror
Envío yRecepciónDe mensajes
MecanismoDe toma dedecisiones
Intercambioficheros dircompartido
Prototipo diseñado: Sistema SICODE
28 de marzo de 2006 50
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
Prototipo diseñado: Sistema SICODE
28 de marzo de 2006 51
28 de marzo de 2006 52
Ficherosdel proyecto
/historia de
trabajo
IDEWeb: Entorno Integrado
de desarrolloen Web
COLLDEV:Entorno
de colaboración en el desarrollo
Historia decompilación
Base de conocimientos
Colaborativa
PBA: Sistema de análisis
de errores de los programas
Consultar / Añadir nuevos conocimientos
Crear nuevaspáginas
Avisos eInforme análisis errores
Lanza la compilación
Mensajeserror
Envío yRecepciónDe mensajes
MecanismoDe toma dedecisiones
Intercambioficheros dircompartido
Prototipo diseñado: Sistema SICODE
Inicio desesión
Ediciónproyecto
Pide compilación
javac
Antic
Jlint
Findbugs
PMD
28 de marzo de 2006 53
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
28 de marzo de 2006 54
Objetivos
Analizar los errores de programación con los que se encuentran los estudiantes cuando realizan un proyecto software. Proyectos reales realizados por los alumnos en
asignaturas de distintos cursos de ingeniería informática. Análisis estático de los proyectos ya finalizados.
Obtener los errores más frecuentes en cada curso. Comparar los errores entre distintos niveles de
experiencia y analizar su evolución. Establecer los errores que caracterizan a los
usuarios para su clasificación.
Clasificación de usuarios
28 de marzo de 2006 55
Precedentes
Huizinga [Huizinga 2001] realizan un estudio sobre los problemas encontrados en una práctica de una asignatura de programación. Define objetivos de cada proyecto y los relaciona con
características de la entrega. Herramienta de entrega automática de prácticas. Datos estadísticos sobre el comportamiento del conjunto de los
alumnos al presentar una práctica. Satratzemi [Satratzemi 2001] estudia evolución de los
errores según los alumnos realizan una determinada práctica. Herramienta AnimPascal Registro de acciones de AnimPascal se hace un seguimiento.
Clasificación de usuarios
28 de marzo de 2006 56
Características de nuestro trabajo Los proyectos analizados son todos relativamente
grandes: Proyectos realizados en Java Proyectos más pequeños: 14 ficheros java con más de
4KB cada uno. No se limita a una práctica de una única asignatura:
cinco asignaturas cada una de un curso 14377 ficheros en Java.
Se utiliza el sistema diseñado en esta tesis: SICODE Detectar errores en el código fuente Análisis estático más profundo que el que realiza un simple
compilador.
Clasificación de usuarios
28 de marzo de 2006 57
Fases
1. Recopilación de proyectos de distintos niveles (cursos) a partir de los proyectos entregados por los alumnos en cada asignatura.
2. Análisis de los mismos utilizando nuestro sistema SICODE.
3. Comparación de los datos de los proyectos en distintas etapas de aprendizaje de la programación.
4. Caracterización de los errores en relación a los niveles de experiencia de los desarrolladores.
Clasificación de usuarios
28 de marzo de 2006 58
Elección de muestras
Asignatura Curso Duración Tipo Año de las muestrasMetodología de la programación 1º 2º cuatrimestre Troncal Curso 2002-2003Estructura de datos y de la información 2º Anual Troncal Curso 2003-2004
Curso 2004-2005Bases de Datos 3º Anual Troncal Curso 2004-2005Procesadores de Lenguaje 4º Anual Troncal Curso 2004-2005Proyecto Fin de Carrera 5º Obliga Distintos años.
Asignatura CursoNúm. proyectos
Num. Fich. *.java
Media fich/proy
Tamaño fich .java (bytes)
Media tam/fich (bytes)
Metodología de la programación 1º 316 4.473 14,16 14.029.045 3.136,38Estructura de datos y de la información 2º 337 8.319 24,69 45.192.259 5.432,41Bases de Datos 3º 22 492 22,36 3.427.435 6.966,33Procesadores de Lenguaje 4º 5 398 79,60 1.692.506 4.252,53Proyectos Fin de Carrera 9 695 77,22 5.509.856 7.927,85
689 proyectos /14.377 ficheros Java
Tamaño mínimo del proyecto:14 ficheros de código fuente
Clasificación de usuarios
28 de marzo de 2006 59
Búsqueda de errores
Herramientas que utiliza el prototipo Sistema de análisis de errores de programas (PBA) para realizar el análisis: Javac, compilador comercial, Sun Microsystems Antic [Knizhnik 2003], verificación sintáctica. Jlint [Knizhnik 2003], verificación semántica. FindBugs [Hovemeyer 2004a], detección de
errores basándose en patrones de error PMD [Copeland], detección de posibles errores
mediante la comprobación de reglas
Clasificación de usuarios
28 de marzo de 2006 60
Tipos de errores buscados
Errores lógicos: comparaciones, estructuras de control, inicialización.
Problemas de ocultación o ámbito de nombres. Tratamiento de excepciones. Código innecesario o no utilizado. Mejoras en el diseño refactorización. Se han eliminado los avisos correspondientes al
incumplimiento de convenios de nombres y de código.
Clasificación de usuarios
28 de marzo de 2006 61
Algunos resultados
Código error Descripcion
Número errores
Núm. proyectos con errores
Media errores por proyecto
Porcentaje de proy errores
13044 Avoid calls to overridable methods during construction 2456 260 9,45 82,28%12001 Component in this class shadow s one in base class. 1873 118 15,87 37,34%13039 Avoid unnecessary comparisons in boolean expressions 1484 183 8,11 57,91%13080 The same String literal appears several times in this f ile. 1213 268 4,53 84,81%13084 Avoid unused local variables. 1181 275 4,29 87,03%12002 Local variable shadow s component of class. 1033 176 5,87 55,70%12014 Compare strings as object references. 769 119 6,46 37,66%13040 Sw itch statements should have a default label 520 191 2,72 60,44%13000 Avoid empty catch blocks 416 237 1,76 75,00%11004 Comparison of String objects using "==" or "!=" 296 117 2,53 37,03%13016 An empty statement (semicolon) not part of a loop 289 229 1,26 72,47%
Número total de proyectos 316erroresconproyectosNúm
erroresNúmeroproyectoporerroresMedia
___
____
100_
_____
proyecTotal
erroresconproyectosNúmerroresproyPorcentaje
Análisis de los proyectos de primer curso: Metodología de la Programación
Clasificación de usuarios
28 de marzo de 2006 62
Código error Descripción del error curso 1 curso 2 curso 3 curso 4 pfc
13080 The same String literal appears several times in this f ile. 4,53 7,84 6,53 12,50 88,5013084 Avoid unused local variables. 4,29 6,83 8,69 21,33 29,7513039 Avoid unnecessary comparisons in boolean expressions 8,11 8,30 3,00 16,50 29,3313000 Avoid empty catch blocks 1,76 8,52 4,20 10,00 64,00
11004 Comparison of String objects using "==" or "!=" 2,5313016 An empty statement (semicolon) not part of a loop 1,26
13040 Sw itch statements should have a default label 2,72 5,0412002 Local variable shadow s component of class. 5,87 6,4313044 Avoid calls to overridable methods during construction 9,45 6,06 55,0012001 Component in this class shadow s one in base class. 15,87 7,0012014 Compare strings as object references. 6,46 9,00
11021 Unread f ield: should this f ield be static? 17,9713046 This f inal f ield could be made static 18,5813042 Avoid reassigning parameters. 5,03 18,0010013 May be w rong assumption about ELSE branch association 6,14
13078 A method should'nt have Exception in throw s declaration. 13,86 17,93 11,25 65,00
13061 Avoid unused imports 4,46 220,0013059 Avoid duplicate imports 3,1711011 Redundant comparison of a reference value to null. 12,5013083 Avoid unused private f ields. 3,0011023 This f ield is never read. Consider removing it from the class. 8,69
13081 Avoid instantiating String objects; this is usually unnecessary. 23,50 29,0011003 Innecesary calls to methods. 11,3312005 Value of referenced variable may be NULL. 23,00
13011 Avoid returning from a f inally block 32,67
25,00 Total errores especif icados 11,00 11,00 11,00 10,00 10,00
Media de errores por proyecto
erroresconproyectosNúm
erroresNúmeroproyectoporerroresMedia
___
____
28 de marzo de 2006 63
Resultados generales
Distribución de los avisos detectados: 1er y 2º cursos: bastantes avisos que afectan a más del 75% de
los proyectos. 3º, 4º un único aviso poco significativo. PFC ningún error afecta a más del 50% de los proyectos.
Existen errores exclusivos para cada curso nivel de experiencia del programador.
Hay errores que permanecen a lo largo de todos los cursos: Información importante para los profesores, pueden significar
lagunas de conocimiento. Errores que evolucionan a lo largo de los cursos:
Desaparecen por el incremento de la experiencia Aparecen por los nuevos temas tratados en las asignaturas
Clasificación de usuarios
28 de marzo de 2006 64
Resultados: errores significativos de cada curso Primer curso
Avoid calls to overridable methods during construction Avoid empty catch blocks Comparison of String objects using "==" or "!="
Segundo curso Local variable shadows component of class Avoid reassigning parameters
Tercer curso A method shouldn't have Exception in throws declaration
Cuarto curso Innecesary calls to methods
Proyecto fin de carrera Avoid returning from a finally block
Clasificación de usuarios
28 de marzo de 2006 65
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
28 de marzo de 2006 66
Desarrollo de un entorno que facilita el aprendizaje de la programación Basado en el análisis automático de errores.
El sistema realiza un registro de errores (historia de compilación) y se utiliza su evolución para generar avisos personalizados al usuario.
Aporta un conocimiento amplio a los usuarios: alumnos y profesores de los errores más frecuentes.
Construyendo un entorno Web que permite el desarrollo de aplicaciones. Proporciona soporte asíncrono para equipos de desarrollo.
Usando una base de conocimiento construida colaborativamente: Incorpora información semántica sobre los avisos de error Permite la realimentación de la información del sistema con el
nuevo conocimiento de los desarrolladores
Conclusiones
28 de marzo de 2006 67
Elaboración de una clasificación de usuarios en relación a la experiencia del usuario Utilizando el sistema diseñado. Estudio amplio y transversal:
Cantidad de proyectos Distintos niveles considerados
Se han descubierto distintos patrones de comportamiento de los errores.
Permite conocer la evolución de los errores de los alumnos en función de su experiencia.
Conclusiones
28 de marzo de 2006 68
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
28 de marzo de 2006 69
Líneas futuras de investigación Entorno y avisos al desarrollador:
Reducción de la granularidad en la comprobación y generación de avisos de ayuda al desarrollador.
Integración del sistema en entornos de desarrollo comerciales mediante el desarrollo de plug-ins específicos
Análisis de errores: Aplicación de técnicas de minería de datos para mejorar el análisis
de los errores. Potenciación del análisis dinámico del código y combinación con la
información extraída del análisis estático. Potenciar historia de trabajo, permitir el seguimiento real de la
evolución de un proyecto. Utilización de los perfiles de usuario basados en errores para
mejorar la adaptación del entorno de desarrollo a los usuarios.
Líneas futuras de investigación
28 de marzo de 2006 70
Publicaciones derivadas (I)
"Development Web Environment" for Learing Programming LanguagesPérez Pérez, Juan Ramón; Paule Ruíz, María del Puerto; González Rodríguez, MartínICWE 2003, LNCS 2722, 2003. Springer, Berlin 2003
DSTool: A Reflection-based debugger for Data Structures Comprehension in Computing Science Learning.Sama Villanueva, Sergio; Pérez Pérez, Juan Ramón; Ocio Barriales, Sergio; González Rodríguez, Martín Human - Computer Interaction: Theory and Practice. Lawrence Erlabaum Associates, Publishers. Mahwah, New Jersey. 2003.
Entorno web de desarrollo para el aprendizaje de paradigmas de programaciónPérez Pérez, Juan Ramón; Paule Ruiz, Mª del Puerto; González Rodríguez, MartínActas de IX Jornadas de Enseñanza Universitaria de la Informática. Jenui 2003, pp 465-471. Thomson Paraninfo, S.A., Madrid, 2003.
A development environment for cooperative programmingPérez Pérez, Juan Ramón; Gonzalez Rodríguez, Martín; Paule Ruiz, María del PuertoEn Actas del V Congreso Interacción Persona Ordenador. Interacción 2004. Seminario de Doctorado. Mayo de 2004.
Publicaciones
28 de marzo de 2006 71
Publicaciones derivadas (II)
Adaptable Contents Visulization (VIC)Fernández González, Raúl; Paule Ruíz, María del Puerto; Pérez Pérez, Juan Ramón; González Rodríguez, Martín; González Gallego, Marcos ICWE 2003, LNCS 2722, 2003. Springer, Berlin 2003.
Feijoo.net: An Approach to Personalized E-learning Using Learning StylesFernández González, Raúl; Paule Ruíz, María del Puerto; Pérez Pérez, Juan Ramón; González Rodríguez, Martín; González Gallego, Marcos ICWE 2003, LNCS 2722, 2003. Springer, Berlin 2003.
SACODE: Sistema de Aprendizaje Colaborativo de la ProgramaciónPérez Pérez, Juan Ramón; Iglesias Suárez, Mª Cristina; Paule Ruiz, Mª del Puerto; (2004)VI Simposio Internacional de Informática Educativa (SIIE 2004).
¿Es posible la eliminación de los errores de los programas?Pérez Pérez, Juan Ramón; Rodríguez Fernández, Daniel; González Rodríguez, Martín; (2004) VI Simposio Internacional de Informática Educativa (SIIE 2004).
Publicaciones
Clasificación de usuarios basada en la detección de errores usando técnicas de procesadores de lenguaje
Juan Ramón Pérez PérezDirector: Dr. Juan Manuel Cueva Lovelle
Departamento de Informática
Tesis Doctoral