Dev (Back & Front)ARTIGO

Testes e o programador-cientista

Você testa o seu código, certo? Bem, nós esperamos que sim.

Testes podem ser um saco. Mas também devem ser um hábito. E acreditamos ser bastante incontestável dizer que testar seu código é algo bom. O programador-cientista muitas vezes se depara com uma tensão entre alocar esforços para testar seus códigos e esforços para seguir com a ciência, mas pular os testes não seria somente um erro, os testes também podem apresentar valor científico.

Isso realmente funciona?

A principal razão é testar o nosso código. Se você não consegue provar que seu código faz o que ele tem que fazer, como você pode confiar nos resultados que ele gera? Esperamos que isso seja óbvio, mas sabemos que muitas vezes pode ser tentador pensar “tenho certeza de que funciona”. Não está certo! É muito fácil isso não ser verdade. Teste seu código até que você saiba que ele funciona.

10% de erros

Alguns bugs são mais sutis que outros, e pequenos erros numéricos (digamos, de uma ordem de 10%), são um bom exemplo. Se o seu código retorna a idade do universo como 12,5 bilhões de anos, isso parece plausível, certo? Talvez sim, mas talvez ele deveria estar retornando 13,7 bilhões de anos, e você tem um bug no seu código. O código científico muitas vezes envolve cálculos numéricos, seja usando dados, produzindo simulações ou seja o que for, o que significa que os programadores-cientistas deveriam se preocupar bastante com esses tipos de bugs e testá-los de forma apropriada.

Prove em uma reunião

Se o seu teste for rigoroso o suficiente, você deve ser capaz de provar para seus colegas/colaboradores que ele funciona. Acreditamos que essa é uma grande avaliação se você testou ou não seu código direito. Imagine apresentar seus resultados em uma reunião. Você consegue provar para seus colegas que seu código está funcionando? Isso não é somente uma boa verificação de sanidade, mas acreditamos ser um passo necessário no processo científico. Se a sua ciência se apoia no seu software fazendo a coisa certa, então é vital que você consiga provar que ele realmente faz a coisa certa.

Pense nele da mesma maneira que uma preparação experimental ou uma configuração de telescópio. Se você não consegue provar para um conjunto de cientistas céticos que o que você está fazendo é robusto, então é questionável se seus resultados apresentam qualquer valor.

O teste da conferência

Esta é nossa maneira preferida de julgar se nossos testes foram rigorosos o suficiente. Imagine que você está em uma conferencia internacional super importante. Você está apresentando seus últimos resultados para um público formado pelos 200 mais eminentes cientistas na sua área.

Você está mostrando os resultados da sua análise de software quando o número 1 do mundo no seu campo levanta a mão e diz: “Acho que pode haver um erro numérico no seu código”. Você está confiante de que essa situação não vai acontecer? Caso negativo, então você precisa executar mais testes!

Um lado positivo: automatize as ações do seu trabalho

Acreditamos que existe um lado positivo em testar código científico, que surge porque você fundamentalmente irá querer publicar os seus resultados em algum lugar (e/ou colocá-los em uma conversa em conferência). Por que não preparar seus testes para que eles gerem automaticamente as ações que você quer para seu trabalho? Provavelmente serão os tipos de ações que são úteis de serem testadas em qualquer caso (uma vez que você se preocupa, no final das contas, com o seu resultado) e se você inventou um novo método estatístico (por exemplo), então ter mais testes em dados sintéticos é uma ótima base para a seção “nosso modelo realmente funciona” do seu trabalho.

Fazer isso também te dá a chance de desenvolver boas maneiras de apresentar os resultados do seu código. Como você estará trabalhando com os resultados repetidamente, bem como mostrando-os em reuniões etc, você pode descobrir que não somente você pode ter boas ideias, mas vários públicos também podem ter boas sugestões a fazer.

Conclusão

Testar é importante. É até vital. Você realmente quer usar o código quando você não está confiante de que ele realmente funciona? Nós achamos que não. Apesar de os testes levarem tempo, os tipos de resultados que eles produzem também podem ser o tipo de coisa de que você precisa para seu trabalho/reunião/palestra em conferência, então por que não combinar os dois?

?

Texto original disponível em http://www.programming4scientists.com/2009/03/30/testing-and-the-scientist-programmer/

Matérias especiais e reportagens conduzidas internamente pela Redação iMasters. Acompanhe no Twitter @imasters e no Instagram/Threads @portalimasters

Ver perfil