Navegar é preciso. Testar é preciso.
Houve uma época em que o teste de software não existia, ou pelo menos não era praticado com a ênfase merecida.
Até que surgiu o Sr Myers, mais precisamente Glenford Myers. Myers publicou um livro em 1979, que é considerado a bíblia do teste de software.
É deste trabalho que extraímos a definição do que é teste de software. Conceitualmente é um processo que faz parte do desenvolvimento de qualquer aplicação — ou pelo menos deveria — e tem como principal intuito revelar falhas/bugs.
O objetivo principal é chegar a um determinado nível de qualidade. Nesta definição encontramos a palavra qualidade que é exatamente a proposta de trabalharmos com testes de software.
Quanto mais cedo identificado um problema, mais barata é a sua correção.
Segundo Bohem (Software Engineering Economics) o custo relativo para corrigir um defeito aumenta à medida que o estágio de desenvolvimento do software vai avançando.
O que são testes automatizados?
Testes automatizados se fundamentam no uso de ferramentas para controlar a execução de testes de software. Através da aplicação de estratégias, o objetivo é basicamente escrever um software que testará seu programa por você.
A automação permite que o teste seja repetido várias vezes, sendo mais fácil encontrar novos erros através da repetição e da simulação de cenários específicos.
O objetivo final dos testes automatizados é minimizar os problemas da abordagem manual, o tempo despendido e, consequentemente, o custo final.
>>Leitura Recomendada:
Técnicas de caixa preta e branca para teste de software
Quando fazer testes automatizados?
Para saber quando devemos automatizar os teste é preciso primeiro pensar no projeto que temos em mãos e refletir se a automatização vai ser viável para ele.
Automatizar vai ajudar a reduzir tempo? Vai suprir as demandas do cliente? Será possível reduzir custos? A qualidade do teste manual será mantida?
Se a resposta for positiva, analisar a quantas anda nosso processo e pensar se o ideal é mesmo inserir uma nova forma de testar a ele é de extrema importância.
O mais recomendável é que a automatização comece desde início, junto com as primeiras linhas de programação. Entretanto, ela pode ser incluída em qualquer momento do desenvolvimento e alteração do software.
Então é só pesar os prós e os contras para cada caso e decidir se vale a pena e faz sentido investir numa automatização de testes.
Tipos de testes automatizados
Teste de usabilidade
Teste para encontrar disfuncionalidades no uso. Esse tipo de teste é fortemente utilizado para medir como será a interação do usuário com o software, e não necessariamente para encontrar erros.
Teste de segurança
Utilizado para encontrar brechas de segurança no software para os mais variados tipos de ataques cibernéticos.
Teste de feature
Aqui sim estamos falando de encontrar erros. Essa tipo de teste é mais facilmente mensurável, já que valida se o comportamento de uma (ou algumas) features possuem o comportamento esperado.
Teste de desempenho
Um teste de desempenho pode testar coisas como tempo de resposta do back-end logo após uma interação do cliente, e até mesmo escalabilidade.
Produtividade x teste de software
Está é uma das primeiras objeções ao pensarmos em adotar a prática de testar o nosso software.
Se pensarmos que ser produtivo é definido pela quantidade de linhas escritas então faz sentido essa objeção.
Mas, se pensarmos que a produtividade é criar linhas de código que não apresentem erros, então estamos ganhando em produtividade.
>> Leitura recomendada:
Como aplicar Scrum em um Projeto de Teste de Software?
Testes automatizados e desenvolvimento guiado a teste TDD
Testes manuais são importantes e ajudam na busca por falhas no software.
A automação dos testes vai passar a responsabilidade de verificarmos o resultado de um teste para a máquina.
Tomando um exemplo bem simples onde é feita a soma entre dois números inteiros, é esperado um valor inteiro como resposta. Em um teste não automatizado nós precisamos checar esse valor.
Com a automação de testes nós fazemos a máquina verificar este resultado.
Testes automatizados também estão ligado a TDD. Essa prática é baseada na inversão da ordem do desenvolvimento. Primeiro é pensado a escrito do teste de software e depois, finalmente, a implementação do código.
O ciclo de desenvolvimento TDD é:
- Implementar um teste mais simples possível;
- Testar e ver ele falhar;
- Implementar a solução mais simples e resolver o problema;
- Refatorar para remover duplicidade e melhorar a solução.
Esté é o ciclo de desenvolvimento proposto pelo TDD.
Vantagens de testes automatizados e desenvolver guiado a testes
- A automação dos testes vai reduzir a chance de termos erros nos testes;
- Reduz a quantidade de esforço que seria realizado em testes manuais;
- Testes automatizados são reutilizados poupam recursos humanos pois você não precisará de várias pessoas para realizar um teste manual;
- Volume: testes automatizados permitem testar o software nos mais diversos dispositivos e cenários o que seria bem mais difícil de ser feito manualmente;
- Redução de custos, ganho na qualidade gerando maior retorno em relação ao investimento realizado.
Essas são vantagens significativas para o uso do teste de softwares automatizados. Testes automatizados oferecem: qualidade, redução de custos e melhor retorno sobre investimento, o ROI.
Principais ferramentas de automação de testes
O Selenium, que é a ferramenta que recomendo, fornece um conjunto de ferramentas para testes de aplicações web cross-browsers, mas não está limitada somente a aplicações web.
Versões do Selenium
Selenium IDE
Essa ferramenta é útil para agilizar a criação de testes. Permite registrar e executar as ações do usuário. Tem uma interface de fácil aprendizado, mas é apenas suportada pelo Firefox e Chrome.
Selenium 1RC
O RC é de remote control, esta versão permite testes html em vários browsers com uso de um servidor. Oferece suporte a multilinguagens: Java, Ruby, C#, Perl, Python etc. Selenium RC executa independente do ambiente: Windows, Linux, MacOs.
Selenium 2 WebDriver
Permite controlar pelo browser a nível de SO utiliza API orientada a objetos também é capaz de fazer uso da versão anterior 1RC.
Comparada com as outras versões tem a execução mais rápida. Suporta teste de aplicações IOS/Android.
Também é multi linguagem: Java, Ruby, C#, Javascript, Perl, Objective C, PHP, Python, R.
Você pode obter mais informações de como começar com a ferramenta por aqui: Selenium Doc.
É bem fácil encontrar frameworks de teste unitários para cada uma das linguagens mais utilizadas, como Java, PHP, Python, JS e etc. em php temos o PHPUNIT que pode ser facilmente instalado via composer.
Outra ferramenta de para automação de teste é o Katalon Studio ferramenta open source que permite teste de aplicações web, apis e aplicações mobiles.
Os testes podem ser feitos via script ou pela interface gráfica facilitando usuários com menos experiência. Também possui integração com o GIT, JIRA e Slack.
A ferramenta também conta com vários plugins, uns gratuitos e outros pagos para adicionar mais recurso ao ambiente de testes.
Essas são algumas boas ferramentas para teste automatizado de software. O objetivo deste artigo é focar nas vantagens que o teste automatizado e o desenvolvimento guiado por testes pode trazer para o desenvolvimento de software.
Relembrando, quanto mais cedo erros forem encontrados mais fáceis e menos custosos serão corrigi-los.
Por hoje é isso. Até a próxima, pessoal!