• Nenhum resultado encontrado

Determinar a Ordem dos Componentes para os Testes de Integração

3 C APÍTULO

6.3 Proposta do Método de Teste de Integração para Sistemas Baseados em

6.3.5 Determinar a Ordem dos Componentes para os Testes de Integração

Nesse passo necessita-se determinar a ordem em que os componentes serão testados de forma a minimizar o número de stubs.

A matriz obtida na Seção 6.3.4 é composta por uma coluna (FI) cujo conteúdo das células representa o somatório das operações das interfaces públicas dos componentes que dependem diretamente das operações da interface pública de um outro componente.

Na Figura 6.7 para o componente C7 obtém-se um valor de FI=0 correspondente à relação de precedência de suas interfaces públicas em relação às interfaces públicas dos outros componentes. Isso significa, pela definição do cálculo de FI (Seção 6.3.4), que esse componente depende totalmente dos testes dos outros componentes e, portanto, deve ser testado por último. Sendo assim a ordem para o componente C7 já está definida.

Após o cálculo de FI e definida a ordem para os componentes cujas interfaces públicas possuem FI=0, necessita-se da definição de uma ordem para os componentes restantes na matriz cujas interfaces públicas possuem um FI diferente de zero. Para tanto, esse passo baseia-se no cálculo do fator de integração tardia (FIT), conforme proposto por Travassos e Oliveira [18] e descrito na Seção 5.5 desse trabalho.

Figura 6.8: Matriz de Dependência do Exemplo – Cálculo de FIT (1a.Interação).

Para o método proposto usa-se o resultado obtido após o cálculo de FIT da mesma maneira que Travassos e Oliveira, ou seja, o componente de menor FIT será integrado primeiro. A diferença nesse trabalho é que o cálculo considera as dependências dinâmicas entre a implementação e a execução de suas operações sobre a interface pública de outros componentes. Assim, para o exemplo em questão e destacado em cinza na matriz da Figura 6.8, obtém-se o FIT (última coluna da matriz) para o componente para a operação c1M2 somando-se os valores dos FI’s obtidos para os métodos da interface pública do componente C3. Por exemplo, o FIT M[c1M2, FIT] = 12 correspondendo ao somatório dos valores de M [c3M1, FI] com M [c3M2, FI] destacados na matriz. O FIT do componente C1 corresponde ao maior FIT obtido para suas operações.

Também se fazem necessários nesse passo, alguns critérios de precedência propostos por Lima e Travassos [18] e descritos na Seção 5.6 no contexto de classes; porém, conforme citado

Seção 2.1, classes podem ser tratadas na granularidade de componentes, então se adaptam os critérios de precedência no contexto de componentes para o método proposto, desta forma:

 Inexistência de Fatores de Integração Tardia Nulos: Algumas arquiteturas são compostas apenas por componentes em um cluster ou fortemente conectados (SCC) e, portanto não há inicialmente componentes com fator de integração tardia nulos, uma vez que não é possível separar ou definir uma ordem dos componentes após o cálculo do FIT. Nesses casos, o componente de menor FIT, exercitará seu teste de integração anteriormente a execução dos testes dos demais componentes com fatores de integração tardia maiores na matriz de dependência do sistema.

 Tratamento de Deadlock: Um mesmo valor de FIT para mais de um componente pode significar que esses componentes possuem uma dependência entre si, existindo um ciclo. Nesse caso há a necessidade de se estabelecer uma prioridade entre as componentes com mesmo valor de FIT, sendo assim:

1. A interface pública do componente selecionado deve executar o menor número de operações e, conseqüentemente necessitar de um menor número de stubs, em comparação ao o número de stubs necessário aos outros componentes com o mesmo valor de FIT.

2. No caso dos componentes necessitarem da implementação do mesmo número de stubs e o acesso ao código do componente e/ou documentação seja viável existe a possibilidade de uma análise do código. Assim sendo, após análise do código, deverá ser testado o componente cujos stubs apresentarem a menor complexidade. Como no caso de um componente adquirido de terceiros o código fonte do componente bem como sua documentação, em geral, não está disponível, propõe-se que seja escolhido o componente que depois de testado sirva para diminuir os stubs necessários de um número maior de componentes do sistema.

3. Caso persista a coincidência pelo número de stubs propõe-se a escolha aleatória do componente a ser testado.

A cada interação na matriz para o cálculo de FIT determina-se a ordem de um ou mais componentes do sistema. Dado que o FIT é calculado como soma dos FI’s de todas as operações implementadas pelos componentes que têm precedência direta sobre o componente alvo, essa ordem não determina apenas a ordem dos testes de integração mas também uma ordem para a implementação dos componentes bem como suas operações.

Desta forma os FI’s correspondentes aos componentes cuja ordem já está definida devem ser removidos dos componentes restantes que possuam uma relação de dependência com este componente.

Portanto uma vez que se obtém a ordem dos testes pela ordem crescente dos valores de FIT e respeitando os critérios de precedência citados, determina-se a ordem para o componente C5. (Figura 6.9) e executa-se uma nova interação na matriz.

Figura 6.9: Matriz de Dependência Exemplo – Cálculo de FIT (2a Interação).

Nesse ponto do método, para o exemplo em questão, tem-se que o componente C5 será o primeiro componente a ser testado. Segue-se recursivamente, calculando-se os FIT’s e aplicando-

se, caso sejam necessários, os critérios de precedência/prioridade pré-definidos. Determina-se uma ordem, através do menor FIT, quando todas as interações possíveis na matriz foram executadas (Figura 6.10).

O mesmo valor de FIT obtido para mais de um componente significa que estes componentes estão fortemente conectados ou em um ciclo de dependência, havendo um empate. Sendo assim, caso seja necessário, aplicam-se os critérios de precedência e então se define a ordem para os componentes com mesmo valor de FIT. No exemplo em questão obteve-se a seguinte ordem para os componentes: {C5, C6, C8, C3, C1, C2, C7, C4}.

Documentos relacionados