Vanilton Pinheiro
Introdução
Qual barriga tem mais utilidade?
Introdução
Piscina ou igarapé?
Introdução
Qual site tem mais qualidade?
Fonte: https://web.archive.org/
Fonte: https://fpftech.com
Introdução
O que poderia melhorar nesse site?
Fonte: https://web.archive.org/
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
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
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
Estamos construindo certo o produto?
Estamos construindo o produto certo?
Requisitos
Expectativas
Conceitos de 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)
Conceitos de Teste de Software
Níveis de maturidade de teste (Beizer, 1990)
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
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:
Terminologia
Conceitos chaves segundo Ammann e Offutt (2008) para um bom teste
Quais foram os maiores problemas que vocês já enfrentaram testando?
Conceitos de Teste de Software
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:
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:
Conceitos de Teste de Software
Casos de Teste - Entradas
Conceitos de Teste de Software
Casos de Teste - Saída
Conceitos de Teste de Software
Casos de Teste - Oráculo
Conceitos de Teste de Software
Casos de Teste - Oráculo
Conceitos de Teste de Software
Casos de Teste - Cascata
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
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
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 boleano. Atividade 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
Conceitos de 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
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
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
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
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”).
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
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
Aplicações Web
Aplicações Web
Aplicações Web
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
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
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
Problemas em Testar Aplicações Web
Problemas em Testar Aplicações Web
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
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
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
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
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
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
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
Estratégias de Teste Web
Teste de Performance - Avaliando Resultados
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
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
Estratégias de Teste Web
Teste de Segurança - Centro de Resposta a Incidentes de Segurança no Brasil
Fonte: https://www.cert.br/
Estratégias de Teste Web
Teste de Segurança - Centro de Resposta a Incidentes de Segurança no Brasil
Fonte: https://www.cert.br/
Estratégias de Teste Web
Teste de Segurança - Centro de Resposta a Incidentes de Segurança no Brasil
Fonte: https://www.cert.br/
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
Estratégias de Teste Web
Teste de Segurança - OWASP 2021
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
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
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
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
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
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
# 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
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
Aplicações Mobile (Android)
Tipos de aplicações e suas vantagens e desvantagens
Nativas
Aplicações Mobile (Android)
Nativas
Aplicações Mobile (Android)
Web
Aplicações Mobile (Android)
Web
Aplicações Mobile (Android)
Híbridas
Aplicações Mobile (Android)
Híbridas
Aplicações Mobile (Android)
Desafios em testar aplicações mobile
Aplicações Mobile (Android)
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
Tipos de Teste
Aplicações Mobile (Android)
Segurança
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
Vanilton Pinheiro
Muito obrigado 🤙