Uma metodologia para a geração de testes unitários baseada em extração de modelos - Brito, Iara Ramos (2021)
A geração de testes em sistemas já existentes, sem documentação atualizada ou sem testes legados, usualmente não é uma tarefa fácil, pois exige do desenvolvedor o trabalho de descobrir ou supor as regras que os testes devem executar para testar o sistema corretamente. Neste trabalho, propõe-se uma metodologia com o objetivo de possibilitar a criação semiautomática de testes unitários nesse cenário. A metodologia propõe a integração das técnicas de testes e verificação de modelos, utilizando a extração de modelos. A extração de modelos é usada para possibilitar a obtenção de um modelo de comportamento a partir de rastros de execução de alguns casos de teste executados sobre o código de interesse. Este modelo é analisado em uma ferramenta de verificação de modelos, gerando contraexemplos, os quais descrevem caminhos a partir do estado inicial que são diferentes daqueles constantes no modelo atual. Estes contraexemplos gerados são analisados a fim de verificar se permitem a criação de algum teste válido. A criação de um novo teste implica a geração de um novo rastro e, por consequência, a construção de um novo modelo contendo este novo comportamento do sistema, o que torna a abordagem iterativa. O processo de extração de modelos utilizado neste trabalho usa as ferramentas Labelled Transition Systems Extractor (LTSE) para a geração de um modelo no formato de Labelled Transition Systems (LTS) a partir de rastros deixados na execução da classe instrumentada. Nos experimentos realizados, foi analisada a eficácia da metodologia para a criação de testes unitários. Para isso, foram analisadas quatro classes de quatro sistemas de acesso público. A metodologia foi aplicada nessas quatro classes e foram verificadas três questões principais em relação a metodologia: se a metodologia permite a geração de testes, se os testes gerados permitiam o aumento de cobertura de branch ou linha e se a metodologia permite descobrir erros. Os resultados obtidos no experimento mostraram que, em geral, a metodologia permite a geração de testes e que a geração desses testes pode implicar o aumento de cobertura de branch ou linha. Foram realizadas análises dos resultados dos experimentos avaliando as possíveis relações entre algumas métricas de software de cada classe e os seus diferentes resultados obtidos na aplicação da metodologia. Além disso, foi mostrado no trabalho como a metodologia pode contribuir para a descoberta de erros na aplicação.