,

quinta-feira, 14 de março de 2013

Introdução a Teste de Software - Parte 02

Dando continuidade à parte 01 do post de Introdução a Teste de Software, o nosso colaborador Thiago Ferreira elaborou a segunda parte. Nesta ele abordar as técnicas e níveis de testes de software.

O objetivo deste post é esclarecer um pouco conceitos e técnicas de teste que são bastante comuns no cotidiano de quem trabalha com testes e grande parte da comunidade de Analistas e Desenvolvedores já ouviu falar ou até mesmo usar alguma prática.

Existem diversas formas/maneiras de se testar um software. Tudo dependerá exclusivamente da metodologia e do processo de desenvolvimento que está sendo aplicado, ou até mesmo do objetivo do que se deseja encontrar através da sua execução. Irei transcorrer sobre as mais conhecidas, falando um pouco sobre cada uma.

Para melhor compreensão, deveremos compreender a diferença entre os tipos de testes chamados Estáticos e Dinâmicos. Os testes ditos Estáticos compreendem os testes que não envolvem a execução de algum programa. Nesse tipo de teste o foco está principalmente na análise dos artefatos do projeto, envolvendo componentes como: documentação de requisitos, análise dos casos de uso, inspeção do código fonte, entre outros. Os testes definidos como Dinâmicos são os que estão relacionados à execução prática dos testes, onde estes precisam do programa executando e rodando em uma base de dados estável e confiável para validação.

“Tá Thiago, e onde se encaixa os testes chamados de Caixa-Preta e Caixa-Branca?” Calma rapaz! Vamos com calma. Os testes conhecidos como Testes Funcionais. (conhecidos como Testes de Caixa-Preta), verifica apenas entradas e saídas, não se preocupando como foi feita a implementação. O testador nesse tipo de teste não precisa conhecer os detalhes do código-fonte, bastando para isso informar os dados de entrada na interface testada e verificar se a saída/resultado está de acordo com o que era esperado. Este tipo de teste, portanto, não tem como objetivo saber como a funcionalidade foi implementada, mas sim quais são os resultados esperados, avaliando somente a entrada e saída. Também verifica se existem erros/falhas na interface e se alguma funcionalidade está faltando conforme requisitos do usuário.

Os testes Estruturais (conhecidos como Teste de Caixa-Branca) levam em consideração a estrutura do código fonte para identificar a implementação. Assim, esse tipo de teste é elaborado para: testar as decisões lógicas (verdadeiro/falso), testar os “loops” até o limite, as variáveis estáticas e dinâmicas, dentre outros.

 
Figura 1: Teste de Caixa-Preta e Caixa-Branca.

Uma questão Thiago: “Os testes de Caixa-Branca substitui os testes de Caixa-Preta?” Não. Muito pelo contrário, ambos podem ser utilizados em conjunto, mas cada um com seus objetivos, ou seja,dependendo do projeto no qual você trabalha, poderá utilizar a técnica na qual achar melhor. Existem também os chamados testes de Caixa-Cinza, que é a união da prática do teste de Caixa-Preta com Caixa-Branca, no qual envolve o acesso a estrutura de dados juntamente com a interface da aplicação, a fim de elaborar os casos de testes de acordo com as situações exigidas.

E o chamado Teste de Regressão? Essa é uma técnica de teste aplicável quando surge uma nova versão do software após a mudança da versão anterior. O objetivo é verificar se a introdução de uma mudança, por exemplo, novo código ou até mesmo a correção de uma falha, não provocou uma nova falha em uma parte do software que já funcionava corretamente. Serve, principalmente, para verificar se não houve algum “efeito colateral” no produto.

“Bacana, agora sei de tudo sobre testes de software”. Vá com calma amigo! Não tão rápido assim. É preciso também ter o conhecimento sobre os chamados níveis de testes. “Mas o que são níveis de testes?” Os níveis de testes te darão um direcionamento para a execução dos testes, ou seja, eles podem executar os testes em unidades mínimas do software ou em grandes partes do sistema. Tudo isso, claro, dependerá da forma como o projeto está sendo executado e do que você pretende encontrar nos testes.
Os níveis de testes são divididos em:

  1. Teste Unitário: São aplicados nas menores unidades do software, nas quais normalmente são os métodos ou funções de um código-fonte. O objetivo é buscar por erros de lógica e programação, nas unidades em separado, de forma a garantir que essas unidades funcionem corretamente e isoladamente. Usualmente são os próprios desenvolvedores que realizam os testes unitários do próprio código.
  2. Teste de Integração: Os testes de integração, por sua vez, verificam se as partes que funcionavam isoladamente continuam a funcionar após serem integradas, ou seja, combinadas. Portanto, são verificadas as integrações entre unidades, componentes, sistemas, camadas, entre outros. As integrações podem ser do tipo Big Bang ou Incremental. Integrações do tipo Big Bang procuram integrar as partes do sistema como um todo, enquanto que a Integral realiza a integração de partes do sistema aos poucos, ou seja, por partes.
  3. Teste de Sistema: Avaliam o comportamento do sistema como um todo. Além das funcionalidades, características não funcionais como: performance, segurança, usabilidade, dentre outros, são avaliados. 
  4. Teste de Aceitação: Conhecido também como Teste de Usabilidade, são realizados pelos clientes/usuários do sistema com o objetivo de verificar se o sistema está atendendo ao que era pretendido e foi especificado. Esse nível não tem como objetivo caçar defeitos, e sim verificar se o sistema está nos padrões solicitados pelo cliente.
Figura 2: Níveis de Abstração do Teste


Não paramos por aqui, no próximo post iremos abordar as técnicas não-funcionais. Então fiquem atentos e aguardem a continuação...

Referências:


Wikipédia. “Teste de Software”. http://pt.wikipedia.org/wiki/Teste_de_software. Acesso em 06

 março 2013.

COUTINHO, Pedro Henrique Mannnato. Módulo de: Teste de Software. Formato PDF. ESAB – Escola Superior Aberta do Brasil. Primeira Edição. 2011.

SILVA, Fernando Rodrigues. Teste de Software – Níveis de Teste. http://www.devmedia.com.br/testes-de-software-niveis-de-testes/22282. Acesso em 06 março 2013.

TOZELLI, Paulo. Teste de Software. Disponível em: <http://imasters.com.br/artigo/9572/software/teste-de-software/>. Acesso em 06 março 2013.

Post enviado por: Thiago Ferreira Barbosa, Pós-Graduado em Qualidade  e Testes de Sofware
Analista de Sistema na Confederação das Unimeds Norte/Nordeste.

1 comentários:

  1. Parabéns ao Thiago, exelente matérial.

    O teste de aceitação que tbm pode ser chamado de teste de validação, pode ser feito em 2 estágios:

    Alfa: Ambiente controlado;
    Beta: Ambiente Caótico;

    Teste de sistemas é a integração de toda a Engenharia de Sistemas:
    Pessoas,
    Sistema,
    Hardware,
    Processos,
    outros softwares.

    É bastante parecido com o ambiente real.

    att,
    Fernando Ítallo

    ResponderExcluir