1. Introdução
-
Introdução:
-
Verificação e validação
-
Qualidade de Software
-
Os princípios básicos do teste de software
-
Atividades relacionadas a testes
-
Por que testamos
-
Quem deve testar
-
Quanto devemos testar
-
Quando parar de testar
-
Terminologia em Teste de Software
-
Limitações do teste
-
Resumo
2. Testes de entradas
Testes baseados nas interfaces e funcionalidade - black box testing
- Introdução ao Teste de Classe de Equivalência (ECT)
- Finalidade e objetivos da ECT:
- Reduza a redundância de testes evitando testes desnecessários.
- Identifique falhas específicas do domínio usando o conhecimento do domínio.
- Finalidade e objetivos da ECT:
- Conceitos e Princípios da ECT
- Definição de Teste de Classe de Equivalência.
- Uso do conhecimento do domínio para criar testes de caixa preta significativos.
- Princípios Operacionais da ECT
- Particionar o domínio de entrada em classes de equivalência.
- Selecionar um representante de cada classe de equivalência para teste.
- Explicação de como as classes de equivalência reduzem o número de testes necessários agrupando respostas semelhantes.
- Exemplos de ECT
- Exemplo de sistema de classificação:
- Partição para notas que resultam em APROVAÇÃO ou REPROVAÇÃO.
- Consideração de classes válidas e inválidas para testes de robustez.
- Exemplo de classificação de triângulo:
- Identificação de partições de entrada válidas e inválidas para comprimentos laterais.
- Classes de equivalência para tipos de triângulos (por exemplo, equilátero, isósceles).
- Exemplo de múltiplas partições:
- Consideração de múltiplas variáveis de entrada e suas partições.
- Exemplo com dimensões de idade e gênero.
- Exemplo de sistema de classificação:
- Tipos de testes de classe de equivalência
- Normal (apenas positivo) e Robusto (positivo e negativo).
- Modelo de suposição de falha única versus modelo sem falha única.
- Teste Normal Fraco e Normal Forte.
- Testes Robustos Fracos e Robustos Fortes.
- Conceitos Avançados em ECT
- Discussão sobre a identificação criativa de classes de equivalência.
- Técnicas de identificação de partições e entradas.
- Dependências de partição e seu impacto na validade dos casos de teste.
- Outros critérios e técnicas em ECT
- Discussão de vários critérios de teste além dos testes básicos de classe de equivalência:
- Combinações em pares.
- Combinações T-wise.
- Escolha básica e múltiplas escolhas básicas.
- Discussão de vários critérios de teste além dos testes básicos de classe de equivalência:
- Particionando além dos valores de entrada
- Aplicação de particionamento a saídas e estados internos.
- Importância de selecionar partições apropriadas para melhorar a qualidade do teste.
- Análise de valor limite (BVA) aplicada a classes de equivalência
- Explicação de como o BVA pode ser integrado ao ECT.
- Discussão das abordagens de 2 e 3 valores para seleção de valores limite.
- Exemplos de aplicações do mundo real
- Exemplo de cálculo do índice de massa corporal (IMC):
- Discussão sobre partições de entrada e saída.
- Aplicação do BVA aos cálculos do IMC.
Outline of “Black Box Testing - Decision Tables and Transition”
-
Introdução às Tabelas de Decisão - Definição e papel na modelagem de comportamentos complexos em programas. - Explicação de como os casos de teste podem ser derivados de tabelas de decisão. - Estrutura de tabelas de decisão, destacando a relação entre condições e ações através de diferentes regras.
-
Teste de Transição de Estado - Visão geral dos testes de transição de estado usando máquinas de estado para descrever o comportamento do sistema. - Discussão sobre a dependência do comportamento do sistema em relação às entradas atuais e passadas. - Diferentes representações de máquinas de estado: - Representação Gráfica - Tabela de transição de estado - Tabela completa de transição de estado
-
Conceito N-Switches - Explicação dos N-Switches como sequências de estados com exatamente N estados entre o primeiro e o último estado. - Exemplos de vários cenários N-Switch (0-switch, 1-switch, 2-switch) para ilustrar o conceito.
-
Critérios Clássicos de Cobertura - Introdução aos critérios tradicionais de cobertura de transição de estado definidos pelo ITSQB: - Cobertura de Estados: Garantir que todos os estados sejam visitados pelo menos uma vez. - Cobertura de Transição (cobertura de switch 0): Garantir que todas as transições sejam exercidas pelo menos uma vez. - Cobertura de N-switches: Garantir que todos os N-switches (e todos os m-switches para m<n) sejam percorridos pelo menos uma vez. - Cobertura de transição inválida: Teste que tenta todas as transições inválidas pelo menos uma vez.
-
Exame detalhado dos tipos de cobertura - Exploração da cobertura de 1 switch, identificando sistematicamente todos os switches 1, começando por todos os switches 0 e expandindo cada uma das possíveis transições. - Discussão sobre metodologias para documentar e expandir opções para alcançar uma cobertura abrangente de testes.
-
Aplicação de técnicas de teste - Aplicação prática de tabelas de decisão e testes de transição de estado na derivação e refinamento de casos de teste. - Estratégias para integrar estes métodos numa estrutura de testes mais ampla para melhorar a detecção de defeitos e a validação do sistema.
3. Testes baseados em Grafos
Critérios de cobertura baseados em grafos - Casos de teste aplicados a código fonte
- Descobrindo grafos
- Introdução ao uso de grafos em testes, destacando suas fontes e aplicações.
- Importância dos grafos de cobertura para modelar comportamentos complexos de software.
- Noções básicas de teoria de grafos
- Definição de um grafo: Nós (vértices), nós iniciais e finais, arestas.
- Exemplos de três tipos de grafos para ilustrar estes conceitos.
- Caminhos em grafos
- Definições relacionadas com caminhos, incluindo comprimento do caminho, subcaminhos e acessibilidade.
- Conceito de caminhos de teste: Caminhos de um nó inicial para um nó final que representam a execução de casos de teste.
- Requisitos de teste de grafos e critérios de cobertura
- Como usar grafos para derivar modelos de teste e definir requisitos de teste.
- Descrição de Requisitos de Teste (TR) e Critério de Teste (C).
- Discussão sobre a satisfação dos requisitos de teste através de caminhos de teste que satisfaçam os critérios definidos.
- Cobertura de nós e de arestas
- Introdução aos critérios básicos de cobertura com foco na cobertura de nós e bordas.
- Distinção entre cobertura de nós (NC) e cobertura de arestas (EC), incluindo as suas implicações nos testes de grafos.
- Cobertura de várias arestas
- Cobertura de pares de arestas: Cobertura que requer o teste de pares de arestas ou subcaminhos até ao comprimento 2.
- Expansão para cobertura de caminho completo e cobertura de caminho especificado, discutindo os desafios com caminhos infinitos em loops.
- Critérios de cobertura estrutural e de fluxo de dados
- Diferenciação entre critérios de cobertura estrutural (baseados em nós e arestas) e critérios de cobertura de fluxo de dados (envolvendo o uso de variáveis).
- Vias principais e cobertura de vias
- Definição de caminhos simples e principais.
- Introdução à Cobertura de Caminhos Principais (PPC), que requer a cobertura de todos os caminhos principais dentro do grafo.
- Percurso, viagens secundárias e desvios em grafos
- Definições de percorrer um caminho, incluindo com sidetrips e desvios, para cumprir diferentes requisitos de teste.
- Discussão sobre a viabilidade de caminhos de teste e tratamento de requisitos de teste inviáveis.
- Fontes de grafos e aplicações
- Visão geral de diferentes fontes das quais os gráficos podem ser extraídos para fins de teste, como código-fonte, máquinas de estado e casos de uso.
- Exemplos específicos de como os gráficos são utilizados em diferentes cenários de teste, como cobertura de código fonte, diagramas de atividade e gráficos de fluxo de controlo.
- Exemplos práticos e aplicações
- Exemplos detalhados de aplicações do mundo real, destacando como os testes baseados em gráficos são implementados nos processos de desenvolvimento e teste de software.
Cobertura de gráficos para código-fonte
- Cobertura de gráficos para código-fonte
- Introdução ao conceito de cobertura gráfica aplicado ao código-fonte do programa, usando gráficos de fluxo de controle (CFGs) para analisar caminhos de código.
- Gráficos de fluxo de controle (CFGs)
- Explicação dos CFGs como um modelo para todas as execuções possíveis de um método, destacando nós, bordas e blocos básicos.
- Exemplos específicos de CFGs para diferentes estruturas de controle:
- declarações `if
- declarações `if-return
- loops
whilee `for - instruções
switch(case)
- Tipos de cobertura
- Cobertura de nós: Garantir que todas as instruções do CFG sejam executadas.
- Cobertura de borda: Garantir que cada ramificação (caminho de controle entre os nós) seja executada.
- Loops: Considerações de cobertura para estruturas de looping, incluindo a adição de nós extras para lidar com a inicialização e a incrementação do loop.
- Cobertura de fluxo de dados: Aumentar o CFG para incluir definições (defs) e usos de variáveis para garantir que os valores das variáveis sejam testados corretamente em todo o fluxo do programa.
- Exemplos de gráficos de fluxo de controle
- Exemplos práticos de CFGs em construções de programação, ilustrando como diferentes caminhos através de um método são analisados.
- Os exemplos incluem a construção de CFGs para métodos que calculam propriedades estatísticas, como média, mediana, variância e desvio padrão de uma lista de números.
- Requisitos de teste de fluxo de controle (TRs) e caminhos de teste
- Explicação dos requisitos de teste para atingir os critérios de cobertura especificados, incluindo cobertura de borda, cobertura de par de bordas e cobertura de caminho principal.
- Listagem e explicação dos caminhos de teste que satisfazem esses critérios de cobertura, fornecendo cenários de teste abrangentes para diferentes caminhos de código.
Dataflow Criteria
- Introdução aos critérios de cobertura de gráficos
- Visão geral da cobertura de gráficos para código-fonte.
- Importância da cobertura de gráficos nos testes e na qualidade do software.
- Critérios de fluxo de dados
- Definição de termos:
- def: Um local onde um valor para uma variável é armazenado.
- Uso: Um local em que o valor de uma variável é acessado.
- Explicação de def (n) e use (n) para nós e bordas.
- Objetivos do teste de fluxo de dados para garantir que os valores sejam computados e usados corretamente.
- Definição de termos:
- Pares de DU e caminhos de DU
- Definição de par de DU e caminho de DU.
- Explicação de caminhos claros e sua importância nos testes.
- Conceito de acessibilidade no teste de fluxo de dados.
- Critérios de teste de fluxo de dados
- Cobertura de todas as definições (ADC)**: Garantir que todas as definições de uma variável cheguem a um uso.
- Cobertura de todos os usos (AUC): Cobrir todos os usos de cada definição.
- Cobertura de todos os caminhos duplos (ADUPC)**: Cobrir todos os caminhos possíveis entre definições e usos.
- Exemplo de teste de fluxo de dados
- Aplicação de critérios de fluxo de dados ao código de exemplo.
- Visualização e análise de pares definição-uso em gráficos de fluxo de controle.
- Subsunção de critérios de cobertura de gráficos
- Relações entre diferentes critérios de cobertura:
- Cobertura de nós (NC)
- Cobertura de borda (EC)
- Cobertura de pares de bordas (EPC)
- Cobertura do caminho principal (PPC)
- Cobertura de caminho completo (CPC)
- Cobertura de todos os caminhos-DU (ADUP)
- Cobertura de todos os usos (AUC)
- Cobertura de todos os defesos (ADC)
- Relações entre diferentes critérios de cobertura:
- Cobertura de fluxo de dados para fonte
- Definições e usos em diferentes contextos de programação.
- Explicação detalhada de como as definições e os usos afetam os testes de software.
- Exemplo de fluxo de dados - computação estatística
- Exemplo detalhado do fluxo de dados em uma função que calcula métricas estatísticas como média, mediana, variância e desvio padrão.
- Gráfico de fluxo de controle para computação estatística
- Representação do gráfico de fluxo de controle com definições e usos anotados.
- Análise detalhada de como os dados fluem por diferentes caminhos de controle.
- Tabelas de definições e usos para computação estatística
- Tabulação de definições e usos em diferentes nós e bordas no CFG.
- Análise de como diferentes variáveis interagem em vários caminhos de controle.
- Pares e caminhos de DU para computação estatística
- Listagem detalhada de pares e caminhos de UDs.
- Exame de como as definições e os usos se vinculam para formar caminhos que devem ser testados.
4. Testes lógicos
-
- Explicação do termo “Cobertura Lógica”.
- Referência ao trabalho de Ammann & Offutt, especialmente aos capítulos 3.1 a 3.6 de “Introduction to Software Testing”.
-
Estruturas lógicas na modelagem de software
- Discussão sobre diferentes estruturas para modelagem de software: Gráficos, lógica, espaço de entrada e sintaxe.
- Aplicação dessas estruturas a vários aspectos, como casos de uso, especificações (Specs), design e código-fonte.
-
- Importância de abranger expressões lógicas, conforme exigido por órgãos reguladores como a Administração Federal de Aviação dos EUA.
- Várias fontes de expressões lógicas: Decisões de programa, máquinas de estado finito (FSMs), requisitos e testes.
-
Predicados e cláusulas lógicas
- Definição e características de predicados e cláusulas.
- Explicação dos operadores lógicos (booleanos).
-
- Discussão detalhada de diferentes critérios de cobertura:
- Cobertura de predicado (PC)
- Cobertura de cláusulas (CC)
- Cobertura Combinatória (CoC)
- Cobertura de cláusula ativa (ACC), incluindo variações como ACC geral, ACC restrito e ACC correlacionado.
- Cobertura de cláusula inativa (ICC), incluindo ICC geral e restrita.
- Discussão detalhada de diferentes critérios de cobertura:
-
- Exemplos práticos de aplicação de critérios de cobertura a predicados específicos.
- Destaque de problemas e soluções comuns na aplicação desses critérios.
-
Problemas com as práticas atuais de cobertura
- Discussão sobre as limitações da cobertura de predicados (PC) e da cobertura de cláusulas (CC).
- Introdução a métodos mais robustos, como a Cobertura Combinatória.
-
Tópicos avançados em cobertura lógica
- Determinação de predicados e a importância de tornar as cláusulas ativas.
- Discussões sobre as diferenças sutis entre os diferentes critérios de cobertura e suas implicações práticas.
-
Cobertura lógica baseada em especificações
- Aplicação da cobertura lógica às especificações, tanto formais quanto informais.
- Exemplos de como as especificações podem incluir expressões lógicas.
-
Expressões lógicas a partir da fonte
- Exploração de como as expressões lógicas são derivadas do código-fonte.
- Desafios relacionados à acessibilidade e à controlabilidade nos testes.
-
- Resumo dos principais pontos discutidos nos slides.
- Observações finais sobre a importância da cobertura lógica em testes de software e garantia de qualidade.
5. Testes baseados na sintaxe
- Testes de mutação
6. Considerações Práticas
- SQA nas organizações e normas