Teste de Software
Agenda
Conceitos de Qualidade de Software
Introdução ao Teste de Software
Testes em Aplicações Web (Planejamento, Especificação e Execução)
Testes Ágeis
Vanilton Pinheiro
Analista de Sistemas
#0 Apresentação
#1 Conceitos de Qualidade de Software
Qual barriga tem mais qualidade?
#1 Conceitos de Qualidade de Software
Qual salto tem mais qualidade?
Sabrina (Romena)
Biles (Americana)
#1 Conceitos de Qualidade de Software
Qual ambiente tem mais qualidade Piscina ou igarapé?
#1 Conceitos de Qualidade de Software
Qual buscador tem mais qualidade?
#1 Conceitos de Qualidade de Software
Qual site tem mais qualidade?
Fonte: https://web.archive.org/
Fonte: https://fpftech.com
#1 Conceitos de Qualidade de Software
O que poderia melhorar nesse site?
Fonte: https://web.archive.org/
#1 Conceitos de Qualidade de Software
Teste
Significado
Percepções, necessidades e resultados
Qualidade
#1 Conceitos de Qualidade de Software
Qualidade
Teste
Significado
Percepções e necessidades
Regras, heurísticas, padrões e etc.
Possuir grau de utilidade ou valor
Fonte: https://diferenser.com.br/os-tres-cerebros/
#1 Conceitos de Qualidade de Software
Qualidade
Teste
Significado
<form id="form-login">
<label for="fname">First name:</label><br>
<input type="text" id="fname" name="fname" maxlength="30"><br>
<label for="lname">Last name:</label><br>
<input type="text" id="lname" name="lname" maxlength="100">
</form>
Quais testes poderiam ser derivados do campo First name?
Atividade 1
#1 Conceitos de Qualidade de Software
Qualidade é o grau de utilidade esperado ou adquirido de qualquer coisa, verificável através da forma e dos elementos constitutivos do mesmo e pelo resultado do seu uso.
Fonte: https://pt.wikipedia.org/wiki/Qualidade
#1 Conceitos de Qualidade de Software
Fonte: https://pt.wikipedia.org/wiki/Qualidade
A palavra "qualidade" tem um conceito subjetivo que está relacionada com as percepções, necessidades e resultados em cada indivíduo.
#1 Conceitos de Qualidade de Software
De quem é a responsabilidade da qualidade em uma empresa?
#1 Conceitos de Qualidade de Software
Cultura da Qualidade
Propósito, Missão e os valores da empresa
Comunicação e colaboração
Conformidade/Padronização
Realize e busque Feedback
Controle e Fiscalização
Treinamento e compartilhamento
Automação de Processos
#1 Conceitos de Qualidade de Software
Cultura da Qualidade no Fluxo de Trabalho
Priorizado
WIP 3
Desenvolvimento
WIP 1
Teste
Considere um time com 4 integrantes, sendo 3 desenvolvedores e um testador.
Identifique o gargalo que existe no fluxo abaixo e o que poderia ser movimentado para melhorar o fluxo de entregáveis até a raia de Homologação.
WIP 2
Homologação
#1 Conceitos de Qualidade de Software
#1 Conceitos de Qualidade de Software
#1 Conceitos de Qualidade de Software
Qualidade de produto segundo ISO 25010:2011
#1 Conceitos de Qualidade de Software
Resumo de Qualidade de Software
#1 Conceitos de Qualidade de Software
Atividade 2
Construção em Grupo:
Forme grupos de 3 a 4 pessoas discutam em conjunto quais fatores de qualidade são mais críticos para o sistema de gestão escolar e proponham soluções práticas para melhorar esses fatores.
Entrega:
Elabore um relatório com as respostas do grupo, detalhando as avaliações feitas e as recomendações propostas.
#2 Introdução ao Teste de Software
#2 Introdução ao Teste de Software
#2 Introdução ao Teste de Software
#2 Introdução ao Teste de Software
Teste pode ser usado apenas para mostrar a presença de defeitos mas nunca sua ausência."
Dijkstra (1970)
Teste é o processo de executar um programa ou sistema com a intenção de encontrar erros."
Myers (1979)
Teste é apenas uma amostragem."
Roper (1994)
Teste é um processo de engenharia concorrente ao processo de ciclo de vida do software, que faz uso e mantém artefatos de teste usados para medir e melhorar a qualidade do produto de software sendo testado." Craig e Jaskiel (2002)
O que é teste de software?
#2 Introdução ao Teste de Software
Teste de Software é uma maneira pela qual pode-se aplicar estratégias e técnicas que aproximam uma solução atender a expectativa de um usuário final em um sistema de informação."
Vanilton Pinheiro (2023)
O que é teste de software?
#2 Introdução ao Teste de Software
Estamos construindo certo o produto?
Estamos construindo o produto certo?
Requisitos
Expectativas
#2 Introdução ao Teste de Software
“Processo de avaliar o software ao final de seu processo de desenvolvimento para garantir que está de acordo com o uso pretendido.” (Ammann e Offutt, 2008; ISO/IEC/IEEE, 2010)
“Processo para determinar se os produtos de uma determinada fase de desenvolvimento satisfazem os requisitos estabelecidos na fase anterior.” (Ammann e Offutt, 2008; ISO/IEC/IEEE, 2010)
#2 Introdução ao Teste de Software
Níveis de maturidade de teste (Beizer, 1990)
#2 Introdução ao Teste de Software
#2 Introdução ao Teste de Software
Boehm e Basili (2001) também apontam que é quase improvável liberar um produto de software livre de defeitos.
Além disso, quanto mais tarde um defeito é revelado, maior será o custo para sua correção.
#2 Introdução ao Teste de Software
A regra 10 de Myers apresenta que o custo da correção de um defeito tende a aumentar quanto mais tarde ele for encontrado.
#2 Introdução ao Teste de Software
#2 Introdução ao Teste de Software
#2 Introdução ao Teste de Software
#2 Introdução ao Teste de Software
Erro
Defeito
Falha
Causa
Consequência
Terminologia
#2 Introdução ao Teste de Software
Terminologia
Considere o seguinte comando de atribuição:
(z = y + x)
(z = y − x)
Variável z com valor errôneo
x = 0
x ≠ 0
Erro (Engano)
Defeito (Produzido)
Falha (Propagação)
#2 Introdução ao Teste de Software
Terminologia
Um engano pode resultar em vários defeitos e cada defeito pode levar o software a falhar de diferentes maneiras.
Roper (1994)
#2 Introdução ao Teste de Software
Terminologia
O Modelo RIP de Ammann e Offutt (2008), estabelece as condições que devem ser estabelecidas para que a falha ocorra. São elas:
#2 Introdução ao Teste de Software
Terminologia
Conceitos chaves segundo Ammann e Offutt (2008) para um bom teste
#2 Introdução ao Teste de Software
Terminologia
Quais foram os maiores problemas que vocês já enfrentaram testando?
#2 Introdução ao Teste de Software
Problemas/limitações comuns atuando com teste:
#2 Introdução ao Teste de Software
Uma loja que vende 1000 produtos, que podem ser pagos por 5 bandeiras de cartões de crédito e pode ser feito o parcelamento em até 12 vezes
Quantos cenários de teste seriam necessários para cobrir todas as possibilidades?
CTs | Tempo Execução de 1 CT (min) | Tempo para executar (min) |
---|---|---|
60000 | 5 | 300000 |
Horas | Dias (alucinado) | Meses (alucinado) |
5000 | 208,3 | 6,9 |
Dias (trabalho) | Meses (trabalho) | |
625,0 | 20,6 |
Teste Exaustivo.....
#2 Introdução ao Teste de Software
Casos de Teste
Um caso de teste é um exercício de comparação do que é produzido pelo software para o que se espera de saída do mesmo, dado o requisito definido.
(d, S(d)) é um caso de teste, onde d ∈ D é a entrada e S(d) representa a saída esperada de d de acordo com a especificação S
#2 Introdução ao Teste de Software
Casos de Teste
Obrigatório:
Entrada; Saída Esperada
#2 Introdução ao Teste de Software
Atividade 3 - Especificação
Campos de Cadastro: O formulário de cadastro de aluno deve incluir os seguintes campos obrigatórios e opcionais:
Objetivo:
Permitir que os administradores e/ou secretários escolares cadastrem novos alunos no sistema, atualizem informações de alunos já existentes e, se necessário, excluam cadastros.
#2 Introdução ao Teste de Software
Atividade 3 - Casos de Teste
Individualmente criem casos de teste para a funcionalidade de Cadastro de Aluno, considere:
#2 Introdução ao Teste de Software
Casos de Teste - Entradas
#2 Introdução ao Teste de Software
Casos de Teste - Saída
#2 Introdução ao Teste de Software
Casos de Teste - Oráculo
#2 Introdução ao Teste de Software
Casos de Teste - Oráculo Beizer (1990)
#2 Introdução ao Teste de Software
Casos de Teste - Oráculo Beizer (1990)
#2 Introdução ao Teste de Software
Casos de Teste - Oráculo Beizer (1990)
#2 Introdução ao Teste de Software
Casos de Teste - Oráculo Beizer (1990)
#2 Introdução ao Teste de Software
Casos de Teste - Cascata
O que ocorre com o passo 2 senão for realizado o passo 1?
#2 Introdução ao Teste de Software
Casos de Teste - Independente
Todo o teste está auto contido, ou seja, não existe a chance de outro teste interferir em sua execução (melhor prática)
Execução em qualquer ordem
Mais complexos de serem mantidos
#2 Introdução ao Teste de Software
Conceitos
Processo de Teste de Software
Um Processo de Teste de Software tem como objetivo estruturar as etapas, as atividades, os artefatos, os papéis e as responsabilidades do teste, permitindo organização e controle de todo o ciclo do teste, minimizando os riscos e agregando valor ao software.
Níveis ou Fases de Teste
Os testes são aplicados a tipos diferentes de destinos, em diferentes estágios ou níveis de esforço de trabalho. Esses níveis são normalmente distintos por essas funções que são melhores habilitadas para projetar e conduzir os testes e em que as técnicas são mais apropriadas para os testes em cada nível.
Técnicas de Teste
Caixa Branca, Preta e Cinza
Tipos de Teste
Para cada contexto compreender quais testes são interessantes aplicar.
#2 Introdução ao Teste de Software
Níveis ou Fases de Teste
Unidade
Integração
Sistema
Aceitação
#2 Introdução ao Teste de Software
Por que testar o software em fases e não apenas como um todo?
Reduzir a complexidade
Aumentar o foco de atuação (Dividir para conquistar)
Níveis ou Fases de Teste
#2 Introdução ao Teste de Software
Teste de Unidade
def soma(a, b):
return a + b
def multiplicacao(a, b):
return a ** b
def exponencial(a, b):
return a ** b
if __name__ == '__main__':
print(soma(1,1)==2)
print(multiplicacao(1,1)==1)
print(exponencial(1, 1)==1)
O objetivo é identificar erros de lógica e de programação na menor unidade de programação.
Qual linha de código ao lado está o bug?
#2 Introdução ao Teste de Software
Teste de Unidade
Driver e Stub são dublês (doubles, também conhecidos como mocks), cuja função é substituir um componente durante os testes de software, automatizados ou não.
Como testar uma unidade que precisa receber dados de outra unidade para ser executada?
#2 Introdução ao Teste de Software
Teste de Integração
O Objetivo é verificar se as unidades testadas individualmente se comunicam como desejado.
#2 Introdução ao Teste de Software
Teste de Integração
#2 Introdução ao Teste de Software
Teste de Sistema e Aceitação
Teste de Sistema | Teste Aceitação |
---|---|
O objetivo é verificar se o programa em si interage corretamente com o sistema para o qual foi projetado. Isso inclui, por exemplo, o SO, banco de dados, hardware, manual do usuário, treinamento, etc. (Visão técnica) | O objetivo é verificar se o programa desenvolvido atende as exigências do usuário. |
- Alguns testes que compõem: funcionalidade, usabilidade, segurança, confiabilidade, disponibilidade, performance, backup/restauração, portabilidade, entre outros ISO 25010:2011 e ISO-IEC-9126. - Podemos considerar como um teste de integração com maior amplitude |
#2 Introdução ao Teste de Software
Teste de Sistema e Aceitação
#2 Introdução ao Teste de Software
Resumindo Niveis ou Fases de Teste
Teste Procedimental
Teste Orientado a Objeto
Procedimento ou rotinas
Métodos
Classes
Clusters
Componentes
Subsistemas
Dois ou mais procedimentos ou Subsistemas
Sistema completamente em funcionamento
Sistema completamente em funcionamento
#2 Introdução ao Teste de Software
Técnicas de Teste
Baseado em requisito especificado
#2 Introdução ao Teste de Software
Técnicas de Teste
Baseado na estrutura do programa implementado
#2 Introdução ao Teste de Software
Técnicas de Teste
#2 Introdução ao Teste de Software
Tipos de Teste
Verificação da consistência entre o produto implementado e os requisitos funcionais
Funcional
Teste executado para medir características não-funcionais
Não Funcional
Verifica se o software funciona de acordo com as necessidades do cliente
Aceitação
Realizado com usuários finais na organização desenvolvedora antes de liberar uma versão
Alfa
Realizado fora da organização, preferencialmente nos locais dos usuários finais
Beta
Repetição de teste num programa já testado, depois de haver modificação
Regressão
#2 Introdução ao Teste de Software
Tipos de Teste
Executado dentro de um contexto de sistema
Exemplos: Número de usuários simultâneos
Configuração da máquina
Desempenho
Submeter o software a cargas de dados e solicitações para avaliar seu comportamento.
Carga/Volume
Submeter o sistema a situações anormais. Execução do sistema exigindo dos recursos mais do que foi projetado para suportar
Estresse
Avaliação do sistema feita por especialistas, a partir da observação e análise do comportamento do usuário durante a navegação e execução de tarefas específicas
Usabilidade
Comprime um conjunto de testes não exaustivos, garantindo que as principais funcionalidades funcionem
Sanidade
Teste executado sem um planejamento prévio
Geralmente feito por ferramentas automatizadas
Macaco
#2 Introdução ao Teste de Software
Tipos de Teste
Teste baseado na experiência com área de atuação de testes definidos e tempo de exploração.
Exploratório
Teste baseado na experiência sem área de atuação de testes definidos e sem tempo de exploração.
Ad-hoc
Elaboração de casos de teste que possam subverter as verificações de segurança do programa
Segurança
O teste de instalação verifica se sob diferentes condições como pouco espaço de memória, interrupções no sistema e demais entraves que podem comprometer esse processo, o programa consegue ser instalado ou se cede facilmente a essas limitações.
Instalação
#2 Introdução ao Teste de Software
Processo de Teste de Software
Um Processo de Teste de Software tem como objetivo estruturar as etapas, as atividades, os artefatos, os papéis e as responsabilidades do teste, permitindo organização e controle de todo o ciclo do teste, minimizando os riscos e agregando valor ao software.
#2 Introdução ao Teste de Software
Processo de Teste de Software
#2 Introdução ao Teste de Software
Modelos de Apoio ao Processo de Teste de Software
#2 Introdução ao Teste de Software
Modelos de Apoio ao Processo de Teste de Software
#2 Introdução ao Teste de Software
Modelos de Apoio ao Processo de Teste de Software
#2 Introdução ao Teste de Software
Atividade 4
Monte um conjunto de casos de teste para testar o método check_valid_identifier(String) no módulo validators. Lembrando que para cada entrada (string) de teste deve ser verificado a saída no tipo boleano.
Existe o seguinte problema:
“Um identificador deve começar com um alfabeto ou sublinhado, não pode começar com um dígito ou qualquer outro caractere especial, além disso, dígitos podem vir depois e deve conter no mínimo 3 e no máximo 10 caracteres”
#2 Introdução ao Teste de Software
Testes sem critérios são testes sem direção
#2 Introdução ao Teste de Software
Escolher diferentes elementos para o teste tendo em vista a necessidade de divisão do problema em questão.
a)
Figuras acima adaptada de Pezzè e Young (2007) ilustram a segmentação ocasionada por diferentes critérios de teste supostamente dos menos rigorosos (a) para os mais rigorosos (e)
b)
c)
d)
e)
#2 Introdução ao Teste de Software
Partição de Equivalência
#2 Introdução ao Teste de Software
Partição de Equivalência
0 - 15 anos | 16 - 59 anos | 61 - ∞ anos |
---|
Partição Válida
Partição Inválida
Partição Inválida
#2 Introdução ao Teste de Software
Partição de Equivalência
Como deveriam ser derivados as partições válidas para o exemplo abaixo
Em geral são definidas duas classes inválidas e uma válida.
#2 Introdução ao Teste de Software
Partição de Equivalência
Aplicações e Limitações
Reduz significativamente o numero de casos de teste em relação ao teste exaustivo.
Mais adequado para o teste de produtos com domínios de entrada divididos em intervalos ou conjuntos.
Assume que os valores dentro da mesma classe são equivalentes.
Aplicável em todas as fases de teste: unidade, integração, sistema e aceitação
#2 Introdução ao Teste de Software
Análise do Valor Limite
0 - 15 anos | 16 - 59 anos | 61 - ∞ anos |
---|
Inválido
Inválido
Válido
#2 Introdução ao Teste de Software
Análise do Valor Limite
Derive casos de teste para os limites válidos e inválidos conforme a imagem abaixo:
Válido
Inválido
Inválido
#2 Introdução ao Teste de Software
Tabela de decisão
Tabelas de Decisão representam regras de negócio complexas por meio de um conjunto de decisões
#2 Introdução ao Teste de Software
Tabela de decisão
Suponha que uma companhia de seguros ofereça desconto especial para motoristas que são casados e/ou com filhos
Regra 1 |
Regra 2 | Regra 3 | Regra 4 | |
---|---|---|---|---|
Condições | ||||
Casado(a)? | Sim | Sim | Não | Não |
Tem Filhos? | Sim | Não | Sim | Não |
Ações | ||||
Desconto R$? | 60 | 25 | 50 | 0 |
2 condições elevado a quantidade de possibilidades (2)
#2 Introdução ao Teste de Software
Tabela de decisão
A estrutura base para um teste em tabela de decisão é:
A multiplicação das partições das variáves. Variável 1 contêm 2 partições x Variável 2 com 2 partições = 4 testes
#2 Introdução ao Teste de Software
Tabela de decisão
Exemplo de Requisito
#2 Introdução ao Teste de Software
Teste Unitário
O teste unitário consiste em verificar o comportamento das menores unidades em sua aplicação.
Tecnicamente, isso seria uma classe ou até mesmo um método de classe em línguas orientadas a objetos, e seria um procedimento ou função em línguas processuais e funcionais.
#2 Introdução ao Teste de Software
Teste Unitário
Cada teste deve lidar apenas com
Um cenário a ser testado (um “dado”)
Um método para testar (um “quando”).
Uma chamada para um método de verificação (um “então”).
#2 Introdução ao Teste de Software
Frameworks de Teste Unitário
#2 Introdução ao Teste de Software
Unittest o foi originalmente inspirada no JUnit e tem uma semelhança às principais estruturas de teste de unidade em outras linguagens. Ele suporta automação de teste, compartilhamento de código de configuração e desligamento de testes, agregação de testes em coleções e independência dos testes da estrutura de relatórios.
https://docs.python.org/pt-br/3.11/library/unittest.html
A biblioteca Unittest já vem nativamente com o python
Frameworks de Teste Unitário
#2 Introdução ao Teste de Software
Frameworks de Teste Unitário
Na IDE PyCharm basta criar um novo python file com unit test que já é oferecido o modelo abaixo:
#2 Introdução ao Teste de Software
Frameworks de Teste Unitário
#2 Introdução ao Teste de Software
Frameworks de Teste Unitário
No corpo de um método de teste basicamente o que se faz é:
Criar um objeto da classe que contem o método a ser testado
Invocar o método em teste com os parâmetros desejados e armazenar o valor de retorno
Utilizar uma das asserções disponíveis no framework para comparar o resultado obtido com o resultado esperado.
#2 Introdução ao Teste de Software
Frameworks de Teste Unitário
Para a criação de um caso de teste e necessário:
Identificar o método a ser testado
Compreender a especificação do método: o que recebe de entrada e qual a saída produzida em função da entrada escolhida.
Entrada
Saída
Comparar a saída produzida (obtida) com aquela que deveria ser gerada conforme a especificação.
#2 Introdução ao Teste de Software
Utilizando os casos de testes elaborados na atividade 4:
git clone https://github.com/Vanilton18/xpto-exemplos-teste.git
Atividade 5
#2 Introdução ao Teste de Software
Atividade 5
Verificar a cobertura de código por linha utilizando o Coverage
# Criar um ambiente virtual
python3 -m venv venv
# Instalar a biblioteca coverage
pip install coverage
# Alterar o executor do unittest para coverage
# (na raiz do projeto por padrão utilizar test_*.py na frente dos módulos de teste)
python -m unittest discover
# Executar o teste com o coverage
coverage run -m unittest discover
# Gerar report no terminal
coverage report
# Gerar report HTML
coverage html
#3 Testes em Aplicações Web
A arquitetura cliente-servidor é um modelo fundamental para a comunicação na internet.
#3 Testes em Aplicações Web
O servidor é o computador que armazena e processa os dados da web.
Armazenamento
Contém todos os arquivos de um site.
Processamento
Responde a solicitações dos clientes.
Segurança
Protege dados e aplicações.
#3 Testes em Aplicações Web
O cliente é o dispositivo que acessa os dados do servidor.
Navegadores Web
Chrome, Firefox, Safari, etc.
Aplicativos Móveis
Redes sociais, jogos, etc.
Dispositivos IoT
Sensores, smart home, etc.
#3 Testes em Aplicações Web
A rede é a infraestrutura que conecta clientes e servidores.
Internet
Rede global de computadores
Redes Locais (LAN)
Conexão de dispositivos em uma área limitada.
Redes sem Fio (Wi-Fi)
Comunicação sem cabos
#3 Testes em Aplicações Web
A comunicação entre cliente e servidor é um processo em etapas.
Solicitação
O cliente envia uma solicitação ao servidor.
Processamento
O servidor processa a solicitação.
Resposta
O servidor envia a resposta ao cliente.
#3 Testes em Aplicações Web
Protocolos definem as regras de comunicação entre cliente e servidor.
HTTP | Transferência de Hipertexto |
HTTPS | Transferência de Hipertexto Segura |
DNS | Sistema de Nomes de Domínio |
#3 Testes em Aplicações Web
A arquitetura cliente-servidor é a base para uma ampla gama de aplicações web.
#3 Testes em Aplicações Web
#3 Testes em Aplicações Web
O modelo de falhas para aplicações web, proposto por Andrews e Whittaker (2006), oferece uma estrutura abrangente para analisar as potenciais falhas que podem ocorrer em diferentes camadas de uma aplicação web.
#3 Testes em Aplicações Web
Falhas de Configuração
Configurações inadequadas no servidor, como permissões incorretas para arquivos e diretórios, podem criar brechas de segurança que permitem acesso não autorizado ou modificação de dados. É crucial configurar o servidor com rigor, definindo permissões apropriadas e utilizando mecanismos de autenticação e autorização robustos.
O servidor pode ser sobrecarregado por um grande volume de tráfego, resultando em lentidão ou indisponibilidade. É importante monitorar o uso de recursos do servidor e implementar medidas para escalar a capacidade de acordo com as necessidades, como balanceamento de carga e escalonamento horizontal.
Sobrecarga e disponibilidade
Falhas de segurança no software do servidor podem ser exploradas por hackers para realizar ataques, como injeção de código SQL ou ataques de Cross-Site Scripting (XSS). É fundamental manter o servidor e seus softwares atualizados com as últimas correções de segurança e aplicar políticas de segurança rígidas.
Vulnerabilidade de segurança
#3 Testes em Aplicações Web
Incompatibilidade de Navegador
A renderização de conteúdo web pode variar entre diferentes navegadores e versões, levando a problemas de exibição e usabilidade. É crucial realizar testes de compatibilidade em vários navegadores para garantir uma experiência consistente para todos os usuários.
Execução de Código Malicioso
Vulnerabilidades no navegador podem permitir que scripts maliciosos sejam executados, o que pode comprometer dados confidenciais, roubar informações pessoais ou redirecionar o usuário para sites maliciosos. É essencial manter o navegador atualizado com as últimas correções de segurança e utilizar extensões de segurança confiáveis.
Falhas na Atualização
Navegadores desatualizados são mais suscetíveis a ataques, pois podem conter vulnerabilidades conhecidas que não foram corrigidas. É fundamental manter o navegador atualizado com as últimas versões para garantir a segurança e a confiabilidade das aplicações web.
Erros no Cache
O cache do navegador pode armazenar versões desatualizadas do conteúdo web, levando a problemas de exibição e usabilidade. É importante implementar mecanismos de invalidação de cache para garantir que os usuários vejam o conteúdo mais recente.
#3 Testes em Aplicações Web
Interrupções de Conectividade
Quedas na conexão de rede podem impedir a comunicação entre o cliente e o servidor, resultando em indisponibilidade da aplicação web. É importante implementar mecanismos de redundância, como conexões de backup e gateways redundantes, para minimizar o impacto de interrupções.
Latência Elevada
Retardos na rede podem levar a tempos de resposta lentos, impactando a experiência do usuário e prejudicando a usabilidade da aplicação web. É fundamental otimizar a rede, reduzindo a latência e implementando técnicas de otimização de desempenho para melhorar a experiência do usuário.
Ataquem Man-in-the-middle
Ataques Man-in-the-Middle (MitM) ocorrem quando um atacante intercepta a comunicação entre o cliente e o servidor, roubando dados confidenciais ou manipulando a comunicação. É essencial utilizar criptografia HTTPS para proteger a comunicação entre o cliente e o servidor e garantir a privacidade e integridade dos dados.
#3 Testes em Aplicações Web
Cross-Site Scripting (XSS)
O ataque XSS permite que hackers injetem scripts maliciosos em um site confiável, roubando dados confidenciais do usuário ou redirecionando o usuário para sites maliciosos. É importante validar e filtrar cuidadosamente a entrada do usuário e implementar técnicas de codificação para evitar XSS.
Injeção de SQL
A injeção de SQL permite que hackers injetem código SQL malicioso em formulários de entrada, manipulando os dados do banco de dados ou obtendo acesso não autorizado aos dados. É essencial utilizar parâmetros preparados e validar cuidadosamente a entrada do usuário para prevenir injeção de SQL.
Falhas de Autenticação
Falhas na implementação de autenticação podem permitir que hackers acessem contas de usuário ou informações confidenciais. É importante utilizar mecanismos de autenticação robustos, como autenticação de dois fatores, e proteger os dados de login do usuário.
Falhas de Autorização
Falhas na implementação de autorização podem permitir que usuários não autorizados acessem recursos protegidos. É importante implementar mecanismos de autorização granulares para garantir que apenas usuários autorizados acessem os recursos apropriados.
#3 Testes em Aplicações Web
Tempo de carregamento
Os tempos de carregamento lento podem levar à frustração do usuário e perda de clientes. É importante otimizar o desempenho da aplicação web, minimizando o tamanho das páginas, comprimindo arquivos e utilizando CDN para distribuir o conteúdo globalmente.
Erros de Servidor
Erros de servidor podem interromper o funcionamento da aplicação web e prejudicar a experiência do usuário. É importante implementar mecanismos de tratamento de erros, registrar erros e monitorar a saúde do servidor para garantir uma experiência suave para os usuários.
Pontos de Congestionamento
Pontos de congestionamento na aplicação web podem levar a tempos de resposta lentos e prejudicar a experiência do usuário. É importante analisar o desempenho da aplicação e identificar os pontos de congestionamento para otimizar o código e a arquitetura da aplicação.
Uso de Recursos Excessivo
O uso excessivo de recursos do servidor pode levar a lentidão e instabilidade da aplicação web. É importante otimizar o código da aplicação, reduzir o uso de recursos e implementar mecanismos de escalabilidade para garantir o desempenho da aplicação.
#3 Testes em Aplicações Web
Teste de Segurança
A realização de testes de segurança regulares é essencial para identificar vulnerabilidades e corrigir falhas antes que sejam exploradas por hackers. É importante utilizar ferramentas de teste de segurança, como scanners de vulnerabilidades, e realizar testes de penetração para avaliar a segurança da aplicação web.
Monitoramento e Análise de Log
Monitorar e analisar os logs do servidor e da aplicação web é crucial para identificar padrões suspeitos e detectar ataques em andamento. É importante configurar sistemas de monitoramento robustos e analisar os logs regularmente para detectar atividades suspeitas.
Atualizações de Segurança
É fundamental manter o servidor e todos os softwares da aplicação web atualizados com as últimas correções de segurança para proteger a aplicação de ataques conhecidos. É importante configurar um sistema de atualização automatizado para garantir que as atualizações de segurança sejam aplicadas de forma rápida e eficiente.
Treinamento e Conscientização
É importante treinar a equipe de desenvolvimento web sobre as melhores práticas de segurança e conscientizá-los sobre as ameaças comuns para garantir que eles implementam medidas de segurança eficazes durante o desenvolvimento da aplicação web.
#3 Testes em Aplicações Web
#3 Testes em Aplicações Web
#3 Testes em Aplicações Web
Performance
Sensores, smart home, etc.
Heurísticas
Exploratório
Performance
Funcional
Segurança
#3 Testes em Aplicações Web
O que é?
"Uma regra, simplificação, ou aproximação que reduz ou limita a busca por soluções em domínios que são difíceis e pouco compreendidos"
Objetivo
Identificar problemas de usabilidade que impedem a interação fluida e eficaz do usuário com o sistema.
Metodologia
Utilizar as heurísticas de Nielsen para avaliar a interface do usuário, procurando por falhas que violem os princípios de design.
Vantagens
Rápido, eficaz e relativamente barato, ideal para uma avaliação inicial de usabilidade.
#3 Testes em Aplicações Web
#3 Testes em Aplicações Web
O sistema deve manter o usuário informado sobre o que está acontecendo, com feedback apropriado e em tempo hábil.
#3 Testes em Aplicações Web
O sistema deve falar a linguagem do usuário, com termos e conceitos familiares ao mundo real.
#3 Testes em Aplicações Web
O usuário deve ter a possibilidade de reverter ações, com opções de desfazer e refazer.
#3 Testes em Aplicações Web
O sistema deve utilizar linguagem consistente e padrões familiares, garantindo a previsibilidade da interface.
#3 Testes em Aplicações Web
Ações drásticas como deletar e sair devem ser confirmadas antes de serem executadas, evitando, assim, erros.
#3 Testes em Aplicações Web
O usuário não tem obrigação de lembrar todo o caminho que fez dentro de um site. O uso da breadcrumb facilita isto.
#3 Testes em Aplicações Web
O usuário deve poder escolher o melhor ajuste para utilizar a interface.
#3 Testes em Aplicações Web
Evite colocar muitas informações juntas. Ocultar parte da informação e permitir que o usuário a visualize apenas quando quiser é uma alternativa.
#3 Testes em Aplicações Web
Quando algo sair errado, deixe claro para o usuário o que está acontecendo e o que ele deve fazer para resolver.
#3 Testes em Aplicações Web
Oriente o usuário sobre a informação necessária e sempre busque deixar isto o mais claro possível e da maneira mais rápida.
#3 Testes em Aplicações Web
#3 Testes em Aplicações Web
#4 Testes Ágeis
O Teste Ágil é uma prática que enfatiza a qualidade e a colaboração. Ele se integra ao ciclo de desenvolvimento de software, promovendo testes contínuos e iterativos.
#4 Testes Ágeis
#4 Testes Ágeis
#4 Testes Ágeis
#4 Testes Ágeis
#4 Testes Ágeis
#4 Testes Ágeis
#4 Testes Ágeis
#4 Testes Ágeis
#4 Testes Ágeis
#4 Testes Ágeis
Testes Tradicionais | Testes Ágeis |
---|---|
Ocorre após o desenvolvimento | É realizado por todos membros do time |
É realizado por meios manuais e automáticos | É realizado com maior ênfase por meios automáticos |
Enfoque maior em testes de caixa preta na perspectiva da interface gráfica do software | Enfoque maior em testes de caixa preta e branca em todas as camadas da arquitetura |
Testes são usados como roteiros para a execução manual realizada por um testador |
Testes são usados como complementação dos requisitos e documentação do código |
Maior ênfase em testes planejados detalhadamente e execução baseada em roteiros | Maior ênfase em testes exploratórios |
#4 Testes Ágeis
#4 Testes Ágeis
#4 Testes Ágeis
#4 Testes Ágeis
#4 Testes Ágeis
#4 Testes Ágeis
Pode-se planejar focando na exploração por meios de:
Mapas mentais
Testes de aceitação
Automatização ao invés de testes tradicionais com roteiros
Planilhas
#4 Testes Ágeis
#4 Testes Ágeis
#4 Testes Ágeis
Os objetivos são os mesmos
Para confirmar se o software faz o que ele deve fazer
Para confirmar se o software não faz o que ele não deveria fazer
Para aferir o atendimento a um atributo de qualidade (implícito e explícito)
Encontrar defeitos
A diferença é a abordagem (mais leve, mais fluída, mais proativa)
#4 Testes Ágeis
#3 Testes em Aplicações Web
A automação viabiliza ciclos curtos de entrega
A automação pode fazer parte de um ciclo de integração contínua fornecendo feedback contínuo
A automação oferece uma rede de segurança por meio de regressões completas
A automação permite a implementação do conceito DRY (Don’t Repeat Yourself) e libera as pessoas para realizarem tarefas mais criativas ao invés de terem que executar testes manuais, enfadonhos e repetitivo
#3 Testes em Aplicações Web
#3 Testes em Aplicações Web
pip install pytest-playwright
playwright install chromium
playwright codegen vanilton.net/web-test/todos
No projeto de teste que foi realizado os testes unitários instale a biblioteca conforme a linha 1 abaixo:
#3 Testes em Aplicações Web
#3 Testes em Aplicações Web
Para implementar um cenário de criação de um TODO podemos seguir os seguintes passos:
Criar um módulo de teste utilizando unittest
Criar uma função de teste para criação de um TODO
Verificar se o TODO foi criado com sucesso.
#3 Testes em Aplicações Web
Implemente 3 testes para cobrir os cenários de sanidade do Programa Triângulo:
https://vanilton.net/web-test/triangulo_v2/
#3 Testes em Aplicações Web
Lento
Rápido
$$$
$
# de testes
#3 Testes em Aplicações Web
Teste exploratório é uma técnica de teste de software que enfatiza a liberdade do testador para explorar o sistema de forma não estruturada e descobrir defeitos inesperados.
#3 Testes em Aplicações Web
Segundo James Bach (2001) criador da técnica:
"O teste de software exploratório é uma abordagem de teste sofisticada e divertida. Em algumas situações, pode ser ordens de grandeza mais produtivas do que o teste com scripts. Ainda não encontrei um testador que não tivesse, pelo menos inconscientemente, realizado testes exploratórios em algum momento. No entanto, poucas pessoas estudam essa abordagem e ela não é muito respeitada na nossa área. "..Abordagem exploratória é: pensamento científico em tempo real.”
#3 Testes em Aplicações Web
No artigo entitulado “Exploratory Testing Explained” recomenda o uso de testes exploratórios quando quiser diversificar os testes e ir além dos testes óbvios.
James Back
#3 Testes em Aplicações Web
Quando usar?
#3 Testes em Aplicações Web
Quando usar?
#3 Testes em Aplicações Web
#3 Testes em Aplicações Web
Planejamento do Teste Exploratório
Planejamento é fundamental para o sucesso do teste exploratório. Defina objetivos, escopo e estratégias para garantir que os testes sejam eficazes.
Definir o escopo | Quais funcionalidades serão testadas? |
Estabelecer objetivos | Quais são as metas do teste? |
Criar uma lista de testes | Quais cenários serão explorados? |
Definir a duração | Quanto tempo será dedicado aos testes? |
#3 Testes em Aplicações Web
Design - Charter
#3 Testes em Aplicações Web
Design - Charter - Outro Exemplos
#3 Testes em Aplicações Web
Design - Tour (Metáfora do Turista)
Tour Testing é uma abordagem estruturada para testes exploratórios, onde a exploração de um produto é organizada em torno de um tema específico
#3 Testes em Aplicações Web
Design - Tour (Metáfora do Turista)
Distrito Comercial
Passeio do Dinheiro (explorar areas de venda, anúncios e etc)
Tour do coletor de lixo (Exceções)
Distrito Histórico
Passeio pela vizinhança ruim (falhas antigas)
Tour do museu (códigos antigos)
Distrito Turístico
Tour do Colecionador (máximo de saídas possível)
Tour das Supermodelos (foco na interface)
Distrito Hoteleiro
Tour pela chuva (iniciar as operações e interrompê-las)
Tour do preguiçoso (preencher o mínimo possível de dados)
Distrito de Entreterimento
Passeio pelo beco (recursos menos utilizados)
Passeio noturno (aplicativo em execução sem fechá-lo)
Distrito Decadente
Tour Antissocial (entradas menos prováveis ou astutas)
Tour do Obsessivo Compulsivo (repetir a mesma entrada várias vezes)
#3 Testes em Aplicações Web
Execução do Teste Exploratório
A execução do teste exploratório envolve a aplicação das técnicas escolhidas e a exploração do software de forma livre e intuitiva. Documente os testes e os defeitos encontrados.
#3 Testes em Aplicações Web
Resultados
Após a conclusão do teste exploratório, os resultados são analisados para avaliar a qualidade do software e identificar áreas de melhoria.
#3 Testes em Aplicações Web
#3 Testes em Aplicações Web
#3 Testes em Aplicações Web
#3 Testes em Aplicações Web
Forma pela qual é avaliado o tempo de resposta dada uma quantidade específica de usuários simultâneos.
#3 Testes em Aplicações Web
#3 Testes em Aplicações Web
#3 Testes em Aplicações Web
#3 Testes em Aplicações Web
Jmeter é uma ferramenta Open Source que possibilita criarmos testes de performance e funcional
#3 Testes em Aplicações Web
#3 Testes em Aplicações Web
#3 Testes em Aplicações Web
#3 Testes em Aplicações Web
Referências