Fundamentos de Teste
Published: 2024-05-12 04:16:50

## 1.1 O que é teste?
Teste de software é um processo essencial no desenvolvimento de sistemas, visando avaliar a qualidade de um programa de computador para garantir seu funcionamento conforme o esperado. Este processo envolve a identificação de defeitos e a verificação se o software atende aos requisitos especificados. O teste pode ser dinâmico, envolvendo a execução do software, ou estático, que inclui revisões e análise sem a execução do programa.

### 1.1.1 Objetivos do teste
Os objetivos do teste são diversos e variam de acordo com o contexto. Eles incluem avaliar produtos de trabalho, detectar falhas, garantir a cobertura necessária, reduzir o risco de qualidade inadequada, garantir conformidade com requisitos contratuais e normativos, fornecer informações aos stakeholders e criar confiança na qualidade do software. O principal objetivo é reduzir a probabilidade de defeitos quando o software estiver em produção, minimizando os riscos para o negócio e garantindo que as necessidades do cliente sejam atendidas.

### 1.1.2 Teste e depuração
O teste e a depuração são atividades distintas, mas complementares, no ciclo de desenvolvimento de software. Enquanto o teste identifica falhas no software, a depuração se concentra em encontrar e corrigir essas falhas. No teste dinâmico, quando uma falha é acionada, o processo de depuração envolve reproduzir a falha, diagnosticar a causa principal e corrigir essa causa. No teste estático, quando um defeito é identificado, a depuração se concentra em removê-lo diretamente do código, sem a necessidade de reproduzir a falha.

## 1.2 Por que os testes são necessários?
Os testes desempenham um papel crucial no desenvolvimento de software, proporcionando uma forma eficaz de garantir a qualidade e confiabilidade dos produtos de software. Existem várias razões pelas quais os testes são necessários, cada uma contribuindo para o sucesso geral do processo de desenvolvimento. Vamos explorar essas razões em detalhes:

### 1.2.1 Contribuições para o sucesso dos testes
Os testes oferecem um meio econômico de detectar defeitos, permitindo sua remoção e contribuindo, assim, para a melhoria da qualidade do software. Além disso, eles proporcionam uma avaliação direta da qualidade dos artefatos em diferentes estágios do ciclo de vida do desenvolvimento de software, auxiliando nas decisões de progressão para as próximas etapas do processo. Os testes também garantem que as necessidades dos usuários sejam consideradas ao longo do ciclo de vida do desenvolvimento e podem ser necessários para atender a requisitos contratuais ou legais, bem como para cumprir normas regulatórias.

### 1.2.2 Testes e Garantia da Qualidade (QA)
Embora muitas vezes os termos "teste" e "garantia da qualidade" (QA) sejam usados de forma intercambiável, é importante reconhecer suas diferenças. Enquanto o teste é uma forma de controle de qualidade (QC), focado na detecção de defeitos, a QA é uma abordagem preventiva e orientada para o processo, visando a implementação e melhoria dos processos de desenvolvimento e teste. Enquanto o QC é corretivo e centrado no produto, a QA é preventiva e centra-se nos processos, buscando garantir que um bom processo resulte em um bom produto.

### 1.2.3 Erros, Defeitos, Falhas e Causas-raiz
Os erros humanos podem resultar na introdução de defeitos no software, que, por sua vez, podem causar falhas no sistema. Identificar a causa-raiz de um problema é essencial para evitar falhas recorrentes. A análise de causa-raiz é realizada para identificar as causas fundamentais de erros ou defeitos, permitindo sua remoção ou mitigação. Essa abordagem é fundamental para a melhoria contínua da qualidade do software e a prevenção de problemas futuros.

Em resumo, os testes são necessários para garantir que o software atenda aos requisitos de qualidade, atendendo às necessidades dos usuários e garantindo sua confiabilidade e desempenho adequados. Eles desempenham um papel crucial não apenas na detecção de defeitos, mas também na prevenção de problemas e na melhoria contínua dos processos de desenvolvimento de software.

## 1.3 Princípios de Teste
Ao longo dos anos, vários princípios de teste foram propostos para oferecer diretrizes gerais aplicáveis a todos os tipos de testes. Neste contexto, destacamos sete desses princípios:

- O teste mostra a presença, não a ausência de defeitos.
- Testes exaustivos são impossíveis.
- Testes antecipados economizam tempo e dinheiro.
- Os defeitos se agrupam.
- Os testes se degradam.
- Os testes dependem do contexto.
- Falácia da ausência de defeitos.

## 1.4 Atividades de teste, Testware e Papéis no teste
O processo de teste é fundamental para garantir a qualidade de um produto de software. Embora possa variar dependendo do contexto, existem conjuntos comuns de atividades de teste que formam um processo de teste. Essas atividades são adaptadas de acordo com as necessidades específicas do projeto e são essenciais para alcançar os objetivos de teste.

### 1.4.1 Atividades e Tarefas de Teste
- Planejamento do Teste
- Monitoramento e Controle de Teste
- Análise de Teste
- Modelagem de Teste
- Implementação do Teste
- Execução do Teste
- Conclusão de Teste

### 1.4.2 Processo de Teste no Contexto
O processo de teste é influenciado por diversos fatores contextuais, incluindo stakeholders, membros da equipe, domínio do negócio, fatores técnicos, restrições do projeto, fatores organizacionais e ciclo de vida do desenvolvimento de software. Esses fatores impactam a estratégia de teste, técnicas de teste, grau de automação e relatórios de teste.

### 1.4.3 Testware
O testware é o produto de trabalho de saída das atividades de teste e inclui diversos elementos, como plano de testes, casos de teste, scripts de teste, registros de testes e relatórios de defeitos. O gerenciamento adequado do testware é essencial para garantir a consistência e integridade dos produtos de trabalho.

### 1.4.4 Rastreabilidade entre a Base de Teste e o Testware
Para um monitoramento e controle eficazes dos testes, é importante estabelecer e manter a rastreabilidade entre os elementos da base de teste e o testware associado. A rastreabilidade permite avaliar a cobertura, determinar o impacto das mudanças, facilitar auditorias de teste e atender aos critérios de governança de TI.

### 1.4.5 Papéis no Teste
Existem dois papéis principais nos testes: gerenciamento de teste e testador. O papel de gerenciamento de teste é responsável pelo planejamento, monitoramento e controle das atividades de teste, enquanto o papel de testador foca nas atividades técnicas de análise, modelagem, implementação e execução de teste. Os indivíduos podem desempenhar esses papéis em momentos diferentes, dependendo do contexto e das necessidades do projeto.

## 1.5 Habilidades essenciais e boas práticas em testes
Habilidade é a capacidade de realizar uma tarefa com eficácia, uma aptidão que resulta do conhecimento, prática e aptidão de uma pessoa. Os testadores eficazes possuem habilidades essenciais que lhes permitem desempenhar bem seu trabalho. Eles não apenas realizam testes, mas também são membros ativos e eficazes de uma equipe, capazes de executar testes em vários níveis de independência.

### 1.5.1 Habilidades genéricas necessárias para testes
- Conhecimento sobre testes
- Meticulosidade e atenção aos detalhes
- Boas habilidades de comunicação
- Pensamento analítico e crítico
- Conhecimento técnico
- Conhecimento do domínio

### 1.5.2 Abordagem de equipe completa
Na abordagem de equipe completa, todos os membros da equipe têm a capacidade de executar qualquer tarefa e são responsáveis pela qualidade. A colaboração e comunicação são facilitadas pela co-localização da equipe, seja fisicamente ou virtualmente. Essa abordagem melhora a dinâmica da equipe, promove a comunicação e colaboração e permite o aproveitamento dos vários conjuntos de habilidades da equipe para o benefício do projeto.

### 1.5.3 Independência dos testes
A independência dos testes é crucial para a eficácia do processo de teste, pois permite que os testadores identifiquem diferentes tipos de falhas e defeitos em comparação com os desenvolvedores, devido às suas diferentes perspectivas e formações técnicas. No entanto, a independência não substitui a familiaridade, e diferentes níveis de independência podem ser necessários dependendo do contexto do projeto.