Úvod do FindBugs

1. Prehľad

FindBugs je open source nástroj používaný na výkon statická analýza na kóde Java.

V tomto článku sa pozrieme na nastavenie FindBugs na projekte Java a jeho integráciu do IDE a Maven buildu.

2. Doplnok FindBugs Maven

2.1. Konfigurácia Maven

Aby sme mohli začať generovať správy o statickej analýze, je potrebné najskôr pridať doplnok FindBugs do nášho pom.xml:

   org.codehaus.mojo findbugs-maven-plugin 3.0.4 

Najnovšiu verziu doplnku si môžete pozrieť na serveri Maven Central.

2.2. Generovanie správy

Teraz, keď máme plugin Maven správne nakonfigurovaný, vygenerujme si projektovú dokumentáciu pomocou stránka mvn príkaz.

Správa sa vygeneruje v priečinku cieľ / stránka v adresári projektu pod menom findbugs.html.

Môžete tiež spustiť mvn findbugs: gui príkaz na spustenie grafického používateľského rozhrania na prehliadanie vygenerovaných správ pre aktuálny projekt.

Doplnok FindBugs možno tiež nakonfigurovať tak, aby za určitých okolností zlyhal - pridaním cieľa spustenia skontrolovať do našej konfigurácie:

 org.codehaus.mojo findbugs-maven-plugin 3.0.4 Maximálna kontrola 

The úsilie - keď je maximálna, vykoná úplnejšiu a presnejšiu analýzu a odhalí viac chýb v kóde. Avšak spotrebuje viac zdrojov a dokončenie bude trvať dlhšie.

Teraz môžete spustiť príkaz MVN overiť, aby ste skontrolovali, či bude zostavenie úspešné alebo nie - v závislosti od chýb zistených počas vykonávania analýzy.

Môžete tiež vylepšiť proces generovania správy a získať väčšiu kontrolu nad analýzou pridaním základnej konfigurácie do deklarácie pluginu:

 org.baeldung.web.controller. * FindNullDeref FindReturnRef 

The ibaAnalyzuj voľba deklaruje na analýzu hodnoty tried / balíkov oddelených čiarkami.

The návštevníkov/vynechaťVisitors možnosti sú tiež hodnoty oddelené čiarkou, slúžia na určenie, ktoré detektory sa majú / nemajú spustiť počas analýzy - Všimnite si, že návštevníkov a vynechaťVisitors nie je možné použiť súčasne.

Detektor je určený názvom svojej triedy bez akejkoľvek kvalifikácie balíka. Kliknutím na tento odkaz nájdete podrobnosti o všetkých dostupných názvoch tried detektorov.

3. Doplnok FindBugs Eclipse

3.1. Inštalácia

Inštalácia IDE doplnku FindBugs je dosť jednoduchá - stačí použiť funkciu aktualizácie softvéru v Eclipse, s týmto webom s aktualizáciami: //findbugs.cs.umd.edu/eclipse.

Aby ste sa ubezpečili, že FindBugs je správne nainštalovaný vo vašom prostredí Eclipse, vyhľadajte možnosť označenú FindBugs pod Windows -> Predvoľby -> Java.

3.2. Prehľadávanie prehľadov

Ak chcete v projekte spustiť statickú analýzu pomocou doplnku FindBugs Eclipse, musíte na prieskumník balíkov kliknúť pravým tlačidlom myši a potom kliknúť na možnosť označenú nájsť chyby.

Po spustení Eclipse zobrazuje výsledky pod oknom Prieskumník chýb, ako je to znázornené na obrázku nižšie:

Od verzie 2 začal FindBugs hodnotiť chyby na škále od 1 do 20, aby zmeral závažnosť chýb:

  • Najdesivejšie: zaradené medzi 1 a 4.
  • Strašidelné: zaradené medzi 5 a 9.
  • Problémy: zaradené medzi 10 a 14.
  • Znepokojujúce: zaradené medzi 15 a 20.

Zatiaľ čo hodnotenie chyby popisuje závažnosť, faktor spoľahlivosti odráža pravdepodobnosť označenia týchto chýb ako skutočných. Dôvera sa pôvodne nazývala prioritou, ale v novej verzii bol premenovaný.

Niektoré chyby môžu byť samozrejme interpretovateľné a môžu dokonca existovať bez toho, aby poškodili požadované chovanie softvéru. Preto v reálnej situácii musíme správne nakonfigurovať nástroje statickej analýzy výberom obmedzenej sady defektov, ktoré sa majú aktivovať v konkrétnom projekte.

3.3. Konfigurácia Eclipse

Doplnok FindBugs uľahčuje prispôsobenie stratégie analýzy chýb tým, že ponúka rôzne spôsoby filtrovania varovaní a obmedzenia presnosti výsledkov. Konfiguračné rozhranie môžete skontrolovať tak, že prejdete do okna -> Predvoľby -> Java -> FindBugs:

Môžete ľubovoľne zrušiť začiarknutie nežiaducich kategórií, zvýšiť minimálnu hodnosť pre hlásenie, určiť minimálnu spoľahlivosť pre hlásenie a prispôsobiť značky pre rady chýb - Varovanie, Informácie alebo Chyba.

FindBugs rozdeľuje chyby do mnohých kategórií:

  • Správnosť - zhromažďuje všeobecné chyby, napr. nekonečné slučky, nevhodné použitie rovná sa (), atď
  • Zlá prax, napr. spracovanie výnimiek, otvorené streamy, porovnanie reťazcov atď
  • Výkon, napr. nečinné predmety
  • Viacvláknová správnosť - zhromažďuje nekonzistencie synchronizácie a rôzne problémy vo viacvláknovom prostredí
  • Internacionalizácia - zhromažďuje problémy súvisiace s kódovaním a internacionalizáciou aplikácií
  • Zraniteľnosť škodlivého kódu - zhromažďuje zraniteľné miesta v kóde, napr. útržky kódu, ktoré môžu potenciálni útočníci zneužiť
  • Bezpečnosť - zhromažďuje bezpečnostné medzery týkajúce sa konkrétnych protokolov alebo injekcií SQL
  • Riskantný - zhromažďuje pachy kódu, napr. zbytočné porovnania, kontroly nuly, nepoužité premenné atď

Pod Konfigurácia detektora Na karte môžete skontrolovať pravidlá, ktoré máte vo svojom projekte rešpektovať:

Atribút speed (rýchlosť) vyjadruje, aká nákladná bude analýza. Najrýchlejší detektor, najmenšie zdroje spotrebované na jeho vykonanie.

Vyčerpávajúci zoznam chýb rozpoznaných FindBugs nájdete na webe stránka oficiálnej dokumentácie.

Pod Filtrovať súbory panel, môžete vytvoriť vlastné filtre súborov, aby ste zahrnuli / vylúčili časti kódovej základne. Táto vlastnosť je užitočná - napríklad - keď chcete zabrániť „nespravovanému“ alebo „smetnému“ kódu, defektom, ktoré sa vyskytnú v správach, alebo napríklad vylúčiť všetky triedy z testovacieho balíka.

4. FindBugs IntelliJ IDEA Plugin

4.1. Inštalácia

Ak ste fanúšikom IntelliJ IDEA a chcete začať kontrolovať kód Java pomocou FindBugs, môžete jednoducho vziať inštalačný balík doplnku z oficiálnej stránky JetBrains a extrahovať ho do priečinka% INSTALLATION_DIRECTORY% / plugins. Reštartujte svoje IDE a môžete vyraziť.

Prípadne môžete prejsť do ponuky Nastavenia -> Pluginy a vyhľadať vo všetkých úložiskách doplnok FindBugs.

V čase písania tohto článku je verzia 1.0.1 doplnku IntelliJ IDEA práve vonku,

Aby ste sa ubezpečili, že doplnok FindBugs je správne nainštalovaný, skontrolujte možnosť označenú ako „Analyzovať kód projektu“ v časti Analýza -> FindBugs.

4.2. Prehľadávanie prehľadov

Ak chcete spustiť statickú analýzu v IDEA, kliknite na „Analyzovať kód projektu“, v časti Analyzovať -> FindBugs vyhľadajte panel FindBugs-IDEA a skontrolujte výsledky:

Druhý stĺpec príkazov na ľavej strane obrazovky môžete použiť na zoskupenie chýb pomocou rôznych faktorov:

  1. Zoskupiť podľa kategórie chýb.
  2. Zoskupiť podľa triedy.
  3. Zoskupiť podľa balíka.
  4. Zoskupiť podľa chyby.

Je tiež možné exportovať správy vo formáte XML / HTML kliknutím na tlačidlo „exportovať“ vo štvrtom stĺpci príkazov.

4.3. Konfigurácia

Stránky predvolieb doplnkov FindBugs vo vnútri IDEA sú celkom samozrejmé:

Toto okno nastavení je dosť podobné tomu, ktoré sme videli v Eclipse, takže môžete vykonať všetky druhy konfigurácie analogickým spôsobom, počnúc úrovňou úsilia analýzy, hodnotením chýb, dôverou, filtrovaním tried atď.

Panel s predvoľbami je prístupný vo vnútri IDEA kliknutím na ikonu „Predvoľby doplnku“ pod panelom FindBugs-IDEA.

5. Analýza správ pre projekt Jarné odpočinok

V tejto časti objasníme statickú analýzu vykonanú na projekte pruženia, ktorý je k dispozícii na Github ako príklad:

Väčšina defektov je menších rozmerov - Of Concern, ale pozrime sa, čo môžeme urobiť pre odstránenie niektorých z nich.

Metóda ignoruje výnimočnú návratovú hodnotu:

File fileServer = nový súbor (názov súboru); fileServer.createNewFile ();

Ako asi tušíte, FindBugs sa sťažuje na skutočnosť, že vyhadzujeme návratovú hodnotu createNewFile () metóda. Možnou opravou by bolo uloženie vrátenej hodnoty do novo deklarovanej premennej a následné zaznamenanie niečoho zmysluplného pomocou úrovne protokolu DEBUG - napr. „Pomenovaný súbor neexistuje a bol úspešne vytvorený”, Ak je vrátená hodnota pravdivá.

Metóda môže zlyhať pri zatvorení streamu, s výnimkou: tento konkrétny nedostatok ilustruje typický prípad použitia na riešenie výnimiek, ktorý naznačuje vždy uzavrieť prúdy v a konečne blokovať:

try {DateFormat dateFormat = new SimpleDateFormat ("yyyy_MM_dd_HH.mm.ss"); Reťazec fileName = dateFormat.format (nový Date ()); File fileServer = nový súbor (názov súboru); fileServer.createNewFile (); byte [] bytes = file.getBytes (); BufferedOutputStream stream = nový BufferedOutputStream (nový FileOutputStream (fileServer)); stream.write (bajty); stream.close (); návrat „Úspešne ste nahrali“ + používateľské meno; } catch (Výnimka e) {návrat "Nepodarilo sa nahrať" + e.getMessage (); }

Keď sa hodí výnimka pred stream.close () inštrukcia, stream nie je nikdy uzavretý, preto je vždy lepšie využiť konečne {} blok na uzavretie streamov otvorených počas a skús/chytiť rutina.

An Výnimka je chytený, keď Výnimka nie je vyhodený: Ako už možno viete, chytanie Výnimka je zlý postup kódovania, FindBugs si myslí, že musíte chytiť najšpecifickejšiu výnimku, aby ste s ňou mohli správne zaobchádzať. Takže v zásade manipulácia s prúdmi v triede Java, chytanie Výnimka IO by bolo vhodnejšie ako chytiť všeobecnejšiu výnimku.

Pole nebolo inicializované v konštruktore, ale dereferencované bez nulovej kontroly: vždy je dobrý nápad inicializovať polia vo vnútri konštruktorov, inak by sme mali žiť s možnosťou, že kód vyvolá znak NPE. Preto sa odporúča vykonávať kontroly nuly vždy, keď si nie sme istí, či je premenná správne inicializovaná alebo nie.

6. Záver

V tomto článku sme sa venovali základným kľúčovým bodom používania a prispôsobenia FindBugs v projekte Java.

Ako vidíte, FindBugs je výkonný, ale jednoduchý nástroj na statickú analýzu, ktorý pomáha detekovať potenciálne medzery v kvalite vášho systému - ak je vyladený a používaný správne.

Na záver stojí za zmienku, že FindBugs je možné spustiť aj ako súčasť samostatného nástroja na nepretržitú automatickú kontrolu kódu, ako je napríklad Sputnik, čo môže byť veľmi užitočné pre lepšie zviditeľnenie správ.

Vzorový kód, ktorý sme použili na statickú analýzu, je k dispozícii na stránkach Github.


$config[zx-auto] not found$config[zx-overlay] not found