• Nenhum resultado encontrado

Técnicas e critérios de teste

No documento UNIVERSIDADE DE SÃO PAULO (páginas 37-41)

FUNDAMENTAÇÃO TEÓRICA

2.2 Atividades de VV&T

2.2.1 Técnicas e critérios de teste

As atividades de teste devem aumentar a chance de revelar defeitos em um SUT, selecio-nando dados do domínio de entrada que sejam mais eficazes para tal tarefa. As técnicas e critérios de teste fornecem ao desenvolvedor uma abordagem sistemática e teoricamente fundamentada para a modelagem de casos de teste eficazes, construindo um mecanismo que pode auxiliar a avaliar a qualidade e a adequação da atividade de teste.

Segundo Fabbri, Vicenzi e Maldonado (2016), as técnicas de teste de software podem ser classificadas em: técnica funcional, técnica estrutural e técnica baseada em defeitos. Cada técnica possui seus respectivos critérios que estabelecem requisitos de teste para os quais valores específicos do domínio de entrada do programa devem ser definidos, com o intuito de exercitá-los.

A seguir é apresentada cada técnica de teste de software e alguns dos seus critérios.

2.2.1.1 Técnica funcional

O teste funcional, também conhecido como técnica caixa-preta, considera o produto em teste como uma caixa da qual só se conhece a entrada e a saída (sem conhecimento da parte interna). Baseia-se na especificação do software para derivar os casos de teste, desconsiderando aspectos associados ao código da aplicação. Dessa forma, nessa técnica os detalhes de implemen-tação não são considerados e o software é avaliado segundo o ponto de vista do usuário (PEZZE;

ZHANG, 2014; AMMANN; OFFUTT, 2008).

De acordo com Fabbri, Vicenzi e Maldonado (2016), os principais critérios do teste funcional são: (i) particionamento em classes de equivalência; (ii) análise do valor limite; (iii) teste funcional sistemático; e (iv) grafo causa-efeito.

A técnica funcional pode ser utilizada em todas as fases de teste e não depende do paradigma ou linguagem de programação utilizados. A técnica funcional é eficaz em detectar determinados tipos de defeitos como, por exemplo, funcionalidades ausentes. Entretanto, o êxito na aplicação da técnica funcional está fortemente relacionado com a qualidade da especificação de requisitos.

2.2.1.2 Técnica estrutural

A técnica estrutural, também conhecida como branca (ao contrário do teste caixa-preta), baseia-se no conhecimento da estrutura interna (implementação) do programa. A maioria dos critérios dessa técnica utiliza uma representação do programa conhecida como grafo de fluxo de controle (GFC), que é uma representação que visa auxiliar a geração dos requisitos de teste. OsCritérios baseados em fluxo de controleutilizam características de controle de execução do programa para determinar os requisitos de teste com base em comandos e desvios de execução. Os critérios mais conhecidos dessa classe são: (i) Todos-Nós; (ii) Todas-Arestas; e (iii) Todos-Caminhos. O Código 1 apresenta a função main do programaIdentifier, enquanto a Figura 2 ilustra o GFC dessa função. No GFC, cada vértice representa um bloco indivisível de comandos do programa (BARBOSAet al., 2016; GLENFORD; SANDLER; BADGETT, 2004).

Código-fonte 1– Função main do programaIdentifier.

1: { /* 01 */

2: c h a r a c h a r ; /* 01 */

3: int length , v a l i d _ i d ; /* 01 */

2.2. Atividades de VV&T 37

4: l e n g t h = 0; /* 01 */

5: p r i n t f ( " I d e n t i f i c a d o r : " ) ; /* 01 */

6: a c h a r = f g e t c ( s t d i n ) ; /* 01 */

7: v a l i d _ i d = v a l i d _ s ( a c h a r ) ; /* 01 */

8: if ( v a l i d _ i d ) /* 01 */

9: l e n g t h = 1; /* 02 */

10: a c h a r = f g e t c ( s t d i n ) ; /* 03 */

11: w h i l e ( a c h a r != ’ \ n ’ ) /* 04 */

12: { /* 05 */

13: if (!( v a l i d _ f ( a c h a r ) ) ) /* 05 */

14: v a l i d _ i d = 0; /* 06 */

15: l e n g t h ++; /* 07 */

16: a c h a r = f g e t c ( s t d i n ) ; /* 07 */

17: } /* 07 */

18: if ( v a l i d _ i d && ( l e n g t h >= 1) /* 08 */

19: && ( l e n g t h < 6) ) /* 08 */

20: p r i n t f ( " V a l i d o \ n " ) ; /* 09 */

21: e l s e /* 10 */

22: p r i n t f ( " I n v a l i d o \ n " ) ; /* 10 */

23: } /* 11 */

Fonte: Elaborada pelo autor.

Figura 2 – Exemplo do GFC da função main do programaIdentifier.

Fonte: Elaborada pelo autor.

Adicionalmente aos critérios supra-citados, oCritério baseado na complexidade, tam-bém conhecido como teste do caminho básico ou critério de McCabe (MCCABE, 1976), baseia-se na complexidade ciclomática, calculada a partir do GFC. A complexidade ciclomática define o número de caminhos independentes de um programa, que é qualquer caminho no grafo em que pelo menos uma aresta ainda não tenha sido incluída em outro caminho (BARBOSAet al., 2016). Mccabe (1976) define a complexidade ciclomática (C) como: C = E - N + 2, tal que E é o número de arestas e N é o número de vértices do GFC G. Nesse cenário, com base no GFC ilustrado na Figura 2, C seria igual a 14 - 11 + 2, totalizando 5. Dessa forma, seguindo o que é estabelecido pelo critério, o testador deve escolher cinco caminhos independentes como requisito de teste a ser cumprido por um conjunto de teste.

Por fim, os Critérios baseados em fluxo de dados adicionam informação sobre a utilização de variáveis ao GFC. Uma família de critérios bastante conhecida é a de Rapps e Weyuker (RAPPS; WAYUKER, 1985), que utiliza um GFC estendido, chamado grafo Def-Uso (do inglês Def-Use Graph) . De acordo com Barbosa et al. (2016), os critérios mais conhecidos nessa classe são: (i) Todas-Definições; (ii) Todos-Usos; e (iii) Todos-DU-Caminhos.

Outra família de critérios dessa classe é os Potenciais-Uso. Nessa classe, os elementos são caracterizados independentemente da ocorrência explícita de uma referência (um uso) a uma definição de variável. Os critérios mais conhecidos dessa família são: (i) Todos-Potenciais-Usos;

(ii) Todos-Potenciais-Usos/DU; e (iii) Todos-Potenciais-DU-Caminhos.

Critérios de teste da técnica estrutural identificam caminhos que devem ser percorridos no código do programa. Dessa forma, o GFC é a base a partir do qual os requisitos de testes são derivados. No entanto, a aplicação da técnica estrutural não pode garantir que o programa em teste comporta-se como esperado, devido ao problema dos caminhos ausentes. Caminhos ausentes ocorrem se o programa não implementa algumas funções, não havendo um caminho que corresponda àquela função; logo, nenhum dado de teste será requerido para exercitá-la.

2.2.1.3 Teste baseado em defeitos

Na técnica baseada em defeitos, os requisitos de teste são derivados a partir dos erros mais frequentes cometidos durante o processo de desenvolvimento do software. O teste de mutação, também chamado de análise de mutantes, é o critério mais conhecido da técnica baseada em defeitos (DELAMAROet al., 2016; DEMILLO; LIPTON; SAYWARD, 1978).

No teste de mutação, programas alternativos, denominados mutantes, são criados a partir de sutis modificações do programa original. Tais modificações são efetuadas por meio da inserção de pequenos desvios sintáticos produzidos por regras conhecidas como operadores de mutação.

A ideia é gerar várias versões modificadas do programa original, com o objetivo de reproduzir os defeitos mais comuns introduzidos nos programas pelos programadores (DEMILLO, 1989; JIA;

HARMAN, 2011).

A tarefa do testador é modelar um conjunto de casos de teste que seja capaz de distinguir

No documento UNIVERSIDADE DE SÃO PAULO (páginas 37-41)