TESTS) 9 de julho de 2014Andr Luis Celestino Desenvolvimento, Qualidade, Utilidades COMPARTILHE inShare22 Implementar testes unitrios para garantir a consistncia da aplicao importante, certo? Claro! Alm deles, existe tambm uma famlia de testes que pode nos proporcionar uma segurana maior nos componentes que utilizamos no software, principalmente se estes forem componentes de terceiros. Estamos falando dos Testes de Aprendizagem! Qualquer desenvolvedor j teve a necessidade de instalar componentes ou bibliotecas de terceiros, talvez para tratar regras de negcio especfcas ou simplesmente para aprimorar o visual da aplicao. comum, por exemplo, encontrar desenvolvedores Delphi que instalam sutes de componentes especiais, como o JVCL, TMS, FireDAC, Gnostice ou componentes de relatrios. O que nos passa despercebido, algumas vezes, o fato de que esses componentes tambm apresentam bugs e esto sujeitos a atualizaes. por isso que novas verses destes componentes so disponibilizadas periodicamente. Logo, isso nos refete a uma questo: quando instalamos ou atualizamos estes componentes, como possvel verifcar se eles esto estveis ou que continuam compatveis com o nosso software? Uma opo vivel criar Learning Tests, ou Testes de Aprendizagem! Estes testes consistem em averiguar se o comportamento dos componentes est correto, da mesma forma que validamos as regras de negcio com testes unitrios. Porm, diferente destes, os Testes de Aprendizagem so executados apenas quando h uma nova verso do componente em questo. Como funcionam esses testes? Para facilitar a compreenso, vou citar um caso real. H alguns anos, tive de desenvolver um mdulo de comunicao com um WebService referente NFS-e (Nota Fiscal de Servios Eletrnica). Para isso, instalei um componente de terceiro que facilitaria este trabalho. Antes de iniciar o desenvolvimento do mdulo, decidi implementar alguns testes para aprender como o componente funcionava e me certifcar de que ele cumpriria o que era esperado. Opa, eu disse aprender? Claro, ento por isso que o nome destes testes traz a palavra aprendizagem! Ao implementar testes no componente, estamos automaticamente adquirindo conhecimento do seu comportamento e requisitos. Dessa forma, teremos mais facilidades em utiliz-lo e evitaremos possveis impedimentos, afnal, muito mais fcil utilizar algo que j conhecemos.
Os testes que implementei eram simples, simulando um ambiente de utilizao do componente para avaliar o resultado dos mtodos que ele disponibilizava. importante realar que, at ento, esses testes no tm nenhuma relao com a regra de negcio. Pode-se inclusive dizer que os Testes de Aprendizagem so de baixo nvel, j que testam uma ferramenta ou recurso que ainda ser utilizada no projeto. Pois bem, tomei conhecimento do componente e comecei a utiliz-lo. Porm, no ms seguinte, a Microsoft liberou uma atualizao de segurana no Windows que inviabilizou os mtodos de conexo do componente. Ao rodar os Testes de Aprendizagem, eles falhavam. Isso me dava a certeza de que o problema estava no componente, e no na minha codifcao. Aps alguns dias, devido essa atualizao do Windows, uma nova verso do componente foi disponibilizada pelos desenvolvedores. Para que o meu mdulo de NFS-e voltasse a funcionar, imediatamente baixei a nova verso. Antes de testar diretamente a aplicao, decidi rodar novamente os Testes de Aprendizagem e, para a minha surpresa, eles ainda estavam falhando! Aps analis-los, encontrei o motivo: alm de terem ajustado o componente para se adequar atualizao do Windows, os desenvolvedores tambm reformularam alguns mtodos do componente envolvendo outras operaes. Devido aos Testes de Aprendizagem, fui capaz de detectar e corrigir essa incompatibilidade rapidamente. Mas de qualquer forma voc descobriria esse problema! Sim, mas no com a mesma prontido proporcionada pelos Testes de Aprendizagem. Se no fosse por eles, em poucos dias eu receberia uma nova notifcao de erro do usurio. Os Testes de Aprendizagem me adiantaram em corrigir, ou melhor, ajustar o meu cdigo que utilizava estes mtodos que foram alterados. Afnal, no se brinca com erros em ambiente de produo, no ? Em suma, podemos apontar duas grandes vantagens ao implementar Testes de Aprendizagem: a possibilidade de aprender o funcionamento do componente e a preveno de problemas causados por atualizaes, como o exemplo citado neste artigo. Alm disso, facilita a integrao do componente dentro da aplicao e pode ser utilizado como base de conhecimento para novos desenvolvedores! Dependendo da complexidade do componente, os Testes de Aprendizagem podem exigir horas de implementao. A recomendao implement-los somente se no houver prioridades de negcio pendentes ou, opcionalmente, essa atividade tambm pode ser alocada dentro de uma Sprint.