JavaRush /Blog Jawa /Random-JV /Ngopi #94. Review saka limang kode Jawa statis analyzers....

Ngopi #94. Review saka limang kode Jawa statis analyzers. Jawa tumpukan lan tumpukan kasalahan memori

Diterbitake ing grup

Review saka limang kode Jawa statis analyzers

Sumber: DZone Developers asring mbutuhake macem-macem program, kalebu analisa kode statis, sing bisa nemokake lan ndandani kode sing salah ing awal pembangunan. Nalika review kode minangka alat sing ora ana regane ing upaya iki, kadhangkala jumlah pamawas kode sing kudu ditinjau lan ditinjau pancen nggegirisi. Iki mbutuhake akeh wektu lan gaweyan. Iki uga ndadékaké kasunyatan sing reviewers asring mung mbayar manungsa waé kanggo fragmen kode sing kritis kanggo operasi program. Dene alat analisis statis mriksa kabeh kode kanthi akurasi sing padha. Ngopi #94.  Review saka limang kode Jawa statis analyzers.  Kesalahan memori tumpukan lan tumpukan Jawa - 1Aku wis sijine bebarengan sawetara kode analyzers sing kompatibel karo IntelliJ IDEA. Mugi iki mbantu ing karya.

Analisa IntelliJ IDEA sing dibangun

Analisa kode Jawa statis sing dibangun ing IntelliJ IDEA ora kalah karo alat analisis statis khusus. Panelusuran fragmen kode sing curiga, cluttered utawa ora bener ditindakake kanthi nggunakake macem-macem metode analisis statis: analisis aliran data lan pencocokan pola. IntelliJ IDEA nduwe akeh pemeriksaan. Sejatine, akeh sing ora tansah nglaporake kesalahan kasebut kanthi akurat. Nanging, padha nuduhake sloppiness ing kode utawa kamungkinan kanggo ngganti karo alternatif rapi. Sawise sinau babagan "Inspeksi → Jawa" sethithik, aku ngerteni siji perkara. Pemriksaan ing kategori kemungkinan kesalahan, masalah numerik, lan masalah serialisasi luwih cenderung nemokake kesalahan nyata. Ing kasus apa wae, sampeyan kudu nganakake tes dhewe lan nemtokake sing bakal migunani kanggo proyek sampeyan. Amarga analisis statis ditindakake ing mode panyuntingan kode, ing IntelliJ IDEA sampeyan bisa ndandani kesalahan sajrone sawetara detik. Editor langsung nyorot pecahan kode sing salah. Ngopi #94.  Review saka limang kode Jawa statis analyzers.  Kasalahan Memori Tumpukan lan Tumpukan Jawa - 2Iku pancene trep lan kelangan! Kajaba iku,, yen sampeyan nggunakake kombinasi "Alt + Enter" ing Piece milih saka kode, sampeyan bisa milih salah siji opsi kanggo ndandani kesalahan liwat menu konteks: Sampeyan uga bisa mangerteni alesan kanggo mbukak pengawasan tartamtu Ngopi #94.  Review saka limang kode Jawa statis analyzers.  Kasalahan Memori Tumpukan lan Tumpukan Jawa - 3. Ing sawetara kasus, iki nyuda wektu panelusuran: Ngopi #94.  Review saka limang kode Jawa statis analyzers.  Kasalahan Memori Tumpukan lan Tumpukan Jawa - 4Sampeyan bisa mbukak analisis kanthi manual kanthi milih "Analisis → Priksa Kode". Utawa sampeyan bisa mbukak mriksa individu nggunakake "Analyze → Run mriksa dening jeneng". Sadurunge nindakake iki, nemtokake ruang lingkup analisis (kanggo proyek, modul utawa file individu). Nalika sampeyan nindakake analisis kanthi cara iki, sawetara pamriksan kasedhiya sing ora bisa digunakake ing mode suntingan amarga kerumitan. Sawise analisis, asil bakal diklompokaké miturut kategori/direktori ing jendhela kapisah. Saka jendhela iki sampeyan bisa navigasi menyang pemicu validasi tartamtu: Ngopi #94.  Review saka limang kode Jawa statis analyzers.  Kasalahan Memori Tumpukan lan Tumpukan Jawa - 5IntelliJ mung ngidini sampeyan nyimpen asil analisis ing format HTML lan XML. Sayange, ing mratelakake panemume, iku paling trep kanggo bisa karo masalah dideteksi ing IDE dhewe. Cathetan. Umume fitur analisa statis kasedhiya ing IntelliJ IDEA Community Edition gratis.

SonarJawa

SonarJava minangka penganalisa kode statis kanggo Jawa saka SonarSource. Dhaptar fungsi kasebut kalebu:
  • 150+ aturan deteksi kesalahan;
  • 350+ aturan kanggo ngenali mambu kode;
  • 40+ aturan kanggo ndeteksi kerentanan potensial ;
  • Integrasi karo Maven, Gradle, Ant, Eclipse, IntelliJ IDEA, VS Code;
  • Expandable karo aturan diagnostik khusus;
  • Alat SAST khusus: umume aturan diagnostik disusun miturut CWE , CERT , OWASP .
Sampeyan bisa nindakake analisis ing macem-macem IDE (liwat plugin SonarLint ) lan kanthi kapisah ing SonarQube . SonarLint bisa kerja bareng karo penganalisa kode IntelliJ IDEA sing dibangun. Yen sampeyan kisaran liwat Piece disorot kode, sampeyan bisa kerep ndeleng bebaya saka loro analyzers: Ngopi #94.  Review saka limang kode Jawa statis analyzers.  Kasalahan Memori Tumpukan lan Tumpukan Jawa - 6Mesthi, sampeyan bisa ndeleng bebaya ing jendhela kapisah: Ngopi #94.  Review saka limang kode Jawa statis analyzers.  Kasalahan Memori Tumpukan lan Tumpukan Jawa - 7Sakabèhé, kemampuan kanggo mbukak SonarJava ing macem-macem cara ndadekake atraktif. Iki menehi pangembang kebebasan kanggo milih alat nalika nulis kode.

FindBugs/SpotBugs

Sayange, FindBugs durung suwe dianyari; rilis stabil pungkasan dirilis ing taun 2015. Nanging kita isih ngelingi lan nggunakake, awit iku mbok menawa paling misuwur free statis kode Jawa analyzer. Yen sampeyan takon pangembang Jawa babagan analisis statis, mesthine bakal langsung mikir babagan FindBugs. Analisa sumber terbuka SpotBugs dadi kelanjutan logis saka FindBugs sing ditinggal. Wis kabeh kaluwihan lan cacat saka FindBugs. Wektu bakal nemtokake manawa iki apik utawa ala. Ing sawetoro wektu, komunitas analisa aktif ngembangake. Fitur utama SpotBugs:
  • 400+ aturan deteksi kesalahan;
  • Integrasi menyang Ant, Maven, Gradle, Eclipse, IntelliJ IDEA;
  • Bisa ditambahi karo aturan diagnostik khusus.
Kanggo nemokake kode sing curiga, metodologi sing padha digunakake: pencocokan pola lan analisis aliran data. Analisa ndeteksi macem-macem jinis kesalahan sing ana gandhengane karo multithreading, kinerja, kerentanan, kebingungan kode, lan liya-liyane. Ing IntelliJ IDEA, jendhela tandha katon kaya iki: Ngopi #94.  Review saka limang kode Jawa statis analyzers.  Kasalahan Memori Tumpukan lan Tumpukan Jawa - 8Tandha bisa diklompokaké miturut kategori, kelas, direktori, lan tingkat kapercayan. Sampeyan bisa ndeleng tandha lan dokumentasi bebarengan kanggo aturan diagnostik apa wae. Analisis diwiwiti kanthi manual. Sawise analisis, kabeh fragmen kode masalah disorot bebarengan karo bebaya liyane saka IntelliJ IDEA lan SonarLint. Nanging, ana masalah. Sampeyan kudu nglakokake maneh analisis kanggo nganyari bebaya kanggo nggambarake owah-owahan sing digawe ing file kasebut. Ana uga akeh bebaya saran, mula analisa kudu dikonfigurasi sadurunge digunakake kanthi aktif.

PVS-Studio

PVS-Studio adhedhasar perpustakaan open source Spoon. Butuh kode sumber minangka input lan mbangun model AST sing dirancang kanthi apik kanthi informasi semantik. Adhedhasar model iki, analisa nggunakake teknik modern kayata:
  • Analisis alur data;
  • kinerja simbolis;
  • Anotasi metode;
  • Analisis adhedhasar pola.
Saiki, analisa nggunakake luwih saka 105 aturan diagnostik sing ngenali macem-macem cacat kode. Iki kalebu koreksi ketik, ngganti jeneng referensi nol, kode sing ora bisa digayuh, indeks array sing ora ana wates, nglanggar panggunaan kontrak metode, lan kesalahan liyane. Sampeyan bisa mangerteni kabeh kapabilitas aturan diagnostik kene . Fungsi utama PVS-Studio:
  • Analisa fokus kanggo nemokake kesalahan nyata;
  • Saliyane versi CLI, ana uga integrasi karo IntelliJ IDEA, Maven, Gradle, Jenkins, SonarQube;
  • Kemampuan kanggo mbukak analyzer ing mode tambahan;
  • Analisa ngenali masalah kompatibilitas potensial karo Java SE API nalika migrasi project saka Jawa 8 kanggo versi luwih anyar;
  • PVS-Studio ngowahi laporan menyang macem-macem format pangguna-loropaken: JSON, XML, HTML, TXT;
  • Alat SAST khusus: umume aturan diagnostik disusun miturut CWE , CERT , OWASP .

PMD

PMD minangka penganalisa statis sumber terbuka. Iki ngenali kesalahan pangembangan umum: variabel sing ora digunakake, blok kosong, nggawe obyek sing ora perlu lan masalah liyane. Analisa nggunakake kode sumber minangka input. Saiki, PMD nganalisa siji file sumber saben proses, sing nggawe watesan babagan kelengkapan analisis. Penulis PMD menehi saran supaya ngumpulake proyek kasebut sadurunge dianalisis. Iki ngidini sampeyan ngekstrak informasi babagan jinis sing digunakake ing kode sing dianalisis. Fungsi utama PMD:
  • Integrasi karo macem-macem IDE (IntelliJ IDEA, Eclipse, NetBeans) lan mbangun sistem (Maven, Gradle, Ant);
  • Ndhukung macem-macem format laporan analisa: SARIF, CSV, IDEA, JSON, teks (standar), XML, HTML, TextColor lan liya-liyane;
  • Nduwe luwih saka 300 template aturan diagnostik. Kategori: gaya coding, praktik paling apik, bug, multithreading, kinerja lan liya-liyane;
  • Nyedhiyakake CPD (Copy-Paste Detector) bebarengan karo PMD sing ndeteksi duplikat ing kode.
Yen kita ndeleng kabeh aturan diagnostik, PMD luwih fokus kanggo ngrampungake masalah gaya coding lan nyekel kesalahan sing jelas. Aturan diagnostik bisa uga bertentangan, mula kudu dikonfigurasi sadurunge nggunakake analisa. Sampeyan uga bisa mbukak analisis liwat plugin kanggo IntelliJ IDEA, nanging sampeyan ora bisa milih file individu kanggo analisis. Jendhela bebaya katon kaya mangkene: Ngopi #94.  Review saka limang kode Jawa statis analyzers.  Kasalahan Memori Tumpukan lan Tumpukan Jawa - 9Miturut pendapatku, nggarap bebaya ora trep banget, amarga ora bisa dikelompokake miturut file lan pesen sing ora jelas. Dheweke mung katon nalika sampeyan nglayang ing bebaya.

Kesimpulan

Mesthine, saliyane analisa sing dibahas ing ndhuwur, ana solusi liyane. Ana program mbayar (Coverity, Klockwork, JArchitect) lan gratis (Error Prone, Infer, Checkstyle). Kabeh fokus ing siji bab: nyegah kode sing salah utawa duweni potensi buggy tekan produksi. Aku ora duwe hak kanggo ngadili analisa sing luwih cocog kanggo tugas iki. Nanging analisa sing ngembangake analisis aliran data lan eksekusi simbolis luwih cenderung nemokake bug nyata ing kode kasebut. Yen sampeyan milih analisa statis, perhatikan:
  • integrasi menyang macem-macem IDE;
  • integrasi menyang sistem perakitan;
  • gampang ngluncurake analisa ing server;
  • kemampuan kanggo ndeteksi kesalahan ing mode editing kode;
  • kemampuan kanggo nggarap bebaya kanthi gampang;
  • Orientasi SAST;
  • persentasi positif palsu;
  • kerumitan konfigurasi.
  • Kombinasi kabeh pro lan kontra bakal nggawa sampeyan menyang nomer analisa statis sing dianggep paling apik.
Cathetan: Aku nyedhiyakake conto kanthi integrasi menyang IntelliJ IDEA, amarga aku kerep nggunakake.

Jawa tumpukan lan tumpukan kasalahan memori

Sumber: DZone Saiki kita bakal nliti kesalahan utama sing bisa kedadeyan ing memori tumpukan utawa tumpukan Jawa, nanging luwih dhisik ayo elinga apa tegese rong istilah kasebut.
  • Memori heap minangka area memori khusus ing ngendi obyek java disimpen.
  • Memori tumpukan minangka area memori sementara kanggo nyimpen variabel nalika nelpon metode.
Pangecualian utama sing njlèntrèhaké masalah memori numpuk iku java.lang.OutOfMemoryError . Ngopi #94.  Review saka limang kode Jawa statis analyzers.  Kasalahan Memori Tumpukan lan Tumpukan Jawa - 10

Jawa Heap Space

Kesalahan iki kedadeyan nalika program Jawa gagal nyedhiakke obyek anyar ing area memori numpuk.

Limit Overhead GC Ngluwihi

Program Jawa mbuwang akeh wektu kanggo nglumpukake sampah. Kesalahan iki katon nalika koleksi sampah njupuk munggah 98% wektu program lan mbalekake kurang saka 2% saka papan memori.

public class OutOfMemoryErrorDemo {
    public static void main(String[] args) {
        int i = 0;
        List<String> stringList = new ArrayList<>();
        while (i < Integer.MAX_VALUE) {
            i++;
            String generatedString = new String( "Some string generated to show out of memory error example " + i);
            stringList.add(generatedString);
        }
    }
}
Ing kene stringList ngemot referensi kanggo strings sing digawe, supaya kolektor sampah ora bisa mbusak strings sing digawe saka memori, nanging nyoba mbusak sampah liyane ing aplikasi kasebut. Nanging iki ora cukup.

Ukuran Array sing Dijaluk Ngluwihi Limit VM

Kesalahan kedadeyan nalika sampeyan nyoba nyedhiyakake larik nalika ora cukup ruang ing tumpukan.

public class OutOfMemoryErrorDemo {
    public static void main(String[] args) {
        // we try to create too long array
        long[] array = new long[Integer.MAX_VALUE];
    }
}

Metaspace

Pangecualian dibuwang karo pesen iki nalika ora ana papan ing wilayah metaspace kanggo informasi data kelas.

Ora ana spasi swap (Panjaluk Ukuran Byte kanggo Alasan. Ora ana Spasi Swap?)

Kesalahan katon nalika memori ora bisa dialokasikan ing tumpukan asli utawa ukurane ora cukup.

alesan stack_trace_with_native_method

Antarmuka Jawa asli utawa metode asli gagal ngalokasi memori ing tumpukan kasebut. StackOverFlowError - nalika ana akeh banget cara telpon. Biasane pangecualian dibuwang kanthi cara sing duwe rekursi ing njero.

public class StackOverFlowErrorDemo {

    public static void main(String[] args) {
        recursiveMethod(2);
    }

    public static int recursiveMethod(int i) {
      	// it will never stop and it allocates all stack memory
        return recursiveMethod(i);
    }
}
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION