Escolar Documentos
Profissional Documentos
Cultura Documentos
1. Planejamento
2. Preparação
3. Especificação
4. Execução
5. Entrega
- Planejamento do teste
- Monitoramento e controle de testes
- Análise de teste
- Modelagem de teste
- Implementação do teste
- Execução de teste
- Conclusão de teste.
Viés de confirmação - O dev pode não vir a aceitar que seu código tem erro.
PRINCIPIOS DE TESTE
Cenário de Teste – Qual será a situação de teste que será tentada realizar?
Título - Vai ser quase igual o campo O QUE ESTÁ ACONTECENDO, imagine que o
DEV vai estar lendo isso para resolver, pense nele, não em você.
Passos para Reproduzir - Faça o caminho para chegar no Bug, simples e intuitivo,
mas com detalhes, use > para ajudar no processo.
O que está acontecendo - Explique um pouco mais do Bug - detalhe de forma sucinta
e de fácil entendimento.
TIPOS DE TESTE
1. Funcional
2. Não-funcional
3. Caixa-branca
4. Caixa-preta
5. Relacionado à mudança (re-teste)
1. FUNCIONALIDADE
2. DESEMPENHO
3. COMPATIBILIDADE
4. USABILIDADE
5. CONFIABILIDADE
6. SEGURANÇA
7. MANUTEBILIDADE
8. PORTABILIDADE
A mnemônica “T-REX PRADA III” — onde cada letra representará uma abordagem
de testes que deverá ser refletida quando for realizado os testes em uma aplicação
mobile.
T - Tema escuro;
E - Experiência do usuário;
X - Xiaomi;
P - Permissões;
R - Responsividade;
A - Amplificação;
D - Diferentes modelos e versões;
I - Interrupções;
I - Internet;
I - Interceptadores.
nativos presentes em seu dispositivo móvel se converte para o modo escuro (no que
estavam em um modo claro e com cores vivas, passam a ficar e em um modo escuro
e com cores frias, com o intuito de reduzir a exposição à luz azul e ao cansaço visual
dos usuários que os utilizem.
Por este motivo, é necessário testar, se, ao alternar-se entre os modos, podem
ocorrer erros no layout da sua aplicação, como por exemplo um toast que pode não
ficar responsivo no modo paisagem.
Xiaomi - Esta seção é específica para dispositivos móveis que estejam operando o
Android SO. No caso em específico, estaremos nos referindo aos da marca Xiaomi.
O que ocorre é que a Xiaomi utiliza um ROM próprio que customiza o Android SO,
criando um firmware customizado, denominado de MIUI. Esta ROM modificada pode
muitas vezes apresentar comportamentos adversos e inesperados na aplicação que
você está testando, comportamentos estes que muitas vezes podem passar
despercebidos ao testar um outro dispositivo móvel com um Android SO não-
modificado.
Vale ressaltar que não é apenas o Xiaomi que pode realizar alterações no Android
SO, alguns outros exemplos são: TouchWiz da Samsung, EMUI da Huawei e Oxygem
da OnePlus.
Como há uma nova atualização para o aplicativo, também deve-se verificar como que
o aplicativo desatualizado vai se comportar com esta nova atualização (pode ser que
a API altere algum endpoint que vai afetar diretamente as versões desatualizadas do
aplicativo), e como que pode ser apresentado a mensagem de que há uma nova
atualização do aplicativo para o usuário.
Interrupções - Deve-se também verificar qual será o seu comportamento quando for
exercido a estas interrupções.
Todas estas sobreposições podem fazer com que em algum momento o aplicativo em
questão possa perder a sua sessão, expirando-se algum token de acesso, por
exemplo, fazendo com que o aplicativo não fique funcional, necessitando que ele seja
reinicializado.
Interceptadores - E por último, mas não menos importante, ao testar uma aplicação
mobile pode-se utilizar softwares interceptadores para verificar como que a
informação está se deslocando do front-end e chegando no back-end.
LEMBRETE
NÍVEIS DE TESTES
- Objeto de teste;
- Objetivos do teste;
- Base de teste;
- Defeitos e falhas;
- Abordagem e responsabilidades
A Regra 10 de Myers indica que o custo da correção de um defeito tende a ser cada
vez maior quanto mais tarde ele for descoberto. Defeitos encontrados nas fases
iniciais da etapa de desenvolvimento do software são mais baratos de serem
corrigidos do que aqueles encontrados na produção.
Teste em pares - Técnica onde dois ou mais testadores trabalham em conjunto para
corrigir defeitos do software. Podem ter papeis diferentes ou trabalhem em conjunto,
podendo ou não apresentar um timebox de 60-90min.
Teste Negativo – O objetivo é identificar como o software lida com situações de erro
ou exceção, e se é capaz de se recuperar de forma adequada, garantindo a
integridade, confiabilidade e robustez do sistema.
Teste de Sanidade – Esse tipo de teste pode ser executado para verificar a
integridade de um sistema após uma atualização ou mudança significativa, por
exemplo. Um teste de sanidade é geralmente é rápido e simples, projetado para
detectar problemas óbvios, como falhas de inicialização., erros de configuração ou
problemas de conexão.
Teste de casos de uso - Tem como objetivo verificar se um sistema atende aos
requisitos funcionais especificados em seus casos de uso. O caso de uso é uma
descrição de como o usuário interage com o sistema em uma determinada situação.
Fluxogramas usam retângulos, ovais, diamantes e muitas outras formas para definir
os tipos de passos, assim como setas conectoras para definir fluxo e sequência.
“Se você tentar criar um conjunto abrangente de testes para cobrir todas as
possibilidades, você passará todo o seu tempo escrevendo testes e não sobrará
tempo para executá-los”
O que você precisa não é o conjunto perfeito de casos de testes abrangentes. Em vez
disso você precisa de uma estratégia de teste que responda a duas perguntas
principais:
Durante cada sessão, você faz anotações para saber o que explorou e quais
informações você encontrou. No entanto, suas anotações são para o seu uso.
Estratégia utilizada para tornar o teste exploratório mais efetivo e com objetivos mais
claros.
Testes exploratórios baseados em cenários - Comece escrevendo uma lista de
perguntas que você espera que as atividades de teste respondam. Por exemplo, você
pode ter perguntas muito gerais, como essa:
Você também pode ter perguntas especificas sobre recursos ou interações, tal como
este:
Faça um brainstorming de uma lista de perguntas. Quando você ficar sem energia,
revise sua lista.
Você como um explorador, para aumentar as chances de ver surpresas, você tem
que fazer questão de mudar sua perspectiva.
Direcione sua atenção para diferentes aspectos do software. Assistir partes diferentes
da tela. Espere surpresas e procure-as intencionalmente.
Sintonize cuidadosamente as coisas que você costuma observar; preste atenção aos
detalhes que você geralmente ignora.
Encontre uma maneira de cavar mais fundo. Considere uma área de um aplicativo
que você pode explorar e pergunte a si mesmo como você pode ir além.
Como resultado você se sente como se estivesse lidando com uma quantidade
conhecida sem mais surpresas descoberta, pelo menos por enquanto. Mais
informações não vão mudar nada. Você poderia coletar mais informações, mas não
faz mais sentido
Você não termina o teste até verificar se o software atende as expectativas e explorar
se há riscos adicionais. Uma estratégia abrangente de teste incorpora ambas as
abordagens:
- Existem coisas que eu poderia fazer agora que não poderia fazer antes?
- Existem coisas que não posso fazer agora e que poderia fazer antes?
- Minhas ações têm resultados diferentes agora do que antes?
Resumo:
Desvantagens:
- Aplicações Web
- Aplicações Nativas;
- Aplicações Hibridas.
Uma vez que são acedidas através de um browser não requerem instalação e,
tipicamente, têm um tempo de desenvolvimento curto e são mais baratas que as
aplicações nativas. As Web apps não podem ser utilizadas sem ligação à internet e
são mais difíceis de encontrar porque não há um sistema de pesquisa global como
os disponibilizadas nas lojas de aplicações.
Multiplataforma: Uma aplicação web para mobile pode ser acessada em vários
dispositivos e plataformas sem a necessidade de desenvolver versões separadas
para cada sistema operacional.
Menos integrações com o SO: As aplicações web têm menos integração com os
sistemas operacionais dos dispositivos em comparação com aplicações nativas, o
que pode resultar em uma experiência de usuário menos coesa.
Aplicações Nativas - O app nativo é o aplicativo tradicional: aquele que você baixa
diretamente na Apple Store ou na Google Play Store. Ele é desenvolvido com base
no sistema operacional em que vai funcionar, e usa os recursos nativos do aparelho
para sua operação, como câmera e GPS.
Alguns dos principais aplicativos que você utiliza no dia a dia são apps nativos, como
WhatsApp, Facebook e Instagram. As vantagens desse tipo de app estão
relacionadas ao fato de serem desenvolvidos de forma personalizada e exclusiva para
cada plataforma.
Alto UI/UX: Os apps nativos também permitem a criação de interfaces que elevam a
experiência do usuário a outro patamar. Cada sistema operacional tem diretrizes
especificas de interface do usuário com práticas recomendadas.
Segurança: Todos os apps têm vulnerabilidade nesse quesito, mas os nativos são
mais fáceis de proteger pois não dependem de tecnologias mais suscetíveis a
ataques de hackers, como a JavaScript.
Aproveitamento: Aplicativos nativos extraem ao máximo os recursos de hardware
da plataforma escolhida.
Recursos: Além do tempo, os aplicativos nativos podem exigir mais recursos para
serem desenvolvidos. Vai ser necessário contar com profissionais que dominem os
sistemas operacionais mais utilizados.
Manutenção: Como você vai estar lidando com duas bases de códigos diferentes,
manter aplicativos nativos acaba demandando atenção na gestão.
Aplicações Hibridas - Diferente dos nativos, os aplicativos híbridos são criados com
uma linguagem acessível para várias plataformas. Nestes casos são utilizadas
habilidades e tecnologias padrão Web, como HTML, CSS e JavaScript em vez de
linguagens nativas de cada sistema operacional.
O acesso faz-se através da App Store ou Google Play e durante a sua utilização
podem usar-se várias funcionalidades do dispositivo.
Tecnologia padrão: As tecnologias usadas são mais populares, sendo mais fácil
encontrar profissionais aptos a desenvolvê-las.
Xiaomi utiliza um ROM próprio que customiza o Android SO, criando um firmware
customizado, denominado de MIUI. Está ROM modificada pode muitas vezes
apresentar comportamentos adversos e inesperados na aplicação que você está
testando, comportamentos estes que muitas vezes podem passar despercebidos ao
testar um outro dispositivo móvel com um Android SO não-modificado.
Vale ressaltar que não é apenas o Xiaomi que pode realizar alterações no Android
SO, alguns outros exemplos são: TouchWiz da Samsung, EMUI da Huawei e Oxygem
da One Plus.
Desvantagens: Pode ser mais demorado e caro, especialmente para suportar uma
variedade de dispositivos. Acessibilidade limitada a dispositivos específicos.
IPA (iOS App Store Package / iPhone Archive): É o formato de arquivo usado pelo
sistema operacional iOS (iPhone, iPad, iPod Touch). Contém o código executável,
recursos, ícones, imagens e outros arquivos necessários para instalar o aplicativo no
iOS. Pode ser instalado em dispositivos iOS através da App Store ou usando métodos
alternativos como instalação via iTunes.
Ao contrário do .APK, para instalar o .IPA você tem de ter um certificado de teste no
seu iOS e só pode instalar a build via sites de distribuição (appcenter, diawi, etc).
Uso comum: Os builds são frequentemente automatizados para garantir que o código
seja compilado corretamente e que o software seja funcional. Eles são fundamentais
para a implantação contínua e garantem que as alterações no código-fonte não
introduzam erros.
AMBIENTES DE TESTES
Cada commit no “master” geralmente reflete uma versão do software que passou por
testes rigorosos. É considerado o ponto de referência para a versão atual do software
em produção.
Develop/TEST - O branch “develop” é utilizado para integração contínua. Ele reflete
o estado mais recente do código-fonte que está em desenvolvimento ativo. Novos
recursos e correções de bugs são mesclados no branch “developed”.
Pode não ser tão estável quanto o branch “master”, pois pode conter código em
desenvolvimento que ainda não passou por testes extensivos. É o ambiente que não
é atribuído recursos para simular o ambiente de produção.
INTERCEPTADORES
TESTES WEB
A - Ativação: Princípio
de ativação quando é
interagido com um
elemento (ex.: botão).
L – Layers: Quando há
elementos que se
subscrevem na tela (ex.:
bottomsheet).
T – Timing: Esperado
para dar feedback ao
usuário (ex.: componente visível por 05seg).
E - Expansão: Layout que pode ser deformado dependendo da ação que o usuário
fez em um determinado elemento.
Terminologias
Constante – Em programação, uma constante armazena um valor fixo, que NÃO
mudará com o tempo de excecução do programa. Ou seja. O valor será definido uma
única vez e jamais será alterado durante a execução da aplicação.
Operadores
FOR: Loop de Repetição - O Loop For é usado para iterar sobre uma sequência
(como uma lista, uma tupla, uma string ou um intervalo numérico).
WHILE: Loop de Repetição com Condição - O Loop while executa um bloco de
código enquanto uma condição for verdadeira.
UI (User Interface)
Definição: Refere aos elementos visuais e interativos com os quais os usuários interagem
em um produto digital. Isso inclui elementos como botões, menus, barras de navegação,
cores, tipografia e todos os elementos visíveis na tela.
UX (User Experience)
Definição: Abrange a experiencia geral do usuário ao interagir com um produto, indo além
dos aspectos visuais. Envolve como os usuários se sentem ao usar o produto, quão fácil é
para eles realizarem tarefas especificas e como a interação global impacta a satisfação do
usuário.
Foco: A UX considera a jornada completa do usuário, desde o momento em que ele acessa
o produto até a conclusão de suas tarefas. Isso inclui fatores como facilidade de uso,
eficiência, utilidade, acessibilidade e prazer geral do usuário durante a interação.
1. Visibilidade
2. Feedback
3. Restrições
4. Mapeamento
5. Consistência
6. Affordance
Conceitos de API
Como alternativa, a distribuidora, poderia fornecer uma API para verificar a disponibilidade
no estoque. Essa abordagem proporciona vários benefícios, incluindo:
- O acesso aos dados por meio de uma API ajuda os clientes a consolidarem
informações sobre seu inventário em um único local.
- A distribuidora de livros pode fazer alterações nos sistemas internos sem causar
impacto nos clientes, contanto que o comportamento da API não mude.
- Com uma API disponibilizada publicamente, os desenvolvedores que trabalham para
a distribuidora de livros, os vendedores ou terceiros poderiam desenvolver uma
aplicação para ajudar os clientes a encontrarem os livros que procuram. Isso poderia
resultar no aumento das vendas ou outras oportunidades de negócios.
Métodos HTTP
POST – O método POST é utilizado para submeter uma entidade a um recurso específico,
frequentemente causando uma mudança no estado do recurso ou efeitos colaterais no
servidor.
PUT – O método PUT substitui todas as atuais representações do recurso de destino pela
carga de dados de requisição.
Response Codes
VERBOS - Verbos HTTP são comumente também conhecidos como métodos HTTP, essa
parte consiste em testar os verbos aptos e não aptos para o end-point. Coloco abaixo uma
descrição básica dos principais verbos/métodos:
- GET: Serve para buscar dados, pode ser cacheado e nunca deve ser usado com
dados sensíveis.
- POST: Pode criar e atualizar dados, possui um corpo/payload e preferencialmente
não deve ter cache.
- PUT: Usado para atualizar dados, pode possuir corpo, mas normalmente é usado no
próprio path da url, que é o caminho para o identificador do recurso e a resposta bem-
sucedida pode ter corpo.
- DELETE: Usado para excluir dados e pode possuir corpo para envio, mas
normalmente é usado no próprio path da url com o identificador.
AUTORIZAÇÃO - Nesta etapa tudo se volta para o tipo de autorização que você utiliza, assim
você vai saber quais os pontos que que você tem que tomar cuidado, basicamente existem
dois tipos mais populares de autorização que são:
Bearer: tokens bearer para acessar recursos protegidos por OAuth 2.0.
Após isso, você pode realizar alguns cenários de testes utilizando alguns pontos:
DADOS – Nesta parte, olhamos para os dados que trafegam na API, sendo um payload de
envio ou resposta de um end-point. Neste momento podemos realizar alguns testes:
ERROS – Aqui, avaliamos minuciosamente o código de resposta para cada erro e suas
respectivas mensagens, também podemos incluir padrões de exceções para cada erros.
Abaixo detalhamos os principais códigos de erros:
- 400 Bad Request: Servidor não entendeu a requisição feita.
- 403 Forbidden: Proibido o acesso em um determinador recurso.
- 404 Not Found: Servidor não encontrou o recurso solicitado
- 500 Internal Server Error: Erro genérico para quando o servidor encontrou algo que
ele não sabe lidar.
- 503 Service Unavailable: Quando o servidor se encontra em manutenção
RESPONSIVIDADE
- Tempo de resposta: Dada as ações que o end-point pode realizar, analisar o tempo
de resposta para essas ações e criar um padrão para o projeto.
- Falha rápida (fail test): É o conceito de interromper uma operação ao invés de tentar
continuar ou excecutar as etapas seguintes do end-point.
- Concorrência: A realização de requisições em sequência ou ao mesmo tempo, a fim
de avaliar a carga que pode ser aplicada ao servidor.