Uma investigação sobre Test Smells em códigos de testes JavaScript. - JORGE, Dalton Nicodemos. (2023)
Teste de software é uma atividade imprescindível no desenvolvimento de sistemas, pois minimiza a possibilidade de manifestar problemas e maximiza as chances do código de produção estar conforme suas especificações. No entanto, assim como uma má escolha de design (bad smell) afeta o código de produção, os testes também estão suscetíveis ao mesmo tipo de problema. Sendo assim, um teste com indicação de possíveis defeitos no design (test smell) pode ocasionar adversidades que vão desde a legibilidade do código, dificultando a manutenção, até mesmo a estar suscetível a fornecer falsos positivos ou simplesmente parar de funcionar. De fato, test smells são anti-padrões adotados na implementação do código de teste. Esses smells podem ter variações ou desencadear o surgimento de novos tipos, dependendo da linguagem ou tecnologia utilizada para a escrita dos testes. Em paralelo, a linguagem JavaScript tem se desenvolvido ao longo de décadas desde sua criação e uma notável evolução desde 2015 com a especificação ECMAScript 6 (ES6). JavaScript é uma linguagem de alto nível, que inclui as seguintes particula ridades: ser multi-paradigma, interpretada, utilizar tipagem dinâmica, possuir uma orientação a objeto baseada em protótipos e até mesmo funções de primeira classe. Diante disso, focamos nosso estudo de smells em JavaScript, pelo fato dela ser uma linguagem em constante evolução e largamente utilizada para desenvolver software em diversas plataformas, tais como: servidores, desktop, linha de comando, sistemas móveis e internet das coisas. Em síntese, o objetivo deste trabalho é investigar a ocorrência e a severidade de test smells clássicos e específicos na linguagem JavaScript, e verificar se estes anti-padrões podem estar correlacionados e com as métricas de qualidade do código de teste. Para alcançar este objetivo, inicialmente selecionamos 15 smells clássicos da literatura e um inerente à linguagem, para avaliar a ocorrência no código de teste. Com o intuito de facilitar a detecção de smells e validar o nosso estudo, desenvolvemos uma ferramenta de detecção automática desses 16 smells através da técnica de análise estática de código e executamos um estudo exploratório com 65 projetos, sendo 61 de código-livre e 4 de 2 código-fechado. Como resultados, concluímos que as incidências de alguns destes test smells estão moderadamente correlacionadas entre si e com as métricas de qualidade em sentido positivo. Adicionalmente, realizamos um estudo complementar envolvendo desenvolvedores e testadores com o intuito de investigar o impacto da experiência no reconhecimento desses smells em JavaScript. Este estudo visou entender não apenas a prevalência de test smells específicos na percepção desses profissionais, mas também as estratégias e ferramentas utilizadas por eles para mitigar tais anti-padrões. Este aspecto do estudo nos permitiu avaliar a conscientização e as práticas adotadas no contexto real de desen volvimento e teste de software, enriquecendo a compreensão dos desafios enfrentados e das possíveis soluções aplicáveis. Com este trabalho esperamos ter contribuído para a formalização inicial dos estudos de test smells na linguagem JavaScript, tendo em vista que embora venha sendo cada vez mais utilizada nos mais diversos contextos de desenvolvimento, ainda é muito pouco investigada quanto as suas especificidades e desdobramentos no âmbito de test smells.