Após alguns sérios problemas de qualidade no ano passado, minha empresa introduziu recentemente revisões de código. O processo de revisão de código foi rapidamente introduzido, sem diretrizes ou qualquer tipo de lista de verificação.
Outro desenvolvedor e eu escolhemos revisar todas as alterações feitas nos sistemas antes de serem mescladas no tronco.
Também fomos escolhidos como "Líder Técnico". Isso significa que somos responsáveis pela qualidade do código, mas não temos autoridade para implementar alterações no processo, reatribuir desenvolvedores ou reter projetos.
Tecnicamente, podemos negar a fusão, devolvendo-a ao desenvolvimento. Na realidade, isso termina quase sempre com o nosso chefe exigindo que seja enviado a tempo.
Nosso gerente é um MBA que se preocupa principalmente com a criação de uma programação dos próximos projetos. Enquanto ele está tentando, ele quase não tem idéia do que o nosso software faz do ponto de vista comercial, e está lutando para entender até as demandas mais básicas dos clientes, sem explicação de um desenvolvedor.
Atualmente, o desenvolvimento é feito nas filiais de desenvolvimento no SVN. Depois que o desenvolvedor pensa que está pronto, ele reatribui o ticket do nosso sistema de bilhetagem ao nosso gerente. O gerente então atribui a nós.
As revisões de código levaram a algumas tensões dentro de nossa equipe. Especialmente alguns dos membros mais velhos questionam as mudanças (ou seja, "sempre fizemos assim" ou "por que o método deve ter um nome sensato, eu sei o que ele faz?").
Após as primeiras semanas, minha colega começou a deixar as coisas deslizarem, para não causar problemas com os colegas de trabalho (ela mesma me disse que, depois que um relatório de bug foi arquivado por um cliente, que ela conhecia o bug, mas temia que o desenvolvedor ficaria bravo com ela por apontar isso).
Eu, por outro lado, agora sou conhecido por ser um idiota por apontar problemas com o código confirmado.
Não acho que meus padrões sejam altos demais.
Minha lista de verificação no momento é:
- O código será compilado.
- Há pelo menos uma maneira de o código funcionar.
- O código funcionará com a maioria dos casos normais.
- O código funcionará com a maioria dos casos extremos.
- O código lançará uma exceção razoável se os dados inseridos não forem válidos.
Mas aceito totalmente a responsabilidade da maneira como dou feedback. Eu já estou dando pontos acionáveis explicando por que algo deve ser mudado, às vezes até perguntando por que algo foi implementado de uma maneira específica. Quando penso que é ruim, aponto que o teria desenvolvido de outra maneira.
O que me falta é a capacidade de encontrar algo para apontar como "bom". Eu li que alguém deveria tentar colocar más notícias em boas notícias.
Mas estou tendo dificuldades para encontrar algo que seja bom. "Ei, desta vez você realmente comprometeu tudo o que fez" é mais condescendente do que agradável ou útil.
Revisão de código de exemplo
Olá Joe,
Tenho algumas perguntas sobre suas alterações na classe Library \ ACME \ ExtractOrderMail.
Não entendi por que você marcou "TempFilesToDelete" como estático? No momento, uma segunda chamada para "GetMails" geraria uma exceção, porque você adiciona arquivos a ele, mas nunca os remove, depois de excluí-los. Eu sei que a função é chamada apenas uma vez por execução, mas no futuro isso pode mudar. Você poderia transformá-lo em uma variável de instância, então poderíamos ter vários objetos em paralelo.
... (Alguns outros pontos que não funcionam)
Pontos menores:
- Por que "GetErrorMailBody" aceita uma exceção como parâmetro? Perdi algo? Você não está lançando a exceção, apenas a repassa e chama "ToString". Por que é que?
- SaveAndSend Não é um bom nome para o método. Este método envia mensagens de erro se o processamento de uma mensagem estiver errado. Você poderia renomeá-lo para "SendErrorMail" ou algo semelhante?
- Por favor, não apenas comente o código antigo, exclua-o imediatamente. Ainda o temos em subversão.