Você está na página 1de 4

Equipe: Filipe Rebolças, Jonathan da Glória, Paulo Souza, Data: 13/09/2023

Ian Felipe, Pedro Henrique e Danielle Dias

SISTEMAS
 Testes de Sistemas
o Para que servem
Os testes de software são responsáveis por otimizar a gestão dos recursos de uma empresa, evitando que
surjam problemas nas aplicações finais ou durante parte do seu desenvolvimento. Os testes são processos
do desenvolvimento de um programa, podendo ser realizado ainda pelos próprios desenvolvedores ou por
profissionais especializados na área. Esses procedimentos seguem o objetivo de antecipar e corrigir falhas e
bugs que apareceram para o usuário. Embora essa etapa pareça simples, seu uso é essencial para prevenir o
que chamamos de “incêndios”. Para evitar que o teste seja uma mera etapa do ciclo de desenvolvimento, a
implantação de um processo relacionado a este garante um maior controle das atividades de teste e,
consequentemente, mais qualidade ao software.
o Manual VS Automatizado
É importante fazer uma distinção entre testes manuais e automatizados. Teste manual é presencial, ao clicar
no aplicativo ou interagir com o software e as APIs com as ferramentas adequadas. Mas o teste manual tem
um custo muito alto, já que requer alguém para configurar um ambiente e executar os testes por si mesmo e
pode estar propenso a erros humanos, uma vez que o testador pode cometer erros ortográficos ou omitir
etapas no script de teste. Já os estes automatizados, por outro lado, são realizados por uma máquina que
executa um script de teste escrito com antecedência. Esses testes podem variar muito em termos de
complexidade, indo desde a verificação de um único método em uma classe à garantia de que realizar uma
sequência de ações complexas na interface do usuário leva aos mesmos resultados. São muito mais robustos
e confiáveis que testes automatizados. Porém, a qualidade dos testes automatizados depende da qualidade
com que seus scripts de teste foram escritos.

 Tipos de Testes
o Testes de Unidade
Testes de unidade são feitos em um nível muito baixo, próximo ao código-fonte do aplicativo. Eles
consistem em testar métodos e funções individuais de classes, componentes ou módulos usados pelo
software. Testes de unidade, em geral, têm custo baixo para automatizar e podem ser executados com
rapidez por um servidor de integração contínua.
o Testes de integração
Testes de integração verificam se diferentes módulos ou serviços usados pelo seu aplicativo funcionam
bem juntos. Por exemplo, pode ser testar a interação com o banco de dados ou garantir que os micros
serviços funcionem juntos conforme o esperado. A execução desses tipos de testes tem um custo
maior, uma vez que exigem que várias partes do aplicativo estejam ativas e em execução.
o Testes funcionais
Os testes funcionais têm como foco os requisitos de negócios de uma aplicação. Eles só verificam a
saída de uma ação e não verificam os estados intermediários do sistema ao executar essa ação.
Às vezes há uma confusão entre testes de integração e testes funcionais, uma vez que ambos exigem
vários componentes para interagirem entre si. A diferença é que um teste de integração pode
simplesmente verificar que você pode consultar o banco de dados, enquanto um teste funcional
esperaria obter um valor específico do banco de dados conforme definido pelos requisitos do produto.

o Testes de ponta a ponta


Teste de ponta a ponta replica o comportamento de um usuário com o software em um ambiente
de aplicativo completo. Ele verifica se vários fluxos de usuário funcionam como o esperado e
podem ser tão simples quanto carregar uma página da web ou fazer login ou cenários muito mais
complexos verificando notificações por e-mail, pagamentos on-line, entre outros.
Testes de ponta a ponta são muito úteis, mas têm um alto custo e podem ser difíceis de atualizar
quando automatizados. Recomendamos ter alguns testes de ponta a ponta essenciais e contar mais
com tipos de testes de nível inferior (testes de unidade e de integração) para poder identificar
rapidamente alterações que causam falha.
o Testes de aceitação
Os testes de aceitação são testes formais executados para verificar se um sistema atende aos
requisitos de negócios. Eles exigem que todo o aplicativo esteja ativo e em execução e foca em
replicar os comportamentos do usuário. Porém, também pode ir mais além e medir o desempenho
do sistema e rejeitar alterações se determinadas metas não forem cumpridas.
o Testes de desempenho
Os testes de desempenho avaliam o desempenho de um sistema sob uma carga de trabalho
específica. Esses testes ajudam a medir a confiabilidade, a velocidade, a escalabilidade e a
capacidade de resposta de um aplicativo. Por exemplo, o teste de desempenho pode observar
tempos de resposta ao executar um grande número de solicitações, ou ver como o sistema se
comporta com quantidade significativa de dados. Ele pode determinar se um aplicativo atende aos
requisitos de desempenho, localizar gargalos, medir a estabilidade durante picos de tráfego e
muito mais.
o Teste de fumaça (smoke test)
Testes de sanidade são testes básicos que verificam a funcionalidade básica do aplicativo. Eles
são feitos para terem execução rápida e sua meta é garantir que os principais recursos do seu
sistema estejam funcionando conforme o esperado.
Os testes de sanidade podem ser úteis logo após um novo build ser feito para decidir se você pode
ou não executar testes mais caros, ou logo após uma implementação para garantir que o aplicativo
esteja sendo executado como deveria no ambiente recém-implementado.

(Bônus)
 Como automatizar seus testes
Para automatizar seus testes, você primeiro vai precisar escrevê-los de modo programático
usando uma estrutura de teste adequada ao seu aplicativo. PHPUnit, Mocha, RSpec são exemplos
de estruturas de teste que você pode usar para PHP, Javascript e Ruby, respectivamente. Há
muitas opções por aí para cada linguagem, assim, você precisa pesquisar e pedir para as
comunidades de desenvolvedores descobrirem qual seria a melhor estrutura para você.
Quando seus testes podem ser executados por meio de script do seu terminal, você pode fazer
com que sejam executados automaticamente por um servidor de integração contínua, como o
Bamboo, ou usar um serviço de nuvem, como o Bitbucket Pipelines. Essas ferramentas vão
monitorar seus repositórios e executar seu pacote de teste sempre que novas alterações forem
enviadas ao repositório principal.
 Teste exploratório
Quanto mais recursos e melhorias forem incluídos no seu código, mais você precisará testar para
garantir que seu sistema funcione adequadamente. Então, para cada bug que você corrigir, é bom
verificar para que não voltem em novas versões. Automação é crucial para tornar isso possível e
escrever testes mais cedo ou mais tarde se tornará parte do seu fluxo de desenvolvimento.
Assim, a pergunta é: ainda vale a pena realizar teste manual? A resposta curta é sim e talvez seja
melhor realizar testes exploratórios para descobrir erros não óbvios.
Uma sessão de testes exploratórios não deve exceder duas horas e precisa ter um escopo claro
para ajudar os testadores a se concentrar em uma área específica do software. Depois que todos os
testadores tiverem sido informados, várias ações devem ser tomadas para verificar como o
sistema se comporta.

 Observação
Para terminar este guia, é importante falar sobre o objetivo de testar. Tão importante quanto testar
que os usuários conseguem usar o aplicativo (conseguem entrar e salvar um objeto), é testar se
seu sistema não quebra quando dados ruins ou ações inesperadas são executadas. Você precisa
antecipar o que aconteceria quando um usuário comete um erro de digitação, tenta salvar um
formulário incompleto ou usa a API errada. Você precisa verificar se alguém consegue
comprometer os dados ou ter acesso a um recurso que não deveria. Uma boa suíte de testes deve
tentar quebrar seu aplicativo e ajudar a entender seu limite.
 IA nesse contexto
A inteligência artificial fez progressos significativos nos últimos anos, graças aos avanços no aprendizado de
máquina, big data e recursos de computação poderosos. Essas inovações lançaram as bases para a IA
transformar os testes de software de várias maneiras:
Automação de testes: Ao automatizar tarefas de teste repetitivas e demoradas, a IA reduz
significativamente o esforço manual necessário para a geração de casos de teste, execução e análise de
resultados. Isto liberta os testadores para se concentrarem em tarefas mais complexas e criativas, como a
concepção de testes para novas funcionalidades e a abordagem de áreas problemáticas críticas. Por exemplo, as
ferramentas de teste alimentadas por IA podem identificar de forma inteligente elementos numa página Web e
gerar testes funcionais e de IU sem necessidade de intervenção humana. Estes testes podem então ser executados
automaticamente, permitindo às equipas garantir que as aplicações são constantemente testadas e avaliadas ao
longo do ciclo de vida do desenvolvimento.
Geração inteligente de casos de teste: A geração de casos de teste com base em IA utiliza algoritmos de
aprendizagem automática para analisar dados de teste históricos e descobrir padrões. Esta informação pode então
ser utilizada para criar novos casos de teste que sejam mais eficazes na identificação de defeitos. Como
resultado, as equipas de teste podem priorizar melhor os seus esforços de teste, concentrando-se nas áreas com
maior risco de falha.
Previsão de defeitos: Uma das aplicações mais promissoras da IA em testes de software é sua capacidade
de prever defeitos antes que eles ocorram. Ao analisar padrões em alterações de código, dados históricos de
defeitos e resultados de testes, os modelos de previsão baseados em IA podem ajudar a identificar e priorizar
áreas da base de código com maior probabilidade de conter defeitos. Isto permite às equipas direcionar os seus
esforços de teste de forma mais eficaz e evitar que potenciais problemas cheguem aos utilizadores finais.
Manutenção otimizada de conjuntos de testes: A manutenção de conjuntos de testes pode ser uma tarefa
assustadora, especialmente quando se lida com aplicações grandes e complexas que evoluem ao longo do tempo.
As ferramentas baseadas em IA podem ajudar neste cenário, analisando a eficácia do caso de teste, identificando
redundâncias em conjuntos de teste e sugerindo melhorias no caso de teste para otimizar a cobertura do teste.
Isso leva a conjuntos de testes mais fáceis de manter e eficientes, reduzindo, em última análise, o esforço geral
necessário nos processos de teste.

(Bônus)
 Ferramentas e técnicas baseadas em IA no teste de software
Automatização de testes baseada em aprendizagem automática
Ferramentas como o Test.AI e o ReTest utilizam algoritmos de aprendizagem automática para se adaptarem
de forma inteligente às alterações nas interfaces das aplicações e gerarem automaticamente novos casos de
teste em conformidade. Estas ferramentas simplificam a automatização dos testes, reduzindo
significativamente o esforço de manutenção necessário para aplicações dinâmicas.
Processamento de linguagem natural (PNL)
As capacidades de PNL podem ser utilizadas para compreender e processar casos de teste, especificações e
requisitos em linguagem natural. As ferramentas de PNL baseadas em IA podem ser utilizadas para
converter cenários de teste legíveis por humanos em scripts de teste automatizados, permitindo um
desenvolvimento mais rápido de casos de teste e uma melhor colaboração entre testadores, programadores e
partes interessadas da empresa.
Testes visuais
As ferramentas de teste visual baseadas em IA, como a Applitools, utilizam algoritmos de visão por
computador para analisar e comparar os aspectos visuais das aplicações. Essas ferramentas podem detectar
automaticamente discrepâncias visuais, garantindo que o layout, o design e a estética de um aplicativo
sejam consistentes em vários dispositivos, plataformas e navegadores.

Detecção de anomalias
As ferramentas de detecção de anomalias baseadas em IA analisam grandes quantidades de dados de teste
para identificar padrões e tendências invulgares. Ao identificar potenciais problemas e áreas de
preocupação, estas ferramentas fornecem informações valiosas que podem ajudar os testadores a concentrar
seletivamente os seus esforços em áreas de alto risco.

 Referências
https://www.devmedia.com.br/guia/tecnicas-e-fundamentos-de-testes-de-software/34403
https://www.objective.com.br/insights/tipos-de-testes-de-software/
https://www.atlassian.com/br/continuous-delivery/software-testing/types-of-software-testing
https://appmaster.io/pt/blog/ai-em-testes-de-software

Você também pode gostar