Bevezetés a FindBugs-ba

1. Áttekintés

A FindBugs egy nyílt forráskódú eszköz, amelyet teljesítésre használnak statikus elemzés Java kódon.

Ebben a cikkben megvizsgáljuk a FindBugs telepítését egy Java projekten, valamint az IDE és a Maven buildbe történő integrálását.

2. FindBugs Maven beépülő modul

2.1. Maven konfiguráció

A statikus elemzési jelentések létrehozásának megkezdéséhez először hozzá kell adnunk a FindBugs plugint pom.xml:

   org.codehaus.mojo findbugs-maven-plugin 3.0.4 

A plugin legújabb verzióját a Maven Central oldalon tekintheti meg.

2.2. Jelentéskészítés

Most, hogy a Maven plugint megfelelően konfiguráltuk, generáljuk a projektdokumentációt a mvn site parancs.

A jelentés a mappában lesz létrehozva cél / webhely név alatt a projekt könyvtárban findbugs.html.

Futtathatja a mvn findbugs: gui parancs a GUI felület elindításához az aktuális projekt generált jelentéseinek böngészéséhez.

A FindBugs beépülő modul konfigurálható úgy is, hogy bizonyos körülmények között meghiúsul - a végrehajtási cél hozzáadásával jelölje be konfigurációnkhoz:

 org.codehaus.mojo findbugs-maven-plugin 3.0.4 Max. ellenőrzés 

A erőfeszítés - ha túllépik, teljesebb és pontosabb elemzést végez, több hibát tár fel a kódban, bár több erőforrást emészt fel, és több időbe telik.

Most futtathatja a parancsot mvn ellenőrizze, annak ellenőrzése, hogy a build sikeres lesz-e vagy sem - az elemzés futtatása során észlelt hibáktól függően.

Javíthatja a jelentéskészítési folyamatot és jobban átveheti az irányítást az elemzés felett, ha néhány alapvető konfigurációt ad hozzá a plugin deklarációjához:

 org.baeldung.web.controller. * FindNullDeref FindReturnRef 

A csakAnalízis Az opció az osztályok / csomagok vesszővel elválasztott értékeit deklarálja elemzésre alkalmasnak.

A látogatók/omitVisitors Az opciók vesszővel elválasztott értékek is, ezek arra szolgálnak, hogy meghatározzák, mely detektorokat kell / nem kell futtatni az elemzés során - Vegye figyelembe, hogy látogatók és omitVisitors nem használható egyszerre.

A detektort osztályneve adja meg, csomagminősítés nélkül. A linkre kattintva megtalálja az összes elérhető detektorosztály nevének részleteit.

3. A FindBugs Eclipse beépülő modul

3.1. Telepítés

A FindBugs beépülő modul IDE telepítése meglehetősen egyszerű - csak az Eclipse szoftverfrissítési funkcióját kell használnia, a következő frissítési webhellyel: //findbugs.cs.umd.edu/eclipse.

Ellenőrizze, hogy a FindBugs megfelelően van-e telepítve az Eclipse környezetben, majd keresse meg a címkével ellátott opciót FindBugs Windows alatt -> Beállítások -> Java.

3.2. Jelentések böngészése

Statikus elemzés indításához egy projekten a FindBugs Eclipse beépülő modul használatával, a jobb gombbal kattintson a projektre a csomagkezelőben, majd kattintson a feliratú opcióra hibákat találni.

Indítás után az Eclipse az alábbi képernyőképen mutatja az eredményeket a Bug Explorer ablakban:

A 2. verziótól kezdve a FindBugs 1-től 20-ig terjedő skálán kezdte meg a hibák rangsorolását a hibák súlyosságának mérésére:

  • Legijesztőbb: 1 és 4 között rangsorolva.
  • Ijedős: 5 és 9 között rangsorolva.
  • Nyugtalanság: 10 és 14 között rangsorolva.
  • Aggodalomra okot adó: 15 és 20 között rangsorolva.

Míg a hibarang a súlyosságot írja le, a bizalmi tényező tükrözi annak valószínűségét, hogy ezeket a hibákat valósnak jelölik. A bizalmat eredetileg prioritásnak nevezték, de az új verzióban átnevezték.

Természetesen egyes hibák értelmezhetők, sőt létezhetnek anélkül, hogy kárt okoznának a szoftver kívánt viselkedésében. Éppen ezért valós helyzetben megfelelően konfigurálnunk kell a statikus elemző eszközöket egy korlátozott számú hiba kiválasztásával az aktiváláshoz egy adott projektben.

3.3. Eclipse konfigurálása

A FindBugs beépülő modul megkönnyíti a hibanalízis stratégia testreszabását, különféle módszerekkel kínálva a figyelmeztetéseket és korlátozva az eredmények szigorúságát. A konfigurációs felületet az Ablak -> Beállítások -> Java -> FindBugs menüpont segítségével ellenőrizheti.

Szabadon törölheti a nem kívánt kategóriák jelölését, emelheti a jelentésre vonatkozó minimális rangot, meghatározhatja a jelentendő legkisebb bizalmat, és testre szabhatja a hibajelzők jelölőit - Figyelmeztetés, Információ vagy Hiba.

A FindBugs számos kategóriába sorolja a hibákat:

  • Helyesség - általános hibákat gyűjt, pl. végtelen hurkok, nem megfelelő használata egyenlő ()stb
  • Rossz gyakorlat, például. kivételkezelés, megnyitott folyamok, húrok összehasonlítása stb
  • Teljesítmény, például. tétlen tárgyak
  • Többszálas helyesség - összegyűjti a szinkronizálási inkonzisztenciákat és különféle problémákat egy több szálat tartalmazó környezetben
  • Nemzetközivé válás - összegyűjti a kódolással és az alkalmazás nemzetközivé válásával kapcsolatos problémákat
  • Rosszindulatú kódok sérülékenysége - sebezhetőségeket gyűjt a kódban, pl. kódrészletek, amelyeket a potenciális támadók kihasználhatnak
  • Biztonság - összegyűjti az egyes protokollokhoz vagy SQL injekciókhoz kapcsolódó biztonsági réseket
  • Agyafúrt - kódszagokat gyűjt, pl. haszontalan összehasonlítások, nullellenőrzések, fel nem használt változók stb

Alatt Detektor konfigurációja lapon ellenőrizheti azokat a szabályokat, amelyeket be kell tartania a projektben:

A sebesség attribútum tükrözi, hogy az elemzés mennyire lesz költséges. A leggyorsabb detektor, a legkevesebb erőforrás szükséges a végrehajtásához.

A FindBugs által felismert hibák teljes listáját a hivatalos dokumentációs oldal.

Alatt Fájlok szűrése panelen egyéni fájlszűrőket hozhat létre a kódalap egyes részeinek felvétele / kizárása érdekében. Ez a szolgáltatás például akkor hasznos, ha meg akarja akadályozni a „nem kezelt” vagy a „kuka” kódot, a hibák megjelennek a jelentésekben, vagy kizárhatja például az összes osztályt a tesztcsomagból.

4. FindBugs IntelliJ IDEA bővítmény

4.1. Telepítés

Ha Ön IntelliJ IDEA rajongó, és el akarja kezdeni a Java kód ellenőrzését a FindBugs használatával, egyszerűen megragadhatja a beépülő modul telepítő csomagját a hivatalos JetBrains webhelyről, és kivonhatja a% INSTALLATION_DIRECTORY% / plugins mappába. Indítsa újra az IDE-t, és máris mehet.

Alternatív megoldásként navigálhat a Beállítások -> Bővítmények elemre, és az összes tárolóban megkeresheti a FindBugs plugint.

A cikk írásakor az IntelliJ IDEA plugin 1.0.1-es verziója éppen kint van,

Annak érdekében, hogy a FindBugs beépülő modul megfelelően legyen telepítve, ellenőrizze az Elemzés -> FindBugs menüpont alatt a „Projektkód elemzése” feliratot.

4.2. Jelentések böngészése

A statikus elemzés elindításához az IDEA-ban kattintson az „Elemzés -> FindBugs” részben található „Projektkód elemzése” elemre, majd keresse meg a FindBugs-IDEA panelt az eredmények ellenőrzéséhez:

Használhatja a képernyőkép bal oldalán található második parancsoszlopot a hibák csoportosításához különböző tényezők felhasználásával:

  1. Csoportosítás hibakategória szerint.
  2. Csoportosítás osztály szerint.
  3. Csoportosítás csomag szerint.
  4. Csoportosítás hibajelzés szerint.

A jelentések exportálása XML / HTML formátumban is lehetséges, a parancsok negyedik oszlopában az „exportálás” gombra kattintva.

4.3. Konfiguráció

Az IDEA-n belül található FindBugs beépülő modul beállításoldalak eléggé magától értetődőek:

Ez a beállításablak meglehetősen hasonlít az Eclipse-ben látott ablakhoz, így analóg módon mindenféle konfigurációt elvégezhet, kezdve az elemzési erőfeszítéstől, a hibák rangsorolásától, a magabiztosságtól, az osztályok szűrésétől stb.

A beállítások panel az IDEA-n belül érhető el, a FindBugs-IDEA panel alatt található „Plugin preferences” ikonra kattintva.

5. Jelentéselemzés a Tavasz-Pihenő Projekthez

Ebben a részben megvilágítunk egy statikus elemzést, amelyet a Githubon elérhető példaként a tavaszi pihenés projektre készítettünk:

A legtöbb hiba jelentéktelen - aggodalomra ad okot, de nézzük meg, mit tehetünk néhányuk kijavításáért.

A módszer figyelmen kívül hagyja a kivételes visszatérési értéket:

File fileServer = új fájl (fileName); fileServer.createNewFile ();

Ahogy valószínűleg sejteni lehet, a FindBugs arra panaszkodik, hogy eldobjuk a createNewFile () módszer. Egy lehetséges javítás az lenne, ha a visszatérő értéket egy újonnan deklarált változóba tároljuk, majd a DEBUG naplószint segítségével valami értelmeset naplózunk - pl. „A megnevezett fájl nem létezik, és létrehozása sikeres volt”, Ha a visszaadott érték igaz.

Előfordulhat, hogy a módszer nem zárja le az adatfolyamot, kivéve: ez a bizonyos hiba a kivétel kezelésének tipikus használati esetét szemlélteti, amely arra utal mindig zárja be a folyamokat a végül Blokk:

próbáld ki a {DateFormat dateFormat = new SimpleDateFormat ("éééé_HM_dd_HH.mm.ss") parancsot; String fileName = dateFormat.format (new Date ()); File fileServer = új fájl (fileName); fileServer.createNewFile (); bájt [] bájt = file.getBytes (); BufferedOutputStream stream = new BufferedOutputStream (új FileOutputStream (fileServer)); stream.write (byte); stream.close (); return "sikeresen feltöltötted" + felhasználónév; } catch (e kivétel) {return "Nem sikerült feltölteni" + e.getMessage (); }

Amikor kivételt dobnak a stream.close () utasítás, a patak soha nem záródik le, ezért mindig előnyösebb használni a végül{} blokk az a során megnyílt folyamok bezárásához próbáld ki/fogás rutin.

An Kivétel amikor elkapják Kivétel nem dobják: Mint már tudhatod, elkapni Kivétel rossz kódolási gyakorlat, a FindBugs úgy véli, hogy meg kell ragadnia a legkonkrétabb kivételt, így megfelelően kezelheti azt. Tehát alapvetően a stream-ek manipulálása Java osztályban, elkapás IOException megfelelőbb lenne, mint egy általánosabb kivétel elfogása.

A mező nem inicializálva van a konstruktorban, de nullellenőrzés nélkül kerül levezetésre: mindig jó ötlet a mezők inicializálása a konstruktorokban, különben élnünk kell azzal a lehetőséggel, hogy a kód NPE. Ezért ajánlott semmilyen ellenőrzést végrehajtani, amikor nem vagyunk biztosak abban, hogy a változó megfelelően inicializált-e vagy sem.

6. Következtetés

Ebben a cikkben bemutattuk azokat az alapvető kulcsfontosságú pontokat, amelyek a FindBugs használatát és testreszabását jelentik egy Java projektben.

Amint láthatja, a FindBugs egy erőteljes, mégis egyszerű statikus elemző eszköz, amely segít a rendszer minőségi hiányosságainak felderítésében - ha megfelelően hangolják és használják.

Végül érdemes megemlíteni, hogy a FindBugs különálló, folyamatos automatikus kódellenőrző eszköz részeként is futtatható Szputnyik, ami nagyon hasznos lehet, hogy a jelentések sokkal jobban láthatók legyenek.

A statikus elemzéshez használt mintakód elérhető a Github oldalon.