Desenvolvedores Sênior e Testes Unitários – Obrigatório?Eles podem usar lacaios?[fechado]

StackOverflow https://stackoverflow.com/questions/23688

  •  09-06-2019
  •  | 
  •  

Pergunta

Os desenvolvedores seniores deveriam ser isentos de testes unitários - ou deveriam ser autorizados a usar lacaios para implementá-los?Qual é a melhor maneira de motivar as pessoas que não estão acostumadas a usar técnicas de testes unitários a adotá-las?

Foi útil?

Solução

Eu diria que do ponto de vista purista do TDD (ou seja,aquele que pensa que testes unitários devem ser escritos antes implementação), os desenvolvedores seniores deveriam escrever mais testes unitários do que lacaios, não menos.

A razão é que, como os testes unitários vêm em primeiro lugar, escrevê-los requer um conhecimento profundo da base de código.Se você deixar os lacaios escrevê-los, você estará essencialmente deixando aqueles que sabem menos sobre o seu domínio ditarem a estrutura da sua base de código.Isso me parece uma má ideia.

Outras dicas

Acho que fazer com que lacaios façam testes de unidade para outra pessoa está destruindo o sentido de ter testes de unidade para começar.O programador que escreve o código deve saber como o código deve quebrar e qual é o seu comportamento esperado.Só porque outra pessoa o fez não isenta o programador original dessa responsabilidade.

(Frases estranhas devido à neutralidade de gênero.)

A pessoa que escreve o teste = definindo como o sistema deve funcionar = o “chefe”

As pessoas que implementam os testes são os chamados “lacaios”

Parece o caso de um cachorro velho que não gosta de truques novos.E como diz o ditado, é difícil fazê-los mudar...TFD (test-first development) é muito divertido quando você começa a fazê-lo, talvez faça um workshop interno de 1 dia sobre TDD ou TFD envolvendo toda a equipe.

Os desenvolvedores seniores devem ser isentos de testes unitários?

Absolutamente não.Eles não deveriam ser desenvolvedores seniores então.Os desenvolvedores seniores deveriam ser líderes mostrando o caminho, a ideia de que os lacaios fazem isso parece absurda - por que se preocupar em testar então?

Acho que uma maneira possível de lidar com essas situações seria o desenvolvedor sênior escrever a maioria dos testes unitários.Isso significa que eles estão definindo e projetando a forma como o programa deve trabalhar.Os lacaios podem então escrever o código para corresponder ao teste, aprendendo as filosofias de design do veterano enquanto fazem isso.

Parte I (Desenvolvedores Sênior e Testes Unitários)

Quando penso em TDD ou Test Driven Design, os testes unitários servem ao propósito de eliminar o design evolutivo do sistema, garantindo assim a melhoria contínua.
Escrever o teste molda o código ou destaca problemas com uma decisão que já foi tomada, resultando esperançosamente em um processo de refatoração para aumentar a qualidade do design.

Na minha experiência, o desenvolvedor sênior normalmente é a pessoa com mais experiência e habilidade, o que significa que ele deveria estar em melhor posição para identificar essas oportunidades de refatoração.(Detecte os cheiros do código)

Há três situações em que consigo pensar, em que outra pessoa escreve os testes para você poderia ser aceitável.

  1. Testes de aptidão/Testes de clientes/Testes ponta a ponta.Chame-os como quiser, mas quero dizer os testes que começam no ponto de entrada de dados (serviço web, página web, entrada na tela do aplicativo) e percorrem toda a pilha do sistema (para um banco de dados, chamada para outro serviço, voltar para a tela de resultados de entrada, etc.).Isto poderia ser escrito por alguém que não esteja implementando os detalhes das unidades individuais que serão exercidas pelos testes.
  2. Programação Emparelhado (Padrão de pingue-pongue) -

    A escreve um novo teste e vê que ele falha.
    B implementa o código necessário para passar no teste.
    B escreve o próximo teste.
    A implementa isso.

  3. Testes de correção de bugs - Quando um bug é encontrado, geralmente é uma boa prática escrever um teste com falha que exponha o defeito.Uma vez implementado esse teste, é perfeitamente possível que alguém implemente o código que faz o teste passar.Não acho que essa seja uma ideia tão boa, já que o ato de escrever o teste que falha devido ao defeito geralmente fornece alguns insights sobre como uma correção pode ser produzida.

Resumindo, minha resposta à sua primeira pergunta seria: não, um desenvolvedor sênior não deveria estar isento de escrever testes unitários.

parte II (Motivando as pessoas a escrever testes)

Isso é algo com o qual tive problemas no passado.Embora agora eu tente executar o TDD com a frequência apropriada, levei alguns meses para perceber que havia um benefício real em escrever testes.
Acredito que tentar mostrar aos outros os benefícios do TDD e dos testes unitários é bastante difícil.Somente quando a pessoa experimenta por si mesma aquele momento 'ah ha' em que os testes TDD/Unit destacam uma sutileza em seu código, que de outra forma ela poderia ter perdido ou ajudado a corrigir um bug em um curto espaço de tempo, é que ela veja os benefícios.Levá-los a esse ponto pode ser bastante difícil.
Pessoalmente, cheguei lá programando em pares no padrão Ping Pong mencionado acima, trabalhando com um TDDer experiente e vendo o código que estávamos escrevendo para resolver uma funcionalidade não trivial evoluir para o que pode ser chamado de uma solução elegante.Seguido por esse trabalho passando pelo controle de qualidade e entrando no Live Environment sem quaisquer defeitos levantados contra ele.

Resumindo, acho que formar parceria com um programador experiente que já está convencido dos benefícios advindos da escrita de testes unitários é uma ótima maneira de ajudar alguém a se motivar a escrever testes unitários.

Absolutamente não;pelo menos porque é muito mais fácil escrever testes para códigos que você mesmo desenvolve.Mas é importante que todos os desenvolvedores, independentemente da antiguidade, façam testes unitários em todo o seu código;se eles desenvolverem sabendo que seu código deve ser testável, os frutos de seu trabalho serão muito maiores.

Se você precisa motivar os desenvolvedores a realizar testes unitários, basta enfatizar as vantagens e o tempo que será economizado no longo prazo.Se eles adquirirem o hábito de escrever testes unitários para seu código, logo começarão a fazê-lo naturalmente.

Se um desenvolvedor sênior não estiver fazendo seus próprios testes, ele não será um desenvolvedor sênior.

A falta de vontade de testar é quase sempre um sinal de preguiça ou inépcia (ou ambos), e também não é uma característica que deva ser encontrada em um desenvolvedor sênior.

O único cenário em que consigo pensar em que seria apropriado para um desenvolvedor sênior ter outra pessoa escrevendo seus testes de unidade seria no caso de um novo contratado júnior estar sendo atualizado sobre as coisas.Pode ser uma boa tarefa molhar os pés enquanto escreve algum código.

Um dos maiores benefícios dos testes unitários é o feedback imediato que informa o quão bem você está indo.Se você terceirizar a implementação de seus testes, não receberá feedback se seu design funciona ou não.E as pessoas que lutam com um design ruim não têm meios de corrigi-lo.

Se você é um desenvolvedor sênior, é em parte porque tem experiência suficiente para saber que o teste de unidade é uma ótima prática de desenvolvimento que ajuda você produzir software melhor

Eu não assino a religião do TDD, mas vejo muito valor nos testes unitários/etc, e faço muito isso enquanto codifico.

A questão é que ninguém realmente sabe o que o código deve fazer, exceto a pessoa que o escreveu, e muitas vezes nem sabe.

Com isso em mente, você não obterá muito valor dos 'lacaios' escrevendo os testes porque

  1. Eles não terão uma compreensão profunda de todos os casos sutis
  2. Eles não se importarão com o código porque não investiram nada nele
  3. Eles vão se sentir como se estivessem sendo tratados como idiotas.

Mesmo que sejam idiotas, ninguém gosta de ser tratado como tal.Se você deseja que sua equipe se demita, esta é uma boa maneira de incentivá-los.

Ninguém deveria estar isento de escrever testes unitários.Todos os desenvolvedores precisam ser capazes de escrevê-los, e os testes de unidade também devem ser revisados ​​como parte do processo de revisão de código.A complexidade dos testes unitários geralmente será uma função da habilidade do desenvolvedor - com o código mais complexo indo para desenvolvedores mais experientes, portanto, o número mais complexo e maior de testes unitários vai para eles também.

Se você tiver um ou mais desenvolvedores que não são capazes de se adaptar, você deve tentar dar-lhes assistência individual e emparelhar o desenvolvedor com os testes de unidade até que ele comece a pegar o jeito.Não há nada tecnicamente complexo o suficiente para que alguém que saiba escrever código não consiga produzir testes unitários.Se esse for o caso, é provavelmente o precursor de um problema maior com o conjunto de habilidades dessa pessoa.

Pessoalmente, acho que também é útil que os testadores possam pelo menos entender os testes unitários que fazem parte do projeto.A colaboração entre desenvolvedores e testadores é muito importante para diagnosticar e corrigir defeitos corretamente.Eu não esperaria que eles tivessem que escrevê-los, mas eles deveriam ser capazes de conversar com um desenvolvedor e analisar o conceito de por que/como um teste está falhando ou não.

Bem, eu diria que sim, mas apenas se o lacaio tiver permissão para deixar a correção dos bugs encontrados para o idoso.Isso vai ensiná-lo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top