1. Introdução

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.
  • 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.
  • 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.
  • 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 while e `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.
  • 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)
  • 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

  • Introdução à cobertura lógica

    • 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.
  • Abrangendo expressões lógicas

    • 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).
  • Critérios de cobertura lógica

    • 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.
  • Exemplos e aplicações

    • 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 e considerações finais

    • 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