Tesztlefedettség mérés a gyakorlatban, avagy a bytecode instrumentálás rejtelmei

A FrontEndART Kft. már a 2010-es évek elején belefogott a TestNavigator nevű forráskód-lefedettség mérő rendszer fejlesztésébe, amelynek az első verziója metódus szintű méréseket biztosított.

További részletek a hírben!

Tesztlefedettség mérés a gyakorlatban
Tesztlefedettség mérés a gyakorlatban

Tesztelefedettség mérés a gyakorlatban, avagy a bytecode instrumentálás rejtelmei

A FrontEndART Kft. már a 2010-es évek elején belefogott a TestNavigator nevű forráskód-lefedettség mérő rendszer fejlesztésébe, amelynek az első verziója metódus szintű méréseket biztosított. Ez a megoldás 2012-ben tökéletesen kiszolgálta banki ügyfeleinket, mára azonban alapvetés lett az elágazás szintű lefedettség mérés, amelyet többek között az IDE-k (pl. Eclipse) is támogatnak unit tesztelés során. Az elágazások beazonosítása forráskód alapján egyértelműnek tűnhet, na de mi a helyzet a lefordított bytecode szinttel, ahol már a fordító általi optimalizálások is nehezíthetik a feladatunkat?

Az instrumentálás során egy különleges kihívás a blokk szintű mérő pontok meghatározása, ami a forráskód bytecode szintű elemzésével érhető el. A Java bytecode hierarchiában a forráskód, és a gépi kód között helyezkedik el, és olyan - a JVM-nek készült - utasítások összessége, melyet a programból a compiler állít elő, de önállóan nem végrehajtható, és a CPU sem tudja olvasni. (Többek között a bytecode fenti implementációja biztosítja a Java kódok platform-függetlenségét.) A metódusok bytecode-jának minden egyes utasítása egy egybájtos opcode-ból, és esetlegesen operandusokból áll. A JVM felépítése miatt a változók tárolása stack-ben történik, és a bytecode műveletek is elsősorban a stack elemein kerülnek végrehajtásra. A Java bytecode Label-ek segítségével valósítja meg az egyes blokkok közötti ugrásokat/váltásokat, így ezen Label-ek mentén végig iterálva tudjuk meghatározni a releváns ugrópontokat. És még sorolhatnánk napestig az érdekesebbnél érdekesebb technikai kihívásokat. Ahogy látjátok egyáltalán nem triviális a számunkra releváns ugrópontok meghatározása... Jancsi és Juliska még kenyérrel operált, nekünk ennél komolyabb fegyverre lesz szükségünk a biztos sikerhez.

Ha kíváncsiak vagytok, hogy hogyan néz ki ez a fejlesztés a gyakorlatban, továbbá érdekes lehet számotokra egy ilyen rendszer fejlesztésébe való bekapcsolódás és egy szuperjó SCRUM csapatban való munkavégzés, akkor ott a helyetek a meetup-on! Az új TestNavigator rendszerünk üzleti részének fejlesztése 2022-ben kezdődik meg, amihez lelkes jelentkezőket várunk. Olyan jelölteket, akiket érdekelnek a kihívások, a nagy, robosztus rendszerek fejlesztése, a BigData (sok rendszer sok verziójának lefedettségi adatai), az AI (teszt szelekció), a friss ropogós modern technilógiák (Spring, Spring Boot, Angular, Kubernetes, Docker, ...) és egy gördülékeny módszertan szerinti munkavégzés, ahol 2 hetes sprintekben szállíthatjátok le a sztorikat.

Várunk titeket 2021.12.08-án este 6 órakor az alábbi linken: meet.google.com/ejb-wtur-mod