Abstract:
RESUMO: O teste de software é a principal forma de detectar falhas e avaliar a qualidade de um
programa. Dentre os tipos de teste de software, podemos destacar o teste de regressão,
que reexecuta os casos de teste do sistema para verificar se modificações em uma versão
do programa não trouxeram prejuízo ao funcionamento de módulos que estavam atuando
corretamente em versões anteriores. A forma mais comum de teste de regressão é a
reexecução de todos os casos de teste do sistema, mas o crescimento no porte de um
sistema de software pode dificultar essa abordagem devido a restrições de tempo ou de
custos. Dentre as abordagens para resolver esse problema e melhorar o teste de regressão,
podemos destacar a priorização de casos de teste, que consiste na alteração da sequência de
execução dos casos de teste, buscando maximizar alguma propriedade da suite (conjunto)
de testes. Este trabalho tem por objetivo priorizar casos de teste, buscando maximizar a
taxa de detecção de falhas do teste de regressão. Para isso, é proposta uma abordagem
em três etapas: na primeira etapa, são atribuídos valores de criticidade aos componentes
do software por meio de um sistema de inferência fuzzy, cujas entradas são métricas de
software relacionadas à susceptibilidade a falhas; na segunda etapa, é calculada a criticidade
dos casos de teste, com base na criticidade dos componentes de software por eles cobertos;
na terceira etapa acontece a priorização dos casos de teste, que emprega otimização por
colônia de formigas para ordenar os casos de teste considerando suas criticidades, tempos
de execução e histórico de detecção de falhas. As soluções foram avaliadas com base nas
métricas APFD (Average Percentage of Fault Detection, que representa a taxa de detecção
de falhas) e APFDC (variação do APFD que considera os custos de execução dos casos
de teste e a severidade das falhas). Foram realizados experimentos com programas em
linguagem C obtidos no repositório SIR (Software-artifact Infrastructure Repository), e
os resultados obtidos com a abordagem foram comparados à não-ordenação das suites,
à ordenação obtida por meio de uma busca exaustiva e a uma ordenação obtida por um
algoritmo guloso que considerou a criticidade, histórico de detecção de falhas e tempo de
execução dos casos de teste. Além disso, os resultados foram submetidos a um teste de
sanidade e comparados à ordenação aleatória, apresentando fortes indícios de adequação
ao problema. --------------------- ABSTRACT: Software testing is the main way of detecting faults and evaluating the quality of a
program. Among the types of software testing, we can highlight the regression testing,
which reexecutes the system’s test cases to check if changes in a version of the program
did not bring prejudice to the functioning of modules which were working properly in
previous versions. The most common way of regression testing is the reexecution of all the
system’s test cases, but the growth of the system’s size can hamper this approach due to
time and cost restrictions. Among the approaches to solve this problem and improve the
regression testing, we can highlight the test case prioritization, that consists in changing
the execution sequence of the test cases, aiming to maximize some property of the test suite.
This work aims to prioritize test cases, seeking to maximize the rate of fault detection.
In this regard, a three-step approach is proposed: at the first step, there are attributed
criticality values to the software components through a fuzzy inference system, whose
inputs are software metrics related to fault proneness; at the second step, the test cases
criticality is calculated, based on the criticality of the software components covered by
them; at the third step occurs the test prioritization, which uses ant colony optimization
to order the test cases considering their criticality, execution times and history of faults.
The solutions were evaluated based on the APFD (Average Percentage of Fault Detection)
and APFDC (APFD variation which coniders the cost of the test cases and the severity
of the faults) metrics. There were performed experiments with C programs from the
repository SIR (Software-artifact Infrastructure Repository), and the results obtained with
the approach were compared to the non-ordination of the test suites, to the ordination
obtained through an exhaustive search, and to the ordination obtained through a greedy
algorithm which considered the criticality, history of fault detection and execution time of
the test cases. Furthermore, the results were submitted to a sanity check and compared to
a random search, showing strong evidence of suitability for the problem.