18 research outputs found
Assessment of C++ object-oriented mutation operators: A selective mutation approach
Mutation testing is an effective but costly testing technique. Several studies have observed that some mutants can be redundant and therefore removed without affecting its effectiveness. Similarly, some mutants may be more effective than others in guiding the tester on the creation of high‐quality test cases. On the basis of these findings, we present an assessment of C++ class mutation operators by classifying them into 2 rankings: the first ranking sorts the operators on the basis of their degree of redundancy and the second regarding the quality of the tests they help to design. Both rankings are used in a selective mutation study analysing the trade‐off between the reduction achieved and the effectiveness when using a subset of mutants. Experimental results consistently show that leveraging the operators at the top of the 2 rankings, which are different, lead to a significant reduction in the number of mutants with a minimum loss of effectiveness
Assessment of Class Mutation Operators for C++ with the MuCPP Mutation System
Context: Mutation testing has been mainly analyzed regarding traditional mutation operators involving structured programming constructs common in mainstream languages, but mutations at the class level have not been assessed to the same extent. This fact is noteworthy in the case of C++ despite being one of the most relevant languages including object-oriented features. Objective: This paper provides a complete evaluation of class operators for the C++ programming language. MuCPP, a new system devoted to the application of mutation testing to this language, was developed to this end. This mutation system implements class mutation operators in a robust way, dealing with the inherent complexity of the language. Method: MuCPP generates the mutants by traversing the abstract syntax tree of each translation unit with the Clang API, and stores mutants as branches in the Git version control system. The tool is able to detect duplicate mutants, avoid system headers, and drive the compilation process. Then, MuCPP is used to conduct experiments with several open-source C programs. Results: The improvement rules listed in this paper to reduce unproductive class mutants have a significant impact in the computational cost of the technique. We also calculate the quantity and distribution of mutants generated with class operators, which generate far fewer mutants than their traditional counterparts. Conclusions: We show that the tests accompanying these programs cannot detect faults related to particular object-oriented features of C++. In order to increase the mutation score, we create new test scenarios to kill the surviving class mutants for all the applications. The results confirm that, while traditional mutation operators are still needed, class operators can complement them and help testers further improve the test suite
Coverage-based quality metric of mutation operators for test suite improvement
The choice of mutation operators is a fundamental aspect in mutation testing to guide the tester to an effective test suite. Designing a set of mutation operators is subject to a trade-off between effectiveness and computational cost: a larger mutation population might uncover more faults, but will take longer to analyse. With the aim of resolving this trade-off, several authors have defined an assortment of metrics to determine the most valuable operators. In this work, we extend an existing quality metric by incorporating an additional source of data and coverage information and therefore investigate the extent to which mutants that are often covered but rarely killed can improve the evaluation of mutation operators for the refinement of the test suite. As a case study, we analyse C++ class-level operators based on the new coverage-based quality metric to assess whether the original metric is enhanced. The results when selecting the best-valued operators show that this metric has great potential to help the tester in finding effective mutation operators. In comparison with the metric from which it is derived, the use of coverage data allows to reduce the number of mutants but often loses fewer test cases and, in addition, retains those that seem hard to design
Aplicación de la prueba de mutaciones a composiciones de servicios web en WS-BPEL para la generación de casos de prueba de calidad
La prueba de mutaciones ha sido objeto de múltiples trabajos de
investigación durante los últimos 30 años; sin embargo, aún hoy día
sigue presentando algunos problemas que no están resueltos, como la
determinación de los programas semánticamente equivalentes, el coste
computacional implicado en la generación y ejecución del gran número
de mutantes producidos frente a los casos de prueba, la generación de
casos de prueba, etc.
Durante estas tres décadas se han propuesto técnicas para intentar
vencer estos problemas. Esta tesis aborda el problema de la generación
automática de los casos de prueba, empleando para ello una técnica
evolutiva. Los algoritmos genéticos han sido ampliamente utilizados en
la generación de casos de prueba empleándose principalmente un
criterio estructural, pero también han sido aplicados a los sistemas
de mutaciones. A estos últimos también se han aplicado variantes de
los algoritmos genéticos conocidas como algoritmos bacteriológicos y
algoritmos inmunológicos. El enfoque que se propone en esta tesis está
basado en un algoritmo genético que adopta algunas de las
características de los algoritmos bacteriológicos.
Como objeto de esta investigación se han escogido las composiciones de
servicios web en el lenguaje WS-BPEL~2.0. Las arquitecturas orientadas
a servicios, los servicios web y el lenguaje WS-BPEL permiten
automatizar los procesos de negocio; además, el impacto
económico de las composiciones de servicios web en WS-BPEL ha crecido
de forma considerable en los últimos años, por lo que se considera
imprescindible profundizar en la prueba de este tipo de aplicaciones.
Todas las razones anteriores nos han llevado a aplicar la prueba de
mutaciones, una técnica que ha sido previamente aplicada a multitud de
lenguajes, al lenguaje WS-BPEL y a definir una técnica de generación
de casos de prueba que tengan como objetivo matar a los mutantes
producidos para una composición WS-BPEL.
Dado que la prueba de mutaciones no había sido aplicada anteriormente
a este lenguaje, esta tesis afronta el proceso completo de aplicación
de esta técnica a un lenguaje: definición de los operadores de
mutación, desarrollo de una herramienta de generación y ejecución
automática de los mutantes, evaluación y mejora de los operadores
definidos y, por último, definición de la técnica de generación de
casos de prueba y desarrollo de un generador de casos de prueba que
nos permita aplicarla a las composiciones WS-BPEL. Para la evaluación
de los operadores de mutación se han propuesto unas métricas de
calidad que nos pueden permitir, además, definir una técnica de
reducción del coste computacional de la prueba de mutaciones de
composiciones WS-BPEL mediante la disminución del número de operadores
aplicados, descartando aquellos que obtengan valores bajos para las
métricas de calidad propuestas.
El trabajo de investigación desarrollado ha permitido
alcanzar todos los objetivos propuestos
Sistemas operativos. Conceptos fundamentales
Un elemento esencial en todo sistema de computación es el sistema operativo. En este capítulo veremos cuál es su función y objetivo principal: abstraer el hardware para ofrecer un conjunto de servicios a los usuarios. Con el fin de comprender mejor los distintos elementos que componen un sistema operativo contemporáneo y sus objetivos, veremos como a lo largo de la historia se han ido introduciendo innovaciones para aumentar el rendimiento del sistema
Sistemas operativos. Conceptos fundamentales
Centro de Informacion y Documentacion Cientifica (CINDOC). C/Joaquin Costa, 22. 28002 Madrid. SPAIN / CINDOC - Centro de Informaciòn y Documentaciòn CientìficaSIGLEESSpai
