Aprofundando os Conhecimentos em Testes de Software: Diferenciando Tipo e Nível de Teste
Tags: teste, qualidade, qa, ptbr
Published: 2024-02-04 01:38:12

Ao abordarmos o processo de garantia de qualidade de software, deparamo-nos com termos e conceitos que, à primeira vista, podem parecer complexos e até confundíveis (especialmente quando ainda não os compreendemos completamente). Um ponto crucial nessa discussão é a distinção entre Tipos de Testes e Níveis de Testes, uma distinção que frequentemente causa confusão, especialmente entre os iniciantes. Vamos, então, explorar essas diferenças e fornecer uma explicação mais clara sobre o assunto.

## Tipos e Níveis de Testes: Entendendo as Diferenças

### Tipos de Testes
Os **tipos de testes** estão diretamente ligados ao propósito específico do teste, determinando se este será funcional, de desempenho, entre outros

### Níveis de Testes
O **nível de teste**, por sua vez, descreve o momento em que o teste ocorre durante o ciclo de desenvolvimento. Este aspecto considera se o teste é realizado em um sistema já desenvolvido ou durante sua construção.

Para o BSTQB (Brazilian Software Testing Qualifications Board) em seu documento base de estudo (Syllabus) disponível em [Base de estudo](https://bcr.bstqb.org.br/docs/syllabus_ctfl_3.1.1br.pdf), eles também definem níveis de testes como grupos de atividades de teste que são organizados e gerenciados juntos, descrevendo/executando testes em determinado nível de desenvolvimento do projeto, desde as unidades individuais ou componentes até os sistemas completos ou, quando aplicável, em sistemas de sistemas.

No livro "Jornada Ágil de Qualidade", os níveis de teste são explorados, destacando a capacidade de agrupá-los para identificar responsabilidades, o tamanho do objeto de teste e a semelhança com o ambiente de produção. Os níveis típicos como: **unidade, integração, sistema e aceitação**, podem ser categorizados em baixo e alto nível.



![Niveis de teste](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vjpyz6myrpz6eni8l623.png)

## Baixo Nível de Testes

Os **testes de baixo nível** são direcionados à verificação de componentes individuais do sistema, sendo os desenvolvedores os principais responsáveis por sua execução. Após assegurar a qualidade das partes mais fundamentais do sistema por meio dos testes de unidade, as partes maiores são testadas em conjunto durante os testes de integração. Exemplos incluem:


1. **Testes Unitários**
   - Também conhecidos como Teste de Componentes ou Teste de Unidade.
   - Focam nos menores blocos construtivos do sistema.
   - Baseiam-se no funcionamento interno de componentes individuais.
   - Podem exigir testes funcionais e não funcionais**(Tipo de teste).**
   - Geralmente executados pelo desenvolvedor.

2. **Testes de Integração**
   - Realizados após os testes unitários.
   - Concentram-se nas interações entre componentes ou sistemas.
   - Verificam se o sistema se comporta corretamente quando partes são combinadas.
   - Podem exigir testes funcionais e não funcionais**(Tipo de teste).**.

## Alto Nível de Testes

Os **testes de alto nível** visam testar produtos completos, fornecendo informações sobre a qualidade do sistema. Estes são realizados após os testes de baixo nível e, frequentemente, em diferentes etapas da validação do sistema. Os principais testes de alto nível incluem:

3. **Testes de Sistema**
   - Envolvem o teste funcional ou integrado do sistema completo.
   - Concentram-se no comportamento e capacidades globais do sistema.
   - Objetivos incluem a redução de riscos e a validação do sistema como um todo.
   - Exemplos de testes: usabilidade, acessibilidade, desempenho, segurança (pentest), portabilidade, regressão.

4. **Testes de Aceitação**
   - Executados pelo usuário ou cliente.
   - Validam se o sistema atende aos requisitos originais.
   - Realizados após os testes de sistema bem-sucedidos.
   - Objetivos incluem estabelecer confiança na qualidade do sistema como um todo e verificar se os comportamentos funcionais e não funcionais estão de acordo com o esperado.
   - Exemplos de testes: aceitação do usuário,aceitação do contrato,alpha, beta, ATDD, testes A/B, LRR, HRR.


![relação teste](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/nlue7dhb3ljd1pg7o2n1.png)


É crucial lembrar que não existe uma abordagem única para testes, ou seja, não necessáriamente seguiriamos o fluxo baixo nivel para alto nivel. A flexibilidade na aplicação dos níveis de teste é essencial para adaptar o modelo à realidade do contexto em que será utilizado, a imagem a seguir demonstra um pouco essa questão


![encaixe testen](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/y10h60tohly50ekanho8.png)

Compreendido os **niveis de testes**, iremos agora se aprofundar um pouco mais nos **tipos de testes**

## Tipos de Teste

Quando falamos de tipo de testes, estamos falando da "forma" que determinada coisa será testada e seu proposito. Lembrando que essa "Forma" de testar que logo iremos descrever melhor, pode ser alocada em quaisquer niveis de testes, sendo alguns mais habitual, outros não.

Para falarmos de tipo de teste, inicialmente vamos a sua definição
contida lá naquela base de estudo do BSTQB
Eles definem os tipos de teste em 4 principais(Que podem ter ramificações)
Sendo eles:
1 -Teste funcional
2 -Teste não funcional
3 -Teste caixa-branca
4 -Teste relacionado à mudança

Mas vejamos, Muito usa-se no mercado outras nomenclaturas, ou, aquilo que eu chamo de ramificações desses tipos de testes inicial definido.
Irei primeiro basear-se em 4 topicos desses tipo de testes, e posteriormente em um segundo post, irei aprofundar nossos conehcimentos geral nos tipos de teste.
irei trazer uma base sobre os 4 diferente tipospara compreendermos o contexto geral dos tipos de testes 

![Niveis de teste](https://miro.medium.com/v2/resize:fit:720/format:webp/1*NLI1L7RK7SRyFj3c59dXSg.png)

## 1 - Teste Funcional

O teste funcional em um sistema visa avaliar as funções que o software deve executar, com base nos requisitos funcionais, que podem ser descritos em diversas formas, como especificações de requisitos, épicos, histórias de usuários, casos de uso ou especificações funcionais. Essas funções representam o "o que" o sistema deve realizar.

A realização de testes funcionais ocorre em todos os níveis de teste, sendo que cada nível pode ter um foco diferente. O teste funcional utiliza técnicas de caixa-preta para avaliar o comportamento do software, derivando condições e casos de teste sem a necessidade de conhecimento interno da implementação. A cobertura funcional é uma medida de eficácia, calculada como a porcentagem de elementos funcionais abordados pelos testes, identificando potenciais lacunas de cobertura.

O projeto e a execução de testes funcionais podem exigir conhecimentos específicos, como compreensão do problema de negócios que o software resolve. As características de qualidade podem ser classificadas como funcionais e não funcionais, sendo que o teste funcional se concentra nas subcaracterísticas relacionadas à funcionalidade, como adequação funcional, corretude, completude e adequação à tarefa.

Em resumo, o teste funcional consiste em uma série de subtestes, especialmente utilizando técnicas caixa-preta, para garantir que o software desempenhe efetivamente as funções planejadas, com ênfase nas características de qualidade funcionais.

## 2 - Teste Não Funcional

Os testes não funcionais abrangem a avaliação de características gerais de sistemas e softwares, como usabilidade, eficiência de performance e segurança. Ao contrário de uma percepção comum, esses testes são aplicáveis em todos os níveis e devem ser realizados o mais cedo possível para evitar descobertas tardias de defeitos não funcionais, que podem ser prejudiciais ao sucesso do projeto.

Assim como nos testes funcionais, as técnicas caixa-preta podem ser utilizadas para derivar condições de teste e casos de teste para os testes não funcionais. Por exemplo, a análise do valor limite pode ser empregada para definir condições de tensão em testes de performance. A eficácia dos testes não funcionais é medida pela cobertura não funcional, expressa como a porcentagem de elementos não funcionais abordados pelos testes, identificando possíveis lacunas de cobertura.

A modelagem e execução de testes não funcionais podem exigir habilidades especializadas, como o conhecimento de fraquezas inerentes a um projeto ou tecnologia, como vulnerabilidades de segurança associadas a linguagens de desenvolvimento específicas. Além disso, considerações sobre a base de usuários, como os funcionários de sistemas de gerenciamento de unidades de saúde, podem ser relevantes.

Os testes não funcionais incluem avaliação de desempenho, compatibilidade, usabilidade, adequação, confiabilidade, segurança da informação, manutenibilidade e portabilidade. Esses testes verificam aspectos gerais da aplicação, independentemente das regras de negócio específicas, abrangendo desde o desempenho até a segurança e a usabilidade.

## 3 - Teste Não Funcional
O teste caixa-branca é uma abordagem derivada de testes que se concentra na estrutura interna ou na implementação do sistema. Essa estrutura interna engloba elementos como código, arquitetura, fluxos de trabalho e fluxos de dados dentro do sistema.

A eficácia dos testes caixa-branca é medida por meio da cobertura estrutural, que representa a extensão em que determinados elementos estruturais foram testados, expressa como uma porcentagem do tipo de elemento a ser coberto. No nível de teste de componente, a cobertura de código é avaliada com base na porcentagem do código do componente testado, podendo abranger aspectos específicos, como a porcentagem de instruções executáveis ou a porcentagem de resultados de decisões testados. No teste de integração de componentes, o foco pode ser na arquitetura do sistema, incluindo interfaces entre componentes.

A modelagem e execução do teste caixa-branca podem demandar habilidades e conhecimentos especializados, como a compreensão da construção do código (por exemplo, o uso de ferramentas de cobertura de código), a avaliação do armazenamento de dados (como a análise de consultas de banco de dados) e a interpretação correta dos resultados de ferramentas de cobertura.

Em resumo, o teste caixa-branca é uma abordagem que se baseia na estrutura interna do sistema, envolvendo o código, arquitetura e fluxos de dados, e sua eficácia é avaliada por meio da cobertura estrutural. Esse tipo de teste é também conhecido como caixa de vidro ou estrutural.


## 4 - Teste relacionado à mudança

Quando ocorrem alterações em um sistema, seja para corrigir defeitos ou introduzir novas funcionalidades, é crucial realizar testes para garantir que as mudanças foram implementadas corretamente e não causaram efeitos colaterais indesejados.

### Tipos de Testes:

1. **Teste de Regressão:**
   - Objetivo: Detectar efeitos colaterais indesejados das alterações.
   - Candidato à automação.

2. **Teste de Confirmação (Reteste):**
   - Objetivo: Confirmar se o defeito foi corrigido.
   
### Abrangência dos Testes:

Esses testes devem ser aplicados em todos os níveis de testes, independentemente do estágio do desenvolvimento do software. Em ciclos de desenvolvimento ágil, a frequência desses testes é aumentada para garantir uma validação contínua das alterações realizadas.

### Descrição Adicional:

O **Teste de Confirmação** envolve a execução de testes após a correção de um defeito, utilizando todos os casos de teste que falharam devido ao defeito corrigido.

O **Teste de Regressão** consiste na execução de testes para detectar efeitos colaterais indesejados resultantes das alterações realizadas no sistema.

Esses testes desempenham um papel crucial na manutenção da integridade do software durante seu ciclo de vida, assegurando que cada modificação contribua para uma melhoria contínua e não introduza novos problemas.

---


Os tipos de testes apresentados neste artigo abrangem diferentes aspectos e requerem especificidades para cada contexto de aplicação. Embora não tenhamos abordado detalhadamente as ramificações e especificidades de cada tipo de teste neste artigo, pretendo explorá-las em futuras publicações.

Nessas futuras discussões, poderemos examinar mais de perto as nuances dos testes e as diferentes abordagens comumente utilizadas em cada contexto específico. Isso inclui a exploração das ramificações de testes normalmente empregadas nos tipos de teste discutidos aqui.

Por enquanto, agradeço pela leitura e espero que este artigo tenha proporcionado uma compreensão no entendimento de niveis e  tipos de testes.
Se houver alguma dúvida ou sugestão, sinta-se à vontade para compartilhar.

Muito obrigado!