• Autora

    Pós-Graduando em Especialização em Informática – Ênfase Análise de Sistemas pela UFMG, Bacharel em Sistemas de Informação (2006) pela Faculdades Pitágoras (Campus Fadom), técnica em Informática (2002) e em Contabilidade (1998). Atualmente Analista de Suporte Júnior III.

  • Direitos Autorais

    Alguns dos materiais (artigos, pdf’s, link’s) disponíveis ou utilizados na edição desse Blog, foram retirados de páginas da internet. Se acaso, algum desses itens for protegido por direitos autorais, queira o detentor do mesmo, me comunicar por email e o material será imediatamente retirado ou darei os devidos créditos!
  • Categorias

  • Arquivos

  • Análise de Sistemas

    • 13,815 hits

Teste de Sw Orientado a Objetos

Algumas facilidades em relação:

• interfaces de classes e métodos bem definidas e explícitas;

• número reduzido de parâmetros implica um número menor de casos de teste para sua cobertura;

• a herança sugere uma maneira natural de reutilizar casos de teste.

Desvantagens:

• encapsulamento de informações dificulta a avaliação da correção da classe;

• múltiplos pontos de entrada (métodos) de uma classe dificultam o gerenciamento do teste;

• polimorfismo e a ligação dinâmica expandem as possíveis interações entre objetos.

No teste de software OO, com à explícita separação entre especificação

e implementação da classe, casos de teste funcional podem ser gerados separadamente de casos de teste que requeiram conhecimento

do código da aplicação (teste estrutural).

Todas as classes podem ser testadas, mas não todos os objetos. O gerenciamento de mensagens entre objetos é similar ao de chamadas de rotinas, porém, a troca de mensagens ocorre mais freqüentemente. Algumas definições e declarações são reutilizadas em vários níveis da árvore de

herança, interagindo com novas definições e declarações.

Através da especificação, deve-se escrever um plano de teste.

Este deve especificar a extensão do teste como:

Ferramentas a serem utilizadas,

Critérios de teste,

Estimativa do tempo necessário para o teste,

Descrição dos casos de teste e dados de teste associados.

Seqüência de seleção proposta para a obtenção dos casos de teste:

• desenvolvimento de um conjunto de teste funcional que cubra a

especificação completa da classe;

• desenvolvimento de casos de teste baseados em estados até que

todas as transições no modelo dinâmico sejam cobertas;

• utilização de uma ferramenta de cobertura de teste;

• desenvolvimento de casos de teste estruturais adicionais para a

cobertura de cada linha de código;

• desenvolvimento de casos de teste para testar as interações entre

métodos de uma mesma classe;

• desenvolvimento de casos de teste para a cobertura das interações

entre objetos da classe sendo testada e de outras classes.

Testes de Estado

O comportamento de uma classe é definido por determinado conjunto de valores encapsulados, que a classe possui em determinado momento. O comportamento da classe é controlado por valores encapsulados, seqüências de mensagens, ou ambos.

Objetivo:

Testar o sistema OO sem tentar todas as combinações possíveis. Sendo que este teste deve ser suficientemente confiável a fim de selecionar combinações que testem comportamentos representativos do conjunto original.

A estratégia de teste FREE (Flattened Regular Expression) é baseada

no modelo dinâmico (máquina de estados finitos) apresentado pelo Diagrama de Estados da UML.

Conhecido também como um teste de cobertura por pares de função.

Estado definido como sendo um subconjunto do conjunto de todas as

combinações possíveis dos valores de atributos da classe.

Para as atividades de projeto e de teste, pode-se definir um estado como um subconjunto de valores que podem ser combinados, e que compartilham

alguma propriedade de interesse.

Exemplo: o saldo de uma conta-corrente pode ser considerado como um atributo base para a realização do teste de estados. Caso qualquer variação no saldo seja considerada uma mudança de estado, a máquina de estados terá um tamanho tal que será praticamente impossível monitorar e analisar

qualquer caminho executado.

Para reduzir tal complexidade, e tornar a representação de máquina de estados mais adequada ao teste, neste exemplo, poderiam ser selecionados apenas os estados “conta negativa” (caso o saldo seja menor do que zero), “conta zerada” (caso o saldo seja igual a zero) e “conta positiva” (caso o saldo seja maior do que zero). Ou seja, a semântica da aplicação deve ser considerada, o que consiste em uma das maiores dificuldades do teste

baseado em estados.

Os estados podem ser definidos por expressões booleanas. Por exemplo,

o estado “conta positiva” pode ser definido como: saldo >0.

As expressões de pré-condições e de pós-condições definem o

contrato da classe.

As classes servidor (as que recebem as mensagens) devem definir pré-condições para que uma mensagem seja aceita.

As classes cliente (as que enviam as mensagens) devem definir pós-condições para definir os resultados.

Uma pós-condição também define o estado obtido pela ativação do

método. Existindo, no mínimo, um estado para cada pós-condição de uma

classe. Se houver n operadores lógicos ou na expressão de pós-condição,

então o método pode computar n+1 estados.

A partir do diagrama de estados, é gerada uma árvore de

transição. O estado inicial da máquina transforma na raiz da árvore.

Para cada transição, um arco é desenhado do nodo origem da transição para o nodo que representa o estado resultante.

Este procedimento é repetido para cada nodo de estado resultante,

até que o estado resultante já apareça na árvore como um nodo anterior

ou o nodo resultante é um estado final.

Em seguida transcrever as seqüências de teste de transições a partir da árvore.

Um caso de teste consiste em cada arco ou cada seqüência de arcos orientada em uma mesma direção.

O plano de teste é completado identificando-se valores de parâmetros

de métodos, estados esperados e exceções.

Execução do teste inicia-se o objeto com o estado inicial, aplicando a seqüência e comparando o estado resultante com o estado esperado.

Erros encontrados: transições perdidas, transições incorretas, ações de saída incorretas e estados incorretos.

Este método de teste pode ser mais bem testado com ferramentas de teste que permitam a utilização de assertivas no meio do código, que podem representar pré e pós-condições, verificadas durante a execução do código instrumentado.

Testes de Integração Aplicados a Software Orientado a

Objetos

Ordem dos testes

Perguntar: qual é a classe que, se testada inicialmente, facilitará o teste de outras classes?

Uma série de heurísticas propostas em Lima e Travassos (2004) podem ser utilizadas para criar critérios de precedência:

• Quanto à Herança

a subclasse somente será testada após as superclasses terem sido

testadas.

• Quanto à assinatura dos métodos de uma classe testa-se primeiramente a classe servidora e depois a classe cliente.

• Quanto à agregação

a classe parte na agregação terá precedência para teste de integração

sobre a classe que representa o todo.

• Quanto à navegabilidade

será utilizada a navegabilidade para definir critério de precedência

quando a ligação entre as duas classes ocorrer através da associação.

• Quanto à classes de Associação

as classes que deram origem à classe de associação terão precedência

de teste de integração sobre a classe derivada.

• Quanto à Dependência

a classe cliente terá precedência para ser testada.

Fator de Influência (FI)

Para aplicar estas heurísticas podemos utilizar um dispositivo para

calcular o chamado “Fator de Influência” de uma classe, calcular

um índice que indique de que forma uma classe influencia ou é influenciada por outras classes.

Assim, pára o exemplo abaixo, podemos criar a seguinte tabela, definindo

o Fator de Influência de uma classe como sendo o Número de classes que podem se integrar à ela, depois que ela for testada.

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: