Fundamentos do Teste

Resumo CTFL 4.0

27/08/24 - Ana Carolina Rodrigues Rocha

Este conteúdo é um resumo do capítulo 1 do syllabus 4.0 para Certified Tester Foundation Level - CTFL , presente no quadro do ISTQB. Este resumo é baseado na versão brasileira fornecida pelo BSTQB. É muito importante que você veja o significado linkado nas palavras-chave descritas, pois serão utilizadas durante todo o syllabus.
Você poderá revisar este conteúdo com base nos flashcards que criei no Brainscape.
Quaisquer erros ou incoerências que encontrar aqui, por favor entre em contato comigo pelo e-mail do rodapé. Bons estudos ;) .

Objetivos:

  • Aprender os princípios básicos dos testes, motivos pelos quais os testes são necessários e quais os objetivos do teste.
  • Compreender o processo de teste, as principais atividades de teste e o testware.
  • Habilidades essenciais para realização de testes.

É o conjunto de atividades que visam avaliar a qualidade, encontrar defeitos e consequentemente reduzir riscos e falhas de um artefato de software ou outro produto de trabalho que esteja sendo testado.

Envolve verificação (verifica se o sistema atende aos requisitos especificados) e validação (validar se o sistema atende as necessidades do usuários e outros stakeholders).

As atividades podem ser de testes estáticos (revisão e análise) e testes dinâmicos (execução do software). Utilizando diferentes técnicas e abordagens de teste para gerar casos de teste.

O teste precisa ser Planejado, gerenciado, estimado, monitorado e controlado.

Produto de trabalho: É o item que está sendo avaliado pelas atividade de teste. Ex.: funcionalidade que foi implementada, história de usuário, etc.

Os objetivos típicos do teste são:

  • Avaliar produtos de trabalho.
  • Identificar falhas e defeitos.
  • Garantir a cobertura.
  • Reduzir riscos.
  • Verificar os requisitos e se foram atendidos.
  • Verificar os requisitos contratuais, legais e normativos.
  • Fornecer informações aos stakeholders.
  • Criar confiança na qualidade.
  • Validar o objeto de teste.

O Teste aciona e identifica falhas e defeitos no produto de trabalho. Analisa seus impactos e pode ser realizado em qualquer fase do ciclo de vida do software.

A Depuração visa encontrar e eliminar as falhas detectadas durante os testes. Seguindo os seguintes passos de acordo com o tipo de teste realizado:
Após o teste dinâmico: Reproduzir a falha → encontrar a causa → corrigir a causa.
Após o teste estático: corrigir a causa.

Após seguir esses passos é realizado o teste de confirmação, para verificar a correção, e o teste de regressão, para verificar se não há efeitos colaterais em outras partes do software que utilizam a funcionalidade alterada.

O teste é uma forma de controle de qualidade que ajuda a atingir os objetivos do projeto dentro do escopo, tempo, restrições e qualidade estabelecidas. Stakeholders também podem contruibuir para o sucesso dos testes e a atingir os objetivos, não se restringindo apenas a equipe de qualidade.

O teste é um meio econômico de detectar defeitos, contruibui para objetos de teste de maior qualidade, avalia a qualidade de um objeto de teste, contribui para tomada de decisões(ex.: liberação), fornece representação direta do usuário e ajuda a atender requisitos contratuais, legais e normas regulatórias.

Teste e QA não são a mesma coisa. Para explicar isso é necessário saber o que é QC e QA:

QC (Quality Control): Controle de Qualidade. Tem foco no produto, visa as atividades que apoiam níveis adequados de qualidade. Os testes e seus resultados são a principal forma de controle, são utilizados para corrigir defeitos. Outras formas de controle são métodos formais, simulação e prototipagem.

QA (Quality Assurance): Garantia de Qualidade. Tem foco no processo, visando sempre sua implementação e aprimoramento. Um bom processo, gera um bom produto de trabalho. Os testes e seus resultados fornecem feedback sobre os processos de desenvolvimento e teste.

Ou seja, o teste é uma forma de QC, utilizada por QA para fornecer feedbacks e aprimorar os processos.

Erro: É qualquer equívoco produzido pelo ser humano, pode haver vários motivos como pressão de tempo, falta de treinamento, cansaço, processos mal estruturados, etc. Caso não detectado, pode produzir um Defeito.

Defeito: É produzido por um erro, é uma anomalia encontrada em produtos de trabalho como script de teste, documentação, especificação de requisitos, código-fonte, etc. Caso não detectado e quando executado, pode produzir uma falha.</b>

Falha: É produzida por um defeito ou condições ambientais, é quando o sistema deixa de fazer o que deveria ou faz algo que não deveria.

Causa-raiz: É a situação que leva o ser humano ao erro, ou seja, a principal causa do erro. Deve ser analisada quando uma falha ou defeito é detectado, e ao corrigí-la outras falhas e defeitos podem ser evitados ou ter a frequência menor.

Segue o fluxo:

7 Princípios de Teste:

  1. O teste mostra a presença de defeitos, não a sua ausência:
    • O teste mostra que os defeitos estão presentes no objeto de teste, mas não que não existam.
    • O teste reduz a probabilidade de defeitos no objeto de teste.
  2. Testes exaustivos são impossíveis:
    • Testar tudo nem sempre é viável, por motivos como tempo, esforço, orçamento, etc.
    • Os esforços dos testes devem ser concentrados por meio de técnicas de teste, priorização de casos de teste e teste baseado em risco.
  3. Testes antecipados economizam tempo e dinheiro:
    • O Defeito corrigido no início do processo não provoca outros defeitos ou falhas, reduzindo o custo da qualidade.
    • Testes estáticos e dinâmicos devem iniciar o mais cedo possível.
  4. Os defeitos se agrupam:
    • Um grupo de componentes normalmente contém a maioria dos defeitos ou é responsável pela maioria das falhas.
    • É importante observar o agrupamento de defeitos para o teste baseado em risco.
  5. Os testes se degradam:
    • Se os mesmos testes forem repetidos, novos defeitos não serão encontrados.
    • Talvez seja necessário modificar os dados de teste ou escrever novos testes. Obs.: Em casos de teste automatizados ou de regressão manter os mesmos testes pode ser benéfico.
  6. Os testes dependem do contexto:
    • Não existe uma abordagem universal para os testes.
    • Os testes são feitos de formas diferentes em contextos diferentes.
  7. Falácia da ausência de defeitos:
    • Um sistema livre de defeitos, aonde a verificação é contínua, não garante que ele seja um sucesso.
    • A validação também deve ser realizada para que os objetivos de negócio e expectativas do usuário e stakeholders sejam atendidas.

Algumas atividades de teste podem ajudar a atingir os objetivos do projeto. Aqui veremos quais são as atividades de teste e seus contextos, o que é um testware e sua rastreabilidade, além dos papéis no teste.

Um processo de teste é o conjunto de atividades de teste.

Os principais grupos de atividades são listados a seguir junto com suas tarefas, normalmente são implementadas de forma iterativa ou paralela. Lembrando que devem ser adaptadas as necessidades do projeto.

  • Planejamento do Teste:
    • Definir os objetivos do teste.
    • Selecionar a abordagem mais adequada.
  • Monitoramento e Controle de Teste:
    • Verificação contínua.
    • Comparação do progresso real com o esperado.
    • Tomada de ações necessárias para seguir o plano.
  • Análise de Teste:
    • Responder a pergunta "O que testar ?"
    • Identificar os recursos testáveis.
    • Priorizar as condições de teste, riscos e níveis de risco.
    • Identificar defeitos na base de teste e avaliar a testabilidade.
  • Modelagem de Teste:
    • Responder a pergunta "Como testar ?"
    • Elaborar Casos de Teste, cartas de teste, etc.
    • Identificar itens de cobertura.
    • Identificar ferramentas e infraestrutura necessárias para os testes.
  • Implementação do Teste:
    • Adquirir material de teste.
    • Organizar casos de teste em conjuntos de teste.
    • Criar os scripts de teste (manuais e automatizados).
    • Criar cronograma de execução.
    • Criar Ambiente de teste.
  • Execução do Teste:
    • Executar os testes.
    • Registrar resultados.
    • Analisar anomalias.
  • Conclusão do Teste:
    • Criar relatório de conclusão de teste.
    • Geralmente ocorre nos marcos do projeto(ex.:entrega).
    • Arquivar material de teste.
    • Encerrar ambiente de teste.
    • Identificar lições aprendidas e melhorias.

As atividades de teste são parte do desenvolvimento e tem também o objetivo de ajudar a atender as necessidades de negócios do projeto.

A forma como os testes e as atividades serão executadas dependem de vários fatores, alguns deles são:

  • Stakeholders.
  • Membros da equipe.
  • Domínio do negócio.
  • Fatores técnicos.
  • Restrições do projeto.
  • Fatores organizacionais.
  • Ciclo de vida de desenvolvimento do software.
  • Ferramentas.

Esses fatores têm impactos na estratégia de teste, técnicas de teste, grau de automação de teste, nível de cobertura, nível de detalhes em documentações e relatórios.

Exemplo: Você terá que definir o grau de automação de teste do software, o desejado pelos stakeholders é de 100% das funcionalidades automatizadas, entretanto o tempo disponível não é muito e o nível de habilidade dos membros da equipe não é tão alto. Dada essa situação, o mais apropriado seria providenciar um treinamento de curta duração para a equipe, incentivar a abordagem da equipe completa e definir testes de fumaça E2E para automação de testes.

Testware é o produto de trabalho fruto das atividades de teste. Alguns testwares gerados, de acordo com suas atividades, são:

  • Planejamento de testes: Plano de teste, cronograma de teste, registro de risco, critérios de entrada e saída.
  • Monitoramento e controle de testes: Relatórios de progresso, documento de diretrizes de controle, informações sobre os riscos.
  • Análise de teste: Condições de teste, critérios de aceite, relatório de defeitos.
  • Modelagem de teste: Casos de teste, cartas de teste, itens de cobertura, requisitos de dados, requisitos de ambiente.
  • Implementação de teste: Procedimentos de teste, scripts de teste automatizados, conjuntos de teste, dados de teste, cronograma de execução, elementos do ambiente de teste.
  • Execução de teste: Registro de testes e relatórios de defeitos.
  • Conclusão do teste: Relatório de Conclusão, itens de melhoria do projeto ou iterações, lições aprendidas, solicitações de alteração.

A rastreabilidade permite a associação dos elementos da base de teste, o testware, os resultados e os defeitos encontrados.

Dá suporte a cobertura, verificando se os requisitos são cobertos pelos casos de teste e avaliando o nível de risco residual em um objeto de teste.

Auxilia também na determinação do impacto das mudanças, torna o progresso e os relatórios dos testes mais compreensíveis, facilitando na comunicação.

Exemplo de uma simples rastreabilidade: Existe uma história de usuário com o identificador, título e versão do software : "US-01 - Login - 1.0v". O caso de teste gerado para essa funcionalidade, teria o identificador do caso de teste, identificador da história de usuário referente a funcionalidade, versão do software, título do caso de teste: "[TC-01][US-01][1.0v] - Verificar Login com usuário válido"

Há ferrametas como Jira e Microsoft Azure, que auxiliam na rastreabilidade, podendo associar os elementos diretamente ao produto de trabalho que está sendo gerado.

Há duas funções principais nos testes, o papel de Gerenciamento de testes e de Testador. Pessoas diferentes podem exercer esses papéis em momentos diferentes, dependo das habilidades e do contexto do projeto/produto, mas também é possível que um profissional ocupe os dois papéis. As definições dos papéis são as seguintes:

  • Gerenciamento de teste: Assume a gerencia da equipe de teste, suas atividades, é responsável pelo processo de teste. Realiza atividades de planejamento, monitoramento e controle, e conclusão de testes.
  • Testador: Responsável pela parte técnica do teste, realiza atividades de análise, modelagem, implementação e execução de teste.
</div> </div> </div> </div>

Habilidade é a capacidade de fazer algo bem feito, sendo assim os testadores devem ter a habilidade de realizar testes em diferentes níveis e independência de testes, além de ser participantes ativos dentro de uma equipe.

Habilidades:

  • Conhecimento sobre testes: Saber utilizar Técnicas de teste, principais atividades, etc.
  • Ser Métodico e ter curiosidade: Para identificar defeitos que são difíceis de encontrar e que normalmente passariam despercebidos sem essas habilidades.
  • Boa comunicação: Saber ouvir, transmitir informações e trabalhar em equipe.
  • Pensamento crítico, analítico e criatividade.
  • Conhecimento técnico: Saber utilizar ferramentas adequadas.
  • Conhecimento do negócio/domínio: Para se comunicar com o stakeholders/usuários finais/representantes de forma adequada.

A habilidade de comunicação é muito importante para nós testadores, pois geralmente somos os portadores das más notícias, e estas notícias podem ser recebidas como crítica ao trabalho do autor. As atividades de teste também podem ser consideradas destrutivas, embora contribuam muito para o sucesso e a qualidade do projeto, sendo assim os defeitos e falhas devem ser comunicados de forma construtiva.

A abordagem de equipe completa é uma prática vinda da Extreme Programming (XP), nela os membros da equipe compartilham o mesmo espaço de trabalho e qualquer um com habilidade necessária pode executar a tarefa solicitada, além de que todos são responsáveis pela qualidade.

Visa melhorar a dinâmica da equipe, comunicação, interação, compartilhamento de conhecimentos e habilidades. Os testadores transmitem conhecimento sobre testes e influenciam o desenvolvimento do produto.

"Um certo grau de independência torna o Testador mais eficaz na localização de defeitos devido às diferenças entre os vieses cognitivos do autor e do Testador" - cf. Salman - 1995.

Os produtos de trabalho são testados ...

Sem independência: pelo seu autor.

Alguma independência: pelos colegas do autor, mebros da mesma equipe.

Alta independência: por Testadores de fora da equipe, mas membros da mesma organização.

Independência muito alta: por Testadores de fora da organização.

É bom que seja realizado vários níveis de independência dentro de um mesmo projeto. Quanto maior a independência, maior será a liberdade para contestar ou refutar suposições feitas pelos stakeholders, também será maior a probabilidade de descobrir diferentes defeitos, pois a formação e perspectiva são diferentes do autor. Entretanto maior é a probabilidade de ficarem isolados da equipe de desenvolvimento, levando a falta de colaboração, problemas de comunicação e serem vistos como gargalos.

</div> </div> </div> </div>