• No results found

THE HISTORY OF WHALING6.1

In document Marine Mammals (sider 74-80)

Harvest and management of whales and seals

THE HISTORY OF WHALING6.1

Software Product Line Testing using Test Sequence Generation Methods (SPLiT-TeSGe)

é um processo para adaptação de métodos de geração de sequências de testes para Linha de Produto de Software. Este processo é parte do método Software Product Line Testing Method Based on

System Models (SPLiT-MBt), o qual propõe um método para geração de casos de teste para

SPLs, a partir de modelos. O produto do processo proposto é um conjunto de sequências que são geradas na etapa de Engenharia de Domínio da SPL, contendo informações de variabilidade para ser posteriormente resolvida na Engenharia de Aplicação.

A grande diferença entre utilização de métodos de geração de sequência de testes para testes de sistemas únicos, e para testes de SPLs, está no fato de que no contexto de SPL os métodos precisam estar preparados para tratar as informações de variabilidade. Neste contexto os métodos de geração de sequência de testes devem ser capazes de identificar, quando localizado um ponto de variação, que a partir deste ponto devem ser geradas sequências distintas de acordo com as variantes associadas.

O processo SPLiT-TeSGe inicia levando em consideração uma FSM que já possui informa- ções de variabilidade e teste inseridas. Estas informações são adicionadas seguindo o estabelecido no método SPLiT-MBT [8]. Para propormos o processo deste trabalho, fez-se necessário analisar os principais métodos de geração de sequência de testes em relação a sua estrutura (Ver Seção 2.4). Com esta visão, podemos notar que os principais métodos de geração de sequência de testes tra- balham com conjuntos de sequências [16]: State Cover (Q), Transition Cover (P), Characterized Set (W), Identification Set (Wi), Harmonized Identifiers Set (HI), Unique sequence of input and

output (UIO), Distinction sequence (DS) e Synchronization sequence (SS). Estas sequências quando concatenadas e minimizadas resultam na sequência final de cada método.

Desta forma, para propor um processo que possa ser utilizado para adaptação de vários métodos de geração de sequência de testes, é necessário mudar o funcionamento dos métodos no momento da geração destas sequências básicas. Sendo exatamente neste momento que se dá a maior contribuição do processo SPLiT-TeSGe, uma vez que, através deste processo, as sequências básicas geradas já irão possuir informações de variabilidade. Desta forma, quando geradas as sequências finais de cada método a variabilidade estará presente. Para que seja possível, com base na FSM recebida, realizar a geração de sequência de testes com variabilidade, as seguintes etapas devem ser executadas:

1. O método deve reunir os estados que representam variantes associadas a um mesmo ponto de variação em um estado único. Este estado irá receber como nome “VP + o nome do estado onde acontece um ponto de variação” e como entrada e saída, respectivamente um conjunto com as informações de entrada e um conjunto com as informações saída de todas as variantes que pertencem aquele ponto de variação (as mesmas variantes que foram agrupadas). Um exemplo pode ser visto na Figura 3.1, onde a transição S1 - VP_S1 recebeu as informações de entrada e saída das transições de entrada estados S2,S8 e S9 e na transição VP_S1 - S3 recebeu as informações de entrada e saída das transições de saída estados S2,S8 e S9. Este agrupamento ocorre pois, uma vez que, um ponto de variação não pode ser resolvido na Engenharia de Domínio, não é possível determinar quais variantes vinculadas a um de- terminado ponto de variação serão resolvidas (utilizadas em cada produto derivado). Desta forma, agrupando-se as variantes no mesmo estado é possível aplicar o método de geração de sequências de testes, preservando a variabilidade na Engenharia de Domínio. Esta etapa do processo pode ser vista de forma sintetizada no Algoritmo 1.

Figura 3.1: Máquina de Estados Finitos com Ponto de Variação

O Algoritmo 1 (AddStateVP) percorre as transições da FSM através de um laço. Para cada transição é verificado se a entrada localizada nesta transição possui informação de variabili- dade. Quando localizada variabilidade, é atribuído à uma variável nomeada “stateVp” o valor “VP+ o nome do estado de origem da transição. Este valor é o nome dado ao estado que irá representar um ponto de variação na FSM. Ainda, é criada uma variável nomeada ”variantS- tate”, que recebe por valor o nome do estado destino da transição, este valor se faz necessário,

Algorithm 1 Criação dos Estados que Representam Pontos de Variação (VP_n)

1: procedure AddStateVP(fsm) 2: flag ← 0

3: for all T ransition ∈ F SM do

4: if Input of Transition has Variability then

5: stateVp ← (“VP_” + Transition Source State Name)

6: variantState ← Transition Target State Name 7: input ← Input of Transition

8: output ← Output of Transition

9: source ← Name of Source State of Transition 10: for all T ransition ∈ F SM do

11: if Source State of Transiton == variantState then 12: targetInput ← Input of Transition

13: targetOutput ← Output of Transition

14: target ← Target State of Transition

15: end if

16: end for

Looping to verify that the VP state (saved in stateVp) already exist

17: for all T ransition(t) ∈ F SM do

18: if Target State Transiton == stateVp then

19: flag ← 1

20: Input of Transition (t) ← Input of Transition (t) + input 21: Output of Transition (t) ← Output of Transition (t) + output 22: Input of next transition← Input of next transition + targetInput 23: Output of next transition ← Output of next transition + targetOutput

24: end if

25: end for

⊲If flag is “0”, then creates state named stateVP

26: if flag == 0 then

27: f smAddState(stateV p)

28: Transition (t) ← f smAddT ransition(source, stateV p)

29: Transition (t2) ← f smAddT ransition(stateV p, target)

30: Input of Transition (t) ← Input of Transition (t) + input 31: Output of Transition (t) ← Output of Transition (t) + output 32: Input of Transition (t2) ← Input of Transition (t2) + targetInput 33: Output of Transition (t2) ← Output of Transition (t2) + targetOutput

34: end if 35: flag ← 0 36: end if 37: end for 38: return fsm 39: end procedure

visto que, as informações de variabilidade são armazenadas na entrada da transição de en- trada dos estados, e portanto, o estado destino da transição cuja entrada possui variabilidade representa uma variante. Nas variáveis “Input” e “Output”, são armazenadas as informações de entrada e saída desta transição. Na variável “Source” por sua vez, é armazenado o nome do estado de origem da transição, esta informação será utilizada caso seja necessário efetuar a criação de uma nova transição posteriormente.

Quando localizada variabilidade na transição, é necessário armazenar os valores de entrada e saída da transição seguinte, isto é, da transição que tem como estado de origem o estado destino desta transição,(e.i o valor de “variantState”). Estes valores representam os valores da transição de saída de uma variante.

Posteriormente, ainda no Algoritmo 1, é realizada uma nova busca nas transições da FSM a fim de verificar se existe uma transição (t) cujo estado de destino tenha nome idêntico ao nome salvo na variável “stateVp”, caso exista, é acionada uma flag para que não sejam criados estados repetidos. Ainda, se localizado o estado “stateVp”, a transição (t) deverá receber os valores de entrada e saída da transição de entrada da variante que esta sendo agrupada, sendo que, estes valores foram anteriormente armazenados nas variáveis “Input” e “Output”. Ainda, a transição que segue a transição (t) deverá receber os valor de entrada e saída das transições de saída da variante que está sendo agrupada, ou seja, receberá os valores armazenados nas variáveis “TargetInput” e “TargetOutput”

Se percorridas todas as transições da FSM e o valor da flag ainda estiver zerado, significa que o estado VP ainda não foi criado, então é feita a criação de um novo estado e a criação de duas transições, sendo estas as seguintes: a primeira (transition (t)) deverá conter como estado de origem o estado que foi armazenado na variável “Source” e como estado de destino o estado “stateVP”; a segunda transição (transition (t2)), por sua vez receberá como estado de origem o estado “stateVP” e como estado de destino o estado que foi armazenado na variável “Target”.

Posteriormente, as entradas e saídas com variabilidade (“Imput”, “Output”, “TargetInput” e “TargetOutput”) devem ser adicionadas as transições criadas, este processo é demonstrado nas linhas 29 à 32 do Algoritmo 1.

2. Variantes que também representam pontos de variação são “separadas” da FSM original, formando FSMs “particionadas”, i.e. sub-FSMs. Adotou-se esta estratégia, pois em uma FSM é possível existir um conjunto de estados vinculados à determinada variante que não seriam considerados por causa da determinação de Etapa 1, mas que também necessitam ser considerados para a aplicação dos métodos. Esta etapa não se aplica à FSM da Figura 3.1, pois ela não possui tais características. Um exemplo concreto que representa este tipo de situação é apresentado no Capítulo 4;

3. Tendo como base as Etapas 1 e 2, os métodos de geração de sequências de testes são aplicados em dois momentos:

Aplica-se o método na FSM principal considerando a descrição da etapa 1;

Aplica-se o método de geração de sequência de testes em todas as sub-FSMs, quando estas existirem.

4. As sequências geradas a partir das sub-FSMs são unidas às sequências geradas a partir da FSM principal. Quando esta união acontece, as variabilidades presentes nas sequências geradas, a partir da FSM principal, são substituídas pelas sequências geradas pelas sub-FSMs que correspondem a características presentes no produto criado. Esta Etapa não se aplica à FSM da Figura 3.1, pois ela não possui tais características. Um exemplo concreto que representa este tipo de situação é apresentado no Capítulo 4;

Para testes de FSMs parciais, após a execução da etapa um, é necessário efetuar uma suposição de completude, isto é, todos os estados devem possuir transições de saída para todas as entradas do alfabeto de entradas da FSM. Isso se torna possível adicionando para cada entrada faltante uma transição para o próprio estado.

Executadas estas ações, em casos onde existe variabilidade, no momento da geração das sequências de testes (Q, P, W, Wi, HI, UIO, DS,SS) deverão ser consideradas as listas de entradas criadas (pertencentes aos estados VP) e não uma única entrada para cada estado, como acontece na abordagem tradicional (voltada para sistemas únicos).

Por adicionar listas de entradas às sequências de teste, anteriormente formadas apenas por entradas únicas, as sequências de testes geradas a partir da aplicação dos métodos de geração de sequência de testes irão possuir informações de variabilidade. Isso porque cada entrada de uma sequência gerada por um método de geração de sequência de testes, em uma SPL, corresponde a uma ação ou característica de um sistema. Quando se apresenta uma lista de entradas inserida em uma sequência, cria-se uma variabilidade por não determinar qual característica (entrada) o produto possui.

A variabilidade será representada, nas sequências de teste geradas, usando o alfabeto determinado no método SPLiT-MBt [8]. Este alfabeto pode ser visto a seguir:

Op = representa pontos de variação ou variantes opcionais;

VP_OR = representa pontos de variação cujas variantes fazem parte de um grupo de variantes inclusivas (alternative_OR);

VP_xor = representa pontos de variação cujas variantes fazem parte de um grupo de variantes exclusivas (alternative_XOR);

{} = delimita o conjunto de variantes vinculados a um ponto de variação;

() = delimita o conjunto de sequências de teste gerado a partir da aplicação dos métodos sobre a FSM;

[] = delimita o conjunto de sequências de teste gerado a partir da aplicação dos métodos sobres as sub-FSMs;

Ex−> = representa a relação de exclusão (excludes/mutex) entre variantes.

Após serem geradas as sequências com variabilidade na Engenharia de Domínio, é neces- sário resolver esta variabilidade gerando sequências específicas para cada produto. A solução da variabilidade será feita utilizando a abordagem SPLiT-MBt [8], considerando-se as características dos produtos, e respeitadas as relações (optional, requires, mutex) das variabilidades de cada ponto de variação.

Para casos em que variantes deram origem a novas FSMs (sub-FSMs)1, a solução da variabilidade será feita substituindo-se esta variabilidade pelas sequências geradas pela(s) FSM(s) da(s) variante(s) selecionada(s). Já em situações em que a variante não originou nova FSM a variabilidade deverá ser substituída pela entrada do estado que representa a variante.

Quando a variabilidade das variantes associadas a um determinado ponto de variação for do tipo “Or”2, a variabilidade das sequências geradas pela FSM principal deve ser substituída pelas entradas das variantes selecionadas ou pelas sequências geradas pelas FSMs que representam as variantes. Desta forma, para cada variante serão geradas sequências específicas, e.g. uma SPL que possui as variantes “a’‘, “b” e “c” todas do tipo “OR”, para efetuar a solução da variabilidade do produto “a”-“b” deverá substituir a variabilidade das sequências da FSM principal pela entrada (ou sequências de entradas) da variante “a” e posteriormente pela entrada (ou sequências de entradas) da variante “b”.

In document Marine Mammals (sider 74-80)