SonarQube dan IntelliJ IDEA: Integrasi yang Benar


SonarQube adalah alat yang sangat baik untuk memperkenalkan analisis kode statis ke dalam proses pengembangan perangkat lunak. Ini mendukung Java yang digunakan di perusahaan kami dan sejumlah besar bahasa pemrograman lainnya.


Saat ini, alat ini telah memasuki kehidupan kita, mengikuti satu gaya kode dan melindungi dari berbagai jenis kesalahan. Kesalahan ditemukan saat membangun CI atau sebelum menerima permintaan tarik dalam penyimpanan berversi. Semua kesalahan yang ditemukan ditampilkan di antarmuka Web, tempat Anda dapat mempelajari dan mengelolanya.


Namun, masalahnya adalah bahwa antarmuka berbasis web yang nyaman tidak berarti kenyamanan menghilangkan komentar yang ditemukan dalam kode proyek. Untuk melakukan koreksi, Anda harus terlebih dahulu melihat di mana file ini ditemukan, kemudian buka file ini dan baru kemudian melakukan koreksi. Ini juga mengarah pada fakta bahwa pengembang belajar tentang masalah dengan jeda yang sangat besar (kadang-kadang analisis di SonarQube dapat memakan waktu puluhan menit), yang tidak berkontribusi untuk menjaga kemurnian kode.


Untuk membuat hidup lebih mudah bagi para pengembang perusahaan kami menggunakan IntelliJ IDEA, saya menyusun instruksi. Dan kemudian saya menyadari bahwa itu bisa bermanfaat bagi lingkaran spesialis yang lebih luas, dan memutuskan untuk menempatkannya di akses publik.


Beberapa kata tentang perusahaan saya

Karena artikel saya adalah yang pertama di blog korporat NPO Krista, saya akan menulis beberapa kata tentang perusahaan saya.


Bidang kegiatan kami adalah teknologi informasi untuk pemerintah negara bagian dan kota. Kami prihatin dengan efektivitas reformasi pemerintah, efektivitas pemerintah, kualitas layanan publik, transparansi pelaporan keuangan, keterbukaan data anggaran untuk penduduk, dll.


Sejarah perusahaan dimulai di Rybinsk. Turis kadang-kadang mengunjungi kota kami, bepergian dengan perahu di Volga. Cari di peta dekat reservoir Rybinsk. Geografi modern dari pusat-pusat produksi, cabang dan kantor perwakilan kami jauh lebih luas, tetapi pusat utama NPO "Krista" masih berlokasi di Rybinsk.


Pertama, mari kita lihat inspeksi apa yang umumnya didukung SonarQube. Pertama-tama, ini adalah inspeksi kami sendiri, yang datang dalam pengiriman standar. Namun, selain itu, ada juga plugin untuk mengintegrasikan beberapa analisis pihak ketiga:


  • Checkstyle
  • Spotbugs (sebelumnya bernama FindBugs, tetapi diganti namanya bersamaan dengan penamaan ulang analyzer itu sendiri)
  • PMD

Setiap inspeksi individu dapat dikonfigurasi secara individual, serta digabungkan menjadi profil, memungkinkan Anda untuk memiliki satu set inspeksi untuk seluruh perusahaan. Jadi, di profil utama kami, lebih dari 1200 inspeksi berbeda diaktifkan. Jelas bahwa tidak ada yang dapat menyimpan begitu banyak aturan di kepalanya, yang berarti bahwa setelah setiap tahap penulisan kode, tahap pengeditan komentar dari SonarQube mengikuti. Dan semakin pendek tahap ini, semakin tidak menyakitkan bagi pengembang. Jadi bagaimana bisa disederhanakan?


Untuk mengatasi masalah ini, berbagai IDE memiliki plugin yang memungkinkan Anda untuk mengekstrak informasi dari server SonarQube dan menampilkannya langsung di editor kode. Dalam kasus IntelliJ IDEA, ini, pertama-tama, SonarLint - plugin resmi dari pengembang SonarQube itu sendiri. Hanya dibutuhkan profil dari server dengan pengaturan inspeksi aktif, dan analisis itu sendiri membuat serangan tepat di IDE. Ini secara signifikan meningkatkan kualitas pengembangan, memungkinkan Anda untuk segera melihat semua komentar baru dan memperbaikinya dengan cepat. Tapi ada lalat di salep. SonarLint bekerja secara eksklusif dengan inspeksi SonarQube sendiri, sepenuhnya mengabaikan semua inspeksi lainnya. Anda tidak akan melihat komentar dari FindBugs, atau dari CheckStyle atau PMD. Tetapi bisa mengandung banyak informasi berharga.


Tetapi jangan putus asa: server SonarQube dapat mengekspor pengaturan untuk semua analis, yang berarti bahwa mungkin untuk mengkonfigurasi plug-in IDEA standar sehingga mereka menghasilkan hasil yang setara dengan server.


Mari kita berurusan dengan pengaturan ini secara berurutan.


Konfigurasikan SonarLint


Tidak ada trik di sini. Kami masuk ke pengaturan IDEA dan di bagian Plugins kami menemukan plugin SonarLint dan menginstalnya.



Awalnya, plugin menggunakan pengaturan inspeksi default. Sekarang Anda dapat pergi ke jendela plug-in dan mengkonfigurasi koneksi ke server SonarQube. Karena lebih baik melihat sekali daripada membaca seratus kali, saya hanya akan memberikan serangkaian tangkapan layar dari urutan penyiapan. Selanjutnya, tempat-tempat yang membutuhkan perhatian akan dilingkari merah. Ini adalah kolom yang harus diisi, atau tombol yang ingin Anda klik, atau tanda yang ingin Anda bawa ke tampilan yang ditentukan:








Hal utama adalah jangan lupa mengklik Update binding setelah menambahkan server baru sehingga plugin memuat profil dengan pengaturan. Tombol ini harus ditekan setiap kali profil berubah di server (inspeksi ditambahkan / dihapus, ubah pengaturannya).


Jika Anda telah menghubungkan beberapa modul dalam satu proyek IDEA, maka dalam pengaturan Anda harus beralih ke modul tertentu setiap kali Anda perlu menganalisisnya untuk komentar. Ini sangat tidak nyaman, tetapi memang demikian.


Daftar komentar akan diperbarui secara otomatis di latar belakang setiap kali file baru dibuka atau perubahan dibuat untuk file ini. Jika perilaku ini tidak diinginkan, maka Anda dapat menonaktifkannya di sana, dalam pengaturan plugin.


Contoh cara kerja tampilan SonarLint dapat dilihat di bawah ini (gambar dapat diklik):



Jika ada yang salah

Ada situasi ketika SonarLint karena alasan tertentu menolak untuk bekerja. Dalam hal ini, di jendela SonarLint itu sendiri, Anda dapat pergi ke tab log dan melihat apa yang terjadi. Namun, sayangnya, informasi dalam log ini tidak selalu jelas dan memadai.


Misalnya, setelah rilis terakhir IntelliJ IDEA (2019.2), saya berhenti bekerja dengan kesalahan ini:



Ini sangat informatif ... Dan saya tidak tahu bagaimana cara mendapatkan informasi sendiri.


Situasi diselamatkan oleh FAQ di situs web SonarQube . Ternyata di jendela SonarLint di IDEA, Anda dapat mengubah tingkat kesalahan log:



Jika Anda memilih item yang dipilih, maka log yang lebih detail akan mulai muncul, dan Anda sudah dapat memahami apa yang terjadi:



Ya! Sekarang kesalahan muncul, dan menjadi jelas apa yang terjadi.


Bahkan, ada konflik versi yang tidak menyenangkan. Aplikasi kami masih menggunakan Java 8 dan sedang diuji pada SonarQube 7.1. Pada saat yang sama, seluruh proses produksi terkait dengan kemampuan SonarQube untuk menganalisis perbedaan kesalahan antara cabang pengembangan utama dan Permintaan Tarik.


Tetapi hal yang paling tidak menyenangkan adalah bahwa sejak SonarQube 7.2 fitur ini telah dibayar, itulah sebabnya kami masih belum memperbarui ke versi terbaru. Dan dukungan untuk Java 11 diimplementasikan hanya di SonarQube 7.3.


Poin penting lainnya adalah bahwa plugin SonarLint, ketika menganalisis kode, mengkompilasi kode sumber tanpa gagal menggunakan JRE yang menjalankan IntelliJ IDEA. Sementara IDEA bekerja di Java 8, semuanya baik-baik saja dengan kami. Tetapi ketika beralih ke menggunakan Java 11 dalam versi 2019.2, semuanya berantakan, karena sebenarnya ada kompilasi ke bytecode Java 11 ( kelas file major versi 55 ), dan dianalisis dengan versi penganalisis yang diinstal pada server, t yaitu tidak mendukung format bytecode ini. Dan ini adalah masalah yang diketahui .


Tampaknya, Anda harus segera mencari cara untuk memperbarui SonarQube ke versi terbaru. Mungkin menggunakan plugin pihak ketiga sonarqube-community-branch-plugin yang menawarkan fungsi yang kita butuhkan.


Mengunduh pengaturan penganalisa dari SonarQube


Setiap plugin, kecuali untuk SonarLint, membutuhkan file konfigurasinya sendiri, masing-masing dalam formatnya sendiri. Untungnya, SonarQube dapat mengunduh file-file ini. Mereka berada di jendela pengaturan profil analisis.


Untuk sampai di sana, Anda harus pergi ke bagian Quality Profile di antarmuka Web server SonarQube dan pilih profil yang digunakan untuk menganalisis proyek:



Pada halaman yang terbuka, bagian yang muncul menampilkan tautan untuk mengekspor pengaturan untuk masing-masing alat analisis:



Pengaturan untuk FindBugs dan PMD harus diunggah ke disk lokal dengan ekstensi XML , tetapi pengaturan untuk CheckStyle dapat digunakan langsung dari URL dari situs.


Konfigurasikan CheckStyle


Di IDEA, plugin ini disebut CheckStyle-IDEA . Ini mungkin plugin yang paling bebas masalah dalam hal penggunaan, karena memungkinkan Anda untuk memuat pengaturan secara langsung dengan URL dan tidak memerlukan pergantian antar modul, seperti SonarLint.


Untuk menghubungkan konfigurasi, buka pengaturan IDEA dan pilih bagian CheckStyle . Selanjutnya, Anda perlu menambahkan item baru ke tabel Configuration File :



Dan tunjukkan sumber konfigurasi:



Juga, jangan lupa untuk menandai konfigurasi yang baru ditambahkan sebagai aktif di tabel jendela pengaturan.


Itu saja, sekarang Anda dapat pergi ke jendela CheckStyle dan memulai analisis (tombol yang dipilih atas):



Jika profil pada server SonarQube telah berubah, Anda perlu memperbarui pengaturan dengan mengklik tombol yang sesuai di jendela yang sama (tombol bertanda bawah).


Jika ada yang salah

Jika terjadi kesalahan "File aturan Checkstyle tidak dapat diuraikan", yaitu, "SuppressionCommentFilter tidak diizinkan sebagai anak di Pemeriksa", Anda perlu menurunkan versi Checkstyle dalam pengaturan plugin yang digunakan pada server SonarQube. Kepatuhan versi dapat ditemukan di tabel dalam deskripsi plugin Checkstyle untuk SonarQube.


Menyiapkan FindBugs


Di IDEA, plugin ini disebut FindBugs-IDEA . Tidak seperti plugin sebelumnya yang ditinjau, plugin ini tidak dapat mengambil pengaturan langsung dari server dan memerlukan file lokal.


Untuk menghubungkan konfigurasi, buka pengaturan IDEA dan pilih bagian FindBugs-IDEA . Selanjutnya, pada tab Filter , tambahkan item baru ke tabel Include filter files :



Plugin siap digunakan. Di jendelanya, Anda dapat memulai analisis satu file, serta seluruh proyek atau osprey lain untuk dipilih:



Catatan penting 1: dalam pengaturan plugin ada tab Share , di mana ia diusulkan untuk menghubungkan file pengaturan SonarQube. Saya tidak merekomendasikan menggunakan pengaturan ini, karena tidak berfungsi dengan benar, tetapi konsekuensinya diperlakukan non-sepele. Faktanya adalah bahwa hanya menghapus pengaturan ini tidak berhasil. Pengaya tidak mulai bekerja secara normal. Untuk memulihkan pekerjaan, saya harus menghapus file .idea/findbugs-idea.xml di direktori proyek dan mengkonfigurasi ulang semuanya lagi.


Catatan Penting 2: Jika pengaturan pada server SonarQube telah berubah, Anda harus mengunggahnya ke disk lagi.


Catatan penting 3: sayangnya, pengembangan plugin ini terhenti setelah pengembangan FindBugs sendiri dipindahkan ke fork SpotBugs-nya. Dalam bugtracker JetBrains ada tiket untuk topik ini. Jadi jika, bersama kami, Anda ingin dukungan penuh untuk semua komentar SonarQube di rumah, di IDE favorit Anda, maka Anda dapat memilih tiket ini. Mungkin gerobak akan bergerak.


Pengaturan PMD


Di IDEA, plugin ini disebut PMDPlugin. Mirip dengan FindBugs, plugin ini membutuhkan file pengaturan pada disk. Untuk mengonfigurasi, buka pengaturan IDEA dan tambahkan file yang diunduh dari SonarQube:



Nama file memainkan peran penting, karena di masa depan itu akan digunakan oleh plugin untuk membentuk item menu yang sesuai untuk memulai analisis.


Juga di kontribusi tetangga, Anda harus menentukan versi Java yang digunakan proyek (yah, pengodean pada saat yang sama):



Sekarang Anda dapat memulai analisis file saat ini menggunakan menu konteks:


 Run PMD->Custom Rules-><  > 

Catatan Penting 1: PMD juga dapat diluncurkan melalui menu utama, tetapi ini tidak dianjurkan, karena dalam hal ini, tidak satu file akan dipindai, tetapi seluruh proyek dibuka di IDE. Ini bisa memakan banyak waktu dan membebani sistem secara signifikan.


Catatan Penting 2: Seperti FindBugs, PMD memerlukan file konfigurasi pada disk. Oleh karena itu, Anda harus memperbaruinya setiap kali pengaturan profil SonarQube berubah.


Kesimpulan


Singkatnya, saya perhatikan yang berikut ini. Terlepas dari kenyataan bahwa Anda harus mengelola pengaturan sebanyak 4 plugin untuk melacak komentar, masih lebih baik daripada menunggu setiap kali hasil pengeditan muncul di server SonarQube, dan memungkinkan Anda untuk segera melakukan kode bersih.


Saya berharap bahwa informasi yang disajikan di sini akan membantu seseorang lebih mudah untuk berteman dengan analisa statis pada umumnya dan dengan SonarQube pada khususnya.


Saya juga ingin berterima kasih kepada kolega saya yang membantu saya menulis dan mendukung relevansi artikel ini: Dmitry Zimichev, Yuri Krupin, dan Artyom Ganev.

Source: https://habr.com/ru/post/id469963/


All Articles