• Aucun résultat trouvé

Un désert imaginaire : du mythe et de la fabulation

L’Atlantide de Pierre Benoît, maître incontesté du roman

2.3. Un désert imaginaire : du mythe et de la fabulation

exemplo os erros de output. Nesta gama, existem ainda os testes de robustez que visam procurar falhas de execução em condições inválidas em geral como inputs inválidos ou indisponibilidade de rede; os testes de performance/stress que avaliam o desempenho (e.g. tempo de resposta e funcionamento) do SUT em diferentes contextos (e.g. situa- ções de sobrecarga de sistema), e ainda os de usabilidade que visam testar a existência de problemas de interface com o utilizador. A estes poder-se-iam acrescer outros tipos de teste como os de recuperação, que forçam falhas no sistema visando observar a resi- liência do mesmo, ou os testes de segurança, em que o tester poderá assumir a posição de hacker, procurando identificar focos (causas) de possíveis falhas de segurança do SUT e respectivos dados.

Em relação ao eixo do tipo de informação utilizada, os testes de caixa-branca são efectuados objectivamente no código e geralmente são feitos pelo próprio programa- dor (os testes de unidade são um exemplo deste tipo de testes). Sob outro ponto de vista, os testes de caixa-preta são efectuados de forma funcional, onde não existe acesso ao código do sistema e em que este é visto como uma caixa opaca, onde apenas entram dados e saem resultados.

Mais se acrescenta que, conforme [19], os testes de caixa-preta mais utilizados são os testes funcionais, os de robustez e os de aceitação que são similares aos primeiros, com a diferença de serem efectuados pelos clientes. Por fim, existem também os testes mistos, que tanto são de caixa-branca como de caixa-preta, os testes de regressão e os de integração, sendo que os primeiros são, ou devem ser, efectuados a cada alteração considerável do sistema. Concluindo, resta referir que o Model Based Testing, tal como se pode inferir a partir do eixo de classificação, é aplicável a qualquer um dos níveis de dimensão do SUT, e em geral é utilizado para gerar testes funcionais, podendo ser utilizado em alguns testes de robustez como o da inserção de inputs inválidos, sendo que ao nível dos testes de performance não existe ainda grande aplicação, tal como se afirma em [25].

Em relação ao eixo restante, como no "Teste Baseado em Modelos"os testes são de- rivados da especificação e respectivos requisitos, conclui-se que se deve enquadrá-los numa filosofia de caixa preta já apresentada, uma vez que se parte dos requisitos e se procura inferir sobre a sua satisfação.

2.3

Teste baseado em modelos

O Teste baseado em Modelos (Model-based testing, MBT) surge naturalmente na linha de investigação do "Teste de Software"e, em particular, surge da necessidade de auto- matizar a actividade em questão de forma a tornar mais efectiva a geração de testes

2. ESTADO DA ARTE 2.3. Teste baseado em modelos

abstractos a partir de modelos que abstraem o comportamento do SUT, e com meno- res custos em relação àqueles que se teriam caso o SUT fosse testado directamente. A acrescentar há ainda o facto de que quando são modelos especificados de forma ope- racional, as abordagens MBT fornecem um oráculo para os testes gerados [25].

Detalhando o MBT de um modo mais formal, deve referir-se que este resulta do aproveitamento das abordagens de desenvolvimento orientadas aos modelos para de- senvolver os elementos necessários à execução de testes de software. Em particular, neste tipo de abordagem deverá existir um modelo que compreenda os detalhes de di- versos aspectos do SUT do qual é derivado um modelo de testes. Este modelo de teste deve na sua essência descrever alguma informação necessária à execução dos testes (e.g. casos de teste, ambientes de execução dos mesmos, etc).

Já o modelo do SUT, no contexto do MBT, deve descrever em particular aspectos funcionais já que está em causa, tal como se referiu previamente, o desenho de testes de caixa-preta.

Sendo uma abordagem que se firma sobre modelos é importante conhecer o nível de abstracção que os caracteriza. Em rigor, o modelo do SUT deve modular a com- ponente funcional do sistema de uma forma suficientemente abstracta, ou seja, deve modular acima de tudo as saídas do sistema em função das respectivas entradas. Dado que o conjunto de casos de teste abstratos (abstract test suite) é gerado por derivação do modelo do SUT, conclui-se que ambos os modelos (do SUT e de teste) se encontram no mesmo nível de abstracção (figura 2.3).

Este nível de abstracção é diferente (mais alto) daquele em que ocorrem as execu- ções do SUT, e por esse mesmo motivo o conjunto de casos de testes abstractos não pode ser executado directamente sobre o SUT, tornando-se necessário fazer uma deri- vação de um conjunto de casos de testes executáveis a partir do conjunto de casos de testes abstractos que possam correr e interagir directamente sobre o SUT. Isto é feito, obviamente, por meio de mapeamento entre os testes abstractos e os testes executáveis, recorrendo a dados presentes nos modelos de teste que servem para esse propósito.

Sistema Testes Executáveis Testes Abstractos Modelo Executam sobre Interagem com Instâncias executáveis de Derivados do Descreve parcialmente

Figura 2.2: Abordagem de teste baseada em modelos 14

2. ESTADO DA ARTE 2.3. Teste baseado em modelos

Em relação ao Teste baseado em Modelos, de acordo com [25], sabe-se que esta nomenclatura é usada para diferentes abordagens de teste com modelos, que diferem essencialmente no tipo de modelo que é utilizado, e por conseguinte não só na forma como é feito o teste, mas também nos proveitos que se conseguem obter.

Neste sentido aparecem na literatura e na indústria a geração de testes a partir de modelos de domínio, de modelos de ambiente, de modelos funcionais (comporta- mento do sistema) e de modelos descritores da estrutura do SUT.

Em relação à geração de inputs a partir de modelos de domínio é de salientar o facto de os modelos conterem informação sobre o domínio dos valores de input; na verdade, nesta abordagem a geração consiste na selecção e combinação dos valores dos domínios dos inputs, utilizando algoritmos mais ou menos sofisticados, consoante a implementação requerida. Este tipo de abordagem, embora sendo importante, peca por não suportar o conceito de oráculo que permite verificar se o teste passa ou não, pelo que se depreende que esta abordagem não soluciona todo o problema da produ- ção de testes.

Por outro lado tem-se a geração de casos de teste a partir de modelos de ambiente operacional, como por exemplo os modelos estatísticos sobre a frequência da solicita- ção de operações do SUT. Nesta abordagem geram-se sequências de chamadas a opera- ções interpretáveis directamente pelo SUT, todavia à semelhança do que acontece com a anterior, as sequências não discriminam informação sobre os outputs expectáveis, pelo que o problema anterior subsiste nesta abordagem.

Outro tipo de abordagem MBT consiste na transformação de descrições abstracta- mente elevadas de casos de teste, em scripts de teste executáveis (baixo nível de abs- tracção por natureza), sendo que as descrições podem ser feitas com linguagens de mo- delação/especificação como UML, recorrendo aos diagramas inerentes (e.g. sequên- cia). Numa abordagem desta natureza, os modelos são, não só conjuntos de informa- ção sobre a estrutura interna do sistema, como também a própria API do SUT e as regras de transformação das chamadas de alto-nível de abstracção em scripts de teste executáveis.

Por fim, tem-se uma abordagem que toma partido dos modelos funcionais (des- critores do comportamento do sistema) para gerar casos de teste com oráculos. Esta abordagem, ao contrário do que ocorre com as supracitadas, possibilita a geração de oráculos que permitem aferir sobre o sucesso do teste, e em particular é a abordagem com maior relevân- cia nesta dissertação, uma vez que o trabalho proposto segue a mesma filosofia. O objectivo principal é gerar casos de teste que sejam executáveis e que incluam informação dos oráculos, tal como os valores de output esperados, para que se possa a posteriori ve- rificar se estes coincidem com os valores que o SUT efectivamente devolve, aferindo