Testar oráculo

Da Wikipédia, a enciclopédia livre
Ir para a navegação Saltar para pesquisar

Em computação , engenharia de software e teste de software , um oráculo de teste (ou apenas oráculo ) é um mecanismo para determinar se um teste foi aprovado ou reprovado. [1] O uso de oráculos envolve a comparação da(s) saída(s) do sistema em teste, para uma determinada entrada de caso de teste , com a(s) saída(s) que o oráculo determina que o produto deve ter. O termo "oráculo de teste" foi introduzido pela primeira vez em um artigo de William E. Howden. [2] Trabalhos adicionais sobre diferentes tipos de oráculos foram explorados por Elaine Weyuker . [3]

Os oráculos geralmente operam separadamente do sistema em teste. [4] No entanto, as pós-condições do método fazem parte do sistema em teste, como oráculos automatizados em design por modelos de contrato. [5] Determinar a saída correta para uma dada entrada (e um conjunto de programas ou estados do sistema) é conhecido como problema do oráculo ou problema do oráculo de teste, [6] : 507  que é um problema muito mais difícil do que parece, e envolve trabalhar com problemas relacionados à controlabilidade e observabilidade. [7]

Categorias

Um levantamento da literatura de pesquisa cobrindo 1978 a 2012 [6] encontrou várias categorias potenciais de oráculos de teste.

Especificado

Esses oráculos são normalmente associados a abordagens formalizadas para modelagem de software e construção de código de software. Eles estão conectados à especificação formal , [8] design baseado em modelo que pode ser usado para gerar oráculos de teste, [9] especificação de transição de estado para a qual oráculos podem ser derivados para auxiliar o teste baseado em modelo [10] e teste de conformidade de protocolo , [ 11] e projeto por contrato para o qual o oráculo de teste equivalente é uma afirmação .

Os oráculos de teste especificados têm vários desafios. A especificação formal depende da abstração, que por sua vez pode naturalmente ter um elemento de imprecisão, pois todos os modelos não podem capturar todo o comportamento. [6] : 514 

Derivado

Um oráculo de teste derivado diferencia o comportamento correto e incorreto usando informações derivadas de artefatos do sistema. Estes podem incluir documentação, resultados de execução do sistema e características das versões do sistema em teste. [6] : 514  conjuntos de testes de regressão (ou relatórios) são um exemplo de um oráculo de teste derivado - eles são construídos na suposição de que o resultado de uma versão anterior do sistema pode ser usado como auxílio (oráculo) para uma versão futura do sistema. As características de desempenho previamente medidas podem ser usadas como um oráculo para futuras versões do sistema, por exemplo, para acionar uma pergunta sobre a possível degradação de desempenho observada. A documentação textual de versões anteriores do sistema pode ser usada como base para orientar as expectativas em versões futuras do sistema.

Um pseudo-oráculo [6] : 515  se enquadra na categoria de oráculo de teste derivado. Um pseudo-oráculo, conforme definido por Weyuker, [12] é um programa escrito separadamente que pode receber a mesma entrada que o programa ou sistema em teste para que suas saídas possam ser comparadas para entender se pode haver um problema a ser investigado.

Um oráculo parcial [6] : 515  é um híbrido entre o oráculo de teste especificado e o oráculo de teste derivado. Especifica propriedades importantes (mas não completas) do sistema em teste. Por exemplo, o teste metamórfico explora essas propriedades, chamadas relações metamórficas, em várias execuções do sistema.

Implícito

Um oráculo de teste implícito depende de informações e suposições implícitas. [6] : 518  Por exemplo, pode haver alguma conclusão implícita de uma falha de programa, ou seja, comportamento indesejado - um oráculo para determinar que pode haver um problema. Há várias maneiras de pesquisar e testar comportamentos indesejados, alguns chamam de teste negativo, onde existem subconjuntos especializados, como fuzzing .

Existem limitações nos oráculos de teste implícitos - pois eles se baseiam em conclusões e suposições implícitas. Por exemplo, uma falha de programa ou processo pode não ser uma questão prioritária se o sistema for tolerante a falhas e, portanto, operar sob uma forma de autocorreção/ autogerenciamento . Os oráculos de teste implícitos podem ser suscetíveis a falsos positivos devido a dependências do ambiente.

Humano

Quando especificados, oráculos de teste derivados ou implícitos não podem ser usados, então a entrada humana para determinar os oráculos de teste é necessária. [7] Estas podem ser consideradas abordagens quantitativas e qualitativas. [6] : 519–520  Uma abordagem quantitativa visa encontrar a quantidade certa de informações a serem coletadas em um sistema em teste (por exemplo, resultados de testes) para que uma parte interessada possa tomar decisões sobre adequação à finalidade ou a liberação de o software. Uma abordagem qualitativa visa encontrar a representatividade e adequação dos dados de teste de entrada e contexto da saída do sistema em teste. Um exemplo é usar dados de teste realistas e representativos e dar sentido aos resultados (se forem realistas). Elas podem ser guiadas por heurísticasabordagens, como instintos, regras práticas, ajudas de lista de verificação e experiência para ajudar a adaptar a combinação específica selecionada para o programa/sistema em teste.

Exemplos

Os oráculos de teste são mais comumente baseados em especificações e documentação . [13] [14] Uma especificação formal usada como entrada para projeto baseado em modelo e teste baseado em modelo seria um exemplo de um oráculo de teste especificado . O oráculo baseado em modelo usa o mesmo modelo para gerar e verificar o comportamento do sistema. [15] Documentação que não seja uma especificação completa do produto, como um guia de uso ou instalação, ou um registro de características de desempenho ou requisitos mínimos de máquina para o software, normalmente seria um oráculo de teste derivado.

Um oráculo de consistência compara os resultados de uma execução de teste com outra para similaridade. [16] Este é outro exemplo de um oráculo de teste derivado.

Um oráculo para um programa de software pode ser um segundo programa que usa um algoritmo diferente para avaliar a mesma expressão matemática do produto em teste. Este é um exemplo de um pseudo-oráculo, que é um oráculo de teste derivado. [12] : 466 

Durante a pesquisa do Google , não temos um oráculo completo para verificar se o número de resultados retornados está correto. Podemos definir uma relação metamórfica [17] de tal forma que uma busca refinada de acompanhamento produzirá menos resultados. Este é um exemplo de um oráculo parcial, que é um híbrido entre o oráculo de teste especificado e o oráculo de teste derivado.

Um oráculo estatístico usa características probabilísticas, [18] por exemplo com análise de imagem onde uma faixa de certeza e incerteza é definida para o oráculo de teste pronunciar uma correspondência ou não. Este seria um exemplo de abordagem quantitativa em oráculo de teste humano.

Um oráculo heurístico fornece resultados representativos ou aproximados sobre uma classe de entradas de teste. [19] Este seria um exemplo de abordagem qualitativa em oráculo de teste humano.

Referências

  1. ^ Kaner, Cem; Um Curso de Teste de Software Black Box , 2004
  2. ^ Howden, NÓS (julho de 1978). "Estudos teóricos e empíricos de testes de programas". Transações IEEE em Engenharia de Software . 4 (4): 293–298. doi : 10.1109/TSE.1978.231514 .
  3. ^ Weyuker, Elaine J.; "The Oracle Assumption of Program Testing", in Proceedings of the 13th International Conference on System Sciences (ICSS), Honolulu, HI, janeiro de 1980 , pp. 44-49
  4. ^ Jalote, Pankaj; Uma Abordagem Integrada à Engenharia de Software , Springer/Birkhäuser, 2005, ISBN 0-387-20881-X 
  5. ^ Meyer, Bertrand; Fiva, Arno; Ciúpa, Ilinca; Leitner, Andréas; Wei, Yi; Stapf, Emmanuel (setembro de 2009). "Programas que se testam". Computador . 42 (9): 46–55. doi : 10.1109/MC.2009.296 .
  6. ^ a b c d e f g h Barr, Conde T.; Harman, Mark; McMinn, Phil; Shahbaz, Muzammil; Yoo, Shin (novembro de 2014). "O problema Oracle no teste de software: uma pesquisa" (PDF) . Transações IEEE em Engenharia de Software . 41 (5): 507-525. doi : 10.1109/TSE.2014.2372785 .
  7. ^ a b Ammann, Paul; e Offutt, Jeff; "Introdução ao Teste de Software", Cambridge University Press , 2008, ISBN 978-0-521-88038-1 
  8. ^ Börger, E (1999). Hutter, D; Stephan, W; Traverso, P; Ullman, M (eds.). Projeto e Análise de Sistemas de Alto Nível Usando Máquinas de Estado Abstratas . Métodos formais aplicados — FM-Trends 98 . Notas de aula em Ciência da Computação. Vol. 1641. pp. 1–43. CiteSeerX 10.1.1.470.3653 . doi : 10.1007/3-540-48257-1_1 . ISBN  978-3-540-66462-8.
  9. ^ Peters, DK (março de 1998). "Usando oráculos de teste gerados a partir da documentação do programa". Transações IEEE em Engenharia de Software . 24 (3): 161–173. CiteSeerX 10.1.1.39.2890 . doi : 10.1109/32.667877 . 
  10. ^ Utting, Mark; Pretschner, Alexandre; Legardo, Bruno (2012). "Uma taxonomia de abordagens de teste baseadas em modelo" (PDF) . Teste, Verificação e Confiabilidade de Software . 22 (5): 297–312. doi : 10.1002/stvr.456 . ISSN 1099-1689 .  
  11. ^ Gaudel, Marie-Claude (2001). Craeynest, D.; Strohmeier, A (eds.). Testes a partir de especificações formais, uma abordagem genérica . Tecnologias de Software Confiáveis ​​— Ada-Europe 2001 . Notas de aula em Ciência da Computação. Vol. 2043. pp. 35–48. doi : 10.1007/3-540-45136-6_3 . ISBN 978-3-540-42123-8.
  12. ^ a b Weyuker, EJ (novembro de 1982). "Ao testar programas não testáveis" . O Diário do Computador . 25 (4): 465–470. doi : 10.1093/comjnl/25.4.465 .
  13. ^ Peters, Dennis K. (1995). Gerando um Oracle de Teste a partir da Documentação do Programa (tese de M. Eng.). Universidade McMaster. CiteSeerX 10.1.1.69.4331 . 
  14. ^ Peters, Dennis K.; Parnas, David L. "Gerando um Oracle de Teste da Documentação do Programa" (PDF) . Proceedings of the 1994 International Symposium on Software Testing and Analysis . ISSTA. Imprensa ACM. págs. 58–65.
  15. ^ Robinson, Harry; Testes Baseados em Modelos de Estado Finito em um Cordão , STAR West 1999
  16. ^ Hoffman, Douglas; Análise de uma Taxonomia para Oráculos de Teste , Semana da Qualidade, 1998
  17. ^ Zhou, ZQ; Zhang, S.; Hagenbuchner, M.; Tse, TH; Kuo, F.-C.; Chen, TY (2012). "Teste funcional automatizado de serviços de pesquisa online". Teste, Verificação e Confiabilidade de Software . 22 (4): 221–243. doi : 10.1002/stvr.437 . HD : 10722/123864 .
  18. ^ Mayer, Johannes; Guderlei, Ralph (2004). "Teste Oráculos Usando Métodos Estatísticos" (PDF) . Anais do Primeiro Workshop Internacional sobre Qualidade de Software, Notas de Palestra em Informática . Primeiro Workshop Internacional de Qualidade de Software. Springer. págs. 179-189.
  19. ^ Hoffman, Douglas; Oráculos de Teste Heurístico , Revista de Engenharia de Qualidade e Teste de Software, 1999

Bibliografia

  • Binder, Robert V. (1999). "Capítulo 18 - Oráculos" em Testing Object-Oriented Systems: Models, Patterns, and Tools , Addison-Wesley Professional, 7 de novembro de 1999, ISBN 978-0-201-80938-1