Download MODUL I Otomatisasi Proses Build dengan Apache Ant 1.1 Tujuan 1

Survey
yes no Was this document useful for you?
   Thank you for your participation!

* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project

Document related concepts
no text concepts found
Transcript
MODUL I
Otomatisasi Proses Build dengan Apache Ant
1.1
Tujuan
1. Mahasiswa memahami pengertian dari proses build.
2. Mahasiswa memahami berbagai macam software yang berfungsi sebagai
build tool
3. Mahasiswa memahami kegunaan Apache Ant
4. Mahasiswa memahami dan bisa melakukan instalasi software Apache Ant
5. Mahasiswa mampu membedakan proses membangun software tanpa
build tool serta dengan menggunakan build tool
6. Mahasiswa memahami file-file yang terkait dan diperlukan oleh Apache
Ant, yaitu file properties dan build.xml
7. Mahasiswa mampu menggunakan Apache ant dengan cara membuat
build.xml untuk keperluan otomatisasi proses build serta menggunakan
berbagai target yang telah didefinisikan pada build.xml tersebut.
1.2
Teori Singkat
Apache Ant adalah software berbasis Java yang digunakan untuk
keperluan build tool. Sebagai build tool, tugas utama dari Ant adalah untuk
menyediakan sumber daya dan melaksanakan proses yang memungkinkan
membangun suatu software dari bentuk source code menjadi aplikasi yang siap
didistribusikan atau bahkan telah diinstall pada remote server. Meskipun definisi
tersebut kelihatannya sederhana, kita akan melihat bahwa Ant mempunyai
banyak sekali tasks yang bisa digunakan untuk berbagai keperluan sesuai
dengan tujuan utama dari build tool. Ada banyak build tool yang tersedia,
beberapa diantaranya adalah build tool yang bersifat spesifik untuk sistem
operasi tertentu. Beberapa contoh dari build tool, diantaranya adalah:
•
GNU Make (ingat siklus ./configure, make, make install)
•
Jam
•
rake (untuk Ruby), dan lain-lain
Modul Praktikum Pemrograman ORM – hal 1 dari 34
Ant merupakan software untuk keperluan build tool yang bersifat cross
platform, bisa digunakan pada berbagai sistem operasi yang mendukung Java.
Meskipun demikian, pembahasan dalam tulisan ini akan menggunakan Linux.
Jika anda menggunakan Windows, silahkan sesuaikan dengan sistem operasi
anda (hanya jika diperlukan). Selama tidak menggunakan fitur spesifik dari
sistem operasi yang bersangkutan (diantaranya dengan tag <exec>), maka
pembahasan ini bersifat cross platform.
Mengapa Harus Menggunakan Build Tool?
Build tool tidak diperlukan jika software yang akan kita bangun sangat
sederhana (seperti misalnya hanya menampilkan satu atau beberapa baris
tulisan) dan kita tidak keberatan untuk menuliskan dan mencantumkan berbagai
dependencies dari software tersebut (misalnya berbagai file jar yang kita
perlukan). Jika aplikasi yang kita bangun relatif kompleks, melibatkan banyak
dependencies, dengan struktur direktori tertentu, serta memerlukan banyak
eksekusi atau menjalankan tools (misalnya jar, rmic, javac, bzip2, dan lain-lain),
maka kita memerlukan build tool untuk meng-”otomatiskan” proses membangun
(compile, test, run, deploy) software tersebut. Anda bisa membayangkan sendiri
jika harus mengetikkan berpuluh-puluh baris untuk siklus compile, test, run,
deploy jika tidak menggunakan build tool.
1.3
Praktik
Instalasi Apache Ant
Ant adalah software bebas dan mempunyai lisensi ASF (Apache Software
Foundation). Ant bisa diperoleh di http://ant.apache.org. Versi terakhir saat
tulisan ini dibuat adalah versi 1.7.1. Download distribusi Ant seperti berikut ini:
[bpdp@bpdp-arch ant]$ ls -la
total 7484
drwxr-xr-x 2 bpdp users
4096 2009-09-01 03:08 .
drwxr-xr-x 26 bpdp users
4096 2009-09-19
Modul Praktikum Pemrograman ORM – hal 2 dari 34
17:37 ..
-rw-r--r-- 1 bpdp users 7641928 2008-07-09 16:19
apache-ant-1.7.1-bin.tar.bz2
[bpdp@bpdp-arch ant]$
Asumsi:
•
JDK telah terinstall dan JAVA_HOME telah di-set.
•
Ant akan diinstall di direktori $HOME/software/
Berikut adalah langkahnya:
1.$ cd software
2.$ tar -xjvf apache-ant-1.7.1-bin.tar.bz2
Hasilnya:
[bpdp@bpdp-arch software]$ pwd
/home/bpdp/software
[bpdp@bpdp-arch software]$ ls -la apache-ant-1.7.1/
total 276
drwxr-xr-x 6 bpdp users
4096 2008-06-27 12:04 .
drwxr-xr-x 25 bpdp users
4096 2009-09-28 10:05 ..
-rw-r--r-- 1 bpdp users
126 2008-06-27 12:04 INSTALL
-rw-r--r-- 1 bpdp users 51380 2008-06-27 12:04 KEYS
-rw-r--r-- 1 bpdp users 15289 2008-06-27 12:04 LICENSE
-rw-r--r-- 1 bpdp users
1270 2008-06-27 12:04 NOTICE
-rw-r--r-- 1 bpdp users
4119 2008-06-27 12:04 README
-rw-r--r-- 1 bpdp users 146814 2008-06-27 12:04 WHATSNEW
drwxr-xr-x 2 bpdp users
4096 2009-09-04 10:23 bin
drwxr-xr-x 9 bpdp users
4096 2009-09-04 10:23 docs
drwxr-xr-x 3 bpdp users
4096 2009-09-04 10:23 etc
-rw-r--r-- 1 bpdp users
7160 2008-06-27 12:04 fetch.xml
-rw-r--r-- 1 bpdp users
4445 2008-06-27 12:04 get-m2.xml
drwxr-xr-x 2 bpdp users
4096 2009-09-04 10:23 lib
[bpdp@bpdp-arch software]$
Setelah itu, setting konfigurasi environment variable di $HOME/.bashrc sebagai
berikut:
export ANT_HOME=/home/bpdp/software/apache-ant-1.7.1/
export PATH=$PATH:$ANT_HOME/bin
Setelah itu setiap kali login, shell sudah mengenali ant yang telah kita install.
Jika telah terinstall dengan benar, hasil instalasi adalah sebagai berikut:
[bpdp@bpdp-arch software]$ ant -version
Apache Ant version 1.7.1 compiled on June 27 2008
Modul Praktikum Pemrograman ORM – hal 3 dari 34
[bpdp@bpdp-arch software]$
Jika ingin mengetahui lebih lengkap lagi, gunakan parameter -diagnostics.
Struktur Direktori dan Berbagai File
Untuk keperluan praktikum ini, buat struktur direktori dengan berbagai file
berikut ini:
.
|-- build
|
`-- classes
`-- src
`-- simpleant
`-- HelloWorld.java
Isi dari file HelloWorld.java adalah sebagai berikut:
package simpleant;
p
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World");
}
}
Kompilasi dan Eksekusi Program Tanpa Apache Ant - Shell
$ javac -sourcepath src -d build/classes/
src/simpleant/HelloWorld.java
$ java -cp build/classes simpleant.HelloWorld
Hello World
$
Kompilasi dan Eksekusi Program Tanpa Apache Ant - jar
Untuk keperluan ini anda harus membuat file manifest terlebih dahulu (misalnya
helloworld-manifest).
$ cat helloworld-manifest
Main-Class: simpleant.HelloWorld
Modul Praktikum Pemrograman ORM – hal 4 dari 34
$ mkdir build/jar
$ jar cfm build/jar/HelloWorld.jar helloworld-manifest -C
build/classes/ .
$ java -jar build/jar/HelloWorld.jar
Hello World
$
Kompilasi dan Eksekusi Menggunakan Apache Ant
Untuk menggunakan Apache Ant, kita harus membuait suatu file yang
berisi tasks (berbagai tugas) yang bisa dikerjakan oleh Apache Ant. File tersebut
secara default mempunyai nama build.xml. Berikut ini adalah isi build.xml yang
terletak pada direktori root dari project.
<project name="HelloWorld" basedir="." default="main">
<property name="src.dir"
value="src"/>
<property name="build.dir"
value="build"/>
<property name="classes.dir" value="${build.dir}/classes"/>
<property name="jar.dir"
value="${build.dir}/jar"/>
<property name="main-class" value="simpleant.HelloWorld"/>
<target name="clean">
<delete dir="${build.dir}"/>
</target>
<target name="compile">
<mkdir dir="${classes.dir}"/>
<javac srcdir="${src.dir}" destdir="${classes.dir}"/>
</target>
<target name="jar" depends="compile">
<mkdir dir="${jar.dir}"/>
<jar destfile="${jar.dir}/${ant.project.name}.jar" basedir="$
{classes.dir}">
<manifest>
<attribute name="Main-Class" value="${main-class}"/>
</manifest>
</jar>
</target>
<target name="run" depends="jar">
<java jar="${jar.dir}/${ant.project.name}.jar" fork="true"/>
</target>
<target name="clean-build" depends="clean,jar"/>
<target name="main" depends="clean,run"/>
</project>
Dengan demikian, direktori yang kita buat sekarang akan mempunyai struktur
sebagai berikut:
Modul Praktikum Pemrograman ORM – hal 5 dari 34
[bpdp@bpdp-arch helloworld-with-ant]$ tree .
|-- build.xml
`-- src
`-- simpleant
`-- HelloWorld.java
2 directories, 2 files
Jalankan “ant” pada root directory project yang bersangkutan seperti berikut ini:
[bpdp@bpdp-arch helloworld-with-ant]$ ant clean
Buildfile: build.xml
clean:
[delete] Deleting directory /home/bpdp/kerjaan/src/java/helloworldwith-ant/build
BUILD SUCCESSFUL
Total time: 0 seconds
[bpdp@bpdp-arch helloworld-with-ant]$ ant run
Buildfile: build.xml
compile:
[mkdir] Created dir: /home/bpdp/kerjaan/src/java/helloworld-withant/build/classes
[javac] Compiling 1 source file to
/home/bpdp/kerjaan/src/java/helloworld-with-ant/build/classes
jar:
[mkdir] Created dir: /home/bpdp/kerjaan/src/java/helloworld-withant/build/jar
[jar] Building jar: /home/bpdp/kerjaan/src/java/helloworld-withant/build/jar/HelloWorld.jar
run:
[java] Hello World
BUILD SUCCESSFUL
Total time: 1 second
[bpdp@bpdp-arch helloworld-with-ant]$
1.4
Latihan
1. Gantilah HelloWorld.java dengan program untuk menampilkan hasil
perkalian 100*150 dan nama kelas Perkalian.
1.5
Tugas
Buatlah proyek baru yang terdiri atas 2 file source code Java. File
pertama adalah definisi class, file kedua adalah file utama yang di dalamnya
Modul Praktikum Pemrograman ORM – hal 6 dari 34
akan membuat instance dari class yang telah didefinisikan pada file pertama.
Buatlah file build.xml untuk keperluan seperti pada praktik di atas dan tunjukkan
bahwa program yang anda buat tersebut berhasil dikompilasi dan dijalankan.
Modul Praktikum Pemrograman ORM – hal 7 dari 34
MODUL II
SCM, Revision Control / Source Code Management, dan Git
2.1
Tujuan
1. Mahasiswa
memahami
pengertian
dari
Software
Configuration
Management.
2. Mahasiswa memahami keterkaitan antara SCM, Revision Control System,
ource Code Management, dan Git
3. Mahasiswa
memahami
dan
mampu
mengaplikasikan
dasar-dasar
mengaplikasikan
dasar-dasar
pemakaian Git untuk developer individual
4. Mahasiswa
memahami
dan
mampu
pemakaian Git untuk berkolaborasi antar developer.
2.2
Teori Singkat
Pengantar
Ada dua kepanjangan dari SCM dan keduanya saling berkaitan. SCM
pertama adalah Software Configuration Management. SCM kedua adalah
Source Code Management. Untuk menghilangkan kebingungan, Source Code
Management sering disebut juga Revision Control. Meskipun demikian, masih
sering ditemui istilah di dunia komputasi yang menggunakan SCM untuk
menunjukkan Software Configuration Management. Penjelasan ini semata-mata
untuk menghilangkan kebingungan jika suatu saat membaca buku teks ataupun
artikel yang menggunakan singkatan SCM. Untuk keperluan selanjutnya, SCM
akan merujuk pada Software Configuration Management. SCM merupakan
aktivitas tracking dan dan pengendalian perubahan pada software. SCM
biasanya berisi dua aktivitas utama yaitu Revision Control dan penetapan
Baselines. Suatu baseline merupakan suatu produk atau sekumpulan produk
yang menjadi dasar perbandingan logis. Revision Control itu sendiri merupakan
suatu pengelolaan terhadap berbagai perubahan yang terjadi terhadap berbagai
Modul Praktikum Pemrograman ORM – hal 8 dari 34
artifak pada proses software development. Dalam software development dengan
anggota tim pengembang yang terdiri atas lebih dari satu orang, sering terjadi
kasus satu artifak (dokumen, source code, dll) diubah oleh lebih dari satu orang.
Revision Control merupakan aktivitas untuk mengelola hal tersebut. Untuk
mempermudah melakukan Revision Control, biasanya digunakan suatu software
yang termasuk dalam kategori Version Control System.
Software untuk Version Control System
Banyak software yang dibuat untuk keperluan VCS ini. Pada dasarnya,
VCS bisa dikategorikan ke dalam berbagai kelompok berikut ini:
•
Lokal / Tersentralisasi, semua developer harus berada pada sistem
komputer yang sama. Contoh software ini antara lain adalah RCS
(Remote Control System) dan SCCS (Source Code Control System).
•
Terdistribusi (DRCS / Distributed Revision Control System), menggunakan
pendekatan
Peer-to-Peer.
Sinkronisasi
dilakukan
dengan
mempertukarkan patches-set antar peer. Contoh software ini antara lain
adalah Aegis, Bazaar, Git, Darcs, GNU Arch, Mercurial, Monotone.
•
Client-server, semua developer melakukan sinkronisasi pada suatu server
terpusat. Contoh dari software ini antara lain adalah CVS dan Subversion.
Tentang Git
Git adalah DRCS yang pada awalnya dirancang dan dibuat oleh Linus
Torvalds untuk keperluan pengembangan kernel Linux setelah BitKeeper yang
sebelumnya digunakan untuk keperluan pengembangan kernel berubah menjadi
software proprietary. Git merupakan software bebas dan bisa diperoleh di
http://www.git-scm.org.
Source Code Hosting dengan Fasilitas Git
Beberapa vendor menyediakan akses bebas untuk hosting source code,
terutama untuk proyek-proyek opensource atau proyek-proyek software bebas.
Modul Praktikum Pemrograman ORM – hal 9 dari 34
Beberapa diantaranya adalah:
1. GitHub (http://www.github.com)
2. Gitorious (http://www.gitorius.org)
3. GNU Savannah (http://savannah.gnu.org)
4. Project Kenai (http://www.kenai.com)
5. Sourceforge (http://sourceforge.net)
Proyek-proyek Pengguna Git
Git digunakan oleh banyak proyek pengembangan software, diantaranya
adalah Linux kernel, Arch Linux, Merb, Ruby on Rails, Samba, GNOME, GTK,
Fedora, dan lain-lain. KDE saat ini sedang mengevaluasi kemungkinan untuk
menggunakan Git. Proyek dibawah KDE yang sudah berimigrasi ke Git adalah
Amarok. Migrasi ini kemungkinan akan segera diikuti oleh berbagai proyek KDE
lainnya.
2.3
Praktik
Git untuk Individu
Untuk praktik ini, copy-kan seluruh file yang telan anda kerjakan pada
suatu direktori baru. Kita akan melakukan pengelolaan source code pada posisi
di dalam direktori baru tersebut.
Penting: Direktori dan file-file yang tertulis pada praktik ini lain dengan yang
anda kerjakan. Tidak perlu memperhatikan perbedaan itu, yang perlu anda
pahami adalah perintah yang anda kerjakan dan hasil pada komputer anda.
Praktik
Bagian ini digunakan jika kita hanya berurusan dengan diri kita sendiri. Source
code tidak akan dikolaborasikan dengan developer lain. Pertama kita inisialisasi
user dengan perintah berikut:
$ git config --global user.name "Bambang Purnomosid D. P."
$ git config --global user.email "[email protected]"
$
Modul Praktikum Pemrograman ORM – hal 10 dari 34
Perintah ini cukup dilakukan sekali saja. Perintah ini akan menyimpan
konfigurasi di direktori $HOME/.gitconfig berikut ini:
$ cat /home/bpdp/.gitconfig
[user]
name = Bambang Purnomosid D. P.
email = [email protected]
$
Setelah itu inisialisasi direktori proyek tempat source code berada:
[bpdp@bpdp-arch bab2]$ git init
Initialized empty Git repository in
/home/bpdp/kerjaan/modul-praktikum/sqa/bab2/.git/
[bpdp@bpdp-arch bab2]$ ls -la
total 28
drwxr-xr-x 6 bpdp users 4096 2009-10-09 05:12 .
drwxr-xr-x 9 bpdp users 4096 2009-10-09 05:06 ..
drwxr-xr-x 7 bpdp users 4096 2009-10-09 05:12 .git
-rw-r--r-- 1 bpdp users 1785 2009-10-09 05:07 build.xml
drwxr-xr-x 4 bpdp users 4096 2009-10-09 05:07 checkstyle
drwxr-xr-x 2 bpdp users 4096 2009-10-09 05:07 classes
drwxr-xr-x 3 bpdp users 4096 2009-10-09 05:07 src
[bpdp@bpdp-arch bab2]$
Tambahkan semua source code ke dalam repository:
[bpdp@bpdp-arch bab2]$ git add .
[bpdp@bpdp-arch bab2]$ ls -la .git/
total 44
drwxr-xr-x 7 bpdp users 4096 2009-10-09
drwxr-xr-x 6 bpdp users 4096 2009-10-09
-rw-r--r-- 1 bpdp users
23 2009-10-09
drwxr-xr-x 2 bpdp users 4096 2009-10-09
-rw-r--r-- 1 bpdp users
92 2009-10-09
-rw-r--r-- 1 bpdp users
73 2009-10-09
drwxr-xr-x 2 bpdp users 4096 2009-10-09
-rw-r--r-- 1 bpdp users 1088 2009-10-09
drwxr-xr-x 2 bpdp users 4096 2009-10-09
drwxr-xr-x 15 bpdp users 4096 2009-10-09
drwxr-xr-x 4 bpdp users 4096 2009-10-09
[bpdp@bpdp-arch bab2]$
05:14
05:14
05:14
05:14
05:14
05:14
05:14
05:14
05:14
05:14
05:14
.
..
HEAD
branches
config
description
hooks
index
info
objects
refs
Setelah itu lakukan commit. Commit adalah aktivitas untuk menuliskan atau
menggabungkan perubahan-perubahan yang telah dilakukan ke dalam
repository. Istilah lain untuk commit adalah checkin atau ci). “Initial commit for
Modul Praktikum Pemrograman ORM – hal 11 dari 34
project” di bawah ini adalah pesan yang akan dituliskan pada commit ini.
Initial commit for project
# Please enter the commit message for your changes. Lines
starting
# with '#' will be ignored, and an empty message aborts
the commit.
# On branch master
#
# Initial commit
#
# Changes to be committed:
#
(use "git rm --cached <file>..." to unstage)
#
#
new file:
build.xml
#
new file:
checkstyle/checks/checkstyle_checks.xml
#
new file:
checkstyle/checks/sun_checks.xml
#
new file:
checkstyle/lib/antlr.jar
#
new file:
checkstyle/lib/checkstyle-5.0.jar
#
new file:
checkstyle/lib/checkstyle-all-5.0.jar
#
new file:
checkstyle/lib/commons-beanutilscore.jar
#
new file:
checkstyle/lib/commons-cli-1.1.jar
#
new file:
checkstyle/lib/commons-logging.jar
#
new file:
src/vehicles/Bicycle.java
#
new file:
src/vehicles/BicycleMain.java
#
~
~
~
~
~
~
~
~
~
~
~
~
".git/COMMIT_EDITMSG" 22 lines, 758 characters
Setelah disimpan dengan menggunakan perintah pada editor yang
bersangkutan, hasilnya adalah sebagai berikut:
Modul Praktikum Pemrograman ORM – hal 12 dari 34
[bpdp@bpdp-arch bab2]$ git commit
[master (root-commit) a533121] Initial commit for project
11 files changed, 504 insertions(+), 0 deletions(-)
create mode 100644 build.xml
create mode 100644 checkstyle/checks/checkstyle_checks.xml
create mode 100644 checkstyle/checks/sun_checks.xml
create mode 100644 checkstyle/lib/antlr.jar
create mode 100644 checkstyle/lib/checkstyle-5.0.jar
create mode 100644 checkstyle/lib/checkstyle-all-5.0.jar
create mode 100644 checkstyle/lib/commons-beanutils-core.jar
create mode 100644 checkstyle/lib/commons-cli-1.1.jar
create mode 100644 checkstyle/lib/commons-logging.jar
create mode 100644 src/vehicles/Bicycle.java
create mode 100644 src/vehicles/BicycleMain.java
[bpdp@bpdp-arch bab2]$
Perintah-perintah berikut ini akan banyak digunakan pada saat kita bekerja
dengan source code.
Perintah “git status” dan “git diff“
Perintah “git status” digunakan untuk melihat status dari working copy.
Jika tidak ada perubahan, hasilnya adalah sebagai berikut:
[bpdp@bpdp-arch bab2]$ git status
# On branch master
nothing to commit (working directory clean)
[bpdp@bpdp-arch bab2]$
Jika kita telah mengedit file kita, kita bisa melihat perubahan yang kita lakukan
terhadap source code dengan perintah “git diff”. Berikut adalah hasilnya:
[bpdp@bpdp-arch bab2]$ git status
# On branch master
# Changed but not updated:
#
(use "git add <file>..." to update what will be
committed)
#
(use "git checkout -- <file>..." to discard changes in
working directory)
#
#
modified:
build.xml
no changes added to commit (use "git add" and/or "git
commit -a")
[bpdp@bpdp-arch bab2]$ git diff
diff --git a/build.xml b/build.xml
Modul Praktikum Pemrograman ORM – hal 13 dari 34
index 5726443..68907c7 100644
--- a/build.xml
+++ b/build.xml
@@ -1,4 +1,4 @@
-<project name="sample" default="checkstyle" basedir=".">
+<project name="Checkstyle" default="checkstyle"
basedir=".">
<property name="classes.dir" value="classes" />
<property name="src.dir" value="src" />
(END)
Setelah mengedit dan menyimpan perubahan tersebut, lakukan commit sebagai
berikut (anda harus mengisikan commit message):
[bpdp@bpdp-arch bab2]$ git commit build.xml
[master 2b3b11d] Change project name
1 files changed, 1 insertions(+), 1 deletions(-)
[bpdp@bpdp-arch bab2]$
Perintah “git add” dan “git rm”
Jika kita menambahkan file atau direktori ke proyek kita, kita bisa
menggunakan “git add”. Berikut ini adalah snapshot dari proses penambahan
tersebut:
[bpdp@bpdp-arch bab2]$ git status
# On branch master
# Untracked files:
#
(use "git add <file>..." to include in what will be
committed)
#
#
README
nothing added to commit but untracked files present (use
"git add" to track)
[bpdp@bpdp-arch bab2]$ git add README
[bpdp@bpdp-arch bab2]$ git status
# On branch master
# Changes to be committed:
#
(use "git reset HEAD <file>..." to unstage)
#
#
new file:
README
#
[bpdp@bpdp-arch bab2]$ git commit
Modul Praktikum Pemrograman ORM – hal 14 dari 34
[master 063f06a] Menambahkan file README
1 files changed, 2 insertions(+), 0 deletions(-)
create mode 100644 README
[bpdp@bpdp-arch bab2]$ git status
# On branch master
nothing to commit (working directory clean)
[bpdp@bpdp-arch bab2]$
Jika ingin me-remove file dari pelacakan git, gunakan “git rm”
Perintah “git log”
Perintah ini digunakan untuk menampilkan catatan-catatan (logs)
terhadap apa yang telah dilakukan terhadap source code:
commit 063f06a0c22af5a72e50c1d5eca2d42480d58e33
Author: Bambang Purnomosid D. P <[email protected]>
Date:
Fri Oct 9 05:33:05 2009 +0700
Menambahkan file README
commit 2b3b11d560b61c025f3756206fe7121fe1443fd3
Author: Bambang Purnomosid D. P <[email protected]>
Date:
Fri Oct 9 05:29:23 2009 +0700
Change project name
commit a533121fadeff09c76569679516155a534e270e8
Author: Bambang Purnomosid D. P <[email protected]>
Date:
Fri Oct 9 05:16:05 2009 +0700
Initial commit for project
(END)
Jika memerlukan lebih rinci lagi, bisa menggunakan “git log –stat –summary”.
Git untuk Kolaborasi
Kolaborasi akan melibatkan lebih dari satu developer. Pada dasarnya ada
beberapa perintah yang sering digunakan pada saat berkolaborasi.
Perintah “git clone“
Perintah ini digunakan untuk mengambil repository dari. Contoh jika akan
mengambil dari remote host berikut ini adalah sebagai berikut:
[bpdp@bpdp-arch scm]$ git clone
git://github.com/progit/progit.git
Modul Praktikum Pemrograman ORM – hal 15 dari 34
Initialized empty Git repository in /home/bpdp/buku/softdev/scm/progit/.git/
remote: Counting objects: 3652, done.
remote: Compressing objects: 100% (1160/1160), done.
remote: Total 3652 (delta 1895), reused 3511 (delta 1795)
Receiving objects: 100% (3652/3652), 5.49 MiB | 20 KiB/s,
done.
Resolving deltas: 100% (1895/1895), done.
[bpdp@bpdp-arch scm]$
Hasilnya adalah sebagai berikut:
[bpdp@bpdp-arch scm]$ ls
total 76
drwxr-xr-x 17 bpdp users
drwxr-xr-x 3 bpdp users
drwxr-xr-x 8 bpdp users
-rw-r--r-- 1 bpdp users
-rw-r--r-- 1 bpdp users
drwxr-xr-x 11 bpdp users
drwxr-xr-x 9 bpdp users
drwxr-xr-x 11 bpdp users
drwxr-xr-x 11 bpdp users
drwxr-xr-x 3 bpdp users
drwxr-xr-x 11 bpdp users
drwxr-xr-x 2 bpdp users
drwxr-xr-x 2 bpdp users
source
drwxr-xr-x 10 bpdp users
drwxr-xr-x 2 bpdp users
drwxr-xr-x 11 bpdp users
drwxr-xr-x 11 bpdp users
drwxr-xr-x 7 bpdp users
drwxr-xr-x 9 bpdp users
[bpdp@bpdp-arch scm]$
-la progit/
4096
4096
4096
97
821
4096
4096
4096
4096
4096
4096
4096
4096
2009-10-09
2009-10-09
2009-10-09
2009-10-09
2009-10-09
2009-10-09
2009-10-09
2009-10-09
2009-10-09
2009-10-09
2009-10-09
2009-10-09
2009-10-09
04:14
04:09
04:14
04:14
04:14
04:14
04:14
04:14
04:14
04:14
04:14
04:14
04:14
.
..
.git
.gitignore
README
cs
de
en
es-es
es-mx
es-ni
figures
figures-
4096
4096
4096
4096
4096
4096
2009-10-09
2009-10-09
2009-10-09
2009-10-09
2009-10-09
2009-10-09
04:14
04:14
04:14
04:14
04:14
04:14
ja
latex
nl
pt-br
ru
zh
Perintah git clone juga bisa dilakukan pada host yang sama seperti berikut ini:
[root@bpdp-arch ~]# git clone /home/bpdp/kerjaan/modulpraktikum/sqa/bab2
Initialized empty Git repository in /root/bab2/.git/
[root@bpdp-arch ~]# ls -la bab2/
total 28
drwxr-xr-x 5 root root 4096 2009-10-09 05:57 .
drwxr-x--- 16 root root 4096 2009-10-09 05:57 ..
drwxr-xr-x 8 root root 4096 2009-10-09 05:57 .git
-rw-r--r-- 1 root root 123 2009-10-09 05:57 README
Modul Praktikum Pemrograman ORM – hal 16 dari 34
-rw-r--r-- 1 root root 1789 2009-10-09 05:57 build.xml
drwxr-xr-x 4 root root 4096 2009-10-09 05:57 checkstyle
drwxr-xr-x 3 root root 4096 2009-10-09 05:57 src
[root@bpdp-arch ~]#
Perintah git clone juga bisa dilakukan menggunakan protokol ssh berikut ini:
[root@bpdp-arch ~]# git clone
[email protected]:/home/bpdp/kerjaan/modulpraktikum/sqa/bab2
Initialized empty Git repository in /root/bab2/.git/
The authenticity of host '192.168.1.248 (192.168.1.248)'
can't be established.
RSA key fingerprint is
d4:ce:34:11:64:61:a3:fc:07:6d:51:96:8b:6e:cd:ea.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.1.248' (RSA) to the
list of known hosts.
[email protected]'s password:
remote: Counting objects: 24, done.
remote: Compressing objects: 100% (23/23), done.
remote: Total 24 (delta 2), reused 0 (delta 0)
Receiving objects: 100% (24/24), 2.17 MiB, done.
Resolving deltas: 100% (2/2), done.
[root@bpdp-arch ~]#
Jika dua orang developer bekerja sama pada source code yang sama, maka
bisa digunakan perintah “git pull” untuk mengintegrasikan perubahan-perubahan
yang telah di-commit oleh masing-masing developer tersebut. Perintah “git pull”
juga bisa menggunakan local copy, melalui ssh, atau protokol lain.
2.4
Latihan
1. Cobalah melakukan clone terhadap hasil pekerjaan teman anda dengan
menggunakan protokol SSH. Letakkan hasilnya di suatu direktori tertentu
yang lain dari direktori yang telah anda kerjakan.
2.5
Tugas
1. Buatlah proyek baru dan ulangi lagi menggunakan langkah-langkah
praktik untuk developer individual di atas. Pahami fungsi dari masingmasing langkah tersebut dengan baik.
Modul Praktikum Pemrograman ORM – hal 17 dari 34
MODUL III
Otomatisasi Pemeriksaan Kesesuaian Source Code dengan Konvensi
Menggunakan Checkstyle
3.1
Tujuan
1. Mahasiswa
memahami
arti
penting
dari
konvensi
dalam
tim
pengembangan software.
2. Mahasiswa
memahami
fungsi
dari
software
Checkstyle
dalam
pemeriksaan kesesuaian source code dengan konvensi.
3. Mahasiswa memahami dan mampu mendefinisikan task di Apache Ant
untuk keperluan pemeriksaan kesesuaian konvensi.
4. Mahasiswa memahami dan mampu mengintegrasikan Checkstyle dalam
proyek pengembangan software.
3.2
Teori Singkat
Konvensi adalah kesepakatan (kadang diwujudkan dalam aturan tertulis)
yang berfungsi untuk mengurangi ketidakpastian dan ketidakjelasan serta
kekacauan. Konvensi biasanya tidak mempunyai sanksi hukum yang tegas dan
seringkali hanya berupa sanksi sosial jika terdapat pelanggaran.
Checkstyle
(http://checkstyle.sourceforge.net)
adalah
peranti
pengembangan yang digunakan untuk “memaksakan” kesesuaian source
dengan
konvensi.
Dalam pembuatan
software,
source
code
readibility
merupakan hal yang sangat penting karena memudahkan untuk peer reviews
serta proses testing dan debugging. Meskipun pembuatan source code pada
dasarnya bebas (misalnya, bisa saja membuat nama variabel dengan bentuk
namaVariabel atau nama_variabel), tetapi “kekacauan” seperti itu tidak bisa
ditolerir dalam proyek pembuatan software karena bisa mendatangkan
ketidakpastian dan ketidakjelasan. Konvensi pembuatan source code dalam
bahasa pemrograman Java dapat dilihat di http://java.sun.com/docs/codeconv/.
Praktikum ini akan menggunakan Checkstyle versi 5.0
Modul Praktikum Pemrograman ORM – hal 18 dari 34
3.3
Praktik
Struktur Direktori dan Berbagai File
.
|-|-|
|
|
|
|
|
|
|
|
|
`--
build.xml
checkstyle
|-- checks
|
|-- checkstyle_checks.xml
|
`-- sun_checks.xml
`-- lib
|-- antlr.jar
|-- checkstyle-5.0.jar
|-- checkstyle-all-5.0.jar
|-- commons-beanutils-core.jar
|-- commons-cli-1.1.jar
`-- commons-logging.jar
src
`-- vehicles
|-- Bicycle.java
`-- BicycleMain.java
Pada dasarnya, dari distribusi Checkstyle, kita memerlukan berbagai file
.jar yang diperlukan serta file check yang bertipe XML dan berisi berbagai modul
konfigurasi dari Checkstyle yang akan digunakan untuk memeriksa kesesuaian
dengan konvensi. Distribusi Checkstyle telah menyediakan file sun_checks.xml
yang bisa kita gunakan. File tersebut berisi konvensi source code sesuai dengan
kode konvensi dari Sun pada URL yang telah disebutkan di atas.
Direktori lib/ berisi semua file .jar dari distribusi Checkstyle. Untuk
keperluan tulisan ini, kita menggunakan pemeriksaan dari sun_checks.xml. File
build.xml digunakan Apache Ant untuk otomatisai task, sedangkan source code
terletak pada direktori src dan semuanya berada pada paket vehicles.
build.xml
<project name="checkstyle" default="checkstyle" basedir=".">
<property name="classes.dir" value="classes" />
<property name="src.dir" value="src" />
<path id="cpath">
<pathelement location="${classes.dir}"/>
</path>
<path id="checkstylecp">
<pathelement location="checkstyle/lib/*.jar" />
</path>
Modul Praktikum Pemrograman ORM – hal 19 dari 34
<target name="clean">
<echo message="Cleaning and creating new directory" />
<delete dir="${classes.dir}" />
<mkdir dir="${classes.dir}" />
</target>
<target name="compile" depends="clean">
<echo message="compiling all vehicles and tests classes" />
<javac debug="true"
source="1.5" classpathref="cpath"
srcdir="${src.dir}" destdir="${classes.dir}"/>
</target>
<taskdef resource="checkstyletask.properties"
classpath="checkstyle/lib/checkstyle-all-5.0.jar"/>
<target name="checkstyle">
<checkstyle config="checkstyle/checks/sun_checks.xml"
classpathref="checkstylecp">
<fileset dir="${src.dir}" includes="**/*.java"/>
</checkstyle>
</target>
<target name="run" depends="compile">
<java classname="vehicles.BicycleMain" classpathref="cpath"/>
</target>
</project>
Untuk menggunakan Apache Ant, perhatikan pada taskdef serta target
checkstyle di atas. Pada target tersebut kita definisikan file checks yang kita
gunakan yaitu sun_checks.xml. File yang akan kita periksa kesesuaiannya
dengan konvensi adalah Bicycle.java dan BicycleMain.java berikut ini:
Bicycle.java
/*
* A sample testable class
* taken from:
http://java.sun.com/docs/books/tutorial/java/javaOO/classes.html
*
*/
package vehicles;
public class Bicycle {
// the Bicycle class has three fields
public int cadence;
public int gear;
public int speed;
// the Bicycle class has one constructor
public Bicycle(int startCadence, int startSpeed, int startGear) {
gear = startGear;
cadence = startCadence;
speed = startSpeed;
}
// the Bicycle class has four methods
public void setCadence(int newValue) {
Modul Praktikum Pemrograman ORM – hal 20 dari 34
}
cadence = newValue;
}
public void setGear(int newValue) {
gear = newValue;
}
public void setSpeed(int newValue) {
speed = newValue;
}
public int getGear() {
return gear;
}
public int getCadence() {
return cadence;
}
public int getSpeed() {
return speed;
}
public void applyBrake(int decrement) {
speed -= decrement;
}
public void speedUp(int increment) {
speed += increment;
}
BicycleMain.java
package vehicles;
import vehicles.*;
public class BicycleMain {
public static void main (String args[]) {
Bicycle Bike = new Bicycle(10, 20, 1);
System.out.println("We have a new bicycle wth speed = " +
Bike.getSpeed() + ", cadence = " + Bike.getCadence() + ", gear = " +
Bike.getGear());
}
}
Hasil eksekusi Apache Ant adalah sebagai berikut:
$ ant clean
Buildfile: build.xml
clean:
[echo] Cleaning and creating new directory
[mkdir] Created dir: /home/bpdp/kerjaan/modulpraktikum/sqa/bab3/classes
BUILD SUCCESSFUL
Total time: 0 seconds
[bpdp@bpdp-arch bab3]$ ant
Buildfile: build.xml
checkstyle:
[checkstyle] Running Checkstyle 5.0 on 2 files
[checkstyle] /home/bpdp/kerjaan/modulpraktikum/sqa/bab3/src/vehicles/Bicycle.java:0: Missing package-
Modul Praktikum Pemrograman ORM – hal 21 dari 34
info.java file.
[checkstyle] /home/bpdp/kerjaan/modulpraktikum/sqa/bab3/src/vehicles/Bicycle.java:2: Line has trailing
spaces.
[checkstyle] /home/bpdp/kerjaan/modulpraktikum/sqa/bab3/src/vehicles/Bicycle.java:9: Missing a Javadoc
comment.
[checkstyle] /home/bpdp/kerjaan/modulpraktikum/sqa/bab3/src/vehicles/Bicycle.java:10: Line has trailing
spaces.
[checkstyle] /home/bpdp/kerjaan/modulpraktikum/sqa/bab3/src/vehicles/Bicycle.java:10:1: File contains tab
characters (this is the first instance).
[checkstyle] /home/bpdp/kerjaan/modulpraktikum/sqa/bab3/src/vehicles/Bicycle.java:12:5: Missing a Javadoc
comment.
[checkstyle] /home/bpdp/kerjaan/modulpraktikum/sqa/bab3/src/vehicles/Bicycle.java:12:16: Variable 'cadence'
must be private and have accessor methods.
[checkstyle] /home/bpdp/kerjaan/modulpraktikum/sqa/bab3/src/vehicles/Bicycle.java:13:5: Missing a Javadoc
comment.
[checkstyle] /home/bpdp/kerjaan/modulpraktikum/sqa/bab3/src/vehicles/Bicycle.java:13:16: Variable 'gear'
must be private and have accessor methods.
[checkstyle] /home/bpdp/kerjaan/modulpraktikum/sqa/bab3/src/vehicles/Bicycle.java:14:5: Missing a Javadoc
comment.
[checkstyle] /home/bpdp/kerjaan/modulpraktikum/sqa/bab3/src/vehicles/Bicycle.java:14:16: Variable 'speed'
must be private and have accessor methods.
[checkstyle] /home/bpdp/kerjaan/modulpraktikum/sqa/bab3/src/vehicles/Bicycle.java:15: Line has trailing
spaces.
[checkstyle] /home/bpdp/kerjaan/modulpraktikum/sqa/bab3/src/vehicles/Bicycle.java:17:5: Missing a Javadoc
comment.
[checkstyle] /home/bpdp/kerjaan/modulpraktikum/sqa/bab3/src/vehicles/Bicycle.java:17:20: Parameter
startCadence should be final.
[checkstyle] /home/bpdp/kerjaan/modulpraktikum/sqa/bab3/src/vehicles/Bicycle.java:17:38: Parameter
startSpeed should be final.
[checkstyle] /home/bpdp/kerjaan/modulpraktikum/sqa/bab3/src/vehicles/Bicycle.java:17:54: Parameter
startGear should be final.
[checkstyle] /home/bpdp/kerjaan/modulpraktikum/sqa/bab3/src/vehicles/Bicycle.java:22: Line has trailing
spaces.
[checkstyle] /home/bpdp/kerjaan/modulpraktikum/sqa/bab3/src/vehicles/Bicycle.java:24:5: Method 'setCadence'
is not designed for extension - needs to be abstract, final or empty.
[checkstyle] /home/bpdp/kerjaan/modulpraktikum/sqa/bab3/src/vehicles/Bicycle.java:24:5: Missing a Javadoc
Modul Praktikum Pemrograman ORM – hal 22 dari 34
comment.
[checkstyle] /home/bpdp/kerjaan/modulpraktikum/sqa/bab3/src/vehicles/Bicycle.java:24:28: Parameter newValue
should be final.
[checkstyle] /home/bpdp/kerjaan/modulpraktikum/sqa/bab3/src/vehicles/Bicycle.java:27: Line has trailing
spaces.
[checkstyle] /home/bpdp/kerjaan/modulpraktikum/sqa/bab3/src/vehicles/Bicycle.java:28:5: Method 'setGear' is
not designed for extension - needs to be abstract, final or empty.
[checkstyle] /home/bpdp/kerjaan/modulpraktikum/sqa/bab3/src/vehicles/Bicycle.java:28:5: Missing a Javadoc
comment.
[checkstyle] /home/bpdp/kerjaan/modulpraktikum/sqa/bab3/src/vehicles/Bicycle.java:28:25: Parameter newValue
should be final.
[checkstyle] /home/bpdp/kerjaan/modulpraktikum/sqa/bab3/src/vehicles/Bicycle.java:32:5: Method 'setSpeed'
is not designed for extension - needs to be abstract, final or empty.
[checkstyle] /home/bpdp/kerjaan/modulpraktikum/sqa/bab3/src/vehicles/Bicycle.java:32:5: Missing a Javadoc
comment.
[checkstyle] /home/bpdp/kerjaan/modulpraktikum/sqa/bab3/src/vehicles/Bicycle.java:32:26: Parameter newValue
should be final.
[checkstyle] /home/bpdp/kerjaan/modulpraktikum/sqa/bab3/src/vehicles/Bicycle.java:36:5: Method 'getGear' is
not designed for extension - needs to be abstract, final or empty.
[checkstyle] /home/bpdp/kerjaan/modulpraktikum/sqa/bab3/src/vehicles/Bicycle.java:36:5: Missing a Javadoc
comment.
[checkstyle] /home/bpdp/kerjaan/modulpraktikum/sqa/bab3/src/vehicles/Bicycle.java:40:5: Method 'getCadence'
is not designed for extension - needs to be abstract, final or empty.
[checkstyle] /home/bpdp/kerjaan/modulpraktikum/sqa/bab3/src/vehicles/Bicycle.java:40:5: Missing a Javadoc
comment.
[checkstyle] /home/bpdp/kerjaan/modulpraktikum/sqa/bab3/src/vehicles/Bicycle.java:44:5: Method 'getSpeed'
is not designed for extension - needs to be abstract, final or empty.
[checkstyle] /home/bpdp/kerjaan/modulpraktikum/sqa/bab3/src/vehicles/Bicycle.java:44:5: Missing a Javadoc
comment.
[checkstyle] /home/bpdp/kerjaan/modulpraktikum/sqa/bab3/src/vehicles/Bicycle.java:48:5: Method 'applyBrake'
is not designed for extension - needs to be abstract, final or empty.
[checkstyle] /home/bpdp/kerjaan/modulpraktikum/sqa/bab3/src/vehicles/Bicycle.java:48:5: Missing a Javadoc
comment.
[checkstyle] /home/bpdp/kerjaan/modulpraktikum/sqa/bab3/src/vehicles/Bicycle.java:48:28: Parameter
decrement should be final.
[checkstyle] /home/bpdp/kerjaan/modulpraktikum/sqa/bab3/src/vehicles/Bicycle.java:51: Line has trailing
Modul Praktikum Pemrograman ORM – hal 23 dari 34
spaces.
[checkstyle] /home/bpdp/kerjaan/modulpraktikum/sqa/bab3/src/vehicles/Bicycle.java:52:5: Method 'speedUp' is
not designed for extension - needs to be abstract, final or empty.
[checkstyle] /home/bpdp/kerjaan/modulpraktikum/sqa/bab3/src/vehicles/Bicycle.java:52:5: Missing a Javadoc
comment.
[checkstyle] /home/bpdp/kerjaan/modulpraktikum/sqa/bab3/src/vehicles/Bicycle.java:52:25: Parameter
increment should be final.
[checkstyle] /home/bpdp/kerjaan/modulpraktikum/sqa/bab3/src/vehicles/BicycleMain.java:3: Using the '.*'
form of import should be avoided - vehicles.*.
[checkstyle] /home/bpdp/kerjaan/modulpraktikum/sqa/bab3/src/vehicles/BicycleMain.java:3:1: Redundant import
from the same package - vehicles.*.
[checkstyle] /home/bpdp/kerjaan/modulpraktikum/sqa/bab3/src/vehicles/BicycleMain.java:5: Missing a Javadoc
comment.
[checkstyle] /home/bpdp/kerjaan/modulpraktikum/sqa/bab3/src/vehicles/BicycleMain.java:5:1: Utility classes
should not have a public or default constructor.
[checkstyle] /home/bpdp/kerjaan/modulpraktikum/sqa/bab3/src/vehicles/BicycleMain.java:7:5: Missing a
Javadoc comment.
[checkstyle] /home/bpdp/kerjaan/modulpraktikum/sqa/bab3/src/vehicles/BicycleMain.java:7:29: '(' is preceded
with whitespace.
[checkstyle] /home/bpdp/kerjaan/modulpraktikum/sqa/bab3/src/vehicles/BicycleMain.java:7:30: Parameter args
should be final.
[checkstyle] /home/bpdp/kerjaan/modulpraktikum/sqa/bab3/src/vehicles/BicycleMain.java:7:41: Array brackets
at illegal position.
[checkstyle] /home/bpdp/kerjaan/modulpraktikum/sqa/bab3/src/vehicles/BicycleMain.java:9:17: Name 'Bike'
must match pattern '^[a-z][a-zA-Z0-9]*$'.
[checkstyle] /home/bpdp/kerjaan/modulpraktikum/sqa/bab3/src/vehicles/BicycleMain.java:9:36: '10' is a magic
number.
[checkstyle] /home/bpdp/kerjaan/modulpraktikum/sqa/bab3/src/vehicles/BicycleMain.java:9:40: '20' is a magic
number.
[checkstyle] /home/bpdp/kerjaan/modulpraktikum/sqa/bab3/src/vehicles/BicycleMain.java:11: Line is longer
than 80 characters.
BUILD FAILED
/home/bpdp/kerjaan/modul-praktikum/sqa/bab3/build.xml:37: Got 52
errors and 0 warnings.
Total time: 1 second
$
Jika kita lihat pada hasil di atas, ada 52 error atau bisa dikatakan ada 52 hal
Modul Praktikum Pemrograman ORM – hal 24 dari 34
yang tidak sesuai dengan konvensi source code. Setelah mengetahui
ketidaksesuaian tersebut, developer tinggal menyesuaikan dengan konvensi
serta menjalankan Apache Ant lagi.
3.4
Latihan
1. Carilah salah satu saja dari hasil eksekusi di atas yang bisa anda
betulkan agar sesuai dengan konvensi source code dari Sun. Betulkan
kemudian eksekusi ant lagi.
3.5
Tugas
Carilah suatu source code Java dari Internet kemudian lakukan
pemeriksaan dengan menggunakan Checkstyle. Tunjukkan bagian-bagian yang
tidak sesuai dengan konvensi. Sebutkan juga URL tempat anda mengambil
source code Java tersebut.
Modul Praktikum Pemrograman ORM – hal 25 dari 34
MODUL IV
Static Analysis Menggunakan FindBugs
4.1
Tujuan
1. Mahasiswa memahami pengertian static analysis
2. Mahasiswa memahami pengertian dari bug patterns dan mengetahui
lokasi tempat mencari bug patterns tersebut
3. Mahasiswa memahami fungsi dari software FindBugs
4. Mahasiswa mampu melakukan instalasi terhadap software FindBugs
5. Mahasiswa mampu menggunakan software FindBugs untuk keperluan
melacak bugs sesuai dengan bug patterns, baik melaui antarmuka Swing
maupun melalui build.xml dari Apache Ant.
6. Mahasiswa mampu membaca dan memahami hasil analisis dari software
FindBugs.
7. Mahasiswa mampu mengintegrasikan software FindBugs dalam proyek
pengembangan software.
4.2
Teori Singkat
FindBugs adalah software yang digunakan untuk keperluan analisis static.
FindBugs bekerja dengan membandingkan antara bytecode yang dihasilkan
dengan berbagai bug patterns. Mungkin anda berpikir bahwa tool ini tidak
berguna karena pada saat mengkompilasi-pun, error akan dimunculkan jika
compiler menemui error tersebut. Hal tersebut memang benar, tetapi tidak
semua error bisa diperiksa oleh compiler. Compiler hanya akan memeriksa error
yang bersifat sintaksis.
Dunia software engineering selama ini juga mengumpulkan berbagai
pattern yang berkaitan dengan bugs. Beberapa patterns yang diimplementasikan
oleh FindBugs bisa diperoleh di website dari software FindBugs, yaitu di
http://findbugs.sourceforge.net/bugDescriptions.html. FindBugs adalah software
bebas dan bisa diperoleh dii http://findbugs.sourceforge.net/.
Modul Praktikum Pemrograman ORM – hal 26 dari 34
4.3
Praktik
Instalasi FindBugs
Download distribusi FindBugs (versi terakhir saat tulisan ini dibuat (5 Oktober
2009) adalah versi 1.3.9.
$ ls -al /home/bpdp/master/findbugs/
total 7328
drwxr-xr-x 2 bpdp users
4096 2009-10-01 20:00 .
drwxr-xr-x 32 bpdp users
4096 2009-10-04 08:49 ..
-rw-r--r-1 bpdp users 7481095 2009-10-01 20:00 findbugs1.3.9.tar.gz
$ cd /home/bpdp/software/
$ tar -xzvf findbugs-1.3.9.tar.gz
$ mv findbugs-1.3.9 findbugs
$ cd findbugs
$ ls -la
total 140
drwxr-xr-x 7 bpdp users 4096 2009-10-01 20:48 .
drwxr-xr-x 27 bpdp users 4096 2009-10-02 10:29 ..
-rw-r--r-- 1 bpdp users 1511 2006-11-07 04:11 LICENSE-ASM.txt
-rw-r--r-1
bpdp
users
2873
2006-11-13
10:35
LICENSEAppleJavaExtensions.txt
-rw-r--r-- 1 bpdp users 11767 2006-11-07 04:11 LICENSE-bcel.txt
-rw-r--r-1 bpdp users 11358 2008-10-03 10:30 LICENSE-commonslang.txt
-rw-r--r-- 1 bpdp users 1257 2006-11-07 04:11 LICENSE-docbook.txt
-rw-r--r-- 1 bpdp users 1964 2006-11-07 04:11 LICENSE-dom4j.txt
-rw-r--r-1
bpdp
users
19241
2008-10-17
10:30
LICENSEjFormatString.txt
-rw-r--r-- 1 bpdp users 1586 2008-06-19 01:54 LICENSE-jaxen.txt
-rw-r--r-- 1 bpdp users
228 2006-11-07 04:11 LICENSE-jcip.txt
-rw-r--r-- 1 bpdp users 1811 2009-04-03 10:57 LICENSE-jdepend.txt
-rw-r--r-- 1 bpdp users
251 2007-08-03 11:53 LICENSE-jsr305.txt
-rw-r--r-1 bpdp users
1349 2009-06-14 10:57 LICENSE-mysqlconnector.txt
-rw-r--r-- 1 bpdp users 26430 2006-11-07 04:11 LICENSE.txt
-rw-r--r-- 1 bpdp users
633 2008-06-13 10:30 README.txt
drwxr-xr-x 4 bpdp users 4096 2009-10-01 20:48 bin
drwxr-xr-x 5 bpdp users 4096 2009-10-01 20:48 doc
drwxr-xr-x 2 bpdp users 4096 2009-10-01 20:48 lib
drwxr-xr-x 2 bpdp users 4096 2009-10-01 20:48 plugin
drwxr-xr-x 3 bpdp users 4096 2009-10-01 20:48 src
$
Edit $HOME/.bashrc dan tambahkan berikut ini:
export FINDBUGS_HOME=/home/bpdp/software/findbugs/
export PATH=$PATH:$FINDBUGS_HOME/bin
Setelah itu, setiap login, path untuk FindBugs ini akan dikenali dan file-file
Modul Praktikum Pemrograman ORM – hal 27 dari 34
executable bisa langsung dieksekusi.
Struktur Direktori dan File
.
|-- build.xml
|-- classes
`-- src
`-- vehicles
|-- Bicycle.java
`-- BicycleMain.java
build.xml
File ini hanya diperlukan jika kita akan menggunakan Apache Ant.
<project name="findbugs" default="findbugs" basedir=".">
<property name="classes.dir" value="classes" />
<property name="src.dir" value="src" />
<path id="cpath">
<pathelement location="${classes.dir}"/>
</path>
<target name="clean">
<echo message="Cleaning and creating new directory" />
<delete dir="${classes.dir}" />
<mkdir dir="${classes.dir}" />
</target>
<target name="compile" depends="clean">
<echo message="compiling all vehicles and tests classes" />
<javac debug="true"
source="1.5" classpathref="cpath"
srcdir="${src.dir}" destdir="${classes.dir}"/>
</target>
<target name="run" depends="compile">
<java classname="vehicles.BicycleMain" classpathref="cpath"/>
</target>
<property name="findbugs.home"
value="/home/bpdp/software/findbugs" />
<taskdef name="findbugs"
classname="edu.umd.cs.findbugs.anttask.FindBugsTask">
<classpath>
<pathelement location="${findbugs.home}/lib/findbugs.jar" />
<pathelement location="${findbugs.home}/lib/findbugs-ant.jar" />
</classpath>
</taskdef>
<target name="findbugs" depends="compile">
<findbugs home="${findbugs.home}"
output="text"
outputFile="findbugs-results.txt" >
<sourcePath path="${src.dir}" />
<class location="${classes.dir}" />
</findbugs>
</target>
Modul Praktikum Pemrograman ORM – hal 28 dari 34
</project>
Bicycle.java
/*
* taken from:
http://java.sun.com/docs/books/tutorial/java/javaOO/classes.html
*
*/
package vehicles;
public class Bicycle {
// the Bicycle class has three fields
public int cadence;
public int gear;
public int speed;
// the Bicycle class has one constructor
public Bicycle(int startCadence, int startSpeed, int startGear) {
gear = startGear;
cadence = startCadence;
speed = startSpeed;
String myName = "Bambang";
myName.replace("B", "L");
}
// the Bicycle class has four methods
public void setCadence(int newValue) {
cadence = newValue;
}
public void setGear(int newValue) {
gear = newValue;
}
public void setSpeed(int newValue) {
speed = newValue;
}
public int getGear() {
return gear;
}
public int getCadence() {
return cadence;
}
public int getSpeed() {
return speed;
}
public void applyBrake(int decrement) {
speed -= decrement;
}
public void speedUp(int increment) {
speed += increment;
}
}
Perhatikan pada source code di atas (Bicycle.java). Di source code
terdapat bagian yang membuat object String (String myName = “Bambang”;) dan
Modul Praktikum Pemrograman ORM – hal 29 dari 34
penggantian satu karakter B dengan L (myName.replace(”B”, “L”);). Bagian ini
pada saat dikompilasi tidak akan menghasilkan kesalahan dan program tetap
bisa dijalankan dengan baik, tetapi bagian tersebut bukan merupakan praktik
yang baik karena statement tersebut tidak akan berguna. myName pada bagian
tersebut merupakan object yang bersifat immutable dan merupakan salah satu
bug pattern. Bagian tersebut tidak akan menghasilkan error, tetapi tidak berguna
sama sekali karena setelah statement tersebut, myName tetap berisi seperti
sebelumnya.
BicycleMain.java
package vehicles;
import vehicles.*;
public class BicycleMain {
public static void main (String args[]) {
Bicycle Bike = new Bicycle(10, 20, 1);
System.out.println("We have a new bicycle wth speed = " +
Bike.getSpeed() + ", cadence = " + Bike.getCadence() + ", gear = " +
Bike.getGear());
}
}
Analisis Static Menggunakan FindBugs GUI
Jalankan FindBugs dengan mengeksekusi perintah “findbugs.sh” (jika
menggunakan Linux) atau “findbugs.bat” (jika menggunakan Windows). Berikut
adalah hasilnya:
Modul Praktikum Pemrograman ORM – hal 30 dari 34
Setiap melakukan analisis, buat proyek baru dengan memilih menu File – New
Project … berikut ini:
Modul Praktikum Pemrograman ORM – hal 31 dari 34
Setelah menetapkan direktori untuk classes dan src, klik pada Finish. Berikut
adalah hasilnya:
Modul Praktikum Pemrograman ORM – hal 32 dari 34
Analisis Static Menggunakan Apache Ant
Selain menggunakan GUI seperti di atas, bisa juga digunakan Apache
Ant. Ekseksui “ant compile” untuk mengkompilasi tidak akan menghasilkan error,
tetapi dengan FindBugs, bagian yang sesuai dengan bug pattern “Ignores
Return Value” akan tertangkap oleh FindBugs. Perhatikan dan kerjakan
snapshots berikut:
$ ant compile
Buildfile: build.xml
clean:
[echo] Cleaning and creating new directory
[delete]
Deleting
directory
/home/bpdp/kerjaan/modulpraktikum/sqa/bab4/classes
[mkdir]
Created
dir:
/home/bpdp/kerjaan/modulpraktikum/sqa/bab4/classes
compile:
[echo] compiling all vehicles and tests classes
[javac] Compiling 2 source files to /home/bpdp/kerjaan/modulpraktikum/sqa/bab4/classes
BUILD SUCCESSFUL
Modul Praktikum Pemrograman ORM – hal 33 dari 34
Total time: 1 second
$ ant findbugs
Buildfile: build.xml
clean:
[echo] Cleaning and creating new directory
[delete]
Deleting
directory
/home/bpdp/kerjaan/modulpraktikum/sqa/bab4/classes
[mkdir]
Created
dir:
/home/bpdp/kerjaan/modulpraktikum/sqa/bab4/classes
compile:
[echo] compiling all vehicles and tests classes
[javac] Compiling 2 source files to /home/bpdp/kerjaan/modulpraktikum/sqa/bab4/classes
findbugs:
[findbugs] Executing findbugs from ant task
[findbugs] Running FindBugs...
[findbugs] Warnings generated: 1
[findbugs] Calculating exit code...
[findbugs] Setting 'bugs found' flag (1)
[findbugs] Exit code set to: 1
[findbugs] Java Result: 1
[findbugs] Output saved to findbugs-results.txt
BUILD SUCCESSFUL
Total time: 5 seconds
Hasil tersebut akan disimpan pada file findbugs-results.txt dengan format file text
seperti yang disebutkan pada build.xml. Isi dari file hasil tersebut adalah sebagai
berikut:
$ cat findbugs-results.txt
H C RV: new vehicles.Bicycle(int, int, int) ignores return
value of String.replace(CharSequence, CharSequence)
At
Bicycle.java:[line 23]
$
4.4
Latihan
1. Betulkan source code di atas kemudian kompilasi dan periksa lagi dengan
software FindBugs sampai tidak terdapat bug.
4.5
Tugas
Carilah source code Java di Internet kemudian lakukan analisis statis
dengan menggunakan FindBugs. Catat hasilnya dan buatlah analisisnya.
Modul Praktikum Pemrograman ORM – hal 34 dari 34