Essencial

Teste de Software

Vanilton Pinheiro

vanilton.net

Introducing

  1. Introdução
  2. Conceitos de Teste de Software
  3. Aplicações Web e Mobile
  4. Desafios de Teste
  5. Estratégia de Teste

Introdução

Qual barriga tem mais utilidade?

Introdução

Piscina ou igarapé?

Introdução

Qual site tem mais qualidade?

Introdução

O que poderia melhorar nesse site?

Introdução

Qualidade

Teste

Significado

Percepções, necessidades e resultados

Introdução

Qualidade

Teste

Significado

Percepções, necessidades e resultados

Regras, heurísticas, padrões e etc.

Possuir grau de utilidade ou valor

Fonte: https://diferenser.com.br/os-tres-cerebros/

Exercício

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?

Introdução

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

Introdução

A palavra "qualidade" tem um conceito subjetivo que está relacionada com as percepções, necessidades e resultados em cada indivíduo.

Introdução

De quem é a responsabilidade da qualidade em uma empresa?

Introdução

Cultura da Qualidade

 

  • Atividades são entendidas e realizadas
  • Todos têm certeza sobre as políticas internas e externas
  • Ambiente propício para boas práticas e comportamentos, experimentação e adaptação a mudanças

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

Introdução

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

Introdução

Qualidade de produto segundo ISO 25010:2011

Resumo Qualidade de Software

  • Qualidade de Software: A capacidade do software de funcionar de maneira confiável, eficiente e de acordo com os requisitos especificados.
  • Métricas de Qualidade: Critérios utilizados para medir atributos do software, como desempenho, segurança, manutenibilidade e usabilidade.
  • Garantia da Qualidade (QA): Conjunto de atividades para assegurar que o processo de desenvolvimento produza software de qualidade.
  • Controle de Qualidade (QC): Processo de verificação e validação do produto final para garantir que ele esteja livre de defeitos.
  • Fatores de Qualidade: Aspectos como confiabilidade, eficiência, manutenibilidade e portabilidade que influenciam a qualidade do software.

Conceitos de Teste de Software

O que é teste?

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)

Conceitos de Teste de Software

O que é teste?

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)

Conceitos de Teste de Software

Verificação e Validação

Estamos construindo certo o produto?

Estamos construindo o produto certo?

Requisitos

Expectativas

Conceitos de Teste de Software

Verificação e Validação

“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)

Conceitos de Teste de Software

Níveis de maturidade de teste (Beizer, 1990)

  • 0 - Não há diferença entre teste e depuração (debugging);
  • 1 - O propósito do teste é mostrar que o software funciona.
  • 2 - O propósito do teste é mostrar que o software não funciona.
  • 3 - O propósito do teste não é provar nada, mas reduzir o risco de não funcionamento a um valor aceitável.
  • 4 - Teste não é uma ação, mas sim uma disciplina mental (institucionalizada na empresa) que resulta em software de baixo risco sem que seja empregado muito esforço de teste.

Teste garante a inexistência de defeitos?

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.

Conceitos de 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.

Conceitos de Teste de Software

Então Para que testar software?

Por que existe bug?

Erro

Defeito

Falha

Terminologia

Causa

Consequência

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)

Terminologia

Um engano pode resultar em vários defeitos e cada defeito pode levar o software a falhar de diferentes maneiras.

Roper (1994)

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:

  • Reachability (Alcançabilidade): os cenários de teste podem alcançar o defeito
  • Infection (Contaminação): o software passa para um comportamento incorreto
  • Propagation (Propagação): o comportamento incorreto é perceptível

Terminologia

Conceitos chaves segundo Ammann e Offutt (2008) para um bom teste

  • Observabilidade de Software: comportamento dos componentes HW ou SW na sua saída
  • Controlabilidade de Software: entradas valores, operações e comportamentos

Quais foram os maiores problemas que vocês já enfrentaram testando?

Conceitos de Teste de Software

  • Não há tempo para o teste exaustivo.
  • Muitas combinações de entrada para serem exercitadas.
  • Dificuldade em determinar os resultados esperados para cada caso de teste.
  • Requisitos do software inexistentes ou que mudam rapidamente.
  • Não há tempo suficiente para o teste.
  • Não há treinamento no processo de teste.
  • Não há ferramenta de apoio.
  • Superiores que desconhecem teste ou que não se preocupam com a qualidade focando apenas na entrega

Conceitos de Teste de Software

Problemas/limitações comuns atuando com teste:

  • 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

Conceitos de Teste de Software

Teste Exaustivo.....

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
  • 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.

Conceitos de Teste de Software

Casos de Teste

  •  (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

Conceitos de Teste de Software

Obrigatório:

Entrada; Saída Esperada

Conceitos de Teste de Software

Atividade - Especificação

Campos de Cadastro: O formulário de cadastro de aluno deve incluir os seguintes campos obrigatórios e opcionais:

  • Nome Completo (Obrigatório): Campo de texto para o nome completo do aluno.
  • Data de Nascimento (Obrigatório): Campo de data para registrar a data de nascimento do aluno.
  • CPF (Obrigatório): Campo de texto para o CPF do aluno. Deve ser único e validado conforme o formato padrão brasileiro (ex.: 123.456.789-00).
  • RG (Opcional): Campo de texto para o número do RG do aluno.
  • Endereço (Obrigatório): Conjunto de campos para o endereço do aluno, incluindo:
    • Logradouro
    • Número
    • Complemento (Opcional)
    • Bairro
    • Cidade
    • Estado
    • CEP
  • Nome dos Pais/Responsáveis (Obrigatório): Campos de texto para o nome completo dos pais ou responsáveis.
  • Contato dos Pais/Responsáveis (Obrigatório): Campos de telefone e e-mail para contato dos pais ou responsáveis.
  • Data de Matrícula (Obrigatório): Campo de data para registrar a data em que o aluno foi matriculado.
  • Foto do Aluno (Opcional): Campo para upload de uma foto do aluno.

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.

Conceitos de Teste de Software

Atividade - Especificação

Individualmente criem casos de teste para a funcionalidade de Cadastro de Aluno, considere:

 

  • Cadastro de Novo Aluno
  • Edição de Aluno Existente
  • Exclusão de Cadastro
  • Pesquisa de Aluno

Conceitos de Teste de Software

Casos de Teste - Entradas

  • Entrada do usuário via interface gráfica (Desktop ou Mobile)
  • Dados oriundos de sistema terceiros que servem de entrada para o programa em teste (Ex: APIs);
  • Dados fornecidos por outro dispositivo;
  • Dados lidos de arquivos ou banco de dados;
  • O estado do sistema quando os dados são recebidos;
  • O ambiente no qual o programa está executando.

Conceitos de Teste de Software

Casos de Teste - Saída

  • Via interface gráfica (Desktop ou Mobile)
  • Outro sistema interagindo com o programa em teste;
  • Dados escritos em arquivos ou banco de dados;
  • O estado do sistema ou o ambiente de execução podem ser alterados durante a execução do programa.

Conceitos de Teste de Software

Casos de Teste - Oráculo

  • O oráculo corresponde a um mecanismo (programa, processo ou dados) que indica ao projetista de casos de testes se a saída obtida para ele é aceitável ou não.

Conceitos de Teste de Software

Casos de Teste - Oráculo

  • Tipos de oráculos segundo Beizer (1990) :
    • Oráculo “Kiddie” - simplesmente execute o programa e observe sua saída. Se ela parecer correta deve estar correta.
    • Conjunto de Teste de Regressão - compare a saída obtida com a saída produzida por uma versão mais antiga do programa.
    • Validação de Dados - compare a saída obtida com uma saída padrão determinada por uma tabela, fórmula ou outra definição aceitável de saída válida.
    • Conjunto de Teste Padrão - execute o programa com um conjunto de teste padrão que tenha sido previamente criado e validado. Utilizado na validação de compiladores, navegadores Web e processadores de SQL.
    • Programa existente - execute o programa em teste e o programa existente com o mesmo caso de teste e compare as saídas. Semelhante ao teste de regressão.

Conceitos de Teste de Software

Casos de Teste - Cascata

  1. Criar um registro "X"
  2. Ler um registro "X"
  3. Atualizar um registro "X"
  4. Ler um registro "X"
  5. Apagar um registro "X"
  6. Ler o registro apagado "X"

O que ocorre com o passo 2 senão for realizado o passo 1?

Conceitos de 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

Conceitos de Teste de Software

Conceitos de Teste de Software

Níveis ou Fases de Teste

Unidade

Integração

Sistema

Aceitação

Conceitos de Teste de Software

Níveis ou Fases de Teste

Por que testar o software em fases e não apenas como um todo?

Reduzir a complexidade

Aumentar o foco de atuação (Dividir e conquistar)

Conceitos de 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 do código ao lado está o bug?

Conceitos de 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?

Conceitos de Teste de Software

Teste de Integração

  • Problemas que o teste de integração pode auxiliar a identificar
    • Dados podem se perder na interface das unidades.
    • Variáveis globais podem sofrer alterações indesejadas.

O Objetivo é verificar se as unidades testadas individualmente se comunicam como desejado.

Conceitos de Teste de Software

Teste de Integração

Conceitos de 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

Conceitos de Teste de Software

Teste de Sistema e Aceitação

Conceitos de 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

Conceitos de Teste de Software

Técnicas de Teste

Baseado em requisito especificado

Conceitos de Teste de Software

Técnicas de Teste

Baseado na estrutura do programa implementado

Conceitos de Teste de Software

Técnicas de Teste

  • Um testador de caixa cinza conhece parcialmente a estrutura interna, o que inclui acesso à documentação das estruturas de dados internas, bem como aos algoritmos usados.
  • Caixa cinza lida com cenários de teste inteligentes, por exemplo, manipulação de tipo de dados, performance, segurança, protocolo de comunicação, manipulação de exceção

Conceitos de Teste de Software

Tipos de Teste

Para cada contexto compreender quais testes são interessantes aplicar.

Conceitos de Teste de Software

Tipos de Teste

Conceitos de Teste de Software

Tipos de Teste

Conceitos de Teste de Software

Tipos de Teste

Conceitos de 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.

Conceitos de Teste de Software

Processo de Teste de Software

Conceitos de Teste de Software

 

Modelos de Apoio ao Processo de Teste de Software

Conceitos de Teste de Software

 

Modelos de Apoio ao Processo de Teste de Software

Conceitos de Teste de Software

 

Modelos de Apoio ao Processo de Teste de Software

Exercício

Vamos montar 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 boleanoAtividade de 20 minutos.

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”

Testes sem critérios são testes sem direção

Critérios de Teste

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)

Conceitos de Teste de Software

Partição de Equivalência

  • Notas
    • Reduzir número de Casos de Teste e propõe boa cobertura de código
    • Empregado intuitivamente

Conceitos de Teste de Software

Partição de Equivalência

  • Considere o sistema de recursos humanos que processa pedidos de emprego com base na idade de uma pessoa e que possui as seguintes regras de negócio:
    • Pessoas menores de 16 anos não devem trabalhar
    • Pessoas entre 16 e 60 anos podem trabalha
    • Pessoas com mais de 60 anos não podem trabalhar
0 - 15 anos 16 - 59 anos 61 -  ∞ anos

Partição Válida

Partição Inválida

Partição Inválida

Conceitos de 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.

Conceitos de Teste de Software

Partição de Equivalência

  • Derive casos de teste para as classes válidas e inválidas conforme a imagem abaixo:

Válido

Inválido

Inválido

Conceitos de 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

Conceitos de Teste de Software

Análise do Valor Limite

0 - 15 anos 16 - 59 anos 61 -  ∞ anos

Inválido

Inválido

Válido

Conceitos de Teste de Software

Análise Valor Limite

  • Derive casos de teste para os limites válidos e inválidos conforme a imagem abaixo:

Válido

Inválido

Inválido

Conceitos de 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

Conceitos de 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)

Conceitos de 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

Conceitos de Teste de Software

Tabela de decisão

Exemplo de Requisito

  • Caso o cliente possua a conta há dois anos ou mais, e possua saldo superior a R$ 2000,00 o mesmo deve considerado Cliente VIP.
  • Caso o cliente possua a conta há dois anos ou mais, e possua saldo inferior a R$ 2000,00 o mesmo não deve considerado Cliente VIP.
  • Caso o cliente não possua a conta há dois anos ou mais, o mesmo não deve considerado Cliente VIP independentemente do valor em conta.

Conceitos de 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.

Conceitos de Teste de Software

Teste Unitário

Cada teste deve lidar apenas com

  1. Um cenário a ser testado (um “dado”)

  2. Um método para testar (um “quando”).

  3. Uma chamada para um método de verificação (um “então”).

Frameworks de Teste Unitário

Framework Unittest

Teste Unitário

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

Unittest - Criando template

Na IDE PyCharm basta criar um novo python file com unit test que já é oferecido o modelo abaixo:

Framework Unittest

  • O Unittest utiliza da orientação a objeto
  • Uma classe de teste do Unittest
  • Um caso de teste e um método dentro dessa classe com nome iniciado de "test".
  • É uma boa prática de escrita de casos de teste unitário, separar cada caso de teste em um método de teste.
  • Da mesma forma, deve-se agrupar em uma classe de teste, os casos de teste referentes a determinada classe e/ou método em teste, visando facilitar a localização dos testes.

Framework Unittest

  • 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.

Framework Unittest

  • 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.

Exercício Unittest

  • Complementando o exercício do programa Identifier implemente os testes para o método do módulo validators check_valid_identifier, utilizando o critérios de testes.

    • Vamos passar o testes para a o framework Unittest e executá-los, para isso clone o projeto abaixo:

git clone https://github.com/Vanilton18/xpto-exemplos-teste.git

Exercício Unittest

  • Vamos verificar nossa 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

Exercício Unittest

  • Vamos construir testes para os métodos:

    • check_email

    • check_keywords_python

    • check_password

    • check_age_for_work

  • As regras dos métodos estão descritas no docs dos métodos

    • Vamos passar os testes para a o framework Unittest e executá-los.

Aplicações Web

  • No nível de rede protocolos de comunicação viabilizam a comunicação entre clientes e servidores
  • Alguns deles são:
    • Transmission Control Protocol (TCP)
    • User Datagram Protocol (UDP)
    • Internet Protocol (IP)
    • Address Resolution Protocol (ARP)
    • Domain Name System (DNS) 

 

Aplicações Web

Aplicações Web

Aplicações Web

  • Andrews e Whittaker (2006) definem um modelo de falhas para aplicações web
  • Considerando a arquitetura da web e as transações entre cliente e servidor web, três componentes são identificados:
    • Computador servidor no qual o conteúdo da web  é armazenado
    • Computador cliente no qual o conteúdo  é servido
    • Rede de computador conectando cliente e servidor 

Modelo de falha

Aplicações Web

Modelo de falha

Cliente

Internet

Servidor

Aplicações Web

Modelo de falha - Servidor

Aplicações Web

Modelo de falha - Cliente

Aplicações Web

Modelo de falha - Cliente

  • Principais considerações no teste do cliente:
  • Um usuário malicioso pode adulterar todos os dados armazenados no cliente
    • Nunca se esqueça clientes web estão sobre controle total do usuário
    • Informações confidenciais, detalhes de implementação, dentre outras que passam pelo cliente são descobertas, não importa quanto se trabalhe para protegê-las 

Aplicações Web

Modelo de falha - Cliente

  • Todo tráfego do cliente deve ser validado e tratado como não confiável

    • A maior parte da interação cliente-servidor web é realizada via navegador, mas não há garantia disso

    • Nada impede o uso de um cliente personalizado ou adulteração do dado após o mesmo ter deixado o navegador

    • Todo tráfego do cliente deve ser validado 

Aplicações Web

Modelo de falha - Cliente

  • O usuário tem acesso a todo código fonte do lado cliente

  • Um usuário malicioso pode ver e antecipar todo código dados do lado cliente (HTML, JavaScript, TypeScript, Flash, etc)

  • Não armazene segredos no código fonte e tudo o que está no código fonte é sujeito a adulteração

Aplicações Web

Modelo de falha - Cliente

  • O usuário tem acesso a todo código fonte do lado cliente

  • Um usuário malicioso pode ver e antecipar todo código dados do lado cliente (HTML, JavaScript, TypeScript, Flash, etc)

  • Não armazene segredos no código fonte e tudo o que está no código fonte é sujeito a adulteração

  • O cliente pode descobri detalhes de implementação do servidor
    • Mensagens de erro do servidor podem ser reveladoras
    • É possível adivinhar estrutura de diretórios e localização de arquivos
    • Versões de software e banco de dados
    • Se você confia que o usuário não é capaz de determinar a configuração do servidor você está se enganando 

Aplicações Web

Modelo de falha - Rede

  • A rede  é um local caótico

    • HyperText Transfer Protocol over Security Sockets (HTTPS) é o mecanismo de transporte seguro da HTTP

      • Criptografa automaticamente o tráfego em uma conexão web

    • Mas o dado criptografado tem origem no cliente

    • Antes de ser criptografado ele pode ser adulterado 

    • Criptografia não é uma proteção real, exceto em prevenir o dado ser adulterado durante a transmissão 

Aplicações Web

  • Vamos burlar a passagem de fases via cliente.
    • Acesse: https://vanilton.net/v1/selenium/game
    • No navegador Chrome Inspecione a página (pode ser feito em outros navegadores também)
    • Acesse a Aba Application (Aplicação)
    • No menu esquerdo acesse o LocalStorage (vanilton.net)

Problemas em Testar Aplicações Web

  • Ambientes variados
  • Navegador
    • Softwares terceiros (Extensões dos navegadores)
    • Padronização entre navegadores
    • Performance de renderização
    • Consumo de recursos
    • Automatização pode ser limitada em alguns navegadores

 

Problemas em Testar Aplicações Web

  • Testes de Performance

Estratégias de Teste Web

 

Heurísticas, Exploratório, Performance, Funcional, Segurança

 

Estratégias de Teste Web

Heurísticas

"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"

Estratégias de Teste Web

Heurísticas

  • Heurísticas são utilizadas em Teste de usabilidade que é um mundo amplo e extremamente detalhista em sua avaliação. Portanto para  ter um feedback rápido do nível de usabilidade que possuímos em determinada aplicação ou interface podemos utilizar as heurísticas de Nielsen, que apesar de serem desenvolvidas a décadas ainda são um bom guia.
  • Essas heurísticas são os dez princípios gerais do design de interface do usuário, propostas por Jakob Nielsen em 1993.

Heurísticas de Nielsen

Heurísticas de Nielsen (1)

Manter o usuário informado do que está acontecendo no sistema.

Heurísticas de Nielsen (2)

Utilizar vocabulários, medidas ou processos familiares ao usuário.

Heurísticas de Nielsen (3)

Fornecer alternativas ao usuário e ”saídas de emergências”;

Ex:. Desfazer ou Refazer

 

Heurísticas de Nielsen (4)

Manter padrões de interação em diferentes contextos. Falar a mesma língua o tempo todo, e nunca identificar uma mesma ação com ícones ou labels diferentes.

Heurísticas de Nielsen (5)

 

Ações drásticas como deletar arquivos, devem ser bem sinalizadas. Além disso, ter sempre uma confirmação ou possibilidade de desfazer o que foi feito.

Heurísticas de Nielsen (6)

O usuário não é obrigado a reaprender o serviço toda vez que o acessa. Devemos evitar acionar a memória do usuário o tempo inteiro.

Heurísticas de Nielsen (7)

Forneça caminhos alternativos e customizáveis

Heurísticas de Nielsen (8)

Não usar desnecessariamente excessos de cores e elementos visuais que confundam o usuário. Dialogar de forma simples e direta, com um layout mais limpo, com diálogos naturais, de fácil entendimento e que apareçam em momentos necessários.

 

Heurísticas de Nielsen (9)

Prevenir um erro é algo de máxima importância, mas tão importante quanto, é ajudar o usuário a identificar e resolver os problemas que acabam sendo inevitáveis. Mensagens de erro claras, com textos simples e diretos, não intimidando o usuário e sim o conduzindo à possíveis soluções.

Heurísticas de Nielsen (10)

Uma interface intuitiva e clara evita a solicitação de ajuda em algumas situações. Mesmo assim devemos manter ao alcance do usuário, itens de auxílio para determinadas ações. Além disso, devemos manter ajudas fixas que podem ser acessadas à qualquer momento em caso de dúvidas. Um exemplo disso são os FAQs com as questões mais solicitadas.

Exercício Heurísticas

  • Utilizando o checklist de usabilidade realizem a avaliação de uma aplicação ou site na web, façam o levantamento de pontos positivos e negativos conforme as 10 heurísticas de Nielsen.
  • Utilizem o mural para organizar as heurísticas utilizadas e os itens avaliados

Estratégias de Teste Web

Teste Exploratório


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. Já está na hora de revertermos isso e reconhecermos publicamente a abordagem exploratória pelo o que ela é: pensamento científico em tempo real.”


Estratégias de Teste Web

Teste Exploratório

 

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

Estratégias de Teste Web

Teste Exploratório

  • Quando se quer ter um feedback rápido sobre um novo produto ou nova funcionalidade;

  • Quando se quer aprender um produto rapidamente;

  • Quando se quer buscar diversidade após executar os testes tradicionais;

Estratégias de Teste Web

Teste Exploratório

  • Quando se quer encontrar defeitos críticos rapidamente;
  • Quando se quer comparar e investigar de forma independente e rápida o trabalho de outro testador;
  • Quando se quer isolar e investigar um defeito;
  • Quando se quer investigar o status de um risco em particular, a fim de avaliar a necessidade de criação de testes tradicionais para mitigar o risco.

Estratégias de Teste Web

Teste Exploratório

Estratégias de Teste Web

Teste Exploratório - Charter

Estratégias de Teste Web

Teste Exploratório - Etapas

Estratégias de Teste Web

Teste Exploratório - Tour (Metáfora do Turista)

https://medium.com/@tiago.peng/exploratory-testing-tours-uma-excurs%C3%A3o-na-met%C3%A1fora-do-turista-b2ae41ec555

Tour Testing é uma abordagem estruturada para testes exploratórios, onde a exploração de um produto é organizada em torno de um tema específico

Estratégias de Teste Web

Teste Exploratório - Tour

Distrito Comercial

  • Guia turístico (seguir o manual)
  • 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)

Estratégias de Teste Web

Exercício Teste Exploratório

  • Utilizando a metáfora do turista no material de apoio escolha uma aplicação/site web e aplique ao menos um Distrito evidenciando possíveis defeitos/melhorias na aplicação.
  • Observações:
    • Procure evidenciar o que foi identificado com anotações, imagens para facilitar a reprodução.

Estratégias de Teste Web

Teste Exploratório x Ad-hoc

Estratégias de Teste Web

Teste de Performance

Forma pela qual é avaliado o tempo de resposta dada uma quantidade específica de usuários simultâneos.

Estratégias de Teste Web

Teste de Performance

  • Resumindo o teste de performance busca Identificar gargalos (bottleneck)
  • Garantir um tempo de resposta dentro de padrões aceitáveis para evitar o abandono do site ou aplicação em função de tempos de resposta inaceitáveis (perda de receita);
  • Evitar o fracasso dos projetos em virtude de problemas de performance e escalabilidade (imagem e credibilidade da empresa);
  • Garantir os investimentos de TI por meio da previsão da escalabilidade e performance da aplicação (pouco ou muito investimento em infra- estrutura);

Teste de Performance

Estratégias de Teste Web

Teste de Performance

Estratégias de Teste Web

Teste de Performance - Jmeter

Ferramenta Open Source que possibilita criarmos testes de performance e funcional

Estratégias de Teste Web

Teste de Performance - Execução

  • Plano de Teste
  • Usuários Virtuais
  • Requisições HTTP
  • Assertivas
  • Ouvintes

Estratégias de Teste Web

Teste de Performance - Avaliando Resultados

  • Média
    • A média de um conjunto de valores numéricos é calculada somando-se todos estes valores e dividindo-se o resultado pelo número de elementos somados.
  • Mediana
    • Em termos mais simples, mediana pode ser o valor do meio de um conjunto de dados. No conjunto de dados {1, 3, 3, 6, 7, 8, 9}, por exemplo, a mediana é 6.
    • Senão houver um número ímpar de observações, Então, a mediana é definida como a média dos dois valores do meio. 
  • Percentil
    • é uma medida utilizada para dividir uma amostra de valores, ordenados de forma crescente, em cem partes.
    • Conjunto de valores desordenados {1, 4, 4, 2, 1, 7,8, 1, 2, 3}
    • Conjunto de valores ordenados {1, 1, 1, 2, 2, 3, 4, 4, 7, 8
    • Neste caso, o percentil que desejamos observar é o 90º, que em nossa amostra é o 9º valor, ou seja, 7.}

Estratégias de Teste Web

Exemplos  - API Rest

Estratégias de Teste Web

Exemplo  - Consumindo API Rest – Json Placeholder

Estratégias de Teste Web

Exercício Teste de Performance

  • Criar um projeto com Jmeter e avaliar a performance de acesso a página http://fpftech.com

  • Simular o uso de 5, 100 e 1000 usuários simultâneos.

  • Criar assertiva para avaliar se as requisições atingiram um tempo esperado de 2 segundo para carregamento da página.

  • Criar um assertiva para o status code 200.

  • Salvar um Response Time Graph com intervalo de 100 ms

Estratégias de Teste Web

Teste Funcional - Automatizado

  • Os testes funcionais automatizados tem objetivo principal de reduzir esforço em testes manuais.
  • Normalmente é desenvolvido por especialistas em teste.
  • Deve obrigatoriamente ser implementado através de alguma ferramenta que simule as operações do usuário 

Estratégias de Teste Web

Teste Funcional - Automatizado

Estratégias de Teste Web

Teste Funcional - Automatizado

Estratégias de Teste Web

Teste de Segurança

  • A realização do Testes de Segurança em aplicações Web diminui a probabilidade de um software com falhas críticas de segurança

Estratégias de Teste Web

Teste de Segurança - Centro de Resposta a Incidentes de Segurança no Brasil

Estratégias de Teste Web

Teste de Segurança - Centro de Resposta a Incidentes de Segurança no Brasil

Estratégias de Teste Web

Teste de Segurança - Centro de Resposta a Incidentes de Segurança no Brasil

Estratégias de Teste Web

Teste de Segurança - OWASP

O Open Web Application Security Project® (OWASP) é uma fundação sem fins lucrativos que trabalha para melhorar a segurança do software. Por meio de projetos de software de código aberto liderados pela comunidade, centenas de capítulos locais em todo o mundo, dezenas de milhares de membros e importantes conferências educacionais e de treinamento, a OWASP Foundation é a fonte para desenvolvedores e tecnólogos protegerem a web.

Estratégias de Teste Web

Teste de Segurança - OWASP 2021

  • 01 - Controle de acesso quebrado
    • Falhas em funções de autenticação ou gerenciamento de sessão para assumir a identidade de outro usuário.
  • Cenários:
    • Contas expostas.
    • Senhas fracas;
    • ID de sessão são capturados.
  • Impacto:
    • Contas são atacadas;
    • Alvos frequentes são contas privilegiadas

Estratégias de Teste Web

Teste de Segurança - OWASP 2021

  • 01 - Controle de acesso quebrado
    • Exemplo

      • Força Bruta de Login

        • Se a aplicação permite que um atacante faça várias tentativas de login com senhas diferentes, ele conseguirá realizar o login com sucesso em algum momento.

Estratégias de Teste Web

Teste de Segurança - OWASP 2021

  • 02 - Falhas criptográficas 
    • A falha mais comum é simplesmente não criptografar dados sensíveis.

      • Impacto

        • Fraudes no cartão de crédito;

        • Roubo de identidade;

        • Ganho de privilégios

Estratégias de Teste Web

Teste de Segurança - OWASP 2021

  • 02 - Falhas criptográficas 
    • Geralmente leva à exposição de dados confidenciais ou ao comprometimento do sistema.

    • A falha mais comum é simplesmente não criptografar dados sensíveis.

    • Impacto

      • Ganho de privilégios

      • Roubo de identidade;

      • Fraudes no cartão de crédito;

Estratégias de Teste Web

Teste de Segurança - OWASP 2021

  • 03 - Injeção
    • Ataques:

      • SQL Injection: comandos SQL

      • Outros: Command Injection, LDAP, XML, etc

      • Cross-site Scripting

    • Impacto:

      • Criar, ler, atualizar ou excluir qualquer dado disponível para a aplicação através de SQL.

      • Ganhar acesso a recursos restritos de S.O e rede.

      • Conectar-se a sistemas como se fosse um usuário autorizado. 

      • Desfigurar web sites, inserir conteúdo hostil

      • Redirecionar usuários

Estratégias de Teste Web

Teste de Segurança - OWASP 2021

  • 04 - Design Inseguro
    • Padrões e princípios de design seguros e arquiteturas de referência

      • Ataques:

        • Alterar parâmetros aplicação web via URL do browser, campo da aplicação ou prompt.

      • Impacto:

        • Quebra de limites e restrições a arquivos, diretórios, banco de dados, etc. Exemplo:

          Acessar conta de um usuário alterando um ID.

Estratégias de Teste Web

Teste de Segurança - OWASP 2021

  • 05 - Configuração incorreta de Segurança
    • Refere-se à configurações de segurança incorretas ou não implementadas, isso inclui manter atualizados software e suas partes.

      • Cenários:

        • Páginas não utilizadas (ou ocultas);

        • Falhas não corrigidas;

        • Diretórios não protegidos

      • Ataque

        • Exemplo de dork 

          • site:.net "intitle:Index of /"

Estratégias de Teste Web

Teste de Segurança - OWASP 2021

Estratégias de Teste Web

Teste de Segurança - Pen Test

  • Para realizar pen test o primeiro passo é termos as ferramentas. Vamos utilizar o KaliLinux para isso, para não instalar um sistema operacional completo podemos utilizar o docker seguindo os passos abaixo

# Baixar a imagem
docker pull kalilinux/kali-rolling

# Executar o container

docker run -t -i kalilinux/kali-rolling /bin/bash

# Já no terminal do container instalar os pacotes das ferramentas

apt update && apt -y install kali-linux-headless

# Caso seja perguntado alguns itens responder com (yes)

Estratégias de Teste Web

Teste de Segurança - Pen Test

  • Próximo passo é ​coletar informações do alvo
# Com o container em execução utilizar o shell com o seguinte comando: whois <site>
whois fpf.br
whois desentupidorarolabosta.com.br

Conseguimos identificar alguma informação sensível?

Estratégias de Teste Web

Teste de Segurança - Pen Test

Estratégias de Teste Web

Teste de Segurança - Pen Test

  • Mapear rede e serviços disponíveis
    • nmap (Varredura de rede)
      • nmap vanilton.net
    • dirb (mapear pastas e arquivos)
      • dirb fpftech.com
      • Observaçào
        • Faça com paciência pois costuma demorar

Estratégias de Teste Web

Teste de Segurança - Pen Test

  • Obtenção de acesso e escalabilidade de permissão e busca por vulnerabilidades

  • Exploração da vulnerabilidade

  • Evidenciar vulnerabilidades e reportar

Estratégias de Teste Web

Teste de Segurança - Pen Test

  • Prática

    • Escolha um site para aplicar as primeiras etapas do Pen Test

      • Coletar informações do alvo

      • Mapear rede e serviços disponíveis

    • Crie um relatório simples com:

      • DNS e IP

      • Local de hospedagem do serviço

      • Possíveis pastas e arquivos abertos

      • Informações do responsável pelo site e-mail, rede social, telefone de contato, endereço e etc

Aplicações Mobile (Android)

Android

  • O Android é uma pilha de software com base em Linux de código aberto criada para diversos dispositivos e fatores. O diagrama a seguir mostra a maioria dos componentes da plataforma Android.

Aplicações Mobile (Android)

Tipos de aplicações e suas vantagens e desvantagens

 

Nativas

  • São desenvolvidas especificamente para uma plataforma móvel/sistema operacional (iOS, Android).
  • Desta forma ela pode utilizar recursos específicos do dispositivo móvel como câmera, GPS, acelerômetro, gestos, etc...
  • Comumente referenciamos aplicações nativas como “Mobile Apps”. Hoje a maioria das aplicações que instalamos são nativas.

Aplicações Mobile (Android)

Nativas

  • Prós
    • Muitas otimizações referente ao design
    • Utilização de recursos de hardware e sistema operacional muito otimizado (melhor desempenho)
  • Contras
    • Desenvolvimento pode ser complexo
    • Manutenção pode ser complexa
    • Dificuldade de distribuição entre diferentes versões de sistema operacional
    • Pode haver limitações de hardware entre dispositivos

Aplicações Mobile (Android)

Web

  • São sites, que estão em algum servidor remoto, onde são acessados através de um URL no web browser do dispositivo.
  • Elas trazem uma interface parecidas com uma aplicação real e estão mais populares após o lançamento do HTLM5.
  • A utilização é a mesma que em um browser real e a “instalação é feita através da adição da página como bookmark na tela do dispositivo.

Aplicações Mobile (Android)

Web

  • Prós
    • Experiência em desenvolvimento web é utilizado
    • Desenvolvimento mais barato
    • Atualizações frequentes e rápidas
    • Diversas possibilidades de funções com HTML5, CSS e JavaScript
  • Contras
    • Sempre executada em um browser no dispositivo móvel
    • Geralmente possui menos funcionalidades que a app nativa
    • Limitações no uso off-line

Aplicações Mobile (Android)

Híbridas

  • São como aplicações nativas, executam no dispositivos mas são desenvolvidas com tecnologias web (HTML5, CSS e JavaScript).
  • Executam através de um container web nativo do dispositivo/ sistema operacional móvel, mas não é o browser.
  • Assim possibilita o acesso a funcionalidades internas do dispositivos (câmera, GPS, gestos, etc...).
  • O Desenvolvimento de uma aplicação híbrida geralmente é propagada entre diversos sistemas operacionais, sendo um único desenvolvimento para diversas distribuições.

Aplicações Mobile (Android)

Híbridas

  • Prós
    • Combina as vantagens da aplicação web com desenvolvimento nativo
    • Requer desenvolvimento misto entre web e nativo
  • Contras
    • Performance comprometida (quanto ao conteúdo web off-line)
    • Sem atualizações frequentes (no caso de conteúdo off-line) 

Aplicações Mobile (Android)

Desafios em testar aplicações mobile

Aplicações Mobile (Android)

  • Muitas versões Android
  • Variações de marcas e Hardware
  • Tamanhos de tela variados

Desafios em testar aplicações mobile

Aplicações Mobile (Android)

Tipos de Teste

Aplicações Mobile (Android)

Compatibilidade

  • Significa tudo que é referente ao dispositivo em si.

    • Diferentes dispositivo

    • Tamanho da tela

    • Versões do SO

    • Resolução

Interface

  • Significa tudo referente a interação com a tela da

    aplicação

    • Validação de cada tela, botão, caixa de texto

    • Fluxos de navegação

Tipos de Teste

Aplicações Mobile (Android)

Serviço

  • Significa tudo referente comunicação da aplicação com o

    servidor.

    • Verifica a comunicação entre os serviços (REST, WebServices)

    • Tempo de resposta

    • Retorno de informações ao usuário

    • Se é possível retransmitir os dados quando não conectado ou em queda da comunicação

Tipos de Teste

Aplicações Mobile (Android)

Recursos indisponíveis

  • Significa tudo referente a limitação de recursos.

    • Sem ou com pouca memória para a aplicação

    • Sem ou com pouco espaço em disco (cartão ou dispositivo)

    • Processamento alto

    • Geração de arquivos temporários muito grande

Tipos de Teste

Aplicações Mobile (Android)

Performance/Conectividade

  • Significa tudo referente ao tempo de resposta da aplicação.

    • Teste com redes Wi-Fi, 5G, 4G, 3G, 2G, GPRS

    • Troca ou envio de arquivos internos para um servidor ou aplicação

    • Consumo de bateria

    • Tempo de resposta das ações

    • Utilização de recursos (Câmera, GPS, etc...)

Tipos de Teste

Aplicações Mobile (Android)

Operacional

  • Significa tudo referente capacidade da aplicação sobre recursos e restrições.
    • Backup/retenção temporária de informações em caso de perda de conectividade
    • Upgrade de versão
    • Desligamento do telefone (sem bateria)
    • Acesso a recursos internos (câmera, alarme, lembretes, etc...) 

Tipos de Teste

Aplicações Mobile (Android)

Segurança

  • Significa tudo referente segurança e tráfego de informações.
    • Técnicas de criptografia no envio de dados (cifrar/decifrar)
    • Suporte multi-usuário
    • Arquivos salvos no dispositivo
    • Pontos onde pode-se submeter conteúdo malicioso 

Aplicações Mobile (Android)

# Instalar app
adb install "path_to_file_.apk"

# Ver logs do Android completo
adb logcat 

# Ver logs de um app específico
adb logcat -e "app package name"

# Desinstalar app
adb uninstall "app package name"

# Listando devices conectados
adb devices

Utilizando ADB

  • Referências
  • Referências
  • Referências

Essencial

Teste de Software

Vanilton Pinheiro

vanilton.net

Muito obrigado 🤙

Teste de Software - Essencial

By Vanilton Pinheiro

Teste de Software - Essencial

Introducing Auto-Animate: an all new way to create stunning animations in Slides! Learn all about it and view some examples in this deck. (Currently in public beta—let us know if you have any feedback.)

  • 210