{"id":34842,"date":"2022-08-18T15:12:12","date_gmt":"2022-08-18T13:12:12","guid":{"rendered":"https:\/\/www.skaylink.com\/?p=34842"},"modified":"2024-04-03T15:16:34","modified_gmt":"2024-04-03T13:16:34","slug":"fehlerhafte-codes-schnell-und-sicher-erkennen","status":"publish","type":"post","link":"https:\/\/www.skaylink.com\/de\/insights\/blog\/fehlerhafte-codes-schnell-und-sicher-erkennen\/","title":{"rendered":"Mutationstests"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"34842\" class=\"elementor elementor-34842\" data-elementor-post-type=\"post\">\n\t\t\t\t<div class=\"elementor-element elementor-element-56612d24 header-keyvisual-container e-flex e-con-boxed e-con e-parent\" data-id=\"56612d24\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-14b3ee7d elementor-align-left elementor-widget elementor-widget-breadcrumbs\" data-id=\"14b3ee7d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"breadcrumbs.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<p id=\"breadcrumbs\"><span><span><a href=\"https:\/\/www.skaylink.com\/de\/\">Home<\/a><\/span><\/span><\/p>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-488a8972 e-con-full e-flex e-con e-child\" data-id=\"488a8972\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-39f18637 header-keyvisual-content e-con-full e-flex e-con e-child\" data-id=\"39f18637\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-125847f elementor-widget elementor-widget-image\" data-id=\"125847f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"1920\" height=\"1080\" src=\"https:\/\/www.skaylink.com\/wp-content\/uploads\/2022\/08\/Headerbild-Blog-Fehlerhafte-Codes-1.jpg\" class=\"attachment-full size-full wp-image-34856\" alt=\"\" srcset=\"https:\/\/www.skaylink.com\/wp-content\/uploads\/2022\/08\/Headerbild-Blog-Fehlerhafte-Codes-1.jpg 1920w, https:\/\/www.skaylink.com\/wp-content\/uploads\/2022\/08\/Headerbild-Blog-Fehlerhafte-Codes-1-300x169.jpg 300w, https:\/\/www.skaylink.com\/wp-content\/uploads\/2022\/08\/Headerbild-Blog-Fehlerhafte-Codes-1-1024x576.jpg 1024w, https:\/\/www.skaylink.com\/wp-content\/uploads\/2022\/08\/Headerbild-Blog-Fehlerhafte-Codes-1-768x432.jpg 768w, https:\/\/www.skaylink.com\/wp-content\/uploads\/2022\/08\/Headerbild-Blog-Fehlerhafte-Codes-1-1536x864.jpg 1536w\" sizes=\"(max-width: 1920px) 100vw, 1920px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-7abb40c7 e-con-full e-flex e-con e-child\" data-id=\"7abb40c7\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-6f938ebe elementor-widget elementor-widget-text-editor\" data-id=\"6f938ebe\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Blog<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-756ade2e elementor-widget elementor-widget-heading\" data-id=\"756ade2e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h1 class=\"elementor-heading-title elementor-size-default\">Mutationstests<\/h1>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4a510b62 elementor-widget elementor-widget-text-editor\" data-id=\"4a510b62\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\tAutomatische Qualit\u00e4tssicherung: Jeder Code kann Fehler haben. Erfahren Sie, wie man die Qualit\u00e4t eines Qualit\u00e4tstests \u00fcberpr\u00fcfen kann.\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-5c3ec67f e-flex e-con-boxed e-con e-parent\" data-id=\"5c3ec67f\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-1711b193 e-flex e-con-boxed e-con e-child\" data-id=\"1711b193\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-20ac85ce e-flex e-con-boxed e-con e-child\" data-id=\"20ac85ce\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-6a524668 elementor-widget elementor-widget-text-editor\" data-id=\"6a524668\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t18. August 2022\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-26f07f4e e-flex e-con-boxed e-con e-child\" data-id=\"26f07f4e\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-55537f9 e-flex e-con-boxed e-con e-child\" data-id=\"55537f9\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-388a31d8 elementor-widget elementor-widget-author-box\" data-id=\"388a31d8\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"author-box.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-author-box\">\n\t\t\t\n\t\t\t<div class=\"elementor-author-box__text\">\n\t\t\t\t\t\t\t\t\t<div >\n\t\t\t\t\t\t<span class=\"elementor-author-box__name\">\n\t\t\t\t\t\t\tThomas Lindegaard\t\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/div>\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-365b36d0 e-flex e-con-boxed e-con e-child\" data-id=\"365b36d0\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-110c30c1 elementor-widget elementor-widget-author-box\" data-id=\"110c30c1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"author-box.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-author-box\">\n\t\t\t\n\t\t\t<div class=\"elementor-author-box__text\">\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-418ef2dc e-flex e-con-boxed e-con e-parent\" data-id=\"418ef2dc\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-34792bd e-con-full e-flex e-con e-child\" data-id=\"34792bd\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-3e3befdb elementor-widget elementor-widget-text-editor\" data-id=\"3e3befdb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Qualit\u00e4tssicherung durch Code Coverage und Mutationstests<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1ae35ba4 elementor-widget elementor-widget-heading\" data-id=\"1ae35ba4\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Fehlerhafte Codes schnell und sicher erkennen<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7893e809 elementor-widget elementor-widget-text-editor\" data-id=\"7893e809\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Arbeitet man in der L\u00f6sungsentwicklung mit automatischer Qualit\u00e4tssicherung verl\u00e4sst man sich auf die Tests: Sie sollen pr\u00fcfen, ob ein Code gut funktioniert oder nicht. Doch wie l\u00e4sst sich die Qualit\u00e4t eines Qualit\u00e4tstests \u00fcberpr\u00fcfen? Denn auch diese Tests beruhen auf Code \u2013 und jeder Code kann fehlerhaft sein. Wie also kann man einen solchen Test \u00fcberpr\u00fcfen?<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-6f590e4 e-flex e-con-boxed e-con e-parent\" data-id=\"6f590e4\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-d2f6086 e-con-full e-flex e-con e-child\" data-id=\"d2f6086\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-4af3335 elementor-widget elementor-widget-heading\" data-id=\"4af3335\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Kriterien f\u00fcr die Qualit\u00e4t eines Tests<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-db766f4 elementor-widget elementor-widget-text-editor\" data-id=\"db766f4\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<ul><li>Objektivit\u00e4t: Misst der Test unabh\u00e4ngig von den eigenen Erwartungen? Bei einem Qualit\u00e4tstest hei\u00dft das, er erfasst auch Fehler, die die Entwickler*innen nicht vorhersagen konnten.<\/li><li>Reliabilit\u00e4t: Misst der Test ausreichend genau?<\/li><li>Validit\u00e4t: Misst der Test auch wirklich das, was er soll?<\/li><\/ul>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-a4e628e e-flex e-con-boxed e-con e-parent\" data-id=\"a4e628e\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-31eebb3f e-con-full e-flex e-con e-child\" data-id=\"31eebb3f\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-761e5f14 elementor-widget elementor-widget-heading\" data-id=\"761e5f14\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Code Coverage\u200b<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7b028406 elementor-widget elementor-widget-text-editor\" data-id=\"7b028406\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Rekursion, d.h. das immer neue Schreiben von Tests f\u00fcr die Tests, f\u00fchrt schnell in eine Endlosschleife. Eine L\u00f6sung ist Code Coverage. Hierbei wird quantitativ gemessen, wie viel Code durch die vorhandenen Tests beeinflusst wird. An einem konkreten Beispiel erkl\u00e4rt: Die Methode soll den Namen einer Person mit \u201eMr. &#8220; davor versehen, wenn die Person 21 Jahre oder \u00e4lter ist:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-9cc912f elementor-widget elementor-widget-image\" data-id=\"9cc912f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"310\" height=\"173\" src=\"https:\/\/www.skaylink.com\/wp-content\/uploads\/2022\/08\/code_1.webp\" class=\"attachment-full size-full wp-image-34878\" alt=\"\" srcset=\"https:\/\/www.skaylink.com\/wp-content\/uploads\/2022\/08\/code_1.webp 310w, https:\/\/www.skaylink.com\/wp-content\/uploads\/2022\/08\/code_1-300x167.webp 300w\" sizes=\"(max-width: 310px) 100vw, 310px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-755e971 elementor-widget elementor-widget-text-editor\" data-id=\"755e971\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Mit Code Coverage l\u00e4sst sich untersuchen, ob alle Zweige des Codes betroffen sind. Im Beispiel kann Code Coverage sagen, ob der Test die Szenarien abdeckt, in denen wir die if-Anweisung eingeben. Mit folgendem Test erreichen wir 100 Prozent Code Coverage f\u00fcr die Methode:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-16f64a8 elementor-widget elementor-widget-image\" data-id=\"16f64a8\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"350\" height=\"155\" src=\"https:\/\/www.skaylink.com\/wp-content\/uploads\/2022\/08\/code_2.webp\" class=\"attachment-full size-full wp-image-34880\" alt=\"\" srcset=\"https:\/\/www.skaylink.com\/wp-content\/uploads\/2022\/08\/code_2.webp 350w, https:\/\/www.skaylink.com\/wp-content\/uploads\/2022\/08\/code_2-300x133.webp 300w\" sizes=\"(max-width: 350px) 100vw, 350px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1b2058e elementor-widget elementor-widget-text-editor\" data-id=\"1b2058e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Das Beispiel verdeutlicht zwei M\u00e4ngel von <a href=\"https:\/\/docs.microsoft.com\/de-de\/azure\/devops\/pipelines\/test\/review-code-coverage-results?view=azure-devops\" target=\"_blank\" rel=\"noopener\">Code Coverage<\/a>: Erstens kann dadurch nur eines von zwei Ergebnissen abgedeckt werden, im Beispiel dasjenige mit dem vorangestellten Titel. Zweitens l\u00e4sst sich dieselbe Code Coverage erreichen, ohne tats\u00e4chlich etwas zu testen:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6a2a582 elementor-widget elementor-widget-image\" data-id=\"6a2a582\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"391\" height=\"170\" src=\"https:\/\/www.skaylink.com\/wp-content\/uploads\/2022\/08\/code_3.webp\" class=\"attachment-full size-full wp-image-34882\" alt=\"\" srcset=\"https:\/\/www.skaylink.com\/wp-content\/uploads\/2022\/08\/code_3.webp 391w, https:\/\/www.skaylink.com\/wp-content\/uploads\/2022\/08\/code_3-300x130.webp 300w\" sizes=\"(max-width: 391px) 100vw, 391px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ef76a1f elementor-widget elementor-widget-text-editor\" data-id=\"ef76a1f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Hier wird eine Code Coverage von 100 Prozent erreicht \u2013 aber selbst, wenn der Code einen Fehler enth\u00e4lt, wird der Test niemals fehlschlagen. Auch bei einer Codeabdeckung von 100 Prozent l\u00e4sst sich daher nicht sagen, dass die Tests umfassend sind. Code Coverage kann also Bereiche aufzeigen, die nicht getestet wurden. Aber das Tool ist nicht stark genug, um zu best\u00e4tigen, dass Tests so funktionieren, wie sie sollten.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-31d1220 e-flex e-con-boxed e-con e-parent\" data-id=\"31d1220\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-761504b e-con-full e-flex e-con e-child\" data-id=\"761504b\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-4bed301 elementor-widget elementor-widget-heading\" data-id=\"4bed301\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Mutationstests<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-2ed2162 elementor-widget elementor-widget-text-editor\" data-id=\"2ed2162\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Die Alternative zu Code Coverage sind sogenannte Mutationstests. Beim Mutationstest wird gemessen, wie gut getestet wurde, indem der Produktionscode mutiert und der geschriebenen Test-Code beibehalten wird. Man ver\u00e4ndert also bewusst den urspr\u00fcnglich getesteten Code, um zu sehen, ob die Tests damit fehlschlagen. Eine einfache Mutation w\u00e4re z.B. eine \u00c4nderung von &#8222;&gt;&#8220; in &#8222;&gt; =&#8220;.<\/p><ul><li>Wenn die \u00c4nderung dazu f\u00fchrt, dass ein oder mehrere Tests fehlschlagen, nennt man die Mutation &#8222;tot&#8220; \u2013 was gro\u00dfartig ist, da der Test funktioniert hat.<\/li><li>F\u00fchrt die Mutation hingegen nicht zu einem Fehlschlag, hat die Mutation \u201e\u00fcberlebt\u201c. F\u00fcr jede \u201e\u00fcberlebende\u201c Mutation gibt es eine Stelle im Code, die ver\u00e4ndert werden kann, ohne entdeckt zu werden. Je mehr \u201e\u00fcberlebende\u201c Mutationen, desto schlechter ist der Qualit\u00e4tstest.<\/li><\/ul><p>Zwei Beispiele f\u00fcr Mutationen im Beispiel-Code:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1c391c3 elementor-widget elementor-widget-image\" data-id=\"1c391c3\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"262\" height=\"300\" src=\"https:\/\/www.skaylink.com\/wp-content\/uploads\/2022\/08\/code_4.webp\" class=\"attachment-full size-full wp-image-34884\" alt=\"\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-e725cb6 e-flex e-con-boxed e-con e-parent\" data-id=\"e725cb6\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-58a1dff e-con-full e-flex e-con e-child\" data-id=\"58a1dff\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-32bc7b1 elementor-widget elementor-widget-heading\" data-id=\"32bc7b1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Werkzeuge<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6f6d700 elementor-widget elementor-widget-text-editor\" data-id=\"6f6d700\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Mutationstests von Hand w\u00e4ren unzuverl\u00e4ssig und ineffizient. Darum gibt es <a href=\"https:\/\/docs.microsoft.com\/en-us\/archive\/msdn-magazine\/2006\/april\/create-a-simple-mutation-testing-system-with-the-net-framework\" target=\"_blank\" rel=\"noopener\">Tools<\/a>, die eine Vielzahl von Mutationen durchf\u00fchren und die Tests damit dann automatisch testen. Diese Tools erstellen auch Berichte, die die \u00fcberlebenden Mutationen beschreiben.<\/p><p>In einem Hackathon haben unserer Expert*innen <a href=\"https:\/\/github.com\/stryker-mutator\/stryker-net\" target=\"_blank\" rel=\"noopener\">Stryker.NET<\/a> in drei laufenden Projekten eingesetzt. Die Resultate sind von Projekt zu Projekt und von Klasse zu Klasse unterschiedlich. Hier ein Teilergebnis, bei dem 76 Prozent der Mutationen \u201estarben\u201c:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-93facab elementor-widget elementor-widget-image\" data-id=\"93facab\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"780\" height=\"125\" src=\"https:\/\/www.skaylink.com\/wp-content\/uploads\/2022\/08\/code_5.webp\" class=\"attachment-full size-full wp-image-34886\" alt=\"\" srcset=\"https:\/\/www.skaylink.com\/wp-content\/uploads\/2022\/08\/code_5.webp 780w, https:\/\/www.skaylink.com\/wp-content\/uploads\/2022\/08\/code_5-300x48.webp 300w, https:\/\/www.skaylink.com\/wp-content\/uploads\/2022\/08\/code_5-768x123.webp 768w\" sizes=\"(max-width: 780px) 100vw, 780px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-cf3d48b elementor-widget elementor-widget-text-editor\" data-id=\"cf3d48b\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Eine Methode in einer Klasse hat ein seltsames Ergebnis geliefert. Diese Methode ist ung\u00fcltig: Alle Mutationen des Codes selbst innerhalb dieser Methode wurden durch Tests gefunden, aber die Mutante, die den gesamten Code entfernte, \u201e\u00fcberlebte\u201c. Es gab also keine Tests, die die Nebenwirkungen dieser Methode erkannten.<\/p><p>In der <a href=\"https:\/\/stryker-mutator.io\/docs\/stryker-net\/introduction\/\" target=\"_blank\" rel=\"noopener\">aktuellen Version des verwendeten Tools<\/a> haben unsere Expert*innen einige H\u00fcrden gefunden. Unter anderem dauert die Ausf\u00fchrung in einer Continuous-Integration-Pipeline lange, weshalb es manchmal zu Zeit\u00fcberschreitungen kam. Das bedeutet, dass das Tool nicht gut als Gate in Pipelines verwendet werden kann. Stattdessen kann man t\u00e4glich Mutationstests durchf\u00fchren und die Ergebnisse kontinuierlich analysieren. Die Zeit, die das in Anspruch nimmt, w\u00e4chst exponentiell mit der Menge und Komplexit\u00e4t des Codes. Eine Microservice-Architektur verk\u00fcrzt die Prozesszeit. Das Tool kann aber auch direkt im Entwicklungsprozess integriert werden. Hier k\u00f6nnen nur die Bereiche des Codes mutiert werden, an denen gearbeitet wird.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-bba7d31 e-flex e-con-boxed e-con e-parent\" data-id=\"bba7d31\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-bbfb26d e-con-full e-flex e-con e-child\" data-id=\"bbfb26d\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-458ed48 elementor-widget elementor-widget-heading\" data-id=\"458ed48\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Fazit<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e65fee3 elementor-widget elementor-widget-text-editor\" data-id=\"e65fee3\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Mutationstests helfen, die Qualit\u00e4tssicherung bei Software zu verbessern. Sie stellen sicher, dass die Tests, die Developer schreiben und auf die sie sich verlassen, tats\u00e4chlich geeignet sind und einen Mehrwert bieten. Unsere Expert*innen empfehlen, Mutationstests zu Beginn zu priorisieren. Korrelieren Sie hierzu beispielsweise Mutations-Scores mit einer Hot-Spot-Analyse. So k\u00f6nnen Sie\u00a0 zuerst mit den Bereichen im Code arbeiten, die sich h\u00e4ufig \u00e4ndern &#8211; in Kombination mit der Tatsache, dass es viele \u00fcberlebende Mutanten gibt.<\/p><p>Unsere Entwickler*innen erstellen ma\u00dfgeschneiderte L\u00f6sungen f\u00fcr Kunden aus ganz unterschiedlichen Branchen. <a href=\"https:\/\/www.skaylink.com\/de\/application-innovation\/\" rel=\"noopener\">Mehr Informationen dazu finden Sie hier.<\/a><\/p><p><em>Dieser Beitrag wurde uns freundlicherweise von der Skaylink Tochter cVation zur Verf\u00fcgung gestellt. Den Originalbeitrag finden Sie\u00a0<a href=\"https:\/\/www.cvation.com\/en\/news\/using-mutation-test-to-ensure-the-quality-of-tests\" target=\"_blank\" rel=\"noopener\">hier<\/a>.<\/em><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Automatische Qualit\u00e4tssicherung: Jeder Code kann Fehler haben. Erfahren Sie, wie man die Qualit\u00e4t eines Qualit\u00e4tstests \u00fcberpr\u00fcfen kann.<\/p>\n","protected":false},"author":23,"featured_media":34856,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[26],"tags":[121,120],"class_list":["post-34842","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog","tag-development","tag-ki-ml"],"acf":[],"_links":{"self":[{"href":"https:\/\/www.skaylink.com\/de\/wp-json\/wp\/v2\/posts\/34842","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.skaylink.com\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.skaylink.com\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.skaylink.com\/de\/wp-json\/wp\/v2\/users\/23"}],"replies":[{"embeddable":true,"href":"https:\/\/www.skaylink.com\/de\/wp-json\/wp\/v2\/comments?post=34842"}],"version-history":[{"count":13,"href":"https:\/\/www.skaylink.com\/de\/wp-json\/wp\/v2\/posts\/34842\/revisions"}],"predecessor-version":[{"id":72377,"href":"https:\/\/www.skaylink.com\/de\/wp-json\/wp\/v2\/posts\/34842\/revisions\/72377"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.skaylink.com\/de\/wp-json\/wp\/v2\/media\/34856"}],"wp:attachment":[{"href":"https:\/\/www.skaylink.com\/de\/wp-json\/wp\/v2\/media?parent=34842"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.skaylink.com\/de\/wp-json\/wp\/v2\/categories?post=34842"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.skaylink.com\/de\/wp-json\/wp\/v2\/tags?post=34842"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}