Como melhorar o teste de seu próprio código [fechado]

12

Hoje, verifiquei uma alteração em algum código que acabou não funcionando, devido a algo bastante estúpido, mas muito crucial. Eu me sinto muito mal com isso e espero finalmente aprender algo com isso. O estúpido é que eu já fiz essas coisas antes e sempre digo a mim mesma, da próxima vez não vou ser tão estúpido ... Então acontece de novo e me sinto ainda pior com isso.

Eu sei que você deve manter o queixo erguido e aprender com seus erros, mas eis o seguinte: eu tento me aperfeiçoar, apenas não vejo como posso impedir que essas coisas aconteçam.

Então, agora estou perguntando a vocês: você tem certas regras básicas ao testar seu código?

Pedro
fonte
1
Isso pode ajudar: programmers.stackexchange.com/questions/45479/…
Amir Rezaei

Respostas:

17

Faça testes antes de fazer alterações no código.

Se sua alteração proposta for corrigir um erro, faça com que o teste falhe primeiro, demonstrando o erro. Em seguida, verifique se ele passou depois de corrigir o bug. Se você escrever o teste posteriormente e só o tiver visto passar, não poderá ter certeza de que testou corretamente o bug em primeiro lugar.

Se sua alteração proposta for alterar a funcionalidade existente ou adicionar um recurso, escreva alguns testes para garantir uma boa cobertura da área de código que você estará alterando. Certifique-se de que esses testes sejam aprovados antes de começar a alterar o código e ainda sejam aprovados quando terminar.

Alva
fonte
Esse é realmente um bom conselho, pode demorar um pouco mais para corrigir um bug, mas com certeza não me levará a cometer esse tipo de erro novamente e permitirá que eu escreva um código mais estável no geral.
Peter Peter
@ Peter deve economizar tempo de manutenção a longo prazo. Você deve gastar menos tempo corrigindo manualmente as correções de teste de fumaça e também os testes serão executados na próxima vez que o código for editado. Às vezes, você pode até achar que escrever rapidamente um teste de unidade que reproduz o bug pode facilitar a depuração e a correção do bug em primeiro lugar.
Alb
@ Peter Muitas vezes me pego reproduzindo o bug várias vezes enquanto o corrigo. Escrever um pequeno teste normalmente economiza tempo, sem mencionar que você pode ter certeza absoluta de que funciona (e funcionará no futuro).
DasIch 16/02
esse é um conselho fantástico, muito obrigado!
Shaheer
@ Alb ou mesmo a curto prazo.
3

Não se esqueça de testar casos extremos! Muitos bugs ocorrem porque a ação mais comum foi testada, mas não a menos comum.

HLGEM
fonte
Imho que a verdadeira jóia está em encontrar esses casos extremos. Muitas vezes me surpreendo com os erros que surgem de um sistema, apenas porque não pensamos em um cenário específico.
Peter
2

Siga o conselho técnico nas respostas tecnicamente orientadas; é uma coisa boa. Minha resposta é mais sobre atitude.

Sentir-se mal por cometer o tipo de erro que todo desenvolvedor comete ocasionalmente é apenas um absurdo e não ajuda você a não cometer esse tipo de erro no futuro. Enquanto você se sente mal, a construção ainda está quebrada, sabia? E então seu trabalho é evitar erros, o que eu sei que faz com que sair da cama de manhã seja uma aventura emocionante todos os dias, certo?

Ouvi falar de empresas nas quais o check-in de código quebrado é motivo de vergonha pública. Eu não consigo nem pensar no tipo de pensamento distorcido, de garoto de fraternidade e de alto nível que levaria a esse comportamento. Dificilmente poderia haver QUALQUER COISA mais contraproducente para um líder ou gerente de equipe.

Portanto, não se bata. Todos nós já fizemos isso. Provavelmente eu me custei meio dia por semana com erros tolos, e venho fazendo isso há muito tempo. É assim que parece escrever código - você está constantemente se baseando no que parece ser suas próprias inadequações. O que torna um profissional um profissional não é uma qualidade mítica de nunca cometer erros (incluindo os grandes às vezes), mas como eles respondem aos erros que cometem.

Se há um mantra que eu poderia incutir em todos os desenvolvedores com quem trabalho, é este: você não é seu código . Você escreve código. Você o escreve da maneira mais eficiente e possível. Então você vai para casa. Se você equiparar seu valor ou valor próprio a uma pessoa com a qualidade do seu código, estará perdendo a noção do que realmente é.

Dan Ray
fonte
Eu entendo o que você diz sobre humilhação pública, mas ao mesmo tempo é frustrante ser bloqueado porque a construção está quebrado porque Joe Bloggs não construir todas as plataformas antes de check-in.
tenpn
@tenpn - Totalmente. Mas o outro lado do que estou dizendo também é verdade sobre Joe Bloggs. Ele também não é o código dele. Como colegas, temos que resistir ao impulso de transformar Joe em um idiota aos nossos olhos, porque ele cometeu um erro que qualquer um de nós poderia ter cometido.
Dan Ray
@tenpn, na verdade, você também pode culpar o sistema por não testar automaticamente a compilação antes de confirmar as alterações no tronco / mestre.
David
2
@tenpn - Nem está batendo em seus colegas de trabalho.
Dan Ray
1
E se a mudança não quebrar a compilação? É senso comum criar seu código antes do check-in. Não é tão óbvio testá-lo de todas as maneiras possíveis. Sempre há algum cenário que você não poderia ter. Só hoje eu corri em um erro de ponto flutuante de arredondamento, que acontece apenas se acontecer de você ter o direito (errado) números
Peter
2

Outra prática importante de teste é escrever o teste e garantir que ele falhe pelo menos uma vez antes de escrever o código. É muito fácil estragar tudo e escrever um teste de tautologia que acidentalmente não testa a condição que você está verificando. As garantias falsas são quase (e às vezes piores) do que nenhuma garantia.

Uri
fonte
0

Uma idéia que tenho usado de tempos em tempos é essa,

crie uma ramificação e quebre seu código, execute o teste e verifique se o teste detectou o erro.

Zachary K
fonte
0

Você tem certas regras básicas ao testar seu código?

  • Sempre teste seu código por unidade e tente alcançar a cobertura mais alta possível.

Alguns pontos gerais adicionais:

  • invista algum tempo em design e planejamento antes de começar a codificar
  • refatorar seu código!
BЈовић
fonte