Uvod u FindBugs

1. Pregled

FindBugs je alat otvorenog koda koji se koristi za izvođenje statička analiza na Java kodu.

U ovom ćemo članku pogledati postavljanje FindBugova na Java projektu i njegovu integraciju u IDE i Maven izgradnju.

2. FindBugs Maven dodatak

2.1. Maven konfiguracija

Da bismo započeli s generiranjem izvještaja o statičkoj analizi, prvo moramo dodati dodatak FindBugs u naš pom.xml:

   org.codehaus.mojo findbugs-maven-plugin 3.0.4 

Najnoviju verziju dodatka možete provjeriti na Maven Central.

2.2. Generiranje izvješća

Sad kad smo ispravno konfigurirali dodatak Maven, generirajmo projektnu dokumentaciju pomoću mvn stranica naredba.

Izvještaj će se generirati u mapi cilj / mjesto u direktoriju projekta pod imenom findbugs.html.

Također možete pokrenuti mvn findbugs: gui naredba za pokretanje GUI sučelja za pregledavanje generiranih izvješća za trenutni projekt.

Dodatak FindBugs također se može konfigurirati tako da ne uspije u nekim okolnostima - dodavanjem cilja izvršenja ček u našu konfiguraciju:

 org.codehaus.mojo findbugs-maven-plugin 3.0.4 Provjera maks 

The napor - kada se maksimizira, provodi cjelovitiju i precizniju analizu, otkrivajući više grešaka u kodu, iako troši više resursa i treba više vremena za dovršavanje.

Sada možete pokrenuti naredbu mvn provjeriti, kako bi provjerili hoće li izrada uspjeti ili ne - ovisno o nedostacima otkrivenim tijekom izvođenja analize.

Također možete poboljšati postupak generiranja izvješća i preuzeti veću kontrolu nad analizom dodavanjem neke osnovne konfiguracije u deklaraciju dodatka:

 org.baeldung.web.controller. * FindNullDeref FindReturnRef 

The samoAnalizirati opcija deklarira vrijednosti odvojene zarezima klasa / paketa prihvatljivih za analizu.

The posjetitelji/izostavitiVisitors opcije su također vrijednosti odvojene zarezom, koriste se za određivanje koji detektori trebaju / ne smiju biti pokrenuti tijekom analize - imajte na umu da posjetitelji i izostavitiVisitors ne može se koristiti istovremeno.

Detektor je naveden imenom klase, bez ikakvih kvalifikacija paketa. Pojedinosti svih dostupnih naziva klasa detektora potražite slijedeći ovu vezu.

3. FindBugs dodatak za pomrčinu

3.1. Montaža

Instalacija IDE-a dodatka FindBugs prilično je jednostavna - samo trebate koristiti značajku ažuriranja softvera u Eclipseu, sa sljedećim web mjestom za ažuriranje: //findbugs.cs.umd.edu/eclipse.

Da biste bili sigurni da je FindBugs ispravno instaliran u vašem okruženju Eclipse, potražite opciju s oznakom FindBugs u sustavu Windows -> Postavke -> Java.

3.2. Pregledavanje izvješća

Da biste pokrenuli statičku analizu na projektu pomoću dodatka FindBugs Eclipse, morate desnom tipkom miša kliknuti projekt u istraživaču paketa, a zatim kliknuti na opciju označenu pronađi greške.

Nakon pokretanja, Eclipse prikazuje rezultate u prozoru programa Bug Explorer kako je prikazano na snimci zaslona u nastavku:

Od verzije 2, FindBugs je počeo rangirati bugove na skali od 1 do 20 za mjerenje ozbiljnosti nedostataka:

  • Najstrašnije: rangirano između 1 i 4.
  • Zastrašujuće: rangirano između 5 i 9.
  • Nevolje: rangirano između 10 i 14.
  • Zabrinutost: rangirano između 15 i 20.

Iako rang buga opisuje ozbiljnost, faktor pouzdanosti odražava vjerojatnost da se te bugove označi kao stvarne. Povjerenje se prvotno nazivalo prioritetom, ali je preimenovan u novoj verziji.

Naravno, neki nedostaci mogu biti otvoreni za interpretaciju, a mogu čak postojati i bez nanošenja štete željenom ponašanju softvera. Zbog toga u stvarnom svijetu moramo pravilno konfigurirati alate za statičku analizu odabirom ograničenog skupa nedostataka koji će se aktivirati u određenom projektu.

3.3. Konfiguracija pomrčine

Dodatak FindBugs olakšava prilagodbu strategije analize grešaka nudeći različite načine filtriranja upozorenja i ograničavanja strogosti rezultata. Konfiguracijsko sučelje možete provjeriti odlaskom na Prozor -> Postavke -> Java -> FindBugs:

Možete slobodno ukloniti kvačicu iz neželjenih kategorija, povisiti minimalni rang za izvještavanje, odrediti minimalno pouzdanje za prijavljivanje i prilagoditi oznake za rang grešaka - upozorenje, informacije ili pogreška.

FindBugs dijeli nedostatke u mnoge kategorije:

  • Ispravnost - okuplja opće bugove, na pr. beskonačne petlje, neprimjerena upotreba jednako ()itd
  • Loša praksa, npr. rukovanje iznimkama, otvoreni tokovi, usporedba nizova itd
  • Izvođenje, npr. besposleni predmeti
  • Višenitna ispravnost - prikuplja nedosljednosti sinkronizacije i razne probleme u okruženju s više niti
  • Internacionalizacija - okuplja probleme povezane s kodiranjem i internacionalizacijom aplikacije
  • Ranjivost zlonamjernog koda - okuplja ranjivosti u kodu, npr. isječke koda koje potencijalni napadači mogu iskoristiti
  • Sigurnost - skuplja sigurnosne rupe povezane s određenim protokolima ili SQL injekcijama
  • Dodgy - prikuplja mirise koda, na pr. beskorisne usporedbe, null provjere, neiskorištene varijable itd

Ispod Konfiguracija detektora na kartici možete provjeriti pravila koja biste trebali poštovati u svom projektu:

Atribut brzine odražava koliko će analiza biti skupa. Najbrži detektor, najmanji resursi potrošeni za njegovo izvođenje.

Iscrpan popis grešaka koje je FindBugs prepoznao možete pronaći na stranica službene dokumentacije.

Ispod Filtrirajte datoteke ploči možete stvoriti prilagođene filtre datoteka kako biste uključili / izuzeli dijelove baze koda. Ova je značajka korisna - na primjer - kada želite spriječiti "neupravljani" ili "otpad" kôd, nedostatke koji se pojavljuju u izvješćima ili, na primjer, mogu izuzeti sve klase iz testnog paketa.

4. FindBugs IntelliJ IDEA dodatak

4.1. Montaža

Ako ste ljubitelj IntelliJ IDEA i želite započeti s pregledom Java koda pomoću FindBugs-a, jednostavno dohvatite instalacijski paket dodatka sa službenog web mjesta JetBrains i izvucite ga u mapu% INSTALLATION_DIRECTORY% / plugins. Ponovo pokrenite svoj IDE i spremni ste.

Možete i otići do Postavke -> Dodaci i potražiti dodatak FindBugs u svim spremištima.

U vrijeme pisanja ovog članka, verzija 1.0.1 dodatka IntelliJ IDEA je upravo izašla,

Da biste bili sigurni da je dodatak FindBugs pravilno instaliran, provjerite postoji li opcija s oznakom "Analizirajte projektni kod" u odjeljku Analiza -> FindBugs.

4.2. Pregledavanje izvješća

Da biste pokrenuli statičku analizu u IDEA-i, kliknite na „Analizirajte kod projekta“, pod Analiza -> FindBugs, a zatim potražite ploču FindBugs-IDEA da biste pregledali rezultate:

Možete upotrijebiti drugi stupac naredbi s lijeve strane zaslona da biste grupirali nedostatke koristeći različite čimbenike:

  1. Grupiraj po kategoriji bugova.
  2. Grupiraj po razredu.
  3. Grupiraj po paketu.
  4. Grupirajte prema rangu grešaka.

Također je moguće izvesti izvješća u XML / HTML formatu, klikom na gumb "izvoz" u četvrtom stupcu naredbi.

4.3. Konfiguracija

Stranice postavki dodatka FindBugs unutar IDEA-e prilično su razumljive:

Ovaj prozor postavki prilično je sličan onome koji smo vidjeli u Eclipseu, tako da možete izvršavati sve vrste konfiguracije na analogan način, počevši od razine napora u analizi, rangiranja bugova, pouzdanosti, filtriranja klasa itd.

Ploči s preferencama može se pristupiti unutar IDEA-e, klikom na ikonu "Postavke dodatka" ispod ploče FindBugs-IDEA.

5. Analiza izvještaja za projekt Spring-Rest

U ovom ćemo odjeljku baciti svjetlo na statičku analizu izvedenu na projektu opružnog odmora dostupan na Githubu kao primjer:

Većina je nedostataka manja - zabrinjavajuća, ali pogledajmo što možemo učiniti kako bismo neke od njih popravili.

Metoda zanemaruje iznimnu povratnu vrijednost:

Datoteka fileServer = nova datoteka (Ime datoteke); fileServer.createNewFile ();

Kao što vjerojatno možete pretpostaviti, FindBugs se žali na činjenicu da bacamo povratnu vrijednost createNewFile () metoda. Moguće rješenje bilo bi pohranjivanje vraćene vrijednosti u novo deklariranu varijablu, a zatim zabilježite nešto smisleno pomoću razine DEBUG dnevnika - npr. “Imenovana datoteka ne postoji i uspješno je stvorena”Ako je vraćena vrijednost istinita.

Metoda možda neće uspjeti zatvoriti tok u iznimci: ovaj određeni nedostatak ilustrira tipičan slučaj upotrebe za rukovanje iznimkama koji sugerira da uvijek bliski potoci u a konačno blok:

probajte {DateFormat dateFormat = new SimpleDateFormat ("yyyy_MM_dd_HH.mm.ss"); Niz datotekeName = dateFormat.format (novi Datum ()); Datoteka fileServer = nova datoteka (Ime datoteke); fileServer.createNewFile (); bajt [] bajtova = datoteka.getBytes (); BufferedOutputStream stream = novi BufferedOutputStream (novi FileOutputStream (fileServer)); stream.write (bajtovi); stream.close (); return "Uspješno ste prenijeli" + korisničko ime; } catch (Iznimka e) {return "Nisi uspio prenijeti" + e.getMessage (); }

Kada se izuzetak izbaci prije stream.close () upute, tok nikada nije zatvoren, zato je uvijek poželjno koristiti konačno{} blok za zatvaranje potoka otvorenih tijekom probati/ulov rutina.

An Iznimka se uhvati kad Iznimka nije bačen: Kao što možda već znate, hvatanje Iznimka je loša praksa kodiranja, FindBugs misli da morate uhvatiti najspecifičniju iznimku kako biste se mogli pravilno nositi s njom. Dakle, u osnovi manipuliranje streamovima u Java klasi, hvatanje IOException bilo bi prikladnije od hvatanja generičnije iznimke.

Polje nije inicijalizirano u konstruktoru, ali je preusmjereno bez null provjere: uvijek je dobra ideja inicijalizirati polja unutar konstruktora, u suprotnom bismo trebali živjeti s mogućnošću da kôd podigne NPE. Stoga se preporučuje obavljanje null provjera kad god nismo sigurni je li varijabla pravilno inicijalizirana ili nije.

6. Zaključak

U ovom smo članku pokrili osnovne ključne točke korištenja i prilagodbe FindBugova u Java projektu.

Kao što vidite, FindBugs je moćan, ali jednostavan alat za statičku analizu, pomaže u otkrivanju potencijalnih rupa u kvaliteti u vašem sustavu - ako se pravilno podesi i koristi.

Na kraju, vrijedi spomenuti da se FindBugs također može pokretati kao dio zasebnog alata za kontinuirano automatsko pregledanje koda, poput Sputnjik, što može biti od velike pomoći da se izvješćima pruži puno veća vidljivost.

Uzorak koda koji smo koristili za statičku analizu dostupan je na Githubu.