Encontrar e corrigir erros no código do programa ainda toma muito tempo dos desenvolvedores. Uma equipe da TU Graz desenvolveu uma solução que aborda os maiores desperdiçadores de tempo.
Os aplicativos de software modernos geralmente consistem em vários arquivos e vários milhões de linhas de código. Devido à grande quantidade, encontrar e corrigir falhas, conhecido como depuração, é difícil. Em muitas empresas de software, os desenvolvedores ainda procuram falhas manualmente – algo que ocupa uma grande proporção do seu tempo de trabalho. Estudos indicam que isso representa entre 30 e 90 por cento do tempo total de desenvolvimento. Birgit Hofer e Thomas Hirsch do Instituto de Tecnologia de Software da Universidade de Tecnologia de Graz (TU Graz) desenvolveram uma solução baseada em métodos e métricas de processamento de linguagem natural existentes que podem acelerar muito o processo de encontrar código defeituoso e, portanto, depurar.
A localização de falhas consome mais tempo
“Como primeiro passo, conduzimos pesquisas entre desenvolvedores para descobrir quais são os maiores desperdícios de tempo na depuração. Descobrimos que a correção de bugs em si não é o grande problema, mas que os programadores ficam atolados principalmente na localização de falhas, ou seja, restringindo a busca à área certa no código do programa”, explica Birgit Hofer.
Com base nessa percepção, os pesquisadores começaram a encontrar uma solução para esse problema que também seja escalável para aplicativos com muito código. Embora existam abordagens eficientes baseadas em modelos nas quais um programa é convertido em uma representação lógica (chamada de modelo), isso só funciona para programas pequenos. Isso ocorre porque o esforço de computação aumenta exponencialmente com o tamanho do código. A abordagem adotada por Birgit Hofer e Thomas Hirsch representa certas propriedades de software em números – por exemplo, a legibilidade ou a complexidade do código – e também pode ser usada para grandes quantidades de código, pois o esforço computacional só aumenta linearmente.
Comparação da descrição do bug e do código
O ponto de partida para a localização de falhas é o relatório de bug, para o qual os testadores ou usuários preenchem um formulário no qual descrevem a falha observada e inserem informações sobre a versão do software, seu sistema operacional, as etapas que eles tomaram antes da falha ocorrer e outras informações relevantes. Com base neste relatório de bug, a combinação de processamento de linguagem natural e métricas analisa todo o código com relação às classes e aos nomes de variáveis, arquivos, métodos ou funções e as chamadas para métodos e funções. O aplicativo identifica seções de código que melhor correspondem ao relatório de bug. Como resultado, os desenvolvedores recebem uma lista de cinco a dez arquivos classificados de acordo com a probabilidade de serem responsáveis pela falha observada. Os desenvolvedores também recebem informações sobre o tipo de falha que tem maior probabilidade de estar envolvida. Esses dados podem ser usados para localizar e corrigir o bug mais rapidamente.
“O tempo de trabalho dos desenvolvedores de software é caro, mas eles frequentemente gastam mais desse tempo caro localizando e corrigindo bugs do que desenvolvendo novos recursos”, diz Birgit Hofer. “Como já existem várias abordagens para erradicar esse problema, investigamos como podemos combiná-las e melhorá-las para que haja uma base para aplicação comercial. Agora lançamos as fundações e o sistema funciona. No entanto, para integrá-lo a uma empresa, ele ainda teria que ser adaptado às respectivas necessidades da empresa.”
O sistema de depuração está disponível através da plataforma “GitHub”. No os artigos e repositórios associados a esta pesquisa podem ser encontrados.
Esta pesquisa está ancorada no projeto “Amadeus” do Fundo Austríaco para a Ciência (FWF) ( https://doi.org/10.55776/P32653 ) e está ancorada no Campo de Especialização, um dos cinco focos de pesquisa estratégica da TU Graz.
<