DevOps: Estudo de caso sobre erros de build no Google

O build do código é uma fase muito importante no desenvolvimento de software, sem o build não há executável, ou seja, o processo de build é primordial para obter um software funcional. O processo de build (ou compilação dos fontes), parece uma tarefa trivial, mas é, na verdade, um processo bastante complexo. Esse processo consiste em compilar os fontes, e pode envolver diversos subsistemas e diferentes linguagens de programação. Além disso, o processo de build afeta diretamente a produtividade do desenvolvedor, que geralmente trabalha em ciclos de “desenvole-compila-teste” onde um build demorado pode fazer com que o desenvolvedor perca o foco entre uma alteração e outra durante o processo de build.

Pesquisadores do Google fizeram um estudo interno sobre o processo de build. Esse estudo envolveu a análise de incríveis 26.6 milhões de builds realizados por 18 mil desenvolvedores num período de nove meses, entre 2012 e 2013. A maioria desses builds envolviam a construção de sistemas em Java ou C++ e um dos builds mais complexos tinha 2858 build targets e seis linguagens de programação.

O estudo concentrou-se em três perguntas: qual a frequência das falhas no processo de build, o motivo das falhas e o tempo necessário para correção das falhas no build. Apesar das particularidades do processo de desenvolvimento do Google, devido à grandeza dos números, o estudo é útil para entender um pouco mais a natureza do processo de build. O restante desse post sumariza os principais números dessa pesquisa.

A frequência das falhas

Os gráficos a seguir mostram a distribuição das falhas de build entre os desenvolvedores. A figura 1 ilustra as falhas de build na plataforma Java, cuja média de falhas é de 28.5%. A figura 2 ilustra as falhas de build quando se trata de C++, cuja média de falhas é de 38.4%. Essa diferença entre linguagens é atribuída, em parte, ao uso de IDEs, já que desenvolvedores Java beneficiam-se das validações realizadas pelo IDE antes do build.

Figura 1: Falhas de build em Java.
Figura 1: Falhas de build em Java.
Figura 2: Falhas de build em C++
Figura 2: Falhas de build em C++

Motivo das falhas de build

A percentagem de erros por categoria é mostrada na figura 3. Erros de build relacionados às dependências é maioria tanto em Java (64,71%) quanto em C++ (52,68%). Há também muito mais erros de sintaxe em C++ do que em Java, mais uma vez essa diferença é atribuída ao uso de IDEs para Java.

Figura 3: Tipos de erro no build
Figura 3: Tipos de erro no build em Java e C++

Tempo necessário para correção das falhas no build

O tempo para correção das falhas dos builds acaba sendo inconclusivo na pesquisa, pois do evento inicial – falha do build – até o momento onde o build é executado com sucesso, pode haver outras atividades realizadas pelo desenvolvedor. Há casos onde o build falha em um dia e o desenvolvedor deixa a correção para outro dia. Ainda assim é possível entender a natureza das falhas e quais tipos demandam mais e menos esforços para correção. Como exemplo, erros onde há falhas semânticas (ex.: métodos abstratos não implementados) demandam mais tempo, pois é necessário implementar o método requerido, em contra partida erros de dependências são resolvidos rapidamente.

Enfim, o processo de build é bastante complexo e o entendimento dos detalhes desse processo é relevante para melhorá-lo a fim de prevenir e reduzir o índice de falhas.

O estudo foi publicado com o título de “Programmers’ Build Errors: A Case Study (at Google)” e está disponível em: http://research.google.com/pubs/pub42184.html

Leave a Reply

Your email address will not be published. Required fields are marked *