Analisis Kode dengan SonarQube

1. Ikhtisar

Pada artikel ini, kita akan melihat analisis kode sumber statis dengan SonarQube - yang merupakan platform sumber terbuka untuk memastikan kualitas kode.

Mari kita mulai dengan pertanyaan inti - mengapa pertama-tama menganalisis kode sumber? Sederhananya, untuk memastikan kualitas, keandalan, dan kemudahan pemeliharaan selama masa hidup proyek; basis kode yang ditulis dengan buruk selalu lebih mahal untuk dipelihara.

Baiklah, sekarang mari kita mulai dengan mengunduh SonarQube versi LTS terbaru dari halaman unduhan dan mengatur server lokal kami seperti yang dijelaskan dalam panduan memulai cepat ini.

2. Menganalisis Kode Sumber

Sekarang setelah kita masuk, kita diminta untuk membuat token dengan menentukan nama - yang bisa menjadi nama pengguna kita atau nama lain pilihan kita dan klik tombol buat.

Kami akan menggunakan token nanti pada saat menganalisis proyek kami. Kita juga perlu memilih bahasa utama (Java) dan teknologi pembangunan proyek (Maven).

Mari tentukan plugin di pom.xml :

    org.sonarsource.scanner.maven sonar-maven-plugin 3.4.0.905    

Versi terbaru plugin tersedia di sini. Sekarang, kita perlu menjalankan perintah ini dari root direktori proyek kita untuk memindainya:

mvn sonar:sonar -Dsonar.host.url=//localhost:9000 -Dsonar.login=the-generated-token

Kita perlu mengganti token yang dihasilkan dengan token dari atas.

Proyek yang kami gunakan dalam artikel ini tersedia di sini.

Kami menentukan URL host dari server SonarQube dan login (token yang dihasilkan) sebagai parameter untuk plugin Maven.

Setelah menjalankan perintah, hasilnya akan tersedia di dasbor Proyek - di // localhost: 9000 .

Ada parameter lain yang bisa kita berikan ke plugin Maven atau bahkan atur dari antarmuka web; sonar.host. url, sonar.projectKey , dan sonar.sources bersifat wajib sementara yang lainnya opsional.

Parameter analisis lainnya dan nilai defaultnya ada di sini. Juga, perhatikan bahwa setiap plugin bahasa memiliki aturan untuk menganalisis kode sumber yang kompatibel.

3. Hasil Analisis

Sekarang setelah kami menganalisis proyek pertama kami, kami dapat pergi ke antarmuka web di // localhost: 9000 dan menyegarkan halaman.

Di sana kita akan melihat ringkasan laporan:

Masalah yang ditemukan dapat berupa Bug, Kerentanan, Bau Kode, Cakupan, atau Duplikasi. Setiap kategori memiliki jumlah masalah atau nilai persentase yang sesuai.

Selain itu, masalah dapat memiliki satu dari lima tingkat keparahan yang berbeda: pemblokir, kritis, utama, minor, dan info. Tepat di depan nama proyek terdapat ikon yang menampilkan status Gerbang Kualitas - lulus (hijau) atau gagal (merah).

Mengeklik nama proyek akan membawa kita ke dasbor khusus tempat kita dapat menjelajahi masalah-masalah khusus proyek secara lebih rinci.

Kita dapat melihat kode proyek, aktivitas dan melakukan tugas administrasi dari dasbor proyek - masing-masing tersedia di tab terpisah.

Meskipun ada tab Masalah global , tab Masalah di dasbor proyek menampilkan masalah khusus untuk proyek yang bersangkutan saja:

Tab masalah selalu menampilkan kategori, tingkat keparahan, tag, dan upaya yang dihitung (terkait waktu) yang diperlukan untuk memperbaiki masalah.

Dari tab masalah, Anda dapat menetapkan masalah ke pengguna lain, mengomentarinya, dan mengubah tingkat keparahannya. Mengeklik masalah itu sendiri akan menampilkan lebih banyak detail tentang masalah tersebut.

Tab masalah dilengkapi dengan filter canggih di sebelah kiri. Ini bagus untuk menunjukkan masalah. Jadi, bagaimana cara mengetahui jika basis kode cukup sehat untuk diterapkan ke dalam produksi? Itulah gunanya Quality Gate.

4. Gerbang Kualitas SonarQube

Di bagian ini, kita akan melihat fitur utama SonarQube - Gerbang Kualitas. Kemudian kita akan melihat contoh cara menyiapkan yang khusus.

4.1. Apa itu Gerbang Kualitas?

Gerbang Kualitas adalah serangkaian persyaratan yang harus dipenuhi proyek sebelum dapat memenuhi syarat untuk rilis produksi. Ini menjawab satu pertanyaan: dapatkah saya memasukkan kode saya ke produksi dalam keadaannya saat ini atau tidak?

Memastikan kualitas kode kode "baru" sambil memperbaiki yang sudah ada adalah salah satu cara yang baik untuk mempertahankan basis kode yang baik dari waktu ke waktu. Quality Gate memfasilitasi pengaturan aturan untuk memvalidasi setiap kode baru yang ditambahkan ke basis kode pada analisis selanjutnya.

Kondisi yang ditetapkan di Gerbang Kualitas masih mempengaruhi segmen kode yang tidak dimodifikasi. Jika kami dapat mencegah timbulnya masalah baru, seiring waktu, kami akan menghilangkan semua masalah.

Pendekatan ini dapat dibandingkan dengan memperbaiki kebocoran air dari sumbernya. Ini membawa kita ke istilah tertentu - Periode Kebocoran. Ini adalah periode antara dua analisis / versi proyek .

Jika kami menjalankan kembali analisis, pada proyek yang sama, tab tinjauan dasbor proyek akan menunjukkan hasil untuk periode kebocoran:

Dari antarmuka web, tab Gerbang Kualitas adalah tempat kita dapat mengakses semua gerbang kualitas yang ditentukan. Secara default, cara SonarQube sudah diinstal sebelumnya dengan server.

Konfigurasi default untuk cara SonarQube menandai kode sebagai gagal jika:

  • cakupan kode baru kurang dari 80%
  • persentase baris duplikat pada kode baru lebih besar dari 3
  • rawatan, keandalan atau peringkat keamanan lebih buruk dari A

With this understanding, we can create a custom Quality Gate.

4.2. Adding Custom Quality Gate

First, we need to click on the Quality Gates tab and then click on the Create button which is on the left of the page. We'll need to give it a name – baeldung.

Now we can set the conditions we want:

From the Add Condition drop-down, let's choose Blocker Issues; it'll immediately show up on the list of conditions.

We'll specify is greater than as the Operator, set zero (0) for the Error column and check Over Leak Period column:

Then we'll click on the Add button to effect the changes. Let's add another condition following the same procedure as above.

We'll select issues from the Add Condition drop-downand check Over Leak Period column.

The value of the Operator column will be set to “is less than” and we'll add one (1) as the value for the Error column. This means if the number of issues in the new code added is less than 1, mark the Quality Gate as failed.

I know this doesn't make technical sense but let's use it for learning sake. Don't forget to click the Add button to save the rule.

One final step, we need to attach a project to our custom Quality Gate. We can do so by scrolling down the page to the Projects section.

There we need to click on All and then mark our project of choice. We can as well set it as the default Quality Gate from the top-right corner of the page.

We'll scan the project source code, again, as we did before with Maven command. When that's done, we'll go to the projects tab and refresh.

This time, the project will not meet the Quality Gate criteria and will fail. Why? Because in one of our rules we have specified that, it should fail if there are no new issues.

Let's go back to the Quality Gates tab and change the condition for issues to is greater than. We need to click the update button to effect this change.

A new scan of the source code will pass this time around.

5. Integrating SonarQube into a CI

Making SonarQube part of a Continuous Integration process is possible. This will automatically fail the build if the code analysis did not satisfy the Quality Gate condition.

For us to achieve this, we're going to be using SonarCloud which is the cloud-hosted version of SonaQube server. We can create an account here.

From My Account > Organizations, we can see the organization key, and it will usually be in the form xxxx-github or xxxx-bitbucket.

Also from My Account > Security, we can generate a token as we did in the local instance of the server. Take note of both the token and the organization key for later use.

In this article, we'll be using Travis CI, and we'll create an account here with an existing Github profile. It will load all our projects, and we can flip the switch on any to activate Travis CI on it.

We need to add the token we generated on SonarCloud to Travis environment variables. We can do this by clicking on the project we've activated for CI.

Then, we'll click “More Options” > “Settings” and then scroll down to “Environment Variables”:

We'll add a new entry with the name SONAR_TOKEN and use the token generated, on SonarCloud, as the value. Travis CI will encrypt and hide it from public view:

Finally, we need to add a .travis.yml file to the root of our project with the following content:

language: java sudo: false install: true addons: sonarcloud: organization: "your_organization_key" token: secure: "$SONAR_TOKEN" jdk: - oraclejdk8 script: - mvn clean org.jacoco:jacoco-maven-plugin:prepare-agent package sonar:sonar cache: directories: - '$HOME/.m2/repository' - '$HOME/.sonar/cache'

Ingatlah untuk mengganti kunci organisasi Anda dengan kunci organisasi yang dijelaskan di atas. Melakukan kode baru dan mendorong ke repo Github akan memicu pembuatan CI Travis dan pada gilirannya mengaktifkan pemindaian sonar juga.

6. Kesimpulan

Dalam tutorial ini, kita telah melihat cara menyiapkan server SonarQube secara lokal dan cara menggunakan Quality Gate untuk menentukan kriteria kesesuaian proyek untuk rilis produksi.

Dokumentasi SonarQube memiliki lebih banyak informasi tentang aspek lain dari platform.