Mutációvizsgálat az agentikus kor számára
CYBERSECURITY KIEMELT ELEMZÉS

Mutációvizsgálat az agentikus kor számára

FORRÁS

The Trail of Bits Blog

DATE

READ

6 perc olvasás

A kódfedettség, egy gyakran használt szoftveres tesztelési mérőszám, téves lehet, mert végrehajtásról, nem pedig ellenőrzésről méri, ami elfedheti a tesztelt kritikus funkciókat. Ez egy jelentős Arkis protokoll gyengeség …

Kódfedettség a szoftvertesztelés egyik legveszélyesebb minőségi mutatója. Sok fejlesztő nem érti, hogy a kódfedettség csak hiányról beszél, azaz méri a végrehajtást, nem pedig a helyes működést. A magas fedettséggel rendelkező tesztesetek elfedhetik azt a tényt, hogy a kritikus funkciók nem tesztelve. Láttuk ezt, amikor a mutációtesztelés egy magas szintű Arkis protokoll hibát feltárt, amelyet a fedettség mutatók figyelmen kívül hagytak, és lehetővé tette a támadók számára a pénzügyi eszközök ellopását. Ma bemutatjuk a MuTON-t és a mewt-et, két új mutációtesztelő eszközt, amelyek az ügynökök használatára optimalizáltak, valamint egy konfigurációs optimalizációs képességet, amely segíti az ügynököket a kampányok hatékony beállításában. A MuTON első osztályú támogatást biztosít a TON blockchain nyelvének (FunC, Tolk és Tact) számára, míg a mewt a nyelven független, alapvető eszköz, amely támogatja a Solidity-t, Rust-ot és Go-t. A mutációtesztelés célja, hogy a hibákat (mutánsokat) rendszerszerűen bevezessen, és ellenőrizze, hogy a tesztek megfogják-e őket, így a kevésbé tesztelt területeket kiemeli. Azonban a mutációtesztelő eszközök korábban voltak lassúak és nyelven specifikusak. A MuTON és a mewt célja, hogy ezt megváltoztassák. Ahhoz, hogy ezt megértjük, először meg kell érteni, hogy mit helyettesítenek. A regex korszak A mutációtesztelés a 1970-es években kezdődött, de sokáig a technika kevés elterjedést tapasztalt a blockchain térben, mint egy szoftverminőség mérő eszköz. A tesztelő keretek szorosan kapcsolódnak a célnyelvekhez, így új nyelvek támogatása drága. A Universalmutator ezt megváltoztatta a regex motorával. Miután a Universalmutator a 2018. március 10-én Solidity-t támogatta, az azonnal elnyerte a blockchain térben a figyelmet. Együttműködtünk a Universalmutator csapatával a smart contract tesztelés előmozdítására és a 2019-es blogbejegyzésünkben mutattuk be az eszközt. Bár (vagy talán mert) az elegáns megközelítése és a kompakt kódalap, a Universalmutator lenyűgöző mutáns számokat generált, lehetővé téve a fejlesztők számára, hogy a tesztfedettséget a egyszerűbb eszközökkel szemben még alaposabban ellenőrizzék. A Vyper és más nyelvi támogatások következtek, és a Universalmutator a blockchain-ben vezető mutációtesztelő eszköökként jött létre. De a regex-nek vannak alapvető korlátai. A vonal alapú minták nem tudnak több vonalú utasításokat módosítani, ami egy kritikus hiány, amelyet az eredeti tanulmány is elismer. Sokkal problémásabb: anélkül, hogy a mutánsokat prioritizálnánk, a eszköz feleslegesen időt töltené a redundant mutációkkal. Amikor egy vonalat megkommentálunk, a Universalmutator mégis generál és teszteli minden lehetséges változatot, ami jelentősen meghosszabbítja a kampány futási idejét. Az eredmények a standard output-ba írása további nehézséget okoz az emberi és AI ügynökök számára, akik a kampányokat vizsgálják. Későbbiek (beleértve a 2024-es átállást a Combyra, amely jobb szinaktikus kezelést biztosít), bizonyos problémákat megoldottak, de a maradó korlátok miatt fejlesztették a fókuszált alternatívákat. 2019 és 2023 között számos eszköz jött létre, amelyek ezekre a problémákra megoldást kínáltak, beleértve a mi slither-mutate megoldásunkat. Azonban mindegyik a nyelvi megértés, a skálázhatóság és a tesztminőség különböző megközelítéseit képviseli. A slither-mutate: Sebesség a prioritás révén. Mi augusztus 2022-ben hajtottuk be a slither-mutarat, miután a vårten, Vishnuram, megteremtette a koncepciót. Mivel a Slither már elemzi az Solidity AST-t, és egy Python API-t biztosít, a lehetséges szinaktikailag érvényes mutációk generálására és a tiszta tweak-test-restore ciklus megvalósítására lett a feladat. Az eszköz fő innovációja a mutáns prioritása volt: a nagy szintű mutánsok az utasításokat revert-kkel helyettesítik (ez megnyitja a meg nem használt kódutakat), a közepes szintű mutánsok kommentelik ki a vonalakat (ez megmutatja a nem ellenőrzött oldhatásokat), és a kis szintű mutánsok finom változtatásokat hajtanak végre, például operátorokat cserélnek. Az eszköz a nagyobb szintű mutánsokat, ha már nagyobb szintű mutánsok mutatnak ki hiányosságot, elhagyja. Ez jelentősen csökkenti a kampány futási idejét, ami a szélesebb körű mutációtesztelési elterjedés legnagyobb akadálya. A 2022 végére a slither-mutarat a legtöbb Solidity audit-ra telepítettük. Két probléma maradt. Az első az, hogy a Solidity-hez való szorosan kapcsolódás azt jelentette, hogy nincs egyszerű mód a más blockchain nyelvek támogatására. A második az, hogy a sonuçların stdout-ba írása még mindig probléma volt, de az Slither-ben egy adatbázis létrehozása elfogadhatatlan nehézséget okozna a szélesebb Slither felhasználói kör számára. MuTON és mewt bevezetés: A Tree-sitter korszak A MuTON, a legújabb mutációtesztelő eszközünk, első osztályú támogatást biztosít a TON blockchain három nyelvére: Tolk, Tact és FunC-hez. A TON Foundation támogatja a fejlesztést. A MuTON a mewt-en épül, amely a nyelven független, alapvető mutációtesztelő eszköz, amely támogatja a Solidity-t, Rust-ot és a többet. A MuTON a slither-mutarshoz hasonló nyelvi megértést biztosít, miközben több nyelvet támogat, a Tree-sitter használatával. A Tree-sitter a modern szerkesztőkben a szinaktikus kiemelést biztosítja, amely egy konkrét szinaktikus fa létrehozását teszi lehető, amely megkülönbözteti a nyelvi kulcsszavakat a megjegyzésektől. Ez lehetővé teszi a MuTON-t, hogy a if-utasításokat jól strukturált módon célozza meg, miközben a több vonalú utasításokat is kezel. Tradíciósan, amikor a Tree-sitter gramatikákat új nyelvek támogatására beépítjük, az több rendkívüli időt vesz igénybe, mint a regex szabályok írása. A Tree-sitter-t a speciális képességekkel rendelkező AI ügynökökkel párosítva viszont a Tree-sitter erejét a regex-szerű egyszerű kiterjesztési egyszerűséggel képesek megvalósítani. A MuTON minden mutánst és teszt eredményt egy SQLite adatbázisban tárolja, ami egy olyan életminőségi fejlesztés, amely a slither-mutarshoz már megjelent, de nem volt lehetséges beépíteni. Az eredmények konzistentek, a kampányokat felfüggeszthető, és nem veszítik el a haladást. Ha a terminálod véletlenül leáll, a munkád tovább. A konzisztens tárolás is rugalmas szűrőket és formázást teszi lehető: csak azokat a nem megfoglalt mutánsokat, amelyek meghatározott fájlokban vannak, vagy az eredményeket SARIF-re fordíthatod, hogy a jobb áttekintéshez. Ez a rugalmasság segít az embereknek és az AI ügynököknek az eredmények feltárásában, az eredmények áttekintésében és a hibák keresésében. A mutációtesztelés jövője A MuTON számos korábbi problémát megoldja, de jelentős akadályok maradtak. Három kihívás áll a mutációtesztelési széles körű elterjedés előtt: a kampányok megvalósításához szükséges időtartam, a szignálok és zajok megkülönböztetése, és a tesztek létrehozása, amelyek a követelményeket, nem pedig a megvalósítási hibákat kódolják. Az AI ügynökök, amelyek speciális képességekkel rendelkeznek, ígérik, hogy ezeket az akadályokat rutin feladatokká alakíthatják. A konfigurációs optimalizáció A teljesítmény a legjelentősebb akadály a mutációtesztelés előtt. Ha a tesztelő keret öt percet vesz igénybe, és 1000 mutánsot tartalmaz, akkor 83 órának kell eltűnnie. A mutációtesztelő eszközök nem javítják a lassú teszteket, de a smart konfiguráció nagyban csökkentheti a felesleges időt. A MuTON már nagyszerű lehetőségeket kínál a kampányok finomhangolására: célos komponenterek helyett, két fázisú kampányok használatára, amelyek gyors, céltudatos teszteket futtatnak, majd újrázzák a nem megfoglalt mutánsokat a teljes kereten, a célos tesztparancsok konfigurálására, amelyek csak a hitelesítési kód mutánsait tesztelik, vagy a magas és közepes szintű mutánsokra korlátozva, amikor a idő szűk. Ezek a eszközök ma már elérhető, és valós sebességgel működnek. De a döntési fa végtelen. A komponens alapján vagy a szint alapján? Két fázis vagy céltudatos teszt? Milyen időtartamot kell beállítani a részleges újrakompilációhoz? A konfiguráció optimalizációs képesség, amely egy AI-t segíthet ezekben a döntésekben, mérve a tesztelő keretet, becsüli a futási időt, és javasolja az optimalizált konfigurációt, amely az adott projekt szerkezetehez igazodik. Próbáld ki még. Azt, hogy a smart contract-ok tesztelését megkönnyítsa, a MuTON és a mewt behozhatja. Azt, hogy a kampányok beállítása könnyen lehessen, a MuTON és a mewt megvalósíthatja.