5. óra · Szoftvertesztelés gyakorlat

Statikus elemzés eszközökkel

Kódolási szabványok, kódmetrikák és a kódszerkezet vizsgálata

Az óra végére képes leszel

  • Futtatás nélkül azonosítasz kódminőségi és lehetséges viselkedési problémákat.
  • Elkülöníted a formázási jelzést a tényleges hibától és a további vizsgálatot igénylő figyelmeztetéstől.
  • Értelmezed a komplexitási és duplikációs mutatókat anélkül, hogy hibabizonyítéknak tekintenéd őket.
A munka menete
  1. 1SzabályKövetelmény és kódolási előírás.
  2. 2ElemzésLinter, metrika és emberi átnézés.
  3. 3ÉrtékelésStílus, hibagyanú vagy hamis pozitív?
  4. 4JavításIndokolt változtatás a kódban.
  5. 5TesztViselkedés megerősítése futtatással.
01 / TANANYAG

Statikus elemzés: mit látunk futtatás nélkül?

Statikus elemzésnél a forráskódot vagy más munkaterméket futtatás nélkül vizsgálunk, gyakran erre szolgáló eszközzel. Az eszköz jelezhet stíluseltérést, nem használt változót, összetett vezérlési szerkezetet, ismétlődő kódot vagy bizonyos gyanús adatfolyamokat. Ez gyors visszajelzés, de nem minden jelzés valódi hiba, és a jelzés hiánya sem igazolja a program helyességét.

A kölcsönző egy részletében a kölcsönzési korlátot ellenőrizzük. A követelmény „legfeljebb három aktív”. Az alábbi kódot érdemes szabály alapján olvasni: a feltétel mikor utasít el? A dinamikus teszt később a működést is ellenőrzi, különösen a határon és a mentés után.

function kolcsonoz(aktivDb, eszkozSzabad) {
  if (aktivDb > 3 || !eszkozSzabad) return 'elutasítva';
  return 'kiadva';
}
02 / TANANYAG

Kódolási szabványok és automatikus ellenőrzések

A kódolási szabvány egységes névadást, tagolást, formázást, típushasználatot, hibakezelést és egyéb csapatszabályokat írhat elő. A linter például kiszűrheti a nem használt változót vagy a tiltott szerkezetet; a formatter egységesíti a sortörést és a behúzást. Egyes szabályok az olvashatóságot, mások a kockázatok korai felismerését szolgálják.

A jelzéseket súlyosság és kontextus szerint értékeljük. Egy elütött változónév fordítási hibát okozhat, míg egy eltérő idézőjel elsősorban konzisztencia kérdése. A hamis pozitív jelzésnél megindokolható a kivétel; a teljes figyelmeztetéslista válogatás nélküli elnémítása viszont elfedi a valódi problémát. Nem állíthatjuk, hogy minden kódbeli hibát megtalál egy eszköz.

03 / TANANYAG

Kódmetrikák: mérés és értelmezés

A metrika mérhető jellemző, például kódméret, elágazások száma, ciklomatikus komplexitás, duplikáció vagy függvényhossz. Egy sok döntést tartalmazó függvényben több független útvonal lehet; emiatt nehezebb átlátni és célzott tesztekkel lefedni. A magas szám figyelmeztetés a felülvizsgálatra, önmagában nem bizonyít hibát, ahogy az alacsony sem garantál helyességet.

A ciklomatikus komplexitás egyszerű, egy belépési pontú kódrészletnél szemléletesen 1 plusz a független bináris döntési pontok száma. A tényleges eszközeredmény a nyelv és az összetett feltételek kezelésétől függhet. Az alábbi példában két külön if miatt legalább az alapútvonal és a két eltérő döntés vizsgálata indokolt; teljes útvonal-lefedettséghez az együttállásokat is mérlegelni kell.

function dij(alap, keses, diak) {
  let osszeg = alap;
  if (keses) osszeg += 500;
  if (diak) osszeg *= 0.8;
  return osszeg;
}
04 / TANANYAG

Kódszerkezet, adatfolyam és duplikáció

A mélyen egymásba ágyazott feltételek, hosszú függvények és ismételt kódrészek megnehezítik a változtatást. Ha ugyanazt a kölcsönzési szabályt a webes felület és az API külön másolatban tartja, az egyik javítása után a másik eltérően viselkedhet. A duplikáció felismerése emiatt hasznos kiindulópont, de az összevonásról a működési és felelősségi határok ismeretében döntünk.

Adatfolyamra vonatkozó jelzés lehet egy érték használata inicializálás előtt vagy egy érték kiszámítása, amelyet sosem olvasnak ki. Statikus eszközök bizonyos útvonalakon tudnak következtetni, de a külső adatokkal és a futási környezettel kapcsolatos hibákhoz dinamikus ellenőrzés is kell. Az eszközjelzést tehát kategorizáljuk, utánajárunk, és tesztesettel erősítjük meg, ha a viselkedési hatás fontos.

Gyakorlófeladatok

Előbb oldd meg a feladatot, majd nyisd meg a segítséget és a mintamegoldást.

1. Találd meg a határhibát

Az első kódrészletnél melyik aktivDb értéknél sérül a „legfeljebb három aktív” szabály? Milyen feltételre módosítanád a kódot?

Kérek egy tippet

A változó a művelet ELŐTTI aktív kölcsönzések száma.

Mintamegoldás megtekintése

aktivDb = 3 és szabad eszköz mellett a függvény kiadva értéket adna, így létrejönne a negyedik. Helyesen: if (aktivDb >= 3 || !eszkozSzabad) return 'elutasítva'. A 2 és 3 előállapotot külön dinamikus teszttel is ellenőrizni kell.

2. Kategorizáld a jelzést

A linter három üzenetet ad: nem használt változó; eltérő behúzás; lehetséges inicializálatlan érték. Melyik milyen típusú kockázat, és mi a következő lépés?

Kérek egy tippet

Nem minden jelzés egyforma súlyú és egyik sem automatikusan bizonyított futási hiba.

Mintamegoldás megtekintése

Eltérő behúzás: főként stílus és olvashatóság, formatterrel egységesíthető. Nem használt változó: felesleges kód vagy félbehagyott logika jele lehet, vizsgálni kell. Lehetséges inicializálatlan érték: potenciális hibás útvonal, konkrét vezérlési úton ellenőrizni és tesztelni kell.

3. Metrika és útvonal

A dij függvényben két önálló if szerepel. Mekkora az egyszerű modell szerinti ciklomatikus komplexitás? Hány igaz/hamis kombinációt írj fel?

Kérek egy tippet

A komplexitás 1 + döntések; a kombinációk száma két bináris feltételnél 2×2.

Mintamegoldás megtekintése

Egyszerű modellben 1+2=3 a ciklomatikus komplexitás. Négy kombináció van: késés nem/diák nem; késés igen/diák nem; késés nem/diák igen; késés igen/diák igen. A 3 és 4 nem ugyanaz a mérőszám.

4. Duplikált szabály

A webes felületen már >= 3 a korlát, az API-ban > 3 maradt. Mi a veszély, és milyen ellenőrzést javasolsz?

Kérek egy tippet

Az API felület megkerülésével is elérhető lehet.

Mintamegoldás megtekintése

A két helyen eltérő szabály inkonzisztens: közvetlen API-hívással a negyedik kölcsönzés létrejöhet. A szabályt a megfelelő szerveroldali helyen érvényesítjük, a duplikációt megvizsgáljuk, majd az API- és felületi 2→3, 3→4 eseteket újrateszteljük.

ELLENŐRIZD MAGAD

Mit bizonyít önmagában egy hibajelzés nélküli statikus elemzés?

Amit érdemes megjegyezni

  • A statikus elemzés futtatás nélkül ad korai visszajelzést, de nem teljes bizonyosságot.
  • A stíluseltérés, hibagyanú és metrikajelzés különböző értelmezést igényel.
  • A kód szerkezetét és a metrikát a konkrét kockázat és a dinamikus tesztek fényében értékeljük.

Visszajelzés erről a leckéről

Mennyire volt hasznos? Az értékelést és a megjegyzést csak a tanár látja.

Értékelés, 1–5

Név és e-mail-cím megadása nem szükséges. Más tanulók értékelései és megjegyzései nem jelennek meg ezen az oldalon.