• Nenhum resultado encontrado

4 REVISÕES DE SOFTWARE

5.3 TESTES AUTOMATIZADOS

Cada grupo de desenvolvimento de software testa seus produtos, mas o

software fornecido sempre tem defeitos. Os engenheiros de teste se esforçam para

capturá-los antes que o produto seja lançado, mas eles sempre se aproximam e eles muitas vezes reaparecem, mesmo com os melhores processos de teste manual. Teste automatizado é a melhor maneira de aumentar a eficácia, eficiência e cobertu- ra dos testes.

O teste manual de software é realizado por um ser humano sentado na frente de um computador passando cuidadosamente por telas de aplicação, tentan- do várias combinações de uso e entrada, comparando os resultados com o compor- tamento esperado e registrando suas observações. Testes manuais são repetidos frequentemente durante ciclos de desenvolvimento para alterações de código fonte e outras situações como vários ambientes operacionais e configurações de hardware. Uma ferramenta de teste automatizada é capaz de reproduzir ações pré-gravadas e predefinidas, comparar os resultados com o comportamento esperado e relatar o sucesso ou falha desses testes manuais para um engenheiro de teste. Uma vez criados os testes automatizados, eles podem ser facilmente repetidos e podem ser estendidos para executar tarefas impossíveis com testes manuais. Devido a isso, gestores experientes descobriram que o teste de software automatizado é um com- ponente essencial de projetos de desenvolvimento bem-sucedidos [43].

Principais benefícios:

- O teste manual demora muito tempo.

A razão mais básica para automatizar é que simplesmente leva muito tempo para concluir todos os testes necessários manualmente. À medida que a aplicação se torna cada vez maior, o tempo para testar tudo cresce mais e mais, às vezes exponencialmente, dependendo da complexidade da aplicação em teste.

Executar um conjunto completo de testes de regressão pelo menos diari- amente é uma prática indispensável, e não pode ser feito manualmente. Se execu- tar o teste de regressão manualmente, é preciso mais e mais tempo testando todos os dias, cada iteração. A fim de testar para manter o ritmo com codificação, ou os programadores têm de ter tempo para ajudar com os testes de regressão manual- mente, ou a equipe tem que contratar mais testadores. Inevitavelmente, tanto a dívi- da técnica quanto a frustração crescerão.

Se o código não passar por um conjunto de testes automatizados, os tes- tadores provavelmente gastarão muito tempo pesquisando, tentando reproduzir e relatar bugs simples e menos tempo encontrando bugs de nível de sistema potenci- almente sérios.

- Processos manuais são propensos a erros.

Testes manuais são repetitivos, especialmente se estiver seguindo testes com script, e testes manuais ficam cansativos rapidamente. É muito fácil cometer erros e ignorar erros simples. Passos e mesmo testes inteiros serão ignorados.

As compilações automáticas, implantação, controle de versão e monito- ramento automatizados também percorrem um longo caminho no sentido de reduzir riscos e tornar seu processo de desenvolvimento mais consistente. A automatização destes testes de script elimina a possibilidade de erros, porque cada teste é feito exatamente da mesma maneira cada vez.

- Automação libera as pessoas a fazer o seu melhor trabalho.

Escrever o teste de código ajuda aos programadores a compreenderem os requisitos e ter conformidade com o design do código. Tendo compilações contí- nuas executando todos os testes de unidade e os testes de regressão, significam mais tempo para fazer testes exploratórios. Esses dois tipos de testes são muito importantes. O teste de unidade é a forma de se testar unidades individuais de códi- go fonte. Será visto com mais detalhes adiante. O teste de regressão significa testar novamente uma parte de um aplicativo que não foi alterado para verificar se conti- nua a funcionar corretamente.

Automatizar a configuração para testes exploratórios significa ainda mais tempo para investigar partes potencialmente fracas do sistema. Como não foi gasto

tempo executando scripts manuais tediosos, tem a energia para fazer um bom traba- lho, pensando em diferentes cenários e aprendendo mais sobre como o aplicativo funciona.

Se o pensamento está constantemente em como automatizar testes para uma correção ou nova característica, é mais provável o foco estar na testabilidade e um design de qualidade, em vez de uma abordagem rápida que possa se mostrar frágil. Isso significa melhor código e melhores testes.

- Os testes automatizados de regressão fornecem uma rede de segurança. A maioria dos profissionais conhece a sensação de medo quando se de- frontam com a correção de um bug ou a implementação de um novo recurso no có- digo mal projetado que não é coberto por testes automatizados. Qualquer alteração pode deixar uma parte do sistema instável e não terá o resultado do mal funciona- mento, na maioria das vezes deixando para o usuário final descobrir o problema.

Conhecer o código com cobertura suficiente por testes de regressão au- tomáticos dá uma grande sensação de confiança. Uma mudança pode produzir um efeito inesperado, mas o resultado será dado em questão de minutos ou horas, se em um nível funcional mais elevado. Fazer o teste de mudança primeiro significa pensar através do comportamento alterado antes de escrever o código e escrever um teste para o verificar, o que aumenta essa confiança.

- Os testes automatizados dão feedback de forma precoce e frequente.

Depois de um teste automatizado para uma unidade da funcionalidade passa, ele deve continuar a passar até que a funcionalidade é alterada. Quando planejamos mudanças no aplicativo, alteramos os testes para acomodá-los. Quando um teste automatizado falha inesperadamente, um defeito de regressão pode ter sido introduzido por uma alteração de código. Rodando um conjunto automatizado de testes sempre que o novo código é verificado ajuda a garantir que os erros de regressão serão detectados rapidamente. O feedback rápido ajuda na solução dos problemas tendo a solução mais rápida do que o bug fosse encontrado semanas de testes mais tarde.

- Os testes fornecem documentação.

É difícil manter a documentação estática atualizada, mas se os testes au- tomatizados não forem alterados quando o sistema for alterado, os testes falharão. É necessário corrigi-los para manter o processo de compilação funcionando. Isso significa que os testes automatizados são sempre uma imagem precisa de como o código funciona.

- Automação pode ser um bom retorno sobre o investimento.

A automação fornece consistência a um projeto e dá à equipe a oportuni- dade de testar de forma diferente e empurrar os limites da aplicação. Automação significa tempo extra para testadores e membros da equipe para se concentrar em obter o produto certo para o mercado em tempo hábil.

Um componente importante do retorno da automação do teste é a manei- ra como os defeitos são corrigidos. Equipes que dependem de testes manuais ten- dem a encontrar bugs muito depois que o código que contém o bug é escrito. Eles entram no modo de corrigir o "bug do dia", em vez de olhar para a causa raiz do pro- blema e redesenhar o código de acordo. Quando os programadores executam o conjunto de testes automatizados, encontram os bugs antes que o código seja verifi- cado, dando tempo para corrigir o design. Isso é um reembolso muito maior e reduz a dívida técnica desenvolvendo um código sólido e robusto.

Documentos relacionados