SQA and SonarQube: Tools for Enhancing Software Quality

Ivan Phanderson
9 min readApr 12, 2023

--

Sumber

Apa itu SQA?

Software Quality Assurance (SQA) merupakan proses berkelanjutan untuk memastikan software memenuhi spesifikasi kualitas yang ditetapkan. Tujuan dari SQA adalah untuk memastikan setiap orang yang terlibat dalam mengembangkan software telah menerapkan prosedur yang benar.

Karakteristik SQA

  1. Maintainability: Kemudahan perubahan dapat dilakukan untuk memenuhi requirements baru atau memperbaiki bugs.
  2. Correctness: Sejauh mana software memenuhi requirements yang ditentukan.
  3. Reusability: Kemudahan suatu blok kode dapat digunakan kembali pada bagian lain yang memerlukannya.
  4. Reliability: Kemampuan software untuk bekerja dalam berbagai kondisi dan waktu tanpa mengalami kegagalan.
  5. Portability: Kemampuan software untuk bekerja pada environment lain yang memiliki konfigurasi yang berbeda.
  6. Efficiency: Kemampuan software untuk memberikan respons dan waktu pemrosesan yang sesuai dengan menggunakan sumber daya yang tepat ketika menjalankan suatu fungsi.

Manfaat SQA

  1. Menghemat uang. Bugs dalam software yang sudah berjalan pada production dapat berakibat fatal. Akibatnya, developers perlu merilis perbaikan sesegera mungkin. Selain itu, hal ini juga dapat mengakibatkan reputasi software-nya berkurang yang berefek pada menurunnya pendapatan.
  2. Menghemat waktu. Dari hasil penelitian, menyelesaikan error pada production memerlukan waktu 150 kali lebih lama daripada menyelesaikan error pada fase desain.
  3. Mencegah kerusakan atau bencana serupa. Dengan melakukan SQA, kita dapat menemukan kerusakan yang serupa sehingga dapat diperbaiki sebelum dirilis ke production
  4. Meningkatkan keamanan software. Beberapa tools seperti SonarQube memungkinkan kita untuk mengetahui tingkat keamanan software yang dibuat. Dengan adanya analisis ini, maka keamanan dari software kita juga akan meningkat
  5. Meningkatkan kualitas software. Kualitas software mengacu pada pengukuran tingkat efektivitas, efisiensi, dan maintainability dari suatu kode. Kode yang berkualitas tinggi haruslah mudah dibaca, dipahami, dimodifikasi, dan dapat beradaptasi terhadap perubahan requirements. Dengan melakukan SQA, kita dapat meningkatkan kualitas kode kita.

Teknik SQA

  • Auditing: Melakukan inspeksi pada software untuk menentukan apakah serangkaian proses standar diikuti atau tidak
  • Reviewing: Dilakukan pada sebuah meeting yang melibatkan tim internal dan external (stakeholders) untuk memperoleh komentar ataupun persetujuan
  • Code inspection: Melakukan analisis kode oleh peer untuk menemukan bugs ataupun kesalahan lainnya. Reviewer harus bukan merupakan penulis kode tersebut.
  • Simulation: Menjalankan software pada tools simulator untuk melihat bagaimana software berjalan pada situasi real-life.
  • Functional testing: Memvalidasi fitur pada software untuk bekerja sebagaimana mestinya.
  • Static analysis: Menganalisis kode secara statik menggunakan bantuan software seperti SonarQube, VeraCode, dan lain-lain
  • Unit Testing: Memastikan working code kita memenuhi seluruh testing (code coverage 100%)
  • Stress Testing: Menguji kode dalam kondisi yang tidak normal seperti diberi beban yang banyak pada suatu fitur untuk memastikan software kita tetap dapat berjalan.

SQA Activities

Creating an SQA Management Plan

Rencana Manajemen SQA adalah dokumen formal yang menguraikan pendekatan dan strategi untuk mengimplementasikan aktivitas SQA di seluruh siklus hidup pengembangan perangkat lunak. Rencana ini mendefinisikan tujuan, aktivitas, dan penyampaian SQA, peran dan tanggung jawab anggota tim, serta alat dan teknik yang akan digunakan.

Setting the Checkpoints

Checkpoints adalah bagian khusus dalam siklus pengembangan perangkat lunak dimana kita melakukan kontrol kualitas dan jaminan. Checkpoints ini biasanya mencakup review kode, review desain, dan testing milestone, dan memastikan bahwa produk perangkat lunak memenuhi standar kualitas yang ditentukan.

Multi testing Strategy

Multi testing Strategy adalah pendekatan komprehensif untuk testing yang mencakup berbagai jenis testing, seperti unit testing, integration testing, system testing, dan acceptance testing. Strategi ini membantu mengidentifikasi isu dan masalah pada berbagai tahapan proses pengembangan software, memastikan bahwa produk software berkualitas tinggi.

Measure Change Impact

Mengukur dampak perubahan pada kualitas perangkat lunak adalah aktivitas SQA yang penting. Ini melibatkan evaluasi dampak perubahan pada produk perangkat lunak dan menentukan apakah perubahan tersebut akan berdampak positif atau negatif pada kualitasnya.

Manage Good Relations

SQA bukan hanya tentang pengujian dan kontrol kualitas tetapi juga tentang membina hubungan positif antara anggota tim. Komunikasi dan kolaborasi yang efektif sangat penting untuk mencapai produk perangkat lunak yang berkualitas. Oleh karena itu, kegiatan SQA harus fokus pada membangun hubungan yang baik dan mempromosikan kolaborasi di antara anggota tim.

Static Analysis

Analisis statis adalah teknik pengujian perangkat lunak yang melibatkan pemeriksaan kode sumber atau artefak perangkat lunak lain tanpa mengeksekusinya. Ini adalah cara untuk mengevaluasi kualitas kode perangkat lunak dan mengidentifikasi potensi masalah dan kerentanan sebelum software dijalankan.

Tools analisis statis menggunakan berbagai metode untuk menganalisis kode dan mengidentifikasi potensi masalah, seperti kesalahan sintaks, pelanggaran konvensi penulisan kode, kerentanan keamanan, dan masalah performa. Alat-alat ini men-scan kode untuk mengidentifikasi pola tertentu dan membandingkannya dengan serangkaian aturan atau standar yang telah ditentukan sebelumnya.

Salah satu manfaat analisis statis adalah dapat dilakukan di awal proses pengembangan, mengurangi biaya dan waktu yang diperlukan untuk memperbaiki masalah di kemudian hari dalam siklus pengembangan. Selain itu, analisis statis dapat membantu meningkatkan kualitas perangkat lunak dengan mengidentifikasi potensi cacat dan kerentanan yang mungkin tidak mudah dideteksi melalui teknik pengujian lainnya.

Namun, analisis statis memang memiliki beberapa keterbatasan. Misalnya, mungkin tidak dapat mendeteksi jenis cacat tertentu, seperti yang terkait dengan perilaku runtime atau masalah khusus lingkungan. Selain itu, alat analisis statis dapat menghasilkan false positiveatau false negative, yang dapat memerlukan waktu dan upaya tambahan untuk memvalidasi dan mengoreksi.

Secara keseluruhan, analisis statis adalah teknik yang berharga untuk mengidentifikasi potensi masalah dalam kode perangkat lunak sebelum dikompilasi atau dijalankan. Dengan memberikan feedback awal tentang kualitas kode, analisis statis dapat membantu meningkatkan kualitas perangkat lunak, mengurangi biaya pengembangan, dan mempercepat waktu pemasaran.

Static Analysis Tools

Sonarqube

SonarQube adalah tools open source yang menyediakan analisis kode yang komprehensif. SonarQube mendukung lebih dari 25 bahasa pemrograman, dan menyediakan seperangkat aturan untuk mendeteksi kualitas kode dan masalah keamanan. Tools ini juga menawarkan integrasi dengan berbagai alat build dan IDE, dan dapat digunakan baik di lokasi maupun di cloud. Satu kelemahannya adalah beberapa fitur lanjutan hanya tersedia dalam versi berbayar.

Sonarcloud

SonarCloud adalah versi SonarQube berbasis cloud, yang menawarkan fungsionalitas yang sama dengan versi lokal. Ini memberikan analisis kode otomatis dan terintegrasi dengan berbagai version control system, yang membuatnya mudah untuk diintegrasikan ke dalam alur kerja yang ada. Tools ini menawarkan paket gratis untuk proyek open-source dan tim kecil, dan paket berbayar untuk tim yang lebih besar.

Codeclimate

CodeClimate adalah alat berbasis cloud yang menawarkan analisis kode untuk lebih dari 30 bahasa pemrograman. Tools ini memberikan seperangkat aturan yang dapat disesuaikan untuk mendeteksi masalah yang terkait dengan kualitas kode, keamanan, dan pemeliharaan. Codeclimate juga terintegrasi dengan berbagai version control system, dan memberikan laporan dan warning yang dapat dengan mudah dibagikan dengan anggota tim. Satu kelemahannya adalah biayanya mahal untuk tim dan proyek yang lebih besar.

Secara keseluruhan, ketiga tools tersebut menyediakan fungsionalitas serupa untuk analisis statis, dengan beberapa perbedaan dalam bahasa pemrograman dan integrasi yang didukungnya, serta opsi penetapan harga dan penyebarannya. Pilihan antara alat-alat ini mungkin bergantung pada kebutuhan khusus, seperti ukuran dan kerumitan proyek, bahasa pemrograman yang digunakan, dan anggaran yang tersedia untuk alat tersebut.

Sonarqube

Sonarqube merupakan platform open-source yang dikembangkan oleh SonarSource untuk melakukan pemeriksaan kualitas kode secara terus menerus dengan menganalisis kode statik untuk mendeteksi code smell, bugs, vulnerability, security hotspots, coverage test, dan duplikasi kode. Berikut merupakan langkah untuk menjalankan SonarQube dari komputer lokal.

1. Prasyarat

Terdapat Java versi 8–17 yang terinstall pada komputer Anda. Link download:

2. Download SonarQube

Link download:

Pilih bagian community edition untuk menggunakan SonarQube secara gratis. Setelah mengunduh SonarQube, unzip folder tersebut dan masukkan ke dalam environment variable path.

3. Download Sonar-Scanner

Link download:

Pilih sesuai sistem operasi yang Anda gunakan. Setelah mengunduh SonarScanner, unzip folder tersebut dan masukkan ke dalam environment variable path.

4. Jalankan SonarQube

Path ke folder\sonarqube-9.9.0.65466\bin\windows-x86-64

Masuk ke path di atas dan klik file StartSonar untuk menjalankan SonarQube. Contoh tampilan ketika SonarQube berhasil dijalankan adalah sebagai berikut:

5. Buka Terminal pada Folder yang Ingin Diperiksa Kualitas Kodenya

6. Jalankan Sonar-Scanner pada Folder tersebut

Untuk menjalankan Sonar-Scanner, kita dapat menggunakan script berikut:

sonar-scanner -X -Dsonar.sources=. -Dsonar.host.url=https://sonarqube.cs.ui.ac.id -Dsonar.login={<token login Anda>} -Dsonar.python.coverage.reportPaths=coverage.xml -Dsonar.projectKey={<project-key Anda>}

Jika Anda tidak ingin menggunakan script yang panjang seperti pada contoh di atas, Anda juga dapat membuat file sonar-scanner.properties. Adapun panduan menulisnya dapat dilihat pada link berikut:

Setelah menjalankan kode di atas pada terminal, tampilannya akan seperti berikut:

7. Analisis Hasilnya

Terdapat beberapa aspek yang perlu diperhatikan setelah melakukan analisis statis menggunakan SonarQube, yaitu:

  1. Bugs mengacu pada kesalahan atau kekurangan dalam kode yang dapat menyebabkan program mengalami malfungsi. Contoh:

2. Vulnerabilities adalah kelemahan keamanan dalam kode yang dapat dimanfaatkan oleh penyerang

3. Security Hotspots adalah potensi kerentanan keamanan dalam kode yang memerlukan perhatian

4. Code Smells adalah praktik penulisan kodeyang buruk yang membuat kode sulit untuk dipahami dan di-maintain.

5. Code Coverage. SonarQube akan mengukur sejauh mana kode telah ditest dan menampilkan bagian kode yang tidak tercover oleh unit test.

6. Code Duplications merujuk pada keberadaan kode yang serupa atau identik di berbagai bagian program.

Analisis Statis SIEvent

Pada hasil percobaan menjalankan sonarqube untuk mengecek kualitas kode proyek kelompok saya, ternyata terdapat 2 code smells dan 2 security hotspot.

Code Smells:

Terdapat 2 kode yang dikomen yang mana ini bukan merupakan praktik yang baik sehingga perlu dihapus.

Security Hotspots:

Terdapat masalah keamanan dari kode kelompok saya. Akan tetapi, karena kode (password) tersebut hanya digunakan untuk testing, maka hal tersebut tidak menjadi masalah sehingga kita dapat memilih opsi safe seperti pada gambar berikut:

Setelah memperbaiki kode-kode kita sesuai dengan masukan dari SonarQube, kita dapat menjalankan kembali Sonar-Scanner untuk memeriksa kualitas kode hasil perbaikan kita. Berikut adalah contoh hasilnya setelah melakukan perbaikan:

Integrasi dengan CI/CD GitLab

Proses pengecekan kualitas kode juga dapat diintegrasikan dengan CI/CD GitLab. Cara pengintegrasiannya juga sangat mudah. Anda cukup membuat atau memodifikasi file .gitlab-ci.yml dengan menambahkan kode berikut:

sonarqube:
stage: sonarqube
image:
name: sonarsource/sonar-scanner-cli:latest
entrypoint: [ "" ]
variables:
SONAR_USER_HOME: "${CI_PROJECT_DIR}/.sonar" # Defines the location of the analysis task cache
GIT_DEPTH: "0" # Tells git to fetch all the branches of the project, required by the analysis task
cache:
key: "${CI_JOB_NAME}"
paths:
- .sonar/cache
script:
- sonar-scanner -X -Dsonar.sources=. -Dsonar.host.url=$SONAR_HOST_URL -Dsonar.login=$SONAR_TOKEN -Dsonar.python.coverage.reportPaths=coverage.xml -Dsonar.projectKey=$SONAR_PROJECT_KEY

Jangan lupa untuk menambahkan SONAR_HOST_URL , SONAR_TOKEN , dan SONAR_PROJECT_KEY ke dalam CI/CD variables agar pipeline SonarQube dapat menjalankan scriptnya.

Kesimpulan

Saat ini, pada industri pengembangan software yang sangat kompetitif, kualitas kode yang tinggi sudah tidak opsional lagi, tetapi merupakan sebuah keharusan. Dengan memprioritaskan kualitas kode menggunakan tools seperti SonarQube untuk memperbaiki kode mereka, developers dapat menghasilkan software yang lebih efisien dan kokoh yang memenuhi permintaan klien.

Referensi

--

--