Tag

, , , , , , , , , , , , ,


Apa itu Static Code Analysis??

Bismillah…. Static code analysis atau sering disingkat Static Analysis saja, adalah sebuah metode untuk melakukan analisis terhadap kualitas dalam source code sebuah perangkat lunak tanpa harus menjalankan perangkat lunak tersebut. Umumnya Static Code Analysis ini dilakukan untuk menemukan Bugs lebih awal, jauh sebelum aplikasi di rilis.

All code is guilty, until proven innocent.

Kapan sih sebaiknya Static Code Analysis ini dilakukan??

Static code, sebaiknya dilakukan mulai sejak awal development code dibuat. Dan lebih baik lagi jika diintegrasikan langsung dengan Automatic build tools seperti Jenkins.

Btw, apa aja keuntungan Static Code Analysis ini??

That’s it,, ini pertanyaan yang sangat sering ditanyakan jika berbicara mengenai Static Code Analysis ini. Secara umum, static code Analysis ini digunakan untuk menemukan Bugs lebih awal jauh sebelum bugs itu sendiri ditemukan oleh QA atau User. Namun secara Khusus, Static Code Analysis digunakan untuk:

  • Mencari possible bugs, crash, memory leak, stack overflow, buffer overflow, unclosed resources, dan lain sebagainya.
  • mencari celah di setiap pojok kode program yg kita buat, yang mungkin lolos dari review kita sendiri.
  • Mencari possibility wrong logic di dalam code.
  • Menari semua bad practice yg tanpa sengaja kita lakukan saat ngoding.
  • Mencari semua duplicate code, yang masih bisa di pindahkan menjadi sebuah method yg bia dipake dari mana saja (More reusable).
  • Identifikasi issue desain dan cyclomatic dependency, dan membantu untuk mengurangi kompleksitas kode.

Tools nya apa??

Sesuai judul, di tulisan ini kita akan membahas mengenai Static Code Analysis dengan menggunakan SonarQube.

Persiapan System.

Instalasi SonarQube di Mac.

  • Pertama, Install homebrew di mesin Mac agan, caranya bisa agan cari deh di Google… :p
  • Install SonarQube dengan command:
    $ brew install sonar
  • Done….

Instalasi SonarQube di Linux

  • Download SonarQube pake wget, cek link nya di wesite sonar ya…:
    $ wget http://dist.sonar.codehaus.org/sonarqube-5.X.zip
  • Unzip dan pindahin ke /opt (atau terserah lah mau di pindah ke mana):
$ unzip sonarqube-5.X.zip
$ mv sonarqube-5.X /opt/sonar
  • Done….

Setting up MySQL

Eh, iya… btw SonarQube ini make MySQL untuk nyimpen data nya… bisa sih pake SQLite bawaannya sendiri. Cuman kalo mau di exportdatanya ilang,, dan scalability nya juga kurang bagus… nah, biar enak kita perlu setup MySQL nya.

$ mysql -u root -p

CREATE DATABASE sonar CHARACTER SET utf8 COLLATE utf8_general_ci;
CREATE USER 'sonar' IDENTIFIED BY 'sonar';
GRANT ALL ON sonar.* TO 'sonar'@'%' IDENTIFIED BY 'sonar';
GRANT ALL ON sonar.* TO 'sonar'@'localhost' IDENTIFIED BY 'sonar';
FLUSH PRIVILEGES;

Setting up SonarQube Server.

Kalo SonarQube udah di install dan MySQL nya udah di setup. Sekarang kita perlu setup servernya. edit file: /opt/sonar/conf/sonar.properties kalo Mac tempatnya di /usr/local/Cellar/sonar/(VERSI)/libexec/conf/sonar.properties.

Tambahin beberapa baris code berikut ini:

sonar.jdbc.username=sonar
sonar.jdbc.password=sonar

sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance

Atur port servernya:

sonar.web.host=127.0.0.1
sonar.web.context=/sonar
sonar.web.port=9000

Sebenarnya settingan itu semua udah ada di file sonar.properties,, agan cuma perlu uncomment dengan cara menghapus tanda # yg ada di paling awal setiap baris nya.

Running Sonar server.

Cara jalaninnya sih simple.

sonar start

Udah selesai… hehe,, simple kan???

Bagaimana cara Analysis Project nya?

Nah, kalo udah setup SonarQube servernya,, sekarang tinggal dipake buat analyze code. Di sini kita akan bahas dua jenis project, Maven project dan Gradle Project (untuk Android Project).

Maven Project

Untuk maven Project, setup nya secara general. Sekali setup untuk semua project2 maven. Caranya:

  • Ubah file settings.xml yang ada di $MAVEN_HOME/conf atau di ~/.m2
<settings>
    <pluginGroups>
       <pluginGroup>
          org.sonarsource.scanner.maven
       </pluginGroup>
    </pluginGroups>
    <profiles>
        <profile>
            <id>sonar</id>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <properties>
                <!-- Optional URL to server. Default value is http://localhost:9000 -->
                <sonar.host.url>
                   http://myserver:9000
                </sonar.host.url>
            </properties>
        </profile>
     </profiles>
</settings>
  • Cara analyze project maven:
mvn clean verify sonar:sonar

atau kadang harus di pisah nih exeusi nya:

mvn clean verify 
mvn sonar:sonar

Gradle Project

Untuk Gradle project nih rada beda dengan maven, satu project satu settingan.

  • Buka build.gradle yg ada di project masing-masing. kemudian tambahin:
plugins { id "org.sonarqube" version "1.2" }
apply plugin: "org.sonarqube"

sonarqube  {
    properties {
        property "sonar.host.url", "http://myserver:9000"
        property "sonar.sourceEncoding", "UTF-8"
        property "sonar.language", "java"
        property "sonar.profile", "Android Lint"
        property "sonar.projectKey","PROJECT-KEY"
        property "sonar.projectName","PROJECT_NAME"
        property "sonar.projectVersion","VERSION"
        property "sonar.java.source", "1.7"
        property "sonar.sources", "./"
    }
}
  • Untuk analyze nya jalanin:
./gradlew clean check sonarqube

Udah deh,, simple kayak gitu… TInggal tunggu hasilnya lewat Sonar Qube Web UI. Alamatnya di: http://localhost:9000 (atau tergantung dari setingan agan di atas).

Contoh Report nya seperti apa??

Sample sonar Qube bisa di cek di sini nih: nemo.

Thats all… Semoga bermanfaat buat temen2 developer dan QE.