Predicción de defectos en un lenguaje dinámicamente tipado usando métricas estáticas y de cambio - Gullino, Mauro (2020)
La predicción de defectos es un tema importante en la Ingeniería de Software. Puede utilizarse para evaluar la calidad del producto final, estimando si se cumplen los estándares de calidad contractuales o los impuestos para la aceptación del producto por parte del cliente. También puede facilitar la previsión de los recursos para pruebas o verificación formal. El presente trabajo selecciona un conjunto de métricas estáticas (o de producto) y de cambio (o de proceso) con el objetivo de predecir los defectos de versiones sucesivas. Como método de estimación se utiliza la regresión logística. Se presenta un caso de estudio sobre el proyecto de código abierto MediaWiki, que soporta a Wikipedia. Este producto cuenta con 1000 clases y 365 KLOC. Se han obtenido las métricas estáticas y de cambio durante el período de un año con distintos cortes temporales. Se construyeron herramientas ad hoc para calcular las métricas definidas por autores como Chidamber & Kemerer, Robiolo y Moser. Se busca estudiar la viabilidad de aplicar estas métricas en un lenguaje de programación orientado a objetos diferente, ya que las investigaciones de referencia han trabajado históricamente con lenguajes de tipado estático (principalmente C++ y Java) mientras que MediaWiki se encuentra desarrollado en PHP, que es un lenguaje orientado a objetos dinámicamente tipado, muy utilizado en el desarrollo web de pequeña y mediana escala. A estos efectos, también se proponen métricas nuevas, que buscan medir estos aspectos de tipado del lenguaje y sus efectos en el producto y la calidad del mismo. Para recolectar las métricas de cambio del código fuente se han clasificado manualmente alrededor de 2800 commits de 230 desarrolladores, realizados al repositorio de versiones del proyecto durante el año 2014. Esta clasificación tiene por objeto identificar qué modificaciones al código fuente se pueden imputar a correcciones de defectos (Fault Repairing) y cuáles a introducción de nueva funcionalidad (Feature Introduction), siguiendo el trabajo de Hassan. Esta clasificación permite definir métricas con las cuales construir modelos de predicción de defectos. Se comprueba que la cantidad y tamaño de los cambios de tipo “Feature Introduction” realizados a una clase son los mejores predictores de los defectos futuros de la misma. Además, se comprueba que utilizando métricas de cambio es posible obtener mejores resultados en la predicción que con métricas estáticas, pero las primeras representan un mayor esfuerzo de medición que las segundas.