Metamorf testning är en metod för både generering av testfall och verifiering av testresultat. Ett centralt element är en uppsättning metamorfa relationer, som är nödvändiga egenskaper hos målfunktionen eller algoritmen i förhållande till flera ingångar och deras förväntade utgångar. Sedan dess första publikation har vi bevittnat ett snabbt ökande arbete med att undersöka metamorf testning ur olika perspektiv, bland annat metamorf relationsidentifiering, testfallsgenerering, integration med andra mjukvarutekniska tekniker samt validering och utvärdering av programvarusystem. I den här artikeln går vi igenom aktuell forskning om metamorf testning och diskuterar de utmaningar som återstår att ta itu med. Vi presenterar också visioner för ytterligare förbättring av metamorf testning och lyfter fram möjligheter till ny forskning. Tillstånd att göra digitala eller papperskopior av hela eller delar av detta arbete för personligt bruk eller klassrum beviljas utan avgift, förutsatt att kopiorna inte görs eller distribueras för vinst eller kommersiella fördelar och att kopiorna är försedda med detta meddelande och den fullständiga hänvisningen på första sidan. Upphovsrätt till delar av detta verk som ägs av andra än ACM måste hedras. Abstraktering med kredit är tillåten. För att kopiera på annat sätt, eller återpublicera, för att posta på servrar eller för att omfördela till listor, krävs tidigare specifik behörighet och/eller avgift. Begär tillstånd från authoritys@acm.org.  Testning av programvara är en vanlig metod för kvalitetssäkring och verifiering av programvara. Den står emellertid inför två grundläggande problem: orakelproblemet och det tillförlitliga testset problemet. Orakelproblemet avser situationer där det är extremt svårt, eller omöjligt, att verifiera testresultatet av ett givet testfall (dvs. en inmatning som valts för att testa programmet). Normalt krävs, efter genomförandet av ett testfall t, en systematisk mekanism som kallas ett testorakel (eller helt enkelt ett orakel) för att kontrollera resultatet. Om resultatet inte stämmer överens med det förväntade resultatet säger vi att t misslyckas och hänvisar till det som ett testfall som orsakar fel. Annars säger vi att t lyckas och hänvisar till det som ett framgångsrikt, eller icke-misslyckande, testfall. I många verkliga situationer kan det dock inte finnas ett orakel, eller så kan det finnas, men resursbegränsningar gör det omöjligt att använda det. Det tillförlitliga testset problemet innebär att eftersom det normalt inte är möjligt att exekvera alla möjliga testfall, är det svårt att effektivt välja en delmängd av testfall (det tillförlitliga testsetet) med förmågan att bestämma riktigheten av programmet. Ett antal strategier har föreslagits för att generera test fall för att ta itu med tillförlitliga test uppsättning problem, inklusive slumpmässiga testning [39], täckning testning [101], sök-baserad testning [40], och symboliskt utförande [11]. Jämfört med strategier för testfallsgenerering har endast ett fåtal tekniker föreslagits för att ta itu med orakelproblemet, såsom kontroll av påståenden [79] och program för N-version [61]. När oraklet problem uppstår, många strategier för tillförlitliga test uppsättning problem har begränsad tillämplighet och effektivitet. Oavsett hur effektiv en strategi är i att generera ett fel-orsakande test fall, om det inte leder till en krasch av programmet under test, att misslyckande kan inte erkännas i närvaro av oraklet problem. Till skillnad från de flesta andra metoder för testning av programvara kan Metamorphic Testing (MT) [15] användas för både generering av testfall och kontroll av testresultat och därmed ta itu med både grundläggande problem med testning. Även om det ursprungligen föreslogs som en metod för att generera nya testfall baserade på framgångsrika, blev det snart uppenbart att MT också är en effektiv metod för att lindra orakelproblemet. En central del av MT är en uppsättning Metamorphic Relations (MRs), som är nödvändiga egenskaper hos målfunktionen eller algoritmen i förhållande till flera ingångar och deras förväntade utgångar. När MT implementeras genereras först vissa programindata (kallade källindata) som källtestfall, på grundval av vilka en MR sedan kan användas för att generera nya indata som uppföljningstestfall. Till skillnad från det traditionella sättet att kontrollera testresultatet för varje enskilt testfall kontrollerar MT käll- och uppföljande testfall samt deras utfall mot motsvarande MR. Sedan den första publikationen 1998 har ett stort antal studier genomförts om olika aspekter av MT. Särskilt under de senaste åren har MT dragit till sig allt större uppmärksamhet och har bidragit till att upptäcka ett stort antal verkliga fel. Det var till exempel en överraskning för programvarutestningsvärlden när MT lyckades upptäcka nya fel [77, 93] i tre av sju program i Siemens-sviten [43], trots att dessa program upprepade gånger hade studerats i större programvarutestningsforskningsprojekt i tjugo år. Dessutom, Le et al. [50] upptäcktes över 100 fel i två populära C kompilatorer (GCC och LLVM) baserat på en enkel relation, som snabbt insåg att vara en MR [51, 78]. Utöver sin omfattande användning vid testning av programvara [8, 13, 14, 16, 20, 50-52, 83, 91, 99] har MT i stor utsträckning använts för att ta itu med oraklets problem i ett vidare sammanhang av programvaruteknik [3, 27, 29, 45, 46, 57, 77, 92, 93]. Det har också använts som en teknik för validering [91] och kvalitetsbedömning [98], att upptäcka verkliga fel i flera populära sökmotorer. I nyligen genomförda undersökningar av orakelproblemet [4, 68, 71, 72] ägnades en betydande mängd diskussioner åt MT, som kategoriserades som en vanlig och lovande strategi för att ta itu med problemet. Bland undersökningarna särskilt om MT [34, 42, 81]
Nya undersökningar av arbetet med detta ämne kan också hittas REF.
Metamorphic Testing: A Review of Challenges and Opportunities
{'venue': 'CSUR', 'journal': None, 'mag_field_of_study': ['Computer Science']}