How Developers Use Relation Chains in Gerrit-Based Review Ecosystems: An Empirical Study Across Three Open-Source Ecosystems
Este estudo empírico de quase 30.000 cadeias de relação através de três ecossistemas baseados em Gerrit revela que, embora sequências de mudanças vinculadas por dependência sejam cada vez mais prevalentes, elas estendem significativamente os tempos de merge e propagam o esforço de revisão, necessitando que as futuras ferramentas e análises de revisão evoluam para raciocinar sobre essas cadeias estruturadas em vez de mudanças isoladas.
Artigo original sob licença CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/). Esta é uma explicação gerada por IA do artigo abaixo. Não foi escrita nem endossada pelos autores. Para precisão técnica, consulte o artigo original. Ler aviso legal completo
Imagine um mundo onde construir software é como construir um castelo imenso e intrincado. Neste mundo, os desenvolvedores não apenas jogam tijolos contra uma parede e esperam que eles grudem; eles usam um sistema rigoroso chamado Revisão de Código (Code Review). Antes que qualquer novo tijolo (ou linha de código) seja adicionado permanentemente ao castelo, uma equipe de inspetores o verifica para procurar rachaduras, garante que ele se ajuste ao projeto e assegura que não quebre nada mais. Este processo é vital para manter o castelo erguido e seguro.
Às vezes, no entanto, um projeto é grande demais para ser um único tijolo. É uma torre inteira que precisa ser construída. No passado, os desenvolvedores poderiam ter tentado construir a torre inteira de uma vez, mas isso é difícil de inspecionar. Por isso, começaram a dividi-la em uma sequência de etapas menores e conectadas. No mundo do software, especificamente dentro de uma ferramenta chamada Gerrit, essas etapas conectadas são chamadas de Cadeias de Relação (Relation Chains). Pense em uma cadeia de relação como um conjunto de dominós parados em linha: embora você não possa derrubar o terceiro até que o segundo caia, e o segundo até que o primeiro caia, os inspetores podem verificar todos eles ao mesmo tempo, mas o castelo só pode ser concluído em ordem. Toda a cadeia está ligada; se o primeiro dominó (a "base") estiver instável, toda a linha estará em perigo. Entender como essas cadeias funcionam é crucial porque, se o sistema for muito lento ou confuso, os desenvolvedores podem ficar presos esperando por horas, ou o castelo pode ser construído com rachaduras ocultas.
O Efeito Dominó: Como os Desenvolvedores Realmente Usam Cadeias de Código
Este artigo é um mergulho profundo em como desenvolvedores de três enormes comunidades de código aberto (OpenStack, Wikimedia e ONAP) usam essas "Cadeias de Relação" para construir software. Os pesquisadores analisaram quase 30.000 cadeias e mais de 400.000 mudanças de código individuais para ver como esses dominós interligados se comportam no mundo real. Eles queriam saber: Essas cadeias são comuns? Elas tornam o processo de revisão mais rápido ou mais lento? E o que acontece quando você tenta consertar um dominó no meio da linha?
As Cadeias Estão em Todo Lugar (e Estão Crescendo)
Primeiro, o estudo descobriu que essas cadeias não são um truque raro ou de nicho; elas são uma forma padrão de trabalho. Dependendo do projeto, entre 5% e 49% de todas as mudanças de código fazem parte de uma cadeia. De fato, em 14 dos 15 projetos estudados, o uso dessas cadeias está, na verdade, aumentando com o tempo. Os desenvolvedores estão percebendo que dividir grandes tarefas em peças menores e interligadas é o caminho a seguir.
A maioria dessas cadeias é curta, geralmente um par de dominós (uma mudança base e uma mudança dependente). No entanto, alguns projetos têm cadeias que se estendem incrivelmente longe. Os pesquisadores encontraram cadeias com até 98 membros! Um projeto teve até uma única cadeia gerada automaticamente com quase 60.000 membros, embora esse fosse um caso especial de configuração automatizada, não escrita por humanos.
O "Meio" é o Gargalo
É aqui que fica interessante. Os pesquisadores descobriram que estar no meio de uma cadeia é o trabalho mais difícil. Se você é o primeiro dominó (a "base"), você apenas precisa esperar pela sua própria revisão. Se você é o último (o "topo"), você apenas espera pelos que vêm antes de você. Mas se você está no meio, você está preso em um aperto. Você é bloqueado pelo dominó antes de você (esperando pela aprovação dele) enquanto simultaneamente bloqueia os dominós depois de você.
Devido a esse "aperto", as mudanças no meio de uma cadeia levam significativamente mais tempo para serem aprovadas. O estudo descobriu que, em média, os membros da cadeia levam 2,6 vezes mais tempo para serem mesclados (merge) do que mudanças únicas e isoladas de mesmo tamanho. Esse atraso não é porque o código é pior; é por causa do "overhead de sincronização". Embora os inspetores (revisores) possam verificar os tijolos em paralelo, a mesclagem real no castelo deve acontecer um por um, de baixo para cima. Cada vez que uma mudança na cadeia é ajustada, ela frequentemente força toda a linha a ser re-verificada, re-testada e reordenada, criando um gargalo onde as mudanças do meio esperam pelas que estão abaixo delas enquanto também seguram as que estão acima.
O Monstro da "Amplificação de CI"
O artigo também destaca um fenôãmeno que eles chamam de efeito de amplificação de CI. "CI" significa Integração Contínua, que é como um exército de robôs que testa automaticamente cada novo tijolo para garantir que ele não quebre o castelo. Em projetos com regras estritas (como o OpenStack), toda vez que um desenvolvedor atualiza uma mudança em uma cadeia, o exército de robôs tem que re-testar essa mudança e todas as mudanças que dependem dela.
O estudo descobriu que os membros da cadeia disparam de 10 a 23 tarefas de teste automatizado, enquanto uma mudança única e isolada pode disparar menos de duas. É como se você tivesse que re-testar sua casa inteira toda vez que trocasse uma única lâmpada. Isso cria uma quantidade enorme de trabalho extra para os computadores e atrasos para os humanos.
O "Efeito Fundação"
Uma das descobertas mais fascinantes é o que os autores chamam de Efeito Fundação. Eles descobriram que a quantidade de esforço gasto no primeiro dominó (a base) prevê quanto esforço será gasto em todos os dominós seguintes.
Se a mudança base recebe muita atenção, muitos comentários e várias rodadas de revisão, toda a cadeia tende a seguir o mesmo padrão. Os pesquisadores encontraram uma forte ligação (uma correlação de 0,43 a 0,61) entre a atividade na base e a atividade nos descendentes. É como se a "vibe" do primeiro dominó definisse o tom para toda a linha. Se a fundação é instável e exige muitos reparos, a torre inteira leva mais tempo para ser construída. Por outro lado, se a base é sólida e é aprovada rapidamente, o resto da cadeia tende a fluir suavemente.
Cadeias Não São Estáticas
Finalmente, o artigo revela que essas cadeias não são estruturas rígidas. Cerca de 33,5% das mudanças em uma cadeia passam por uma "evolução estrutural" antes de serem finalmente mescladas. Isso significa que a conexão entre os dominós muda enquanto eles estão sendo revisados. Um desenvolvedor pode decidir desvincular uma mudança de seu pai e vinculá-la a um diferente, ou toda a cadeia pode ser reorganizada.
Isso adiciona outra camada de complexidade: o mapa da cadeia está constantemente mudando. Às vezes, uma cadeia pode ficar dormente por um longo tempo. O estudo descobriu que a lacuna entre quando uma parte de uma cadeia é enviada e quando ela finalmente é mesclada pode chegar a 2,85 anos em alguns casos!
O Que Isso Significa para o Futuro
Os autores concluem que as ferramentas atuais para revisar código frequentemente tratam cada mudança como um evento isolado, como olhar para um único tijolo sem ver a parede à qual ele pertence. Este artigo sugere que precisamos mudar nossas ferramentas para entender a "cadeia" como uma unidade completa.
Eles sugerem que, se focarmos nossa atenção na base da cadeia (o primeiro dominó), podemos economizar uma quantidade massiva de tempo para o restante da cadeia. Se a fundação for sólida, toda a estrutura se move mais rápido. Eles também propõem que as ferramentas devem ser mais inteligentes em relação às mudanças do "meio", talvez priorizando-as para desbloquear o restante da linha.
Em suma, construir software com cadeias de relação é como reger uma orquestra complexa. Se o regente (a base) estiver fora do ritmo, toda a orquestra sofre. Mas se o regente for claro e os músicos (as ferramentas) entenderem como os instrumentos estão ligados, a música flui muito mais rápido. O estudo sugere que, ao entender essas conexões, podemos parar de esperar na fila e começar a construir castelos de forma muito mais eficiente.
Afogado em artigos na sua área?
Receba digests diários dos artigos mais recentes que correspondam às suas palavras-chave de pesquisa — com resumos técnicos, no seu idioma.