Tesis De Doctorado En Informática
Total Page:16
File Type:pdf, Size:1020Kb
PEDECIBA Informática Instituto de Computación – Facultad de Ingeniería Universidad de la República Montevideo, Uruguay Tesis de Doctorado en Informática Software unit testing techniques: An empirical study Diego Vallespir Marzo 2012 Software unit testing techniques: an empirical study Vallespir, Diego ISSN 0797-6410 Tesis de Doctorado en Informática Reporte Técnico RT 12-06 PEDECIBA Instituto de Computación – Facultad de Ingeniería Universidad de la República. Montevideo, Uruguay, 5 de marzo de 2012 Tesis Doctoral Software Unit Testing Techniques: An Empirical Study Diego Vallespir Director de Tesis: Juliana Herbert Director de Estudios: Alvaro´ Tasistro Programa de Doctorado en Informatica´ Marzo de 2012 Tesis presentada por Diego Vallespir para aspirar al T´ıtulode Doctor en Inform´atica. Vista y aprobada por Juliana Herbert. UNIVERSIDAD DE LA REPUBLICA´ FACULTAD DE INGENIER´IA El tribunal docente integrado por los abajo firmantes aprueba la Tesis de Investigaci´on: Software Unit Testing Techniques: An Empirical Study Autor: MSc. Diego Vallespir Directora de Tesis: PhD. Juliana Herbert Director Acad´emico: PhD. Alvaro´ Tasistro Carrera: Doctorado en Inform´atica- PEDECIBA Calificaci´on: Aprobado con Menci´on TRIBUNAL PhD. William Nichols (Revisor) PhD. Eduardo Miranda (Revisor) PhD. Claudia Pons PhD. Cristina Cornes PhD. Omar Viera Montevideo, 5 de marzo de 2012 To my family and to the team. Agradecimientos [Acknowledgements] Quiero agradecer primero a las personas que trabajaron conmigo en los proyectos de investigaci´onque fueron ejecutados durante el desarrollo de esta tesis: Apa, Cecilia; Avila,´ Adriana; Bogado, Carmen; Camilloni, Luc´ıa;De Le´on,Stephanie; Grazioli, Fernanda; Herbert, Juliana; Marotta, Adriana; Marotta, Fernando; Moreno, Silvana; Nichols, William; Robaina, Rosana; Valverde, Carolina. Muchas gracias por todo el trabajo compartido y por el esfuerzo realizado. Tambi´enquiero agradecer al resto del Grupo de Ingenier´ıade Software de la UdelaR por el apoyo brindado. En este sentido agradezco sobre todo a Jorge Tri~nanes,con quien varias veces convers´esobre mi trabajo de tesis. Agradezco a Luis Sierra por su ayuda con LATEX; siempre que tuve dudas Luis estuvo ah´ı.A Lorena Ibaceta y a Mar´ıaIn´esImas por las traducciones al ingl´es. A Santiago por el pasaje del formato de los art´ıculospublicados en la revista 1024 para que quedaran igual en ingl´esque en espa~nol. A Juliana Herbert por ser la tutora y gu´ıade este trabajo de tesis y a Alvaro´ Tasistro por ser mi director de estudios. A Watts Humphrey por plantear la idea inicial del tema de tesis. Aprove- cho para agradecerle a Watts todo lo que le ha dado a la ingenier´ıa de software. Agradezco mucho a mi familia: mi esposa, mis padres, mi hermana y mi cu~nado.Sobre todo a Mari, por acompa~nar,apoyar y entender. IX Resumen en Espa~nol El tama~noy la complejidad del software aumentan cada a~no.A su vez, el software cada vez ocupa m´aslugares en nuestro mundo y en nuestra vida (casas inteligentes, autos, tel´efonos,televisiones, bancos, oficinas, aviones, etc. contienen una importante porci´onde software). El desarrollo de soft- ware es una actividad creativa e intelectual realizada por seres humanos. Durante un proyecto de software es normal que el equipo de desarrollo cometa errores; esto se debe a la complejidad actual del software y debido a la naturaleza humana en si misma. Normalmente estos errores introducen defectos en el producto de software y cuando el software es utilizado esos defectos pueden causar fallas. La investigaci´onde c´omoconstruir software que no contenga defectos ha llevado a desarrollar, entre otras cosas, diversas y variadas t´ecnicasde pruebas de software. El objetivo de estas t´ecnicases detectar defectos antes de que el producto sea usado por los usuarios finales. Desafortunadamente, es dif´ıcilelegir qu´et´ecnicasutilizar. Esto se debe a que no es suficiente el conocimiento actual que se tiene sobre la efectividad y el costo de usar cada t´ecnicade pruebas. Una forma de aumentar este conocimiento es a trav´esde experimentos controlados. El objetivo general de esta tesis es contribuir al conocimiento de distin- tas t´ecnicasde pruebas. M´asespec´ıficamente, la intenci´ones conducir una investigaci´onemp´ıricapara conocer los resultados de usar distintas t´ecnicas de pruebas; principalmente en lo que refiera a su efectividad y costo. Este objetivo general es dividido en dos objetivos particulares. El primero y principal es el estudio de las siguientes t´ecnicasde pruebas: inspecci´onde escritorio, partici´onen clases de equivalencia y an´alisisde valores l´ımite, tablas de decisi´on,trayectorias linealmente independientes, cubrimiento de condici´onm´ultiple,cubrimiento de sentencias, y todos los usos. El segundo es el estudio de las t´ecnicasde pruebas utilizadas en el Proceso Personal de Software (Personal Software Process - PSP). Para conocer la efectividad y el costo de las 7 t´ecnicas de pruebas men- cionadas, realizamos dos experimentos controlados. Llamamos al primer experimento Experimento 2008 y al segundo Experimento 2009. Los nom- bres provienen de los a~nosen los cuales comenzaron los experimentos. En el an´alisisde resultados encontramos que la efectividad de todas las t´ecnicasde pruebas fue baja. Ninguna de las t´ecnicastuvo m´asde un 35% XI de efectividad. Adem´as,la efectividad de las t´ecnicasse reduce cuando estas fueron utilizadas en los programas de nuestro experimento en relaci´on a cuando estas fueron usadas durante el entrenamiento. Esto seguramente se debe a que es m´asf´acilencontrar defectos en programas triviales que encontrar defectos en programas complejos. Tambi´enrealizamos algunos estudios iniciales usando el PSP. Analizamos el comportamiento de las t´ecnicasde pruebas y el costo de encontrar y cor- regir defectos usando el PSP. Usamos datos de cursos del PSP que fueron tomados desde octubre de 2005 hasta enero de 2010. Estos cursos fueron dic- tados por el Software Engineering Institute (SEI) de la Universidad Carnegie Mellon o por socios (partners) del SEI. En este caso encontramos que la revisi´onde dise~notiene una alta efectivi- dad (m´asde un 50%) para remover defectos que fueron inyectados durante la fase de dise~nodetallado . Tambi´enencontramos que, la revisi´onde c´odigo tienen una alta efectividad (m´asdel 60%) para remover defectos inyectados durante la fase de codificaci´on. Finalmente, realizamos otros trabajos de investigaci´onque complemen- tan la l´ınea de investigaci´oncentral de esta tesis. Estos trabajos fueron muy diversos. Estudiamos diferentes propuestas de taxonom´ıasde defec- tos que existen en la literatura, las evaluamos y las comparamos. Tambi´en propusimos un marco de comparaci´onde experimentos que buscan evaluar las t´ecnicasde pruebas. Empaquetamos el Experimento 2008. Por ´ultimo, tambi´enanalizamos la calidad de los datos recolectados por los sujetos del Experimento 2008. Durante esta tesis hemos hecho hincapi´een usarla como un marco para la creaci´ondel Grupo de Investigaci´onen Ingenier´ıade Software de nuestra Universidad. Esto implic´oun esfuerzo extra importante pero, gratificante al mismo tiempo ya que consideramos que hemos avanzado en la consolidaci´on de este grupo. Abstract The size and complexity of the software increase every year. Besides, it takes up more places in our world and in our life (intelligent houses, cars, telephones, televisions, banks, offices, aircraft, etc, contain an important portion of software). Software development is a creative and intellectual ac- tivity performed by human beings. During a software project it is normal for the development team to make mistakes, both because of the current com- plexity of the software and because of human nature itself. Normally these mistakes end up in defects in the software product and when the software is being executed these can cause failures. The search of how to develop software that does not contain defects has led to, among other things, the development of a varied number of testing techniques. These aim at the detection of defects before the product is used by the users. Unfortunately, it is difficult to choose which technique to use, since the knowledge cur- rently available about the effectiveness and the cost of each of the testing techniques is not enough. A way of increasing that knowledge is through controlled experiments. The general goal of this thesis is to contribute to the knowledge of differ- ent testing techniques. More specifically, we intend to conduct an empirical investigation of the results of using them, mainly in what refers to their effec- tiveness and cost. This general goal is divided into two particular ones. The first and principal is the study of the following testing techniques: desktop inspection, equivalence partitioning and boundary-value analysis, decision table, linearly independent path, multiple condition coverage, sentence cov- erage and all uses. The second is the study of the Personal Software Process (PSP) testing techniques. In order to know the effectiveness and cost of the 7 testing techniques mentioned we conducted two controlled experiments. We called the first one Experiment 2008 and the second one Experiment 2009. Their names come from the years in which we started the experiments. In the analysis of the results we found that the effectiveness of all the testing techniques was low. None of the techniques was more than 35% effective. Besides, the effectiveness of the techniques decreased when they were used in the experiment programs in relation to when they were used in the training. This is certainly due to the fact that it is easier to find defects XIII in trivial programs than it is to find them in complex ones. We also conducted some initial studies using the PSP. We analyzed the behavior of the testing techniques and the cost of finding and fixing defects in the PSP. We used data from PSP courses taught between October 2005 and January 2010. These courses were taught by the Software Engineering Institute (SEI) of the Carnegie Mellon University or by SEI partners.