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.](http://gabrielamorim.com/wp-content/uploads/2014/10/falhas-build-java.png)
![Figura 2: Falhas de build em C++](http://gabrielamorim.com/wp-content/uploads/2014/10/falhas-build-cpp.png)
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](http://gabrielamorim.com/wp-content/uploads/2014/10/tipos-de-erro-no-build.png)
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