Benutzer:H3xc0d3r/Metamorphes Testen

aus Wikipedia, der freien Enzyklopädie

Metamorphes Testen beschreibt eine eigenschaften-basierte Testmethode der Informatik, die auf vorhandenen Testfällen aufbaut und das Orakelproblem vermeidet. Dies gelingt, indem metamorphe Relationen zwischen einerseits zwei Testfällen und andererseits deren Ergebnissen geprüft werden.

Beispiel

Bei der Berechnung der mathematischen Sinusfunktion kann z.B. die Symmetrie-Eigenschaft "sin (π − x) = sin x" für weitere Tests verwendet werden. Wenn y = sin x, dann wird auch y = sin (π − x) erwartet. Die metamorphe Relation der Eingangsdaten ist hier durch die Funktion f(x) = π − x beschrieben und die Relation der Ergebnisdaten ist Gleichheit (Äquivalenz). Wenn (im Rahmen der Rechenungenauigkeiten) Abweichungen festgestellt werden, liegt ein Fehler wegen Verletzung der Symmetrieeigenschaft vor. Dabei muss der genaue Wert von y nicht bekannt sein.

Formalismus

Geschichte

T.Y.Chen, S.C. Cheung und S.M. Yiu beschrieben das Verfahren 1998 in einem technischem Report der Universität Hong Kong [1] und nannten die Methode "metamorphic testing".

Die Testmethode wurde in Folge weiterentwickelt und fand u.a. in den Bereichen Web services,[2] Computergrafik,[3] Embedded systems,[4] Simulation und Modellierung,[5] Machine learning,[6] Bioinformatik,[7] components,[8] Numerischer Analyse,[9] Codegeneratoren [10] und Compilern[11] Anwendung.

Anwendungsfälle

Compilertests

Ein vorhandener, syntaktisch korrekter Programmcode wird mit semantik-erhaltenden Umformungen toolgestützt abgewandelt, d.h. der gleiche Arbeitsschritt wird jeweils nur anders ausgedrückt. Beim Erzeugen und Lauf des neuen Programms wird das gleiche Ergebnis erwartet, da die Semantik nicht verändert wurde. Abweichungen im Ergebnis sind dann auf Fehler im Compiler, Linker oder evtl. der Hardware zurückzuführen. Ob ein Ergebnis an sich richtig ist wird nicht bewertet (dies würde ein Orakel erfordern), sondern nur ob die Ergebnisse übereinstimmen. Die Relation zwischen den Ergebnissen ist hier Äquivalenz, die zwischen den Programmcodevarianten ist "beide haben die gleiche Semantik".

Verwendete Umformungen können sein:

  • Redundanz erzeugen (unbenutzte Variablen einführen, toten Code einführen, Wrapper verwenden: if-Zweige mit konstanten Bedingungen, try-catch-Blöcke, Schleifen mit einem Durchlauf usw.)
  • arithmetische Ausdrücke umformen, logische Ausdrücke umformen
  • Indirektion einführen: lesender Direktzugriff auf eine Variable durch einen Getter-Aufruf ersetzen

Eine sehr erfolgreiche Variante lässt ein gegebenes Programm mit einem vorgegebenen Testfall laufen und analysiert welche Programmzweige durchlaufen wurden. Anschließend wird der Programmcode an den Stellen syntaktisch verändert, die nicht durchlaufen wurden, und der Testfall wird wiederholt. Da nur Stellen verändert wurden, die nicht benutzt wurden, sollte das Ergebnis unverändert bleiben.

Abfragen mit Ergebnismengen

Bei der Verwendung von stärker einschränkenden Filtern sollte die Anzahl der Ergebnisse nicht wachsen.

Tools

MF++ (Open source auf github)

GraphicFuzz (kommerziell) wird für Tests der OpenGL-Shadercompiler in Grafiktreibern verwendet.

Literatur

Quellen

Kategorie:Software Kategorie:Qualitätsmanagement (Softwaretechnik)

  1. T.Y. Chen, S.C. Cheung, S.M. Yiu: Metamorphic testing: A new approach for generating next test cases. Technical Report HKUST-CS98-01. Hrsg.: Department of Computer Science, The Hong Kong University of Science and Technology, Hong Kong. 1998, arxiv:2002.12543 (ust.hk [PDF])..
  2. C. Castro-Cabrera and I. Medina-Bulo, "An approach to metamorphic testing for WS-BPEL compositions", in Proceedings of the International Conference on e-Business, IEEE (2011).
  3. R. Guderlei and J. Mayer, "Towards automatic testing of imaging software by means of random and metamorphic testing", International Journal of Software Engineering and Knowledge Engineering 17 (6): 757−781 (2007).
  4. T.H. Tse, S.S. Yau, W.K. Chan, H. Lu, and T.Y. Chen, "Testing context-sensitive middleware-based software applications", in Proceedings of the 28th Annual International Computer Software and Applications Conference (COMPSAC '04), vol. 1, IEEE Computer Society, pp. 458−465 (2004).
  5. S. Segura, R.M. Hierons, D. Benavides, and A. Ruiz-Cortes, "Automated test data generation on the analyses of feature models: a metamorphic testing approach", in Proceedings of the 3rd International Conference on Software Testing, Verification, and Validation (ICST '10), IEEE Computer Society, pp. 35−44 (2010).
  6. J. Ding, X.-H. Hu, and V. Gudivada, "A machine learning based framework for verification and validation of massive scale image data", IEEE Transactions on Big Data (2017). doi: 10.1109/TBDATA.2017.2680460.
  7. L.L. Pullum and O. Ozmen, "Early results from metamorphic testing of epidemiological models", in Proceedings of the 2012 ASE/IEEE International Conference on BioMedical Computing (BioMedCom '12), IEEE Computer Society, pp. 62−67 (2012).
  8. S. Beydeda, "Self-metamorphic-testing components", in Proceedings of the 30th Annual International Computer Software and Applications Conference (COMPSAC '06), vol. 1, IEEE Computer Society, pp. 265−272 (2006).
  9. C. Aruna and R.S.R. Prasad, "Metamorphic relations to improve the test accuracy of multi precision arithmetic software applications", in Proceedings of the 2014 International Conference on Advances in Computing, Communications and Informatics (ICACCI '14), IEEE (2014).
  10. Mohamed Boussaa, Olivier Barais, Gerson Sunyé, Benoit Baudry: Leveraging metamorphic testing to automatically detect inconsistencies in code generator families. In: Software Testing, Verification and Reliability. 30, Nr. 1, January 2020, ISSN 0960-0833. doi:10.1002/stvr.1721.
  11. C. Lidbury, A. Lascu, N. Chong, and A.F. Donaldson, "Many-core compiler fuzzing", in Proceedings of the 36th ACM SIGPLAN Conference on Programming Language Design and Implementation (PLDI '15), ACM, pp. 65−76 (2015).