As revisões de código são necessárias para desenvolvedores juniores?

39

Já trabalhei em duas empresas, cada uma com uma metodologia diferente quando se tratava de análises de código:

Na primeira empresa, uma revisão de código foi conduzida pelos líderes da equipe e foi necessária após a conclusão de cada módulo.

No entanto, na segunda empresa, os líderes de equipe não eram obrigados a realizar nenhuma revisão de código e apenas checavam os problemas de funcionalidade e design.

Então, eu estou confuso. O processo de revisão de código é realmente necessário? Se for, por que? E se não for, por que não?

usuário8
fonte
28
Se os desenvolvedores seniores dizer desenvolvedores junior de fazer as coisas de uma certa maneira, há muitas vezes uma razão muito boa ....
2
@ Tilsan The Fighter: É bom que você esteja fazendo perguntas - curioso é, ou deveria ser, um feito de programador - mas por favor, faça com que sejam compreensíveis e fáceis de ler.
gablin
9
@ Thorbjorn - Isso só é verdade se os desenvolvedores seniores são seniores por causa da habilidade e não por causa da duração. Já vi muita código ruim e design por engenheiros seniores
KallDrexx
8
Pode haver uma boa razão, e é bom descobrir essa razão, mas você não deve confiar cegamente nos conselhos deles apenas por causa do título e da experiência de X anos. Eu perguntei ao engenheiro sênior aqui por que ele fez um monte de código ruim e tudo o que recebi foi um encolher de ombros com um "não sei". Existem engenheiros ruins o suficiente para me fazer perceber que não confio em apenas um título.
precisa saber é o seguinte
4
+1 KallDrexx - foi o que encontrei também. Muitas vezes, um desenvolvedor "sênior" não sabe por que você não deve colocar tudo em uma classe estática, ou sabe algo sobre testes ou conhece quaisquer padrões de design adequados. "Senior" geralmente se refere à posse e não à habilidade de o que eu posso dizer.
Wayne Molina

Respostas:

107

Pessoalmente, acho que todo código deve passar por uma revisão de código, não importa se você é desenvolvedor júnior ou sênior.

Por quê? Para iniciantes, seu título não indica nada sobre como você se desenvolve, e um desenvolvedor sênior pode aprender algo com o júnior. Em nossa empresa, mudamos de posição para que um dos outros membros da equipe revise seu código ... na maioria das vezes, somos "juniores" e seniores, para que todas as coisas que não são ditas diariamente possam ser pego em um acompanhamento. Se o sénior não gostar do código do júnior, ele deve ouvir por que o júnior fez o que ele fez e olhar para ele e ver se essa é uma solução viável que pode ser usada no futuro ... é uma questão de ficar mais sábio, não importa quem é você.

Uma coisa importante sobre a revisão de código não é ser muito legal; se você é um cara legal, permite que códigos cada vez mais confusos evoluam no sistema. Assim como ontem, comecei a refazer um aplicativo completo que um ex-desenvolvedor juniordevel escreveu, e meu deus esse código poderia precisar de uma revisão antes de ele sair.

Não vejo por que deveria ser o líder da equipe apenas revisando, mas requer uma pessoa que não tenha medo de escolher uma "briga" por um pedaço de código mal desenvolvido, e deve ser uma pessoa que se preocupa com a forma como o código deve estar. Nem todas as empresas contratam pessoas que realmente se importam com o que fazem, e esses ovos ruins não devem ter permissão para fazer revisões de código, pois é provável que apenas encolhem os ombros e digam "OK" ao código incorreto.

cibernéticos
fonte
8
Na verdade, há um ponto em não apenas ter o líder da equipe fazendo a revisão do código. Mesmo um desenvolvedor menos experiente deve ser capaz de seguir o código. :)
Guffa 22/10/10
63
Os líderes da equipe também devem ter seu código revisado, já que os desenvolvedores juniores podem aprender técnicas valiosas ou pelo menos ver como o código "bom" deve parecer. E só porque você é um líder de equipe não significa que você não pode cometer um erro.
TMN
4
@ TMN, não posso concordar mais. Os líderes da equipe nem sempre são escolhidos por causa de suas habilidades ou experiência; às vezes são tudo o que resta depois de um êxodo em massa (que aconteceu várias vezes em que trabalho) ou de uma grande demissão. O código de todos deve ser revisado, independentemente da experiência, status ou título.
Bedwyr
2
@ TMN Muito certo. O título "desenvolvedor sênior" não significa "incapaz de cometer erros" ou "incapaz de melhorar". Se isso acontecer, esse não é o tipo de desenvolvedor sênior que quero na minha equipe.
Brandon DuRette 25/10/10
2
Sou muito experiente e bom no que faço. Eu cometo erros, muitos dos quais foram capturados pela revisão de código.
22611 David Thornley
37

Basicamente, a revisão de código é necessária para todos os programadores, independentemente da experiência. É o controle de qualidade do desenvolvimento de software, e um dos motivos pelos quais o código aberto pode ser de altíssima qualidade.

EDIT: O motivo é que hoje um revisor de código tem exatamente a mesma função que um mantenedor posteriormente. Se o código não fizer sentido para ele hoje, também não fará sentido mais tarde, tornando os bugs mais caros de corrigir. Portanto, torne-o compreensível hoje, enquanto o desenvolvedor ainda se lembra do código. Além disso, o revisor pode ver bugs ou omissões que o desenvolvedor perdeu.

Infelizmente, muito poucos querem fazê-lo, mas, do ponto de vista comercial, deve ser obrigatório.

user1249
fonte
@ Mr.Thorbjorn Ravn Andersen: Você pode especificar quais são as vantagens e desvantagens do Processo de Revisão de Código?
precisa
2
você pode estar interessado nesta proposta de revisão de código . Seria bom se pudéssemos fazer a bola rolar sobre isso.
greatwolf
@ Victor, uma abordagem interessante e desejo-lhe boa sorte.
@Sankar Ganesh: há um livro grátis sobre a revisão do código que discute vantagens e desvantagens: smartbear.com/best-kept-secrets-of-peer-code-review
Joeri Sebrechts
17

Eu trabalho em um lugar onde a revisão de código é agora um requisito, mas não era tão pouco quanto 3 anos atrás. Ele fez uma grande melhoria em nosso código e na capacidade de outros manterem o código posteriormente. Até desenvolvedores seniores e muito experientes cometem erros que podem ser corrigidos de maneira fácil e silenciosa na revisão de código antes que o controle de qualidade os encontre ou pior antes que o cliente os encontre. Além disso, pelo menos uma pessoa que não seja o desenvolvedor original conhece o código.

Freqüentemente, quando uma organização tenta algo novo, como fizemos com a revisão de código, há muita resistência à mudança. Não vi quase nada disso (estávamos estatísticos também para obter um departamento formal de controle de qualidade.) Com a revisão de código. É preciso apenas uma ou duas revisões para ver o valor.

Encontrei novas técnicas que não havia considerado tanto na revisão do código do trabalho de outra pessoa quanto na revisão do meu código. Encontramos problemas de competência com novas contratações de forma relativamente rápida, com análises de código e, mais importante, com a forma como elas responderam à revisão de código. Aprendemos o que parece perfeitamente claro no momento da programação dessa seção que não ficará clara na manutenção. Isso é inestimável. Pode ser que a única coisa necessária seja um comentário sobre o motivo pelo qual algo foi feito. Descobrimos alguns mal-entendidos fundamentais sobre o design do banco de dados que precisavam ser corrigidos para que um relatório realmente tivesse as informações corretas.

Frequentemente, o que eu vi em uma revisão de código é que, pelo próprio ato de explicar algo para outra pessoa, o desenvolvedor terá uma lâmpada acesa na cabeça e percebe que há um bug que o revisor não viu.

E o boy pode codificar a revisão para identificar aqueles programadores de cowboys que não seguirão nenhum padrão ou usarão ferramentas obrigatórias e cujo código será praticamente impossível de manter por qualquer outra pessoa. E isso pode forçá-los a seguir com o programa ou sair também.

As pessoas mais resistentes à revisão de código são geralmente as pessoas das quais a organização mais precisa se livrar, porque elas sabem em seus corações que seu código não pode passar por uma revisão de código.

HLGEM
fonte
3
"Encontramos problemas de competência com novas contratações de forma relativamente rápida, fazendo análises de código e, mais importante, como eles responderam à revisão de código" - Esse é um benefício muito importante (e eu concordo, a forma como eles respondem diz mais do que os erros que cometem) .
Stephen C. Steel
1
+1 para capturar os
11

O cara ágil diria: "Você não precisa de uma revisão de código, basta emparelhar a programação e escrever bons testes" :)

Ilia K.
fonte
9
E alterne os pares com frequência e reconheça que a equipe, e não qualquer indivíduo, é o proprietário do código.
Don Roby
18
O cara ágil está errado. O código deve ser revisto por uma mente independente da (s) mente (s) que o criou. (É muito fácil para um par de programadores para falar entre si um beco sem saída, sem perceber!)
Peter Boughton
6
A programação de pares é uma revisão contínua de código.
3
@ Peter: O cara ágil também emparelha promiscuamente e pratica a propriedade comum do código; portanto, ao longo de um período de tempo (dias a semanas), a maioria do restante da equipe revisou o código que o par original escreveu. O cara ágil tem uma resposta para tudo. Algumas pessoas pensam que o cara ágil é um total espertinho.
Tom Anderson
2
A programação em pares corrige o principal problema das revisões de código - elas ocorrem muito tarde. Eu odeio ir à revisão de código para ver que o desenvolvedor passou uma semana redesenhando um algoritmo de biblioteca ou estrutura de dados.
Kevin cline
8

A revisão de código é uma boa maneira de disseminar conhecimento e boas práticas por meio de uma equipe. Na minha experiência, é uma boa idéia garantir que todo o código seja revisado e tentar variar quem revisa qual código.

Na minha equipe atual, o código de todos é revisado igualmente, e tanto o programador quanto o revisor devem estar satisfeitos com o código antes que ele possa ser liberado. Isso se aplica tanto aos desenvolvedores seniores que estão sendo revisados ​​por mais desenvolvedores juniores, um desenvolvedor júnior que revisa outro ou outros desenvolvedores seniores que se revêem. Se o revisor é inexperiente ou não se sente à vontade para revisar qualquer parte específica do código, ele se unirá a outro desenvolvedor (e talvez também o desenvolvedor original) para fazer a revisão como um grupo.

flamingpenguin
fonte
2
Sim, a revisão de código é tanto controle de qualidade quanto compartilhamento de conhecimento. Todos podem aprender com uma boa revisão de código. O revisor e o revisor.
Guillaume
1
Minha empresa é semelhante à de flamingpenguin. Todo check-in é revisado por outro desenvolvedor. Rank não tem nada a ver com quem analisa o quê. É um processo ponto a ponto. O requisito é que todo o código seja revisado. As revisões de código no estilo pai-filho servem apenas para afastar os desenvolvedores 'A', deixando um líder da equipe 'B' revisando os juniores 'C'. O melhor que uma equipe de estilo pai-filho pode esperar é um código medíocre. Se eles tiverem sorte.
Jim No Texas
5

Estou no ramo há mais de 20 anos, trabalhando para empresas de software e para diferentes negócios e nenhum desses locais teve um processo de revisão de código. No entanto, posso entender e apreciar os benefícios de ter um. Essencialmente, como eu os entendo, eles devem ser usados ​​para garantir a aderência aos padrões, que devem ser seguidos para que outros possam manter o código com mais facilidade no futuro. A legibilidade do código também pode ser verificada em um processo de revisão, pois isso também garantirá que a manutenção possa trabalhar efetivamente com o código.

Atualmente, trabalho em uma pequena loja onde sou o desenvolvedor único. Ocasionalmente, contratamos prestadores de serviços para ajudar com o backlog. Pelo menos um ou dois desses empreiteiros escreveram código que não necessariamente atendia aos meus ou aos padrões das empresas, mas funcionou bem e foi pelo menos um pouco compreensível. Quando apontei esse assunto para a gerência, eles não se importaram, eles só queriam saber se fazia o que nós pagávamos. Então, acho que depende apenas da empresa e, se é limpo ou não, o código de fácil manutenção é o produto desejado ou se eles querem apenas algo que funcione bem com o dinheiro.

Obviamente, como desenvolvedor, e alguém que precisa manter o código, eu gostaria de trabalhar com um código limpo que siga algum tipo de padrão, mas nem sempre tenho esse luxo, então faço o melhor possível e lido com o que tenho. , mesmo que isso signifique às vezes ter que reescrever algum código em meu próprio padrão.

user6061
fonte
4

As revisões de código podem identificar defeitos no início do ciclo de vida do software, quando os problemas são mais fáceis (e mais baratos) de corrigir. No SmartBear , desenvolvemos uma ferramenta de revisão de código por pares e também fizemos muitas pesquisas sobre como tornar as revisões de código eficazes. Com base nos dados de nossos clientes, os defeitos encontrados na revisão de código são 8 a 12 vezes mais baratos para localizar e corrigir do que os defeitos encontrados no controle de qualidade. Somente a economia de custos faz a revisão do código valer a pena, mas há mais valor do que apenas isso. A revisão de código é uma excelente maneira de todos na equipe aprenderem e melhorarem como desenvolvedores de software.

Existem algumas armadilhas que podem fazer com que as revisões de código se tornem menos eficazes e parece que sua organização está presa em uma delas. Faça a revisão do código sobre o código, não as pessoas. Os títulos não significam nada em uma revisão de código. Os apelos à autoridade (você deve fazer do meu jeito, porque eu sou o líder da equipe) fazem mais mal do que bem. Ensine em seu lugar. Os engenheiros seniores devem explicar por que isso deve ser feito do seu jeito, não apenas exigindo que seja. Se você está tendo dificuldades para explicar um conceito, também é uma experiência de aprendizado para você. Vocês dois serão melhores desenvolvedores pelo esforço que fazem.

Brandon DuRette
fonte
você tem um artigo oficial discutindo o 8-12 vezes mais barato? Estamos discutindo isso internamente.
@ Thorbjørn - Fazemos: goo.gl/7dMf . Isso vem do nosso livro sobre revisão de código, que você (e qualquer outra pessoa) pode ter gratuitamente: codereviewbook.com
Brandon DuRette 26/10/10
2

Eu acho que o código que revisa TODOS OS CÓDIGOS é um exagero. A quantidade de tempo que leva para revisar todo o código pode ser melhor gasta em outro lugar. Alternativamente, acho que código crítico e / ou partes particularmente complexas precisam de revisão de código, mas certamente nem todas as linhas de código.

Gratzy
fonte
7
Eu não poderia discordar mais. Cada linha de código deve passar por pelo menos duas revisões ... o desenvolvedor original deve revisar absolutamente todas as alterações de linha antes de enviá-las, e pelo menos um outro desenvolvedor deve executar uma revisão por pares como acompanhamento. Muito raramente, o código passa por uma revisão sem que pelo menos 1 boa pergunta seja levantada; as revisões por pares também aumentam a conscientização entre os membros da equipe sobre o que - e como - os outros estão concluindo suas tarefas.
STW
3
@ Gratzy - eu juro absolutamente por isso; normalmente adiciona ~% 10 ao ciclo dev; um pequeno investimento para o quanto captamos no início.
STW
4
@ Gratzy - simplesmente porque não somos perfeitos. Nossa equipe cresceu significativamente e temos uma rotatividade (principalmente de contratados). No passado, quando desistimos da política de revisão, os problemas voltam a aparecer quase imediatamente. O processo de revisão é simplesmente uma etapa crítica para manter uma equipe eficaz e produzir um produto de qualidade. Revisar todo o código não é difícil; especialmente se você tiver alguns desenvolvedores seniores muito bons em encontrar códigos desnecessários. A maioria dos códigos duplicados se origina de desenvolvedores que se saem bem, mas simplesmente não conhecem uma abordagem existente.
STW
5
Estou com o STW nisso - a correção de problemas detectados durante a revisão é muito mais barata do que tentar depurar / manter o código posteriormente, porque não era considerado crítico. Além disso, as revisões de código levam tempo apenas se o código estiver ruim - o código bom é rápido e fácil de ler!
Peter Boughton
7
Claro que não deveriam, mas isso não significa que não! (Quantas equipes têm desenvolvedores perfeitos?) Quais linhas de código você não revisa? Como você decide se uma alteração específica em um arquivo específico deve ser revisada ou não?
Peter Boughton
2

Na minha opinião, o código que será usado por uma empresa, seja ele escrito por um desenvolvedor Júnior ou Sênior, sempre deve ser revisado. Por quê? Porque e se o código tivesse vários erros? E se, durante o tempo em que esse código estava sendo usado, o programa travasse? Para impedir que essas coisas aconteçam, todo o código deve ser revisado antes do uso.

Mas e as empresas que não revisam o código? Provavelmente são as empresas que têm muitos problemas de tecnologia e muitos, como dizem aos consumidores, "travamentos" ;-).

Então deixe-me responder todas as suas perguntas:

  • Sim, o processo de revisão é necessário.
  • Por quê? Por causa das razões que afirmei acima.
Dinâmico
fonte
2

Revisão de código : O processo de revisão de código deve ser vital para todos, explicarei quem recebe todos os benefícios devido à realização da revisão de código e quais são os benefícios que estão recebendo.

1. Benefícios Obtidos pela Empresa Devido à Realização da Revisão do Código: Se a revisão frequente do código for realizada, a empresa poderá obter os produtos finais de uma maneira muito melhor otimizada, que os ajudará a obter o nome da marca em seu mercado e também a ajudar a obter ou melhorar seu nível atual de CMMI .

2. Benefícios para o líder da equipe devido à condução da revisão do código: Como todos sabemos, um professor pode identificar facilmente os erros, porque está revisando as respostas de seus alunos com mais frequência, para ter uma idéia de quais áreas existem. possível para coisas erradas. Da mesma forma, o líder da equipe também sabe quais são as coisas que dão errado nessas áreas. Como podemos corrigi-los e também ajudar o líder da equipe a pegar as idéias de notícias do desenvolvedor júnior também.

3. Benefícios para o desenvolvedor junior Devido à realização da revisão de código: o desenvolvedor junior pode facilmente captar as idéias sobre o processo de revisão de código e também é capaz de obter qual é o padrão de codificação. Por exemplo: para criar API de maneira adequada, eles aprenderão a padronização da codificação que pode ajudá-los no futuro, especialmente quando eles se tornarem no cargo de nível superior.

Portanto, minha conclusão é que a revisão de código é um processo muito muito vital para todos, mesmo para os membros da equipe, pois a revisão de código nos ajuda a corrigir nossos erros descuidados em nosso código, porque somos todos seres humanos, por isso não podemos prever que nunca cometer erros descuidados no código.

Sankar Ganesh
fonte
1

Qual é a diferença de interferir com suas idéias antes de verificar seu código (revisão) ou depois devido a um bug, ficando muito inteligente / difícil de entender ou não seguir as práticas padrão aceitas? Esse é o seu ego?

Você não pode desconsiderar os méritos da revisão de código ou qualquer outra coisa apenas porque ela está sendo implementada de maneira inadequada por um membro da equipe menos qualificado que você não respeita. A Revisão de Código não é um processo altamente complexo que apenas alguns super programadores são capazes de entender. Não tenho certeza de que existem muitos programadores ou escritores profissionais que são capazes ou têm tempo para editar automaticamente.

Você já retornou a uma linha de código alguns meses depois e se perguntou o que eu estava pensando? Haveria uma melhor chance de capturá-lo com uma revisão de código. Você acabou de entender e é apenas um pouco melhor do que o programador que você era há algum tempo atrás - espero.

JeffO
fonte
1

Na OMI, uma revisão de código deve ser essencial para todos os desenvolvedores, mas somente quando as pessoas que fazem a revisão são competentes. No passado, tive o código rejeitado em uma revisão porque, segui-o SOLID, fiz algumas Injeção de Dependências e o código foi organizado em namespaces e pastas de acordo com o design lógico, e incluiu um pequeno conjunto de testes de unidade para verifique o código. O código foi rejeitado como "muito complicado" e me disseram para usar uma classe que misturasse tudo e remover os testes, porque não era assim que a empresa escrevia o código.

Uma revisão de código como essa é inútil, mas uma revisão de código com uma equipe competente pode frequentemente esclarecer algo sobre o design (por exemplo, por que você deve fazer X e Y, mas não Z) ou indicar uma falha real (por exemplo, fazer X fará com que Y falhe por razões incorretas).

Wayne Molina
fonte
1

É claro que a Revisão de Código não é necessária . Por outro lado, nem testes, integração contínua, controle de origem, envolvimento do cliente, criação de perfil, análise estática, hardware decente, compilações com um clique, rastreamento de bugs, a lista continua.

Juntamente com as Revisões de código, as coisas mencionadas acima são ferramentas que ajudam a garantir a qualidade do software. Com uma combinação de habilidade, sorte, tempo e determinação; você pode fornecer software de qualidade sem nenhum desses itens, mas é mais provável que não o faça .

No seu cenário, não há nada para se confundir. Nem toda organização se entrega às melhores práticas. Eles podem discordar, pode entrar em conflito com uma prática recomendada diferente que implementam ou podem considerar que a sobrecarga de implementá-la é muito grande para eles neste momento. Dependendo das circunstâncias, eles podem estar corretos ao fazê-lo ou podem estar fazendo uma economia falsa. Para algumas ferramentas (por exemplo, controle de fonte), a relação retorno / esforço é tão boa que usá-la não é fácil; para outros, é menos claro.

Não há dúvida de que a revisão de código é uma prática que introduz uma sobrecarga significativa. Por esse motivo, as organizações procurarão minimizar essa sobrecarga, não fazendo nada, ou apenas fazendo em determinadas situações (por exemplo, para um membro júnior da equipe ou uma mudança particularmente complicada). Nem sempre é óbvio que ele paga mais (pegando bugs, reduzindo dívidas técnicas ou compartilhando conhecimento) do que custa. A maior parte desse retorno é difícil de quantificar, enquanto é muito fácil contar o número de horas de trabalho que sua organização gasta fazendo revisões. O bit mais fácil de quantificar (contagem reduzida de bugs) é fácil de atribuir a outros fatores (por exemplo, "é claro que possui menos bugs, é mais maduro").

Paul Butcher
fonte
-1

Fazemos jogo de futebol online na Turquia. Muitos usuários e mestres de jogos nos ajudam na funcionalidade. Também eles comentam os recursos necessários. Então eu acho que, se você tem muitos usuários, testes de funcionalidade podem ser feitos para ajudar ou obter emblemas. A colaboração de desenvolvedores, mestres de jogos e usuários com fóruns, equipes de suporte e ambientes de teste privados cria um projeto social.

É necessário revisar com certeza o código e compartilhar experiências entre a equipe de desenvolvimento, mas se não for crítico, você não precisará se forçar.

emremp
fonte
-1

Eu acho que a inspeção detalhada de terceiros depende do seu ciclo de vida, seja você mais ágil ou mais cascata em seus processos. Acho razoável fazer projetos / inspeções de alto nível, bem como inspeções de projeto em nível de detalhe. Eu acho que também é bom envolver vários membros de uma equipe para inspecionar.

Tim Claason
fonte
-1

Eles são absolutamente necessários, pois têm pouca experiência.

pacoespinoza
fonte
sem uma explicação, essa resposta pode se tornar inútil se outra pessoa postar uma opinião oposta. Por exemplo, se alguém postar uma afirmação como "Eles são absolutamente desnecessários, pois têm pouca experiência", como essa resposta ajudaria o leitor a escolher duas opiniões opostas? Considere editar ing-lo em uma melhor forma
mosquito