Survey
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
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