Olá, estudante! Nesta lição, você conhecerá, um pouco mais a fundo, algumas ferramentas que podem ser usadas para o teste de softwares. Na lição passada, cheguei a comentar com você, brevemente, sobre essas ferramentas e apontei algumas delas para uso, mas não houve aprofundamento no uso e na aplicabilidade delas por parte de um profissional responsável pelo teste do software.
Assim, esta lição te fornecerá conhecimentos que poderão ajudar ou otimizar o processo de teste de software. Contudo, atente-se, pois nenhuma ferramenta de automação de teste de software fará o seu trabalho com 100% de qualidade ou certeza de que tudo está correto. Os ensinamentos das lições anteriores a respeito do teste de software continuam sendo essenciais. Vamos lá!
A etapa de teste de software é um momento essencial para atestar que o software irá ao ambiente de produção (uso por parte dos usuários) com o menor número de erros ou defeitos possíveis (MYERS; SANDLER; BADGETT, 2011). Contudo já discutimos em lições anteriores que todo software apresentará a necessidade de manutenções corretivas, adaptativas ou evolutivas, após a sua implantação e posterior uso por parte dos usuários.
Assim, o teste do software será uma atividade corriqueira do profissional envolvido com esta etapa. Soma-se a isso o fato de que os softwares de computador, hoje em dia, apresentam um grande número de funcionalidades, e o teste de todas essas funcionalidades pode ser uma tarefa bastante penosa e consumir considerável tempo dos profissionais. Ademais, precisamos ter em mente que, na atualidade, há diferentes tipos de softwares que “rodam” sob uma mesma base de dados, por exemplo: um aplicativo móvel, um sistema web e um sistema desktop onde os três usam as mesmas bases de dados. Os testes em cada um destes ambientes são diferentes e diversas ferramentas devem ser usadas, apesar de, muitas vezes, serem as mesmas funcionalidades, mas em ambientes operacionais distintos. Dessa forma, para minimizar o tempo de realização dos testes, foram desenvolvidos outros softwares que são responsáveis por automatizar a etapa de testes.
Observação importante: não entenda automatizar o processo de testes como uma etapa em que tudo é feito sem nenhuma intervenção de um profissional capacitado. As ferramentas de teste apenas viabilizam a automatização de atividades rotineiras/repetitivas, o papel do profissional em teste de software continua sendo essencial.
Imagine que você é um(a) tester (profissional responsável por fazer testes de software) de uma organização, e foi desenvolvido, no início dos anos 2000, um software que integra todos os setores da empresa. Com o passar dos anos, muitas novas funcionalidades foram acrescidas ao programa e, hoje, há mais de mil funcionalidades documentadas para ele.
A alta gestão da organização decidiu ser necessário fornecer aos seus clientes e vendedores um aplicativo móvel que acessa dados gerados por este software legado (desenvolvido pela própria empresa). A alta gestão também decidiu disponibilizar um portal web, para que os fornecedores, clientes e vendedores acompanhem os seus pedidos e o estoque por esta plataforma, assim como no smartphone.
Nesse contexto, o tester precisa realizar testes de funcionalidades em diferentes ambientes operacionais, por exemplo, testar o aplicativo móvel e suas funcionalidades em diferentes tipos de smartphones, enquanto no ambiente web, é necessário testar as funcionalidades em diferentes navegadores. Além disso, é necessário testar as entradas de dados que podem ser realizadas pelos usuários nos formulários de inserção de dados, entre outros testes os quais discutimos em lições anteriores.
Caso este profissional tester seja o único responsável por realizar todos esses testes nos diferentes ambientes operacionais, o tempo despendido por ele pode ser considerável, mas, por meio do uso de ferramentas de teste de software, alguns procedimentos serão realizados em menos tempo. Vamos conhecer quais ferramentas podem ser utilizadas?
Os aplicativos móveis (apps) podem ser considerados um novo desafio para a Engenharia de Software, mas, apesar de a grande maioria dos recursos serem aplicáveis a qualquer tipo de software, os apps possuem algumas particularidades, inclusive para serem testados.
É possível considerar sete tipos de testes especializados aos apps. Vamos conhecê-los?
Teste da experiência do usuário: busca-se garantir que o aplicativo cumpra todas as expectativas de usabilidade e acessibilidade dos envolvidos em todos os dispositivos suportados.
Teste de compatibilidade de dispositivo: os testes devem verificar se o aplicativo funciona em todas as combinações de hardware e software exigidas na especificação dos requisitos não funcionais.
Teste de desempenho: aqui, são verificados, principalmente, os requisitos não funcionais do sistema, como: velocidade, desempenho, consumo de energia, armazenamento, dados trafegados, uso do processador e disponibilidade.
Teste de conectividade: verifica se os serviços do aplicativo suportam redes instáveis ou com baixa velocidade e se a interrupção da comunicação afeta alguma funcionalidade.
Teste de segurança: verifica se o aplicativo não compromete a privacidade ou a segurança do usuário.
Teste de certificação: este teste está relacionado à verificação do app quanto aos padrões exigidos pelas lojas de aplicativos que o disponibilizarão.
A seguir, apresentaremos algumas ferramentas/estruturas que podem realizar testes automatizados em apps (aplicativos móveis).
Appium
Trata-se de uma ferramenta de automação de teste de aplicativos móveis que funciona em sistemas operacionais iOS e Android. A ferramenta pode ser acessada no seguinte endereço: http://appium.io/docs/en/2.0/
TestComplete Mobile
É uma solução de teste móvel da SmartBear que permite criar e executar testes em dispositivos móveis iOS e Android. A ferramenta pode ser acessada no seguinte endereço: https://support.smartbear.com/testcomplete/docs/app-testing/web/mobile/index.html
Espresso
É uma estrutura de teste automatizada de interface do usuário do Android, desenvolvida pelo Google, a qual permite testar aplicativos Android nativos. A documentação associada ao Espresso pode ser consultada em: https://developer.android.com/training/testing/espresso?hl=pt-br
XCUITest
Trata-se de uma estrutura de teste automatizada de interface do usuário da Apple, a qual permite testar aplicativos iOS nativos. A documentação do XCUITest pode ser consultada em: https://www.lambdatest.com/xcuitest
UI Automator
É uma estrutura de teste automatizada de interface do usuário do Android, desenvolvida pelo Google, e permite testar aplicativos Android. A documentação do UI Automator pode ser consultada em: https://developer.android.com/training/testing/other-components/ui-automator
Calabash
Uma estrutura de teste automatizada de interface do usuário que permite testar aplicativos iOS e Android. A documentação do Calabash pode ser encontrada em: https://github.com/calabash/calabash-android
Robot Framework
Framework de teste genérico que suporta testes de aplicativos móveis Android e iOS. A documentação do framework pode ser consultada aqui: https://robotframework.org/
Selendroid
É uma estrutura de teste automatizada de interface do usuário do Android e permite testar aplicativos Android. A documentação pode ser encontrada aqui: http://selendroid.io/
Kobiton
Plataforma de teste móvel em nuvem que permite testar aplicativos em dispositivos reais ou virtuais. A documentação pode ser encontrada aqui: https://kobiton.com/
Perfecto Mobile
Plataforma de teste móvel em nuvem que permite testar aplicativos em dispositivos reais ou virtuais. O site oficial da ferramenta é este: https://www.perfecto.io/
Na sequência, conheceremos algumas ferramentas que auxiliam no teste de softwares web (aplicações as quais funcionam por meio de um navegador):
Markup Validation Service: validador de páginas web. Disponível em: http://validator.w3.org/#validate_by_uri+with_options
Browserhots: permite testar o seu sistema web em vários navegadores e sistemas operacionais diferentes. Disponível em: http://browsershots.org/
TestingBot: semelhante ao anterior, permite testes de sites em diferentes navegadores e sistemas operacionais. Disponível em: https://testingbot.com/
OpenSourceTesting.org: lista uma variedade de ferramentas de código-fonte abertas para gerenciamento e planejamento de testes.
Selenium: uma das ferramentas mais populares para testes automatizados de web, oferece suporte a vários navegadores. Disponível em: https://www.selenium.dev/
Apache JMeter: uma ferramenta de teste de carga e desempenho que pode ser usada para testar aplicativos web e outros tipos de aplicativos. Disponível em: https://jmeter.apache.org/
Katalon Studio: uma ferramenta de teste de web automatizada fácil de usar e que oferece ampla variedade de recursos para teste de web. Disponível em: https://katalon.com/download
Cypress: uma ferramenta de teste automatizado de interface do usuário para aplicativos web modernos e que oferece suporte a testes de integração e end-to-end. Disponível em: https://www.cypress.io/
Watir: ferramenta de teste automatizado de web que oferece suporte para vários navegadores. Disponível em: http://watir.com/
LoadRunner: ferramenta de teste de carga e desempenho para aplicativos web e outros tipos de aplicativos. Disponível em: https://www.microfocus.com/pt-br/products/loadrunner-professional/overview
Telerik Test Studio: ferramenta de teste automatizado de web fácil de usar e que oferece suporte para testes de regressão e testes funcionais. Disponível em: https://www.telerik.com/teststudio
Por fim, temos uma relação de aplicações e ferramentas para o teste de softwares do tipo desktop. Algumas delas são encontradas dentro das próprias IDEs, como é o caso do Visual Studio (https://visualstudio.microsoft.com/pt-br/), do Eclipse (https://eclipseide.org/) ou NetBeans (https://netbeans.apache.org/), que podem utilizar o JUnit (https://junit.org/junit5/). Mais detalhes sobre o JUnit são encontrados em: https://www.devmedia.com.br/junit-tutorial/1432
Conheceremos alguns outros frameworks para o teste de softwares em sistemas desktop:
TestNG: um framework de teste de unidade e integração para a linguagem de programação Java. Disponível em: https://testng.org/doc/
Cucumber: ferramenta de automação de teste de aceitação que permite escrever testes em linguagem natural. Disponível em: https://cucumber.io/
Jenkins: ferramenta de integração contínua que pode ser usada para automatizar o processo de execução de testes. Disponível em: https://www.jenkins.io/doc/developer/testing/
Postman: ferramenta de teste de API que pode ser usada para testar e documentar APIs. Disponível em: https://www.postman.com/api-platform/api-test-automation/
Eggplant Functional: ferramenta de automação de teste que usa a tecnologia de reconhecimento visual para testar aplicativos desktop, web e móveis. Disponível em: https://www.eggplantsoftware.com/downloads
Ranorex Studio: ferramenta de automação de testes a qual permite criar testes automatizados para aplicativos web, desktop e móveis. Disponível em: https://www.ranorex.com/
Tricentis Tosca: plataforma de automação de teste que oferece suporte a testes funcionais, de carga e de segurança para aplicativos desktop, web e móveis. Disponível em: https://www.tricentis.com/products/automate-continuous-testing-tosca
Como observamos, há uma infinidade de ferramentas para teste de software, e o que direcionará a sua decisão está relacionada ao tipo de linguagem de programação utilizada no desenvolvimento, ao ambiente de desenvolvimento (IDE) utilizado pelo desenvolvedor, ao orçamento da organização para adquirir ou não uma dessas ferramentas de teste de software, ou à familiaridade dos testers (pessoas responsáveis por realizar os testes em um software) com a plataforma/framework/ferramenta (PRESSMAN; MAXIM, 2016; SOMMERVILLE, 2011).
Nesta lição, você teve a oportunidade de conhecer os diferentes ambientes que um software pode ser desenvolvido e perceber como as ferramentas para o teste dependem de diferentes variáveis associadas ao desenvolvimento do software.
Conforme mencionamos, hoje em dia é muito comum desenvolver um mesmo software com as mesmas funcionalidades para diferentes plataformas (desktop, web ou mobile). Contudo este tipo de cenário demandará, muitas vezes, dos responsáveis pela fase de teste diferentes ferramentas para realizar diferentes testes no software. Por exemplo, vimos ferramentas que são especializadas no teste de desempenho e de segurança do software, enquanto outras são mais adequadas para testes de caixa branca ou de caixa preta.
O processo de teste de software é desafiador e complexo, mas também é um passo fundamental para softwares de qualidade serem colocados em produção e destinados ao uso das pessoas. Softwares que passam por frágeis processos de teste tendem a apresentar problemas com muita frequência e, ao longo do tempo, perdem a sua capacidade de manutenção (manutenibilidade).
Lembre-se que as ferramentas aqui apresentadas não farão tudo sozinhas, é necessário que você tenha sólidos conhecimentos sobre teste de software para saber o que fazer e em qual momento (procure suas anotações sobre a nossa lição de teste de software). Essas ferramentas são apenas um auxílio para realizar testes em menos tempo, em comparação aos testes realizados de forma manual. Nunca confie totalmente em testes automatizados, a sua experiência e seu conhecimento como desenvolvedor(a) sempre serão demandados diante de um processo automatizado.
Agora, você, desenvolvedor(a), tem conhecimento de inúmeras ferramentas para testar e validar seus códigos e softwares. Vamos em frente!
MYERS, G. J.; SANDLER, C.; BADGETT, T. The Art of Software Testing. 3. ed. [S. l.]: Wiley, 2011.
PRESSMAN, R. S.; MAXIM, B. R. Engenharia de Software: Uma Abordagem Profissional. 8. ed. São Paulo: AMGH, 2016.
SOMMERVILLE, I. Engenharia de Software. 9. ed. São Paulo: Pearson, 2011.