Regular Expressions(kompiler)

• Regular Expressions
• finite state machine is a good “visual” aid
– but it is not very suitable as a specification
(its textual description is too clumsy)
• regular expressions are a suitable specification
– a more compact way to define a language that can be accepted by an FSM
• used to give the lexical description of a programming language
– define each “token” (keywords, identifiers, literals, operators, punctuation, etc)
– define white-space, comments, etc
• these are not tokens, but must be recognized and ignored
• Example: Pascal identifier
• Lexical specification (in English):
– a letter, followed by zero or more letters or digits
• Lexical specification (as a regular expression):
– letter . (letter | digit)*
• Operands of a regular expression
• Operands are same as labels on the edges of an FSM
– single characters, or
– the special character e (the empty string)
– “letter” is a shorthand for
– a | b | c | … | z | A | B | C | … | Z
• “digit“ is a shorthand for
– 0 | 1 | 2 | … | 9
• sometimes we put the characters in quotes
– necessary when denoting | . * ( )
• Precedence of | . * operators.
• Consider regular expressions:
– letter.letter | digit*
– letter.(letter | digit)*
Question 1: Describe (in English) the language defined by each of the following regular expressions:
– letter (letter* | digit*)
– (letter | _ ) (letter | digit | _ )*
– digit* “.” digit*
– digit digit* “.” digit digit*
Question 2: Write a regular expression for each of these languages:
– The set of all C++ reserved words
• Examples: if, while, for, class, int, case, char, true, false
– C++ string literals that begin with ” and end with ” and don’t contain any other ” except possibly in the escape sequence \”
• Example: ”The escape sequence \” occurs in this string”
– C++ comments that begin with /* and end with */ and don’t contain any other */ within the string
• Example: /* This is a comment * still the same comment */
• Example: Integer Literals
• An integer literal with an optional sign can be defined in English as:
– “(nothing or + or -) followed by one or more digits”
• The corresponding regular expression is:
– (+|-|e) (digit.digit*)
• A new convenient operator ‘+’
– same precedence as ‘*’
– digit digit* is the same as
– digit + which means “one or more digits”
• Language Defined by a Regular Expression
• Recall: language = set of strings
• Language defined by an automaton
– the set of strings accepted by the automaton
• Language defined by a regular expression
– the set of strings that match the expression
• Concept of Reg Exp Generating a String
Rewrite regular expression until have only a sequence of letters (string) left
• Non–determinism in Generation
• Different rule applications may yield different final results
• Concept of Language Generated by Reg Exp
• Set of all strings generated by a regular expression is the language of the regular expression
• In general, language may be infinite
• String generated by regular expression language is often called a “token”
• Examples of Languages and Reg Exp
• å = { 0, 1, . }
– (0 | 1)+ “.” (0 | 1)* | (0 | 1)* “.” (0 | 1)+
Þ binary floating point numbers
– (0 0)* Þ even-length all-zero strings
– 1* (0 1* 0 1*)* Þ binary strings with even number of zeros
• å = { a,b,c, 0, 1, 2 }
– (a|b|c)(a|b|c|0|1|2)* Þ alphanumeric identifiers
– (0|1|2)+ Þ trinary numbers
• Reg Exp Notational Shorthand
• R + one or more strings of R: R(R*)
• R? optional R: (R|e)
• [abcd] one of listed characters: (a|b|c|d)
• [a-z] one character from this range: (a|b|c|d…|z)
• [^abc] anything but one of the listed chars
• [^a-z] any one character not from this range
• Equivalence of FSM and Regular Expressions
• Theorem:
– For each finite state machine M, we can construct a regular expression R such that M and R accept the same language.
– [proof omitted]
• Theorem:
– For each regular expression R, we can construct a finite state machine M such that R and M accept the same language.
– [proof outline follows]
• Regular Expressions to NFSM (1)
• Regular Expressions to NFSM (2)
• Regular Expressions to NFSM (3)
• For A*
• Example of RegExp -> NFSM conversion
• Consider the regular expression
• The NFSM is
• Converting NFSM to DFSM
• Simulate the NFSM
• Each state of DFSM
– is a non-empty subset of states of the NFSM
• Start state of DFSM
– is the set of NFSM states reachable from the NFSM start state using only e-moves
• Add a transition S a > S’ to DFSM iff
– S’ is the set of NFSM states reachable from any state in S after consuming only the input a, considering e-moves as well
• Remarks on converting NFSM to DFSM
• An NFSM may be in many states at any time
• How many different states ?
• If there are N states, the NFSM must be in some subset of those N states
• How many subsets are there?
• 2N = finitely many
• For example, if N = 5 then 2N = 32 subsets
• NFSM -> DFSM Example
Question 3: First convert each of these regular expressions to a NFSM
– (a | b | e) (a | b)
– (ab | ba)* (aa | bb)
Question 4: Next convert each resulting NFSM to a DFSM

Grammars for Syntax Definition
A Context-free Grammar (CFG) Is Utilized to Describe the Syntactic Structure of a Language
A CFG Is Characterized By:
1. A Set of Tokens or Terminal Symbols
2. A Set of Non-terminals
3. A Set of Production Rules
Each Rule Has the Form

NT ® {T, NT}*
4. A Non-terminal Designated As the Start Symbol
Grammars for Syntax Definition
Example CFG
Grammars are Used to Derive Strings:
Grammars are Used to Derive Strings:
A More Complex Grammar
Defining a Parse Tree
More Formally, a Parse Tree for a CFG Has the Following Properties:
Root Is Labeled With the Start Symbol
Leaf Node Is a Token or Î
Interior Node (Now Leaf) Is a Non-Terminal
If A ® x1x2…xn, Then A Is an Interior; x1x2…xn Are Children of A and May Be Non-Terminals or Tokens
Other Important Concepts
Other Important Concepts
Associativity of Operators
Other Important Concepts
Operator Precedence
Syntax-Directed Translation
Associate Attributes With Grammar Rules & Constructs and Translate As Parsing Occurs
Our Example Uses Infix to Postfix Notation Translation for Expressions
Translation May Be Defined Inductively As: Postfix(e), E is an Expression
Syntax-Directed Definition: (2 parts)
Each Production Has a Set of Semantic Rules
Each Grammar Symbol Has a Set of Attributes
For the Following Example, String Attribute “t” is Associated With Each Grammar Symbol, i.e.,
What is a Derivation for 9 + 5 – 2?
Syntax-Directed Definition: (2 parts)
Each Production Rule of the CFG Has a Semantic Rule
Note: Semantic Rules for expr Use Synthesized Attributes Which Obtain Their Values From Other Rules.
Semantic Rules are Embedded in Parse Tree
How Do Semantic Rules Work ?
What Type of Tree Traversal is Being Performed?
How Can We More Closely Associate Semantic Rules With Production Rules ?
Parsing – Top-Down & Predictive
Top-Down Parsing Þ Parse tree / derivation of a token string occurs in a top down fashion.
For Example, Consider:
Top-Down Parse (type = start symbol)
Top-Down Parse (type = start symbol)
Top-Down Process
Recursive Descent or Predictive Parsing
Parser Operates by Attempting to Match Tokens in the Input Stream
Utilize both Grammar and Input Below to Motivate Code for Algorithm
Top-Down Algorithm (Continued)
Problem with Top Down Parsing
Left Recursion in CFG May Cause Parser to Loop Forever
Solution: Algorithm to Remove Left Recursion
Comparing Grammars
with Left Recursion
Notice Location of Semantic Actions in Tree
What is Order of Processing?
Comparing Grammars
without Left Recursion
The Lexical Analysis Process
A Graphical Depiction
The Lexical Analysis Process
Functional Responsibilities
Input Token String Is Broken Down
White Space and Comments Are Filtered Out
Individual Tokens With Associated Values Are Identified
Symbol Table Is Initialized and Entries Are Constructed for Each “Appropriate” Token
Under What Conditions will a Character be Pushed Back?
Can You Cite Some Examples in Programming Language Statements?
Algorithm for Lexical Analyzer
Algorithm for Lexical Analyzer
Symbol Table Considerations

desain antarmuka pemakai

Modul Pemrograman Visual Basic 6.0
Dedy Arisandi, ST, M.Kom Halaman 1
A. Microsoft Visual Basic
Visual Basic (VB) merupakan salah satu bahasa pemrograman komputer. Bahasa
pemrograman adalah perintah-perintah yang dimengerti oleh komputer untuk melakukan
tugas-tugas tertentu. Bahasa pemrograman Visual Basic, yang dikembangkan oleh
Microsoft sejak tahun 1991, merupakan pengembangan dari pendahulunya yaitu bahasa
pemrograman BASIC (Beginner’s All-purpose Symbolic Instruction Code) yang
dikembangkan pada era 1950-an. Visual Basic merupakan salah satu Development Tool
yaitu alat bantu untuk membuat berbagai macam program komputer, khususnya yang
menggunakan sistem operasi Windows. Visual Basic merupakan salah satu bahasa
pemrograman komputer yang mendukung pemrograman berorientasikan object (Object
Oriented Programming = OOP). Contoh penerapan OOP dapat Anda lihat pada gambar
berikut ini:
B. Integrated Development Environment (IDE) Visual Basic 6.0
Integrated Development Environment Visual Basic merupakan lingkungan
pengembangan program yang terintegrasi yang bersifat visual (grafis) dan mudah
digunakan. Untuk melihat IDE VB 6.0 dapat ditempuh dengan langkah-langkah berikut :
􀂾 Klik tombol Start pada Taskbar
􀂾 Pilih dan klik menu Program > Microsoft Visual Studio> Microsoft Visual Basic 6.0
Modul Pemrograman Visual Basic 6.0
Dedy Arisandi, ST, M.Kom Halaman 2
􀂾 Berikutnya akan tampil kotak dialog New Project berikut ini:
􀂾 Pilih icon Standard Exe, kemudian klik tombol Open. Selanjutnya akan tampil IDE
VB 6.0 sebagai berikut :
Modul Pemrograman Visual Basic 6.0
Dedy Arisandi, ST, M.Kom Halaman 3
Keterangan IDE VB di atas:
􀀹 Menu pada VB berisi semua perintah Visual Basic yang dapat Anda pilih
dengan menggunakan Mouse ataupun Keyboard. Anda dapat mengakses menu
yang bergaris bawah seperti File dengan menekan tombol Alt+F. Anda juga
bisa menggunakan shorcut (tombol cepat) seperti Crt+O untuk membuka
jendela Open Project, Ctr+S untuk membuka jendela Save, dan sebagainya.
􀀹 Toolbar adalah tombol-tombol yang mewakili suatu perintah tertentu dari
Visual Basic. Pada jendela VB terdapat 4 (empat) Toolbar yang dapat dibuka
dengan cara mengklik tombol kanan Mouse pada daerah Toolbar, Ceklis
Toolbar yang ingin ditampilkan.
􀀹 Form Window adalah daerah kerja utama Visual Basic dimana Anda dapat
meletakkan kontrol-kontrol yang terdapat pada Toolbox dengan cara
menggambar atau mengklik dua kali pada Toolbox yang akan diletakkan pada
􀀹 Toolbox merupakan kotak piranti yang berisi semua kontrol (objek) yang
dapat digunakan untuk merancang interface aplikasi yang Anda inginkan.
Secara default Toolbox yang terdapat pada VB adalah sebagai berikut:
Toolbar Menu
Form Window
Modul Pemrograman Visual Basic 6.0
Dedy Arisandi, ST, M.Kom Halaman 4
Kontrol di atas dapat ditambah dengan cara mengklik tombol Mouse kanan
pada daerah Toolbox, pilih Components, tampil jendela berikut:
Cheklis componen yang ingin Anda tampilkan kemudian klik tombol Apply,
OK, maka dijendela Toolbox akan terdapat kontrol baru yang telah Anda pilih
􀀹 Project Explorer adalah jendela yang berisi semua file dalam satu aplikasi
Visual Basic. Jendela ini berisi Project, Form, Modul, Class, dan beberapa file
lainnya. Untuk mengaktifkan file tersebut Anda harus mengklik Mouse dua
kali pada file yang ingin diaktifkan.
Check box
Combo box
Horizontal Scroolbar
Directory list box
Picture box
Text box
Command button
Option button
List box
Vertical Scroolbar
Drive list box
File list box
Modul Pemrograman Visual Basic 6.0
Dedy Arisandi, ST, M.Kom Halaman 5
Jika jendela Project Explorer ini tidak tampil di IDE VB Anda dapat
menampilkannya dengan cara mengklik icon ini pada Toolbar. Di atas
jendela ini terdapat tiga buah icon berikut:
􀀹 Properties Window adalah jendela yang berisi semua informasi mengenai
kontrol (objek) yang terdapat pada Anda rancang pada Form Visual Basic.
􀀹 Form Layout Window adalah jendela yang menggambarkan posisi dari Form
yang akan ditampilkan pada layar monitor. Anda dapat menggesar gambar
Form yang tampak pada monitor dengan cara mendrag Form tersebut dan
letakkan pada posisi yang sesuai menurut Anda.
C. Keluar Dari IDE Visual Basic 6.0
Sebelum Anda keluar dari lingkungan kerja VB, Sebaiknya simpan terlebih dahulu
aplikasi yang baru anda kerjakan. Sebaiknya simpan file-file aplikasi anda pada satu
direktori atau folder. Untuk keluar dari IDE Visual Basic dapat dilakukan dengan 4
(empat) cara sebagai berikut:
􀂾 Klik menu File> Exit.
􀂾 Tekan tombol Alt + F4.
􀂾 Tekan tombol Alt + Q
􀂾 Klik tombol Close yang terdapat disudut kanan atas jendela Visual Basic.
Jendela Program
Jendela Form
Kontrol (objek) yang terdapat
pada form aktif
Nama Properti dan Nilainya yang dapat
disesuaikan dengan selera Anda
Keterangan dari properti yang
Modul Pemrograman Visual Basic 6.0
Dedy Arisandi, ST, M.Kom Halaman 6
A. Proses Pembuatan Aplikasi
Untuk pembuatan aplikasi pada VB Anda harus mengikuti prosedur berikut ini:
􀂾 Buka Microsoft Visual Basic 6.0 (caranya lihat pada pembahasan sebelumnya)
􀂾 Buat aplikasi baru yang Anda inginkan atau Anda dapat membuka aplikasi yang sudah
pernah dibuat sebelumnya.
􀂾 Jika aplikasi telah selesai dibuat, kemudian jalankan aplikasi tersebut dengan menekan
tombo F5 pada keyboard atau klik menu Run> Start.
􀂾 Jika masih terjadi kesalahan perbaiki dan periksa kembali program aplikasi yang Anda
buat sampai benar. Proses ini dinamakan dengan debugger.
􀂾 Setelah aplikasi berhasil dijalankan kemudian simpan program aplikasi tersebut.
􀂾 Langkah berikutnya Anda dapat melakukan kompilasi terhadap aplikasi tersebut,
sehingga menjadi file executable yang dapat langsung dijalankan tanpa membuka IDE
Visual Basic.
􀂾 Keluar dari Visual Basic.
B. Membuat Aplikasi Baru Dengan VB
Untuk membuat aplikasi baru dengan Visual Basic, langkah awal yang harus dilakukan yaitu
Merancang Interface (antar muka) aplikasi pada jendela Form kemudian atur Properti dari
setiap kontrol/objek yang digunakan dan langkah terakhir tentukan metode yang diinginkan
dengan pengetikan kode program pada jendela kode.
Berikut ini langkah-langkah membuat Aplika pada Visual Basic:
􀂾 Buka Microsoft Visual Basic.
􀂾 Pada jendela New Project pilihlah Standard EXE.
􀂾 Pada objek Form rancanglah tampilan berikut ini:
􀂾 Untuk membuat tampilan di atas klik kontrol Label pada Toolbox, gambar kontrol
tersebut pada Form dengan cara klik dan drag mouse sampai terbentuk objek seperti
terlihat di atas.
Properti dari kontrol yang aktif
Modul Pemrograman Visual Basic 6.0
Dedy Arisandi, ST, M.Kom Halaman 7
􀂾 Aturlah properti dari Label, Textbox, dan Command di atas pada jendela properti dengan
pengaturan berikut ini:
Objek / Kontrol Properties Value
Form1 Name
Aplikasi Percobaan
2 – CenterScreen
Label1 Caption Ketik Sembarang Kalimat Kemudian Klik
Tombol OK
Label2 Name
Text1 Name
Command1 Name
Command2 Name
Berikut ini tampilan Interface setelah dilakukan pengatuaran properti di atas :
􀂾 Langkah berikutnya yaitu menentukan metode dan even yang akan diterapkan pada
aplikasi tersebut. Jika tombol OK diklik (event click) maka metode yang dilakukan yaitu
teks yang diketik akan ditampilkan pada Label di bawahnya. Kemudian jika tombol
Keluar diklik maka aplikasi akan tertutup. Untuk membuat metode dan even tersebut
double click (klik 2 kali) pada kontrol, misalkan klik 2 kali pada tombol OK, maka
jendela code akan ditampilkan sebagai berikut:
Modul Pemrograman Visual Basic 6.0
Dedy Arisandi, ST, M.Kom Halaman 8
Ketiklah program lengkapnya sebagai berikut:
Private Sub cmdOk_Click()
lblKalimat.Caption = txtKalimat.Text
End Sub
Private Sub cmdKeluar_Click()
End Sub
􀂾 Setelah program selesai diketik, kemudian jalankanlah program dengan cara menekan
tombol keyboard F5 atau klik icon ini pada toolbar standard maka akan tampil hasil
aplikasi berikut:
􀂾 Klik tombol Keluar untuk menutup aplikasi percobaan di atas. Anda juga dapat menutup
hasil program dengan mengklik icon berikut ini yang terdapat pada Toolbar Standard.
􀂾 Simpan aplikasi percobaan di atas dengan cara menekan tombol Ctr + S maka jendela
Save File As akan tampil sebagai berikut:
Pilihan Kontrol yang
saat ini aktif
Pilihan Event yang
dapat digunakan
Ketiklah metode yang
akan dikerjakan oleh
kontrol tersebut
Anda dapat menekan space keyboard pada fasilitas
ini dan secara otomatis nilai properti akan tercatat.
Modul Pemrograman Visual Basic 6.0
Dedy Arisandi, ST, M.Kom Halaman 9
􀂾 Berikutnya akan tampil jendela Save Project As berikut ini:
C. Membuat File Executable
File Executable adalah file yang dapat dijalankan langsung tanpa harus membuka program
pembuatnya. Untuk membuat file executable pada Visual Basic dapat dilakukan dengan cara
sebagai berikut:
􀂾 Klik menu File> Make Aplikasi.Exe…
􀂾 Anda dapat langsung menjalankan file executable berikut ini dengan cara
mengklik 2 kali pada icon tersebut.
Klik Icon ini untuk
membuat folder baru
􀂙 Buatlah folder baru untuk
menyimpan aplikasi
percobaan ini.
􀂙 Ketik nama file untuk Form
yang ada.
􀂙 Kemudian akhiri dengan
mengklik tombol Simpan.
􀂙 Ketik nama file untuk
Project yang aktif.
􀂙 Kemudian akhiri dengan
mengklik tombol Simpan.
􀂙 Jika tampil konfirmasi
berikut ini pilih No:
􀂙 Tentukan terlebih dahulu
folder letak file executable
yang akan dibuat.
􀂙 Ketik nama file executable
pada jendela File Name.
􀂙 Klik tombol Option jika
anda ingin melakukan
pilihan pengaturan yang
􀂙 Akhiri dengan mengklik
tombol OK.
􀂙 File Executable saat ini telah
direkam pada disk Anda.
Modul Pemrograman Visual Basic 6.0
Dedy Arisandi, ST, M.Kom Halaman 10
A. Data
Data adalah nilai mentah yang tidak memiliki arti jika berdiri sendiri. Data dalam Visual
Basic dianggap sebagai nilai-nilai yang bisa dimanipulasi dalam pembuatan program. Contoh
dari data seperti:
“Sekolah Tinggi Teknik Harapan”
Setiap data pasti memiliki tipe atau jenis data. Pada Visual Basic jenis data dapat
didefenisikan menggunakan kata kunci Dim. Berikut ini tipe data yang dikenal oleh Visual
Basic 6.0 :
􀂾 Integer
Tipe data numerik yang berupa bilangan bulat (tanpa pecahan), mulai dari -32.768 hingga
􀂾 Byte
Tipe data yang berupa nilai bulat positif (tanpa pecahan), mulai dari 0 hingga 225.
􀂾 Decimal
Tipe data yang digunakan untuk menyimpan nilai desimal (pecahan) dengan ketepatan
hingga 28 angka desimal.
􀂾 Boolean
Tipe data yang hanya memiliki dua buah nilai yaitu True atau False.
􀂾 String
Tipe data yang memiliki nilai alfanumerik, yaitu nilai data yang bisa berupa huruf, angka,
atau karakter khusus lainnya.
􀂾 Single
Tipe data numerik yang memiliki kisaran nilai mulai dari -3.402823E+38 hingga
􀂾 Double
Tipe data numerik yang memiliki kisaran nilai yang sangat besar yaitu mulai dari -
1.79769313486232E+308 hingga 1.79769313486232E+308.
􀂾 Date
Tipe data yang digunakan untuk menyimpan nilai tanggal dan jam. Nilainya berkisar dari
1 Januari 100 hingga 31 Desember 9999.
􀂾 Currency
Tipe data yang digunakan untuk menyimpan nilai uang sesuai dengan setting komputer
􀂾 Long
Tipe data numerik yang mirip dengan integer, hanya saja nilainya jauh lebih besar yaitu
dari -2.147.483.648 hingga 2.147.483.647.
􀂾 Object
Tipe data yang menyimpan objek seperti form, kontrol dan sebagainya.
􀂾 Variant
Tipe data yang bisa berisi segala macam tipe data yang berbeda. Biasanya digunakan jika
anda tidak mengetahui pasti jenis data yang akan digunakan.
Modul Pemrograman Visual Basic 6.0
Dedy Arisandi, ST, M.Kom Halaman 11
B. Variabel
Variabel adalah tempat untuk menyimpan nilai-nilai atau data secara sementara pada aplikasi
Visual Basic. Nilai suatu variabel selalu berubah yaitu tergantung dari nilai yang diberikan
terakhir kali kepada variabel tersebut.
Contoh : Panjang = txtPanjang.Text
Panjang adalah contoh sebuah variabel yang menyimpan nilai yang terkandung didalam
􀂾 Pendeklarasian Variabel
Pada Visual Basic, sebelum variabel digunakan sebaiknya Anda mendeklarasikan variabel
terlebih dahulu. Aturan penulisan pendeklarasian variabel adalah sebagai berikut:
Dim namavariabel As tipedatavariabel
Contoh :
Dim Counter as Integer
Dim Nama as String
Dim Tanggal as Date
􀂾 Pemberian Nilai Variabel
Variabel yang sudah Anda deklarasikan dapat diberi nilai sesuai dengan jenis datanya.
Variabel yang menampung data tanggal tidak dapat diberi nilai dengan string. Berikut ini
aturan pemberian nilai variabel:
Namavariabel = nilai
Contoh :
Counter = 10
Nama = “Delia Syakirah”
Tanggal = #07/05/2005#
Kondisi = True
C. Operator
Operator adalah perintah yang memanipulasi nilai atau variabel dan memberikan suatu hasil.
Contoh :
Luas = Panjang * Lebar
Keterangan :
Panjang dan Lebar adalah operan
* adalah operator
Luas adalah variabel penampung hasil
􀂾 Operator Aritmatika
Operator aritmatika adalah operator yang digunakan untuk melakukan perhitungan
matematis aritmatika, seperti penjumlahan, pengurangan, dan sebagainya.
+ Penjumlahan A = 5 + 4
(Nilai A = 9)
- Pengurangan B = 9 – 5
(Nilai B = 4)
* Perkalian C = 20 * 5
Modul Pemrograman Visual Basic 6.0
Dedy Arisandi, ST, M.Kom Halaman 12
(Nilai C = 100)
/ Pembagian (pecahan) D = 15 / 10
(Nilai D = 1,5
\ Pembagian (bulat) E = 15 / 10
(Nilai E = 1)
^ Pangkat F = 2 ^ 5
(Nilai F = 32)
Mod Sisa Pembagian G = 11 Mod 3
(Nilai G = 2)
& (atau +) Penggabungan String H = 4 & 8
(Nilai G = 48)
I = “Dedy” + “Arisandi”
(Nilai I = “Dedy Arisandi”
􀂾 Operator Perbandingan
Operator perbandingan adalah operator yang digunakan untuk membandingkan satu nilai
dengan nilai yang lain, untuk mendapatkan hasil True (benar) atau False (salah). Operator
perbandingan ini biasanya digunakan untuk mengambil keputusan pada suatu kondisi.
< Lebih kecil dari 7 Lebih besar dari 5 > 9 hasilnya False
<= Lebih kecil sama dengan 6 = Lebih besar sama dengan 6 >= 5 hasilnya True
= Sama dengan 7 = 7 hasilnya True
Tidak sama dengan 7 7 hasilnya False
􀂾 Operator Logikal
Operator logikal adalah operator yang berfungsi untuk membandingkan suatu
AND Akan menghasilkan nilai True jika
kedua nilai yang akan dibandingkan
bernilai True.
X = 4<6 AND 78
(Nilai X = True)
OR Akan menghasilkan nilai False jika
kedua nilai yang akan dibandingkan
bernilai False.
X = 310)
(Nilai Z = False)
Modul Pemrograman Visual Basic 6.0
Dedy Arisandi, ST, M.Kom Halaman 13
Latihan :
Buatlah sebuah Form dengan kontrol-kontrol berikut ini:
Objek / Kontrol Properties Value
Form 1 Name
Form Operator
2 – CenterScreen
Frame1 Caption Input
Frame2 Caption Output
Frame3 Caption Operasi Aritmatika
Frame4 Caption Operasi Perbandingan
Label1 Caption Nilai 1
Label2 Caption Nilai 2
Text1 Name
Text2 Name
Text3 Name
2 – Center
Option1 Name
Penambahan (+)
Option2 Name
Pengurangan (-)
Option3 Name
Pengalian (*)
Option4 Name
Pembagian (/)
Option5 Name
Pembagian Bulat (\)
Option6 Name
Sisa Bagi (Mod)
Option7 Name
Pemangkatan (^)
Option8 Name
Penggabungan (&&)
Option9 Name
Lebih Kecil ()
Option11 Name
Option13 Name
Sama Dengan (=)
Option14 Name
Tidak Sama Dengan ()
Modul Pemrograman Visual Basic 6.0
Dedy Arisandi, ST, M.Kom Halaman 14
Private Sub optLebihBesar_Click()
txtOutput.Text = Val(txtNilai1.Text) > Val(txtNilai2.Text)
End Sub
Private Sub optLebihBesarSamaDengan_Click()
txtOutput.Text = Val(txtNilai1.Text) >= Val(txtNilai2.Text)
End Sub
Private Sub optLebihKecil_Click()
txtOutput.Text = Val(txtNilai1.Text) < Val(txtNilai2.Text)
End Sub
Private Sub optLebihKecilSamaDengan_Click()
txtOutput.Text = Val(txtNilai1.Text) <= Val(txtNilai2.Text)
End Sub
Private Sub optPemangkatan_Click()
txtOutput.Text = Val(txtNilai1.Text) ^ Val(txtNilai2.Text)
End Sub
Private Sub optPembagian_Click()
txtOutput.Text = Val(txtNilai1.Text) / Val(txtNilai2.Text)
End Sub
Private Sub optPembagianBulat_Click()
txtOutput.Text = Val(txtNilai1.Text) \ Val(txtNilai2.Text)
End Sub
Private Sub optpenambahan_Click()
txtOutput.Text = Val(txtNilai1.Text) + Val(txtNilai2.Text)
End Sub
Private Sub optPengalian_Click()
txtOutput.Text = Val(txtNilai1.Text) * Val(txtNilai2.Text)
End Sub
Private Sub optPenggabungan_Click()
txtOutput.Text = Val(txtNilai1.Text) & Val(txtNilai2.Text)
End Sub
Private Sub optPengurangan_Click()
txtOutput.Text = Val(txtNilai1.Text) – Val(txtNilai2.Text)
End Sub
Private Sub optSamaDengan_Click()
txtOutput.Text = Val(txtNilai1.Text) = Val(txtNilai2.Text)
End Sub
Private Sub optSisaBagi_Click()
txtOutput.Text = Val(txtNilai1.Text) Mod Val(txtNilai2.Text)
End Sub
Private Sub optTidakSamaDengan_Click()
txtOutput.Text = Val(txtNilai1.Text) Val(txtNilai2.Text)
End Sub
Modul Pemrograman Visual Basic 6.0
Dedy Arisandi, ST, M.Kom Halaman 15
Program adalah proses yang sambung menyambung. Untuk mencapai tujuan, program harus
melalui tahap-tahap tertentu, sehingga diperlukan alur program yang jelas dan efisien. Dalam
Visual Basic 6.0 dikenal beberapa tipe alur seperti keputusan, perulangan ataupun lompatan.
A. Alur Keputusan
Alur keputusan adalah sebuah alur yang menganalisa suatu keadaan dan mengambil
keputusan berdasarkan pada hasil dari analisa tersebut. Jika kondisi benar maka akan
dijalankan perintah tertentu, sedang jika kondisi salah, maka dijalankan perintah yang
lainnya. Beberapa alur keputusan yaitu if, if else, dan case.
􀂾 Pernyataan IF
If digunakan untuk membandingkan suatu kondisi tertentu. Aturan penulisan pernyataan
if adalah sebagai berikut:
If (Kondisi) Then
… Ekspresi…
End If
Contoh :
Jika teks yang dinput pada kotak input = “Dedy” maka pesan akan ditampilkan kemudian
aplikasi akan tertutup. Dapat diimplementasikan dalam Visual Basic sebagai berikut :
Objek / Kontrol Properties Value
Form 1 Name
Alur Program IF
2 – CenterScreen
Label1 Caption Ketik Kata Pada Teks lalu klik Proses
Text1 Name
Command1 Name
Modul Pemrograman Visual Basic 6.0
Dedy Arisandi, ST, M.Kom Halaman 16
􀂾 Pernyataan If Else
Aturan penulisan pernyataan If Else adalah sebagai berikut:
If (Kondisi) Then
… Ekspresi 1…
… Ekspresi 2…
End If
Contoh :
Jika nilai yang dinput pada kotak input >=60 maka akan ditampilkan pesan bahwa Anda
lulus jika lebih kecil dari 60 maka Anda dinyatakan gagal. Dapat diimplementasikan
dalam Visual Basic sebagai berikut :
Objek / Kontrol Properties Value
Form1 Name
Alur Program If Else
2 – CenterScreen
Label1 Caption Masukkan Nilai
Label2 Caption Keterangan
Text1 Name
Text2 Name
Command1 Name
Command2 Name
Command3 Name
Modul Pemrograman Visual Basic 6.0
Dedy Arisandi, ST, M.Kom Halaman 17
􀂾 Pernyataan Case
Case digunakan untuk melakukan pemilihan kondisi yang jumlahnya banyak atau
bertingkat. Aturan penulisan dari pernyataan Case adalah sebagai berikut:
Select Case Ekspresi
Case nilai:
… Ekspresi 1…
Case nilai:
… Ekspresi 2…
Case nilai:
… Ekspresi 3…
Case Else nilai:
… Ekspresi 4…
End Select
Case dapat berupa :
Case is 􀃎 contoh: Case is >=70
Case [nilaiawal] To [nilaiakhir] 􀃎 contoh: Case 1 To 5
Case [nilai] 􀃎 contoh: Case 7
Contoh :
Jika nilai dimasukkan pada kotak input, maka hasil akan mengikuti persyaratan dibawah
Nilai 0 – 45 : Keterangan Nilai = E (Gagal)
Nilai 46 – 59 : Keterangan Nilai = D (Kurang Baik)
Nilai 60 – 69 : Keterangan Nilai = C (Cukup Baik)
Nilai 70 – 79 : Keterangan Nilai = B (Baik)
Nilai 80 – 100 : Ketarangan Nilai = A (Sangat Memuaskan)
Permasalahan di atas dapat diselesaikan dengan alur program Case pada Visual Basic
sebagai berikut:
Objek / Kontrol Properties Value
Form1 Name
Alur Program Case
2 – CenterScreen
Label1 Caption Masukkan Nilai
Label2 Caption Keterangan Nilai
Text1 Name
Text2 Name
Command1 Name
Command2 Name
Command3 Name
Modul Pemrograman Visual Basic 6.0
Dedy Arisandi, ST, M.Kom Halaman 18
Private Sub cmdKeluar_Click()
Unload Me
End Sub
Private Sub cmdProses_Click()
Select Case Val(txtNilai.Text)
Case 0 To 45
txtKeterangan.Text = “E (Gagal)”
Case 46 To 59
txtKeterangan.Text = “D (Kurang Baik)”
Case 60 To 69
txtKeterangan.Text = “C (Cukup Baik)”
Case 70 To 79
txtKeterangan.Text = “B (Baik)”
Case 80 To 100
txtKeterangan.Text = “A (Sangat Memuaskan)”
Case Else
txtKeterangan.Text = “Nilai tidak terjangkau”
End Select
End Sub
Private Sub cmdUlangi_Click()
txtNilai.Text = “”
txtKeterangan.Text = “”
End Sub
B. Alur Pengulangan
Pengulangan adalah instruksi program yang memerintahkan suatu tugas diulang-ulang
berdasarkan kondisi tertentu. Beberapa alur pengulangan yaitu do while, do until, dan for
next. Untuk keluar dari alur pengulangan Anda dapat menggunakan exit do atau exit for.
􀂾 Do While
Do While merupakan alur pengulangan yang akan melakukan pengulangan terus menerus
selama (while) suatu kondisi memenuhi syarat.
Aturan penulisan Do While:
Do While (Kondisi)
… Ekspresi …
Modul Pemrograman Visual Basic 6.0
Dedy Arisandi, ST, M.Kom Halaman 19
Contoh :
intNilai = 1
Do While (intNilai Asc(“Z”)
Print “Huruf ” & Chr(i)
i = i + 1
contoh program di atas akan menampilkan tulisan “Huruf A” sampai dengan “Huruf Z”.
􀂾 For Next
For Next merupakan alur pengulangan yang digunakan untuk mengulangi suatu perintah
dalam jumlah yang ditentukan.
Aturan penuliasan For Next :
For counter = nilaiawal To nilaiakhir [steep kenaikan]
… Ekspresi …
Next counter
Contoh :
Rancanglah kontrol-kontrol berikut ini pada form aplikasi Anda:
Objek / Kontrol Properties Value
Form1 Name
Alur Program Pengulangan For
2 – CenterScreen
Label1 Caption Menampilkan Nilai Fungsi F(X)=A + BX
Label2 Caption Nilai A
Label3 Caption Nilai B
Label4 Caption Batas Bawah X
Label5 Caption Batas Atas X
Modul Pemrograman Visual Basic 6.0
Dedy Arisandi, ST, M.Kom Halaman 20
Text1 Name
Text2 Name
Text3 Name
Text4 Name
Picture1 Name
&H00FFFFFF& (Warna Putih)
Command1 Name
Command2 Name
Command3 Name
Kode Program :
Private Sub cmdKeluar_Click()
Unload Me
End Sub
Private Sub cmdProses_Click()
Dim A, B, AX, BX, X, Y As Double
Dim I As Integer
A = Val(txtNilaiA.Text)
B = Val(txtNilaiB.Text)
AX = Val(txtXBawah.Text)
BX = Val(txtXAtas.Text)
picLayar.FontSize = 8
picLayar.FontName = “Courier New”
Modul Pemrograman Visual Basic 6.0
Dedy Arisandi, ST, M.Kom Halaman 21
picLayar.ForeColor = vbBlue
picLayar.Print “————————-”
picLayar.Print “X Y”
picLayar.Print “————————–”
For I = AX To BX
X = I
Y = A + B * X
picLayar.Print Format(X, “0.000″), Format(Y, “0.000″)
If I Mod 5 = 0 Then
MsgBox “Lanjutkan !!!”
picLayar.Print “————————-”
picLayar.Print “X Y”
picLayar.Print “————————-”
End If
picLayar.Print “————————-”
Next I
End Sub
Private Sub cmdUlangi_Click()
txtNilaiA.Text = “”
txtNilaiB.Text = “”
txtXBawah.Text = “”
txtXAtas.Text = “”
End Sub
C. Kode Penamaan Kontrol
Programmer seluruh dunia secara tidak resmi telah membiasakan diri untuk memberi
nama depan setiap menamai sebuah kontrol. Penamaan ini berfungsi untuk mengetahui
dengan cepat kontrol apa yang digunakan pada nama tersebut.
Nama Kontrol Kode Nama Kontrol Kode
Combo box cbo List box lst
Check box chk Menu mnu
Command button cmd Module mod
Directory list box dir OLE ole
Drive list box drv Option button opt
File list box fil Picture box pic
Frame fra Resource res
Form frm Shape shp
Grid grd Timer tmr
Horizontal scroll bar hsb Text box txt
Image img User defined data type typ
Label lbl Vertical scroll bar vsb
Line lin
Modul Pemrograman Visual Basic 6.0
Dedy Arisandi, ST, M.Kom Halaman 22
A. Form
Form adalah media untuk membuat window aplikasi. Form merupakan tempat dimana
kontrol-kontrol lain diletakkan di atasnya.
􀂾 Properti Form
Jika form Anda aktifkan maka dijendela properti akan tampil semua properti yang
dimiliki oleh form tersebut. Berikut ini properti yang dapat digunakan pada sebuah form
dan kegunaannya:
Properti Keterangan
AutoRedraw Jika True, Visual Basic secara otomatis menggambar ulang gambar pada
form karena window lain menghilangkan gambar. Jika False (default),
Visual Basic tidak akan me-redraw secara otomatis.
BackColor Warna background form. Anda dapat menentukan warna dengan angka
heksadesimal atau memilih warna yang sesuai dari palet warna.
BorderStyle 0 tanpa garis batas, 1 untuk garis tetap, 2 (default) untuk garis yang
ukurannya bisa diubah, 3 garis tetap dengan dua garis pada pinggirnya.
Caption Teks yang tampil pada judul form. Nilai caption secara default adalah nama
ClipControls Jika True (default), Paint event akan bekerja.
ControlBox Jika True (default), form akan mengandung tombol control.
DrawMode Menyediakan 16 komposisi yang terkait dengan properti gambar dalam
menghasilkan efek gambar khusus.
DrawStyle Menyediakan 7 komposisi untuk menentukan tampilan garis dalam gambar.
DrawWidth Menentukan lebar garis pada form
Enabled Jika True (default), form dapat menanggapi events.
FillColor Warna untuk mengisi gambar pada form.
FillStyle Menyediakan 8 macam corak pengisi bidang gambar.
FontBold Untuk menentukan ukuran tebal font pada form maupun pada saat
pencetakan. Tidak berpengaruh pada properti caption.
FontItalic Untuk menentukan bentuk miring font pada form maupun pada saat
pencetakan. Tidak berpengaruh pada properti caption.
FontName Untuk menentukan jenis font pada form maupun pada saat pencetakan.
Tidak berpengaruh pada properti caption.
FontSize Untuk menentukan ukuran font pada form dan saat pencetakan. Tidak
berpengaruh pada properti caption.
FontStrikethru Untuk menentukan garis coret pada font di form maupun pada saat
pencetakan. Tidak berpengaruh pada properti caption.
FontTransparent Untuk mengahasilkan efek transparan font pada form maupun pada saat
pencetakan. Tidak berpengaruh pada properti caption.
FontUnderline Untuk menentukan garis bawah font di form maupun pada saat pencetakan.
Tidak berpengaruh pada properti caption.
ForeColor Untuk menentukan warna latar depan font di form maupun pada saat
pencetakan. Tidak berpengaruh pada properti caption.
Height Untuk menentukan ukuran tinggi form.
HelpContextID Menyediakan nomor pengenal dalam penyusunan context-sensitive help.
Icon Untuk menentukan icon aplikasi.
KeyPreview Jika False (default), control yang menerima fokus bisa menerima eventevent
berikut: KeyDown, KeyPress, dan KeyUp sebelum form. Jika bernilai
True, form akan menerima event sebelum kontrol terfokus.
Left Ukuran posisi kiri, terhitung dari pinggir kiri form.
LinkMode 0 (default) akan melumpuhkan DDE, 1 DDE otomatis DDE, 2 DDE
terkode, 3 permintaan terkode.
LinkTopic Menentukan aplikasi sumber dan topik DDE.
Modul Pemrograman Visual Basic 6.0
Dedy Arisandi, ST, M.Kom Halaman 23
MaxButton Jika True (default) tombol maximize muncul pada form pada saat runtime.
Jika False, pemakai tidak bisa me-maximize form.
MDIChild Jika True, form adalah jenis MDI. Jika False (default), form bukan form
Name Nama form, default Form1
Picture File gambar yang menampilkan background form.
ScaleHeight Tinggi form, ScaleMode untuk menentukan unit pengukuran yang
ScaleLeft Jarak dari kiri layar ke batas kiri form.
ScaleMode Untuk menentukan pengukuran koordinat pada form. Anda dapat
menentukan diantara delapan pilihan.
ScaleTop Jarak dari sisi atas layar ke batas atas form
ScaleWidth Untuk menentukan lebar form.
Top Posisi batas atas form.
Visible Bernilai True atau False, sehingga form bisa tampak atau hilang.
Width Lebar form dalam satuan twip.
WindowState Menunjukkan kondisi startup form saat pemakai menjalankan program. Jika
bernilai 0 (default), form pertama muncul dalam ukuran sama seperti
ukuran desain. Jika bernilai 1, form minimized. Nilai 2, maximized.
Berikut ini contoh program menggunakan properti form :
Kontrol yang digunakan adalah sebagai berikut :
Objek / Kontrol Properties Value
Form1 Name
Properti Pada Form
2 – CenterScreen
Label1 Caption Ketiklah Judul Form Disini
Text1 Name
Command1 Name
Per&besar Ukuran Form
Command2 Name
Per&kecil Ukuran Form
Command3 Name
&Ganti Warna Form
Command4 Name
&Tutup Form
Modul Pemrograman Visual Basic 6.0
Dedy Arisandi, ST, M.Kom Halaman 24
􀂾 Event Form
Event form adalah kejadian-kejadian yang dapat dialami oleh sebuah form, seperti Click
(klik), Load, dan sebagainya. Berikut ini event-event yang bisa dialami oleh sebuah form:
Event Keterangan
Activate Tejadi saat sebuah form menjadi window aktif
Click Terjadi saat pemakai mengklik form.
DblClick Terjadi saat pemakai melakukan klik ganda pada form.
Deactivate Terjadi saat form lain menjadi window aktif.
DragDrop Terjadi saat proses drag melewati form selesai.
DragOver Terjadi sewaktu proses drag melewati form.
GotFocus Terjadi pada saat form mendapat fokus.
KeyDown Terjadi saat pemakai menekan keyboard dan property KeyPreview kontrol pada
form bernilai True. Sebaliknya, kontrol akan memakai event KeyDown
KeyPress Terjadi saat pemakai menekan sebuah tombol pada keyboard melewati form.
KeyUp Terjadi saat pemakai melepas penekanan tombol.
LinkClose Terjadi pada saat proses DDE terhenti.
LinkError Terjadi pada saat proses DDE gagal.
LinkExecute Terjadi pada saat proses DDE mulai dijalankan.
LinkOpen Terjadi pada saat proses DDE mulai.
Load Terjadi pada saat form diaktifkan dan sebelum tempak dilayar.
LostFocus Terjadi pada saat form kehilangan fokus.
MouseDown Terjadi saat pemakai menekan mouse melalui form
MouseMove Terjadi pada saat pemakai memindahkan mouse melalui form.
MouseUp Terjadi saat pemakai melepas mouse melewati form.
Paint Terjadi saat Visual Basic harus menggambar form.
QueryUnload Terjadi beberapa saat sebelum aplikasi dihentikan.
Resize Terjadi pada saat pemakai mengubah ukuran form.
Unload Terjadi pada saat form dinonaktifkan.
Contoh program dengan menggunakan beberapa event pada form :
􀂾 Menggunakan Banyak Form Pada Satu Project
Aplikasi yang lengkap adalah aplikasi yang terdiri dari paduan beberapa form. Untuk
menggunakan banyak form pada satu project ada beberapa hal yang harus diperhatikan,
Pengaktifan Form
Perintah mengaktifkan form ke memori:
Load Namaform
Perintah untuk menutup form dari memori:
Unload Namaform
Private Sub Form_Click()
Me.Print “Double Click untuk membersihkan layar..”
End Sub
Private Sub Form_DblClick()
Me.Print “Anda baru saja membersihkan layar dengan klik ganda..”
End Sub
Private Sub Form_KeyPress(KeyAscii As Integer)
Me.Print “Anda sedang menekan tombol keyboard..”
End Sub
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Me.Print “Anda sedang menggerakkan tombol mouse di atas form..”
End Sub
Modul Pemrograman Visual Basic 6.0
Dedy Arisandi, ST, M.Kom Halaman 25
Penampilan Form
Perintah menampilkan form ke layar:
Perintah untuk menyembunyikan form:
Untuk menentukan form mana yang akan ditampilkan terlebih dahulu pada saat program
dijalankan, Anda dapat mengklik menu Project> Project1 Properties, maka akan tampil
jendela berikut:
B. MDI Form
MDI (Multi Document Interface) Form merupakan form yang berfungsi sebagai form induk
(form utama). Pada form ini Anda tidak bisa menggambar kontrol Textbox, Labe, Command,
dan sebagainya. Kontrol yang bisa diletakkan pada form ini adalah kontrol Picture box,
Menu, Toolbar, dan Status bar. Bila form utama ini ditutup, maka semua form anak juga akan
ikut tertutup. Untuk menyatakan form pada VB sebagai form anak, Anda dapat merubah nilai
dari properti MDIChild = True. MDI Form hanya dapat digunakan 1 kali pada satu project.
MDI Form dapat diaktifkan dengan cara sebagai berikut:
􀂾 Aktifkan Visual Basic
􀂾 Klik menu Project> Add MDI Form, selanjutnya akan tampil kotak dialog beriku:
􀂾 Klik tombol Open, maka form MDI akan ditampilkan.
Pilih form yang akan
ditampilkan pertama sekali pada
kotak Startup Object ini.
Modul Pemrograman Visual Basic 6.0
Dedy Arisandi, ST, M.Kom Halaman 26
C. Menu
Menu adalah serangkaian pilihan-pilihan yang dapat diklik atau dipilih untuk melakukan
tugas tertentu. Pada Microsoft Word misalnya, menunya terdiri dari File, Edit, View, Format,
Tools, Table, Window, dan Help. Jika menu tersebut diklik, maka didalamnya juga terdapat
sub menu. Visual Basic menyediakan fasilitas untuk membuat menu yaitu Menu Editor.
Langkah-langkah untuk membuat menu adalah sebagai berikut:
􀂾 Aktifkan MDI Form (ikuti langkah pembuatannya pada point sebelumnya)
􀂾 Klik menu Tools> Menu Editor (Ctr + E), akan tampil jendela menu editor:
􀂾 Ketiklah menu berikut ini pada menu editor di atas:
Menu Properti Nilai
File Caption
—New Caption
—Open Caption
Ctr + O
—Close Caption
Edit Caption
—Cut Caption
Ctr + X
—Copy Caption
Ctr + C
—Paste Caption
Ctr + V
—Clear Caption
——Formats Caption Formats
Judul Menu
Nama Menu
Pilihan Shortcut
- Menaikkan level
urutan menu
- Menurunkan
level urutan menu
- Mengubah posisi menu 1
posisi ke atas
- Mengubah posisi menu 1
posisi ke bawah
- Menghapus
sebuah menu
- Menyisip 1
posisi kosong di
atas sebuah menu
- Berpindah ke
menu berikutnya
Menciptakan Menu
Modul Pemrograman Visual Basic 6.0
Dedy Arisandi, ST, M.Kom Halaman 27
Name mnuEditFormats
——Contents Caption
View Caption
Insert Caption
Format Caption
Tools Caption
Table Caption
Window Caption
Help Caption
Latihan :
Gabungkanlah semua form yang pernah Anda buat sebelumnya ke satu buah form induk
(MDI Form). Kemudian buat menu untuk masing-masing bagian berdasarkan
pembahasan form seperti: alur program terdiri dari 4 menu yaitu (form If, form IfElse,
form Case, dan form For). Jika menu alur program diklik aplikasi akan menampilkan 4
buah sub menu dan bila sub menu form If diklik maka aplikasi akan menampilkan form
alur If ke layar sebagai form anak. Begitu juga instruksi untuk form-form lainnya.
Modul Pemrograman Visual Basic 6.0
Dedy Arisandi, ST, M.Kom Halaman 28
A. Kotak Input
Kotak input digunakan untuk memasukkan data yang akan diproses oleh aplikasi. Pada
Visual Basic 6.0 terdapat tiga buah kotak input standar yang terdapat pada Toolbox (default)
yaitu Text Box, Combo Box, dan List Box.
􀂾 Text Box (Kotak Teks)
Text Box adalah kontrol yang paling sering digunakan yang berfungsi sebagai kotak input
teks yang diketikkan melalui keyboard. Text Box juga mempunya properti dan event
seperti halnya pada form.
Alignment Perataan teks di dalam kotak teks(rata kiri, rata tengah, atau rata kanan)
BackColor Warna latar belakang dari kotak teks
BorderStyle Menentukan pembatas disekeliling kotak teks.
Enabled Menentukan apakah kotak teks tersebut aktif
Font Mengubah jenis dan ukuran huruf kotak teks
ForeColor Warna teks di dalam kotak teks
Height Tinggi Kotak Teks
Left Jarak dari sisi kiri form ke sisi kiri kotak teks
Locked Menentukan apakah user bisa atau tidak menyunting teks di dalam kotak teks.
MaxLength Banyaknya karakter maksimal yang bisa diketikkan ke dalam kotak teks
MultiLine Teks yang diketikkan bisa lebih dari satu baris
PasswordChar Karakter yang muncul pada saat user mengetik, biasanya digunakan untuk
ScrollBars Menampilkan scrollbar (penggulung) jika Anda memilih properti MultiLine
TabIndex Menentukan nomor urut fokus kotak teks
TabStop Menentukan apakah kotak teks bisa menerima fokus
Text Teks yang ditampilkan atau diketikkan pada kotak teks
ToolTipText Text yang muncul pada ToolTip
Top Jarak dari sisi atas form ke sisi atas kotak
Visible Menampilkan / menyembunyikan kotak teks
Width Lebar kotak teks.
Contoh program :
Atur properti berikut ini pada aplikasi Anda:
Objek / Kontrol Properties Value
Form1 Name
Form Uji Kontrol Text Box
Label1 Caption Input Teks dengan Karakter bintang
Label2 Caption Input Teks hanya dengan huruf kecil
Label3 Caption Input Teks hanya dengan huruf besar
Label4 Caption Input Teks hanya dengan angka
Text1 Name
Text2 Name
Text3 Name
Text4 Name
Text5 Name
Modul Pemrograman Visual Basic 6.0
Dedy Arisandi, ST, M.Kom Halaman 29
Kode Program :
Private Sub Form_Load()
txtbintang.PasswordChar = “*”
txtHurufBesar.Locked = True
End Sub
Private Sub txtAngka_KeyPress(KeyAscii As Integer)
If Not (KeyAscii >= Asc(“0″) And KeyAscii = -1 * _
(picDasar.ScaleHeight – imgTentang.Height) Then
imgTentang.Top = imgTentang.Top – 20
imgTentang.Top = picDasar.ScaleHeight
End If
End Sub
Modul Pemrograman Visual Basic 6.0
Dedy Arisandi, ST, M.Kom Halaman 41
Contoh Program Timer2:
Objek / Kontrol Properties Value
Form1 Name
Picture1 Name
Timer1 Name
Timer2 Name
Line1 Name
Label1 Name
(Warna Putih)
1-Fixed Single
Label1 Name
(Warna Putih)
1-Fixed Single
Kode Program :
Private Sub Form_Load()
lblTanggal.Caption = Now
lblJam.Caption = Format(Now, “hh:mm:ss”)
Width = 4000
Height = 4000
Left = Screen.Width \ 2 – 4100
Top = (Screen.Height – Height) \ 2
End Sub
Private Sub Form_Resize()
Dim i, sudut
Static flag As Boolean
If flag = False Then
flag = True
For i = 0 To 14
If i > 0 Then Load linJarumJam(i)
linJarumJam(i).Visible = True
Modul Pemrograman Visual Basic 6.0
Dedy Arisandi, ST, M.Kom Halaman 42
linJarumJam(i).BorderWidth = 5
linJarumJam(i).BorderColor = QBColor(2)
Next i
End If
For i = 0 To 14
Scale (-1, -1)-(1, 1)
sudut = i * 2 * Atn(1) / 3
linJarumJam(i).X1 = 0.9 * Cos(sudut)
linJarumJam(i).Y1 = 0.9 * Sin(sudut)
linJarumJam(i).X2 = Cos(sudut)
linJarumJam(i).Y2 = Sin(sudut)
Next i
End Sub
Private Sub tmrDigital_Timer()
Dim jam As Variant
jam = Now
lblJam.Caption = Format(jam, “hh:mm:ss”)
End Sub
Private Sub TMRJAM_Timer()
Const lenganjam = 0
Const lenganmenit = 13
Const lengandetik = 14
Dim sudut
Static detiklalu
If Second(Now) = detiklalu Then Exit Sub
detiklalu = Second(Now)
sudut = -0.5236 * (15 – (Hour(Now) + Minute(Now) / 60))
linJarumJam(lenganjam).X1 = 0
linJarumJam(lenganjam).Y1 = 0
linJarumJam(lenganjam).X2 = 0.5 * Cos(sudut)
linJarumJam(lenganjam).Y2 = 0.5 * Sin(sudut)
sudut = -0.1047 * (75 – (Minute(Now) + Second(Now) / 60))
linJarumJam(lenganmenit).X1 = 0
linJarumJam(lenganmenit).Y1 = 0
linJarumJam(lenganmenit).X2 = 0.7 * Cos(sudut)
linJarumJam(lenganmenit).Y2 = 0.7 * Sin(sudut)
sudut = -0.1047 * (75 – Second(Now))
linJarumJam(lengandetik).X1 = 0
linJarumJam(lengandetik).Y1 = 0
linJarumJam(lengandetik).X2 = 0.7 * Cos(sudut)
linJarumJam(lengandetik).Y2 = 0.7 * Sin(sudut)
End Sub
Modul Pemrograman Visual Basic 6.0
Dedy Arisandi, ST, M.Kom Halaman 43
Untuk memudahkan pengelolaan file yang biasanya berjumlah banyak, file-file biasanya
dikelompokkan sesuai jenisnya dan disimpan pada satu folder atau direktori tersendiri. Visual
Basic menyediakan tiga buah kontrol standar untuk pengelolaan file yaitu DriveListBox,
DirListBox, FileListBox.
A. DriveListBox
DriveListBox adalah kontrol file pada VB yang berfungsi untuk menampilkan seluruh drive
yang ada pada komputer Anda. Berikut ini contoh gambar kontrol DriveListBox:
B. DirListBox
DirListBox adalah kontrol file pada VB yang berfungsi untuk menampilkan seluruh direktori/
folder dalam suatu drive tertentu. Berikut ini gambar kontrol DirListBox :
C. FileListBox
FileListBox merupakan kontrol file pada VB yang berfungsi untuk menampilkan file-file
yang sudah difilter dalam satu direktori. Untuk menentukan filter file yang akan ditampilkan
Anda dapat mengaturnya pada properti Pattern. Ketikkan *.* jika ingin menampilkan semua
file dan ketikkan *.ekstension, misalkan *.jpg untuk menampilkan file-file dengan ekstension
jpg. Berikut ini gambar kontrol FileListBox :
Contoh program dengan menggunakan ketiga kontrol file di atas :
Modul Pemrograman Visual Basic 6.0
Dedy Arisandi, ST, M.Kom Halaman 44
Objek / Kontrol Properties Value
Form1 Name
Jendela Browser
Drive1 Name Drive1
Dir1 Name Dir1
File1 Name
Image1 Name
Label1 Name
Label Path
(Warna Hijau Muda)
Option1 Name
Gambar Stretch
Option2 Name
Gambar Sebenarnya
Private Sub File1_Click()
gambar = File1.Path & “\” & File1.FileName
imgGambar.Picture = LoadPicture(gambar)
lblPath.Caption = gambar
End Sub
Private Sub optStretch_Click()
imgGambar.Height = 4830 ‘Ukuran disesuaikan dengan
imgGambar.Width = 4440 ‘ukuran image yang anda buat
imgGambar.Stretch = True
End Sub
Kode Program:
Private Sub Form_Load()
optStretch.Value = True
End Sub
Private Sub Dir1_Change()
File1.Path = Dir1.Path
lblPath.Caption = Dir1.Path
End Sub
Private Sub Drive1_Change()
Dir1.Path = Drive1.Drive
End Sub
Private Sub optUnStretch_Click()
imgGambar.Stretch = False
End Sub
Modul Pemrograman Visual Basic 6.0
Dedy Arisandi, ST, M.Kom Halaman 45
A. Kotak Pesan (MsgBox())
Pada Visual Basic terdapat kotak pesan (msgbox) yang berfungsi untuk menampilkan pesan
kepada pemakai. Pesan ini biasanya berupa pesan peringatan, pesan error, pesan untuk
memastikan suatu tindakan, dan sebagainya. Aturan penulisan adalah sebagai berikut:
intNamaVariabel = MsgBox(“Pesan” , intType, strJudul)
􀂾 intNamaVariabel: Variabel untuk menyimpan hasil yang dikembalikan oleh fungsi
􀂾 Pesan : Kalimat yang akan ditampilkan pada kotak pesan.
􀂾 intType: Nilai yang berfungsi untuk menampilkan pilihan tertentu pada kotak pesan.
􀂾 strJudul: Judul yang akan ditampilkan pada kotak pesan.
Contoh :
Dim Konfir As Integer
Konfir = MsgBox(“Apakan Anda yakin ingin keluar dari aplikasi ini”,
vbYesNo + vbQuestion, “Konfirmasi”)
Hasil dari perintah di atas :
B. Kotak Masukan (InputBox())
Kotak masukan pada Visual Basic dapat ditampilkan dengan fungsi InputBox(). Kotak
masukan ini berfungsi untuk menginputkan nilai-nilai data yang akan diproses pada aplikasi
Anda. Aturan penulisan kotak input ini adalah sebagai berikut :
strNamaVariabel = InputBox(“Pesan” , “strJudul”,
“strDefault”, intXPos, intYPs)
􀂾 strNamaVariabel: Variabel untuk menyimpan hasil yang dikembalikan oleh fungsi
􀂾 Pesan: Kalimat yang ingin ditampilkan sebagai acuan pengisian data.
􀂾 srtJudul: Judul yang akan ditampilkan pada kotak input.
􀂾 strDefault: Teks yang ditampilkan sebagai jawaban default (jawaban yang sudah
disediakan) pada kotak input.
􀂾 intXPos: Lokasi pada sumbu X dimana kotak input akan muncul pada layar.
􀂾 intYPos: Lokasi pada sumbu Y dimana kotak input akan muncul pada layar.
Contoh :
Dim strInput As String
strInput = InputBox(“Masukkan Hobbi Anda : “, “Input Hobbi”, “Ketikkan
hobbi Anda disini”)
Modul Pemrograman Visual Basic 6.0
Dedy Arisandi, ST, M.Kom Halaman 46
Kotak input yang dihasilkan dari perintah tersebut:
C. Kotak Dialog (Dialog Box)
Kotak dialog adalah jendela-jendela kecil yang muncul untuk meminta input atau masukkan
dari pemakai. Masukan ini akan digunakan untuk melakukan suatu perintah atau tugas
tertentu. Pada Visual Basic terdapat beberapa kotak dialog yang dapat digunakan yaitu kotak
dialog Open, kotak dialog Save, kotak dialog Font, kotak dialog Color, dan kotak dialog
Print, dan kotak dialog Help.
Cara Membuat Kotak Dialog
􀂾 Aktifkan Visual Basic 6.0
􀂾 Pilih menu Project> Componens(atau tekan Ctr + T pada keyboard)
􀂾 Pada kotak Components pilihlah Microsoft Common Control 6.0 hingga kotak ceknya
tertandai lalu klik tombol OK.
􀂾 Rancanglah form dengan kontrol-kontrol berikut ini:
Objek / Kontrol Properties Value
Form1 Name
Form Uji Kotak Dialog
CommonDialog1 Name Cdb1
Label1 Name lblKalimat
Command1 Name
Masukkan Kalimat
Combo1 Name cboKotakDialog
􀂾 Tampilan form :
􀂾 Selanjutnya ketiklah program berikut ini:
Private Sub cboKotakDialog_Click()
Select Case cboKotakDialog.ListIndex
Case 0
cdb1.DialogTitle = “Membuka Hanya File Dokumen (*.doc)”
cdb1.Filter = “*.doc”
cdb1.FileName = “*.doc”
Case 1
cdb1.DialogTitle = “Menyimpan File Teks (*.txt)”
Modul Pemrograman Visual Basic 6.0
Dedy Arisandi, ST, M.Kom Halaman 47
cdb1.Filter = “*.txt”
cdb1.FileName = “*.txt”
Case 2
cdb1.DialogTitle = “Memilih Warna”
lblKalimat.ForeColor = cdb1.Color
cboKotakDialog.ForeColor = cdb1.Color
Case 3
cdb1.DialogTitle = “Membuka Dialog Font”
cdb1.Flags = cdlCFBoth
lblKalimat.FontSize = cdb1.FontSize
Case 4
cdb1.DialogTitle = “Membuka Dialog Printer”
Case 5
cdb1.DialogTitle = “Anda Butuh Bantuan”
End Select
End Sub
Private Sub cmdKalimat_Click()
Dim Kalimat As String
Kalimat = InputBox(“Masukkan Sembarang Kalimat”, “Input Kalimat”,
“Ketikkan Kalimat disini”)
lblKalimat.Caption = Kalimat
End Sub
Private Sub Form_Load()
cboKotakDialog.AddItem “Kotak Dialog Open”
cboKotakDialog.AddItem “Kotak Dialog Save”
cboKotakDialog.AddItem “Kotak Dialog Color”
cboKotakDialog.AddItem “Kotak Dialog Font”
cboKotakDialog.AddItem “Kotak Dialog Print”
cboKotakDialog.AddItem “Kotak Dialog Help”
End Sub
Private Sub Form_Unload(Cancel As Integer)
Dim Konfir As Integer
Konfir = MsgBox(“Anda yakin ingin keluar dari aplikasi ini”, vbYesNo +
vbQuestion, “Konfirmasi”)
If Konfir = vbYes Then
Cancel = 0
Cancel = 1
End If
End Sub
Modul Pemrograman Visual Basic 6.0
Dedy Arisandi, ST, M.Kom Halaman 48
A. ToolBar
Toolbar adalah serangkaian tombol-tombol berupa gambar yang apabila diklik akan
melakukan perintah tertetu yang telah ditugaskan padanya. Toolbar berguna untuk
mempersingkat tugas pemakai dengan langsung mengklik gambar yang mewakili satu menu
pada menubar. Toolbar juga dibuat untuk mempercantik tampilan aplikasi Anda.
Untuk membuat Toolbar Anda harus memilih dua kontrol sekaligus yang sebelumnya harus
Anda instal dari component Microsoft Windows Common Controls 6.0 (SP6) yaitu:
􀂾 Image List yang berfungsi untuk menyimpan gambar-gambar yang akan ditampilkan pada
􀂾 Toolbar yang berfungsi untuk membuat Toolbar itu sendiri.
Untuk membuat Toolbar ada langkah-langkah dan pengaturan yang harus Anda lakukan
􀂾 Buka project yang berisi MDI Form yang berisi menu latihan yang pernah anda buat
􀂾 Klik dua kali pada kontrol Image List, kemudian klik kontrol Toolbar dan gambarkan
pada bagian atas form Anda.
􀂾 Klik kanan pada kontrol Image List di atas, lalu pilih Properties, maka akan tampil
jendela berikut ini:
􀂾 Selanjutnya klik kanan pada Toolbar yang telah digambar di atas, lalu pilih properties,
maka akan tampil jendela berikut ini:
􀂾 Klik tombol Insert Picture, cari
gambar icon yang Anda kehendaki.
􀂾 Bila gambar yang terlanjur anda
ambil ingin dihapus kliklah tombol
Remove Picture.
􀂾 Ingat nomor index pada kotak Index
picture yang akan dipanggil
nantinya pada Toolbar.
􀂾 Jika gambar yang akan diletakkan
pada Toolbar sudah mencukupi,
akhiri dengan menekan tombol OK.
Modul Pemrograman Visual Basic 6.0
Dedy Arisandi, ST, M.Kom Halaman 49
􀂾 Setelah langkah-langakah diatas Anda ikuti maka Anda akan memperoleh hasil sebagai
B. Pop Up Menu
Pop up menu adalah menu yang akan tampil apabila Anda mengklik tombol kanan mouse
pada daerah tertuntu. Pop up menu dibuat untuk mempersingkat dan mempermudah
perkerjaan pemakai untuk membuka suatu menu. Untuk membuat pop up menu anda dapat
melakukan langkah-langkah berikut ini:
􀂾 Buatlah terlebih dahulu menu yang akan Anda buat sebagai pop up menu pada Menu
Editor. Bila menu yang baru anda buat tersebut tidak ingin ditampilkan pada menu bar,
cek tombol checkbox Visible pada menu tersebut.
􀂾 Pilih kotak combo ImageList
dengan ImageList yang akan
Anda pilih gambarnya.
􀂾 Tentukan bentuk Toolbar yang
anda inginkan pada kotak combo
􀂾 Klik tob Button untuk memulai
membuat tombol icon pada
Toolbar Anda.
􀂾 Klik tombol Insert Button untuk
membuat tombol icon pada Toolbar
􀂾 Ketikkan keterangan toolbar pada
kotak input Caption.
􀂾 Tentukan nomor indeks gambar
sesuai dengan susunan indeks pada
ImageList yang ingin anda
tampilkan pada Toolbar.
􀂾 Lakukan berulang-ulang sampai
semua icon toolbar yang anda
inginkan tampil, kemudian akhiri
dengan menekan tombol OK.
Modul Pemrograman Visual Basic 6.0
Dedy Arisandi, ST, M.Kom Halaman 50
􀂾 Ketik metode yang akan lakukan oleh pop up menu tersebut sebelumnya, misalkan:
Private Sub mnuTampiltoolbar_Click()
mnuTampilToolbar.Checked = Not mnuTampilToolbar.Checked
Toolbar1.Visible = mnuTampilToolbar.Checked
End Sub
􀂾 Klik dua kali kontrol yang akan Anda beri pop up menu, misalnya form lalu ketik
program berikut ini:
Private Sub MDIForm_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = 2 Then PopupMenu mnuToolbar
End Sub
􀂾 Hasil yang diperoleh dari langkah-langkah di atas dapat Anda lihat berikut ini:
C. Statusbar
Statusbar adalah baris status yang biasanya terdapat di bagian bawah layar suatu aplikasi
yang berfungsi memberikan keterangan mengenai aplikasi yang dijalankan saat ini. Sebagai
contoh pemakai dapat melihat tombol Caps Lock, atau Num Lock aktif atau tidak dapat
dilihat pada statusbar. Untuk membuat statusbar Anda dapat melakukan langkah-langkah
berikut ini:
􀂾 Klik kontrol Statusbar yang terdapat pada Toolbox, lalu klik dan gambar statusbar
tersebut tepat di bagian bawah form induk.
􀂾 Klik kanan pada statusbar, properties, maka akan tampil jendela berikut:
􀂾 Matikan cek pada pilihan
Visible ini agar menu tidak
tampil pada menu bar.
􀂾 Ketik menu-menu yang akan
ditampilkan pada pop up menu.
􀂾 Akhiri dengan mengklik tombol
􀂾 Menambah panel baru pada statusbar.
􀂾 Menghapus panel pada statusbar.
􀂾 Menampilkan teks pada statusbar.
􀂾 Menampilkan keterangan tips pada panel.
􀂾 Menentukan bentuk perataan teks.
􀂾 Menentukan bentuk isi panel.
􀂾 Mengambil gambar yang akan diletakkan
pada panel.
Modul Pemrograman Visual Basic 6.0
Dedy Arisandi, ST, M.Kom Halaman 51
Style yang dapat dipilih pada jendela Properties Pages tersebut adalah:
0 – sbrText: Menampilkan Teks
1 – sbrCaps: Menampilkan status penekanan tombol Caps Lock.
2 – sbrNum: Menampilkan status penekanan tombol Num Lock.
3 – sbrIns: Menampilkan status penekanan tombol Insert.
4 – sbrScrl: Menampilkan status penekanan tombol Scroll Lock.
5 – sbrTime: Menampilkan waktu saat ini.
6 – sbrDate: Manampilkan tanggal saat ini.
􀂾 Berikut ini tampilan status bar yang dapat dikerjakan dengan langkah-langkah di atas:
􀂾 Langkah yang selanjutnya Anda dapat memberikan metoda untuk setiap menu, pop up
menu, toolbar, dan status bar di atas yaitu sebagai berikut:
Private Sub MDIForm_Load()
StatusBar1.Panels(2).Text = Format(Date, “dddd”)
StatusBar1.Panels(3).Text = Format(Date, “dd mmmm yyyy”)
StatusBar1.Panels(4).Text = Format(Now, “hh:mm:ss”)
End Sub
Private Sub MDIForm_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = 2 Then PopupMenu mnuToolbar
End Sub
Private Sub MDIForm_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
StatusBar1.Panels(7).Text = “Klik Kanan untuk membuka Pop Up Menu”
End Sub
Private Sub MDIForm_Unload(Cancel As Integer)
Dim Konfir As Integer
Konfir = MsgBox(“Anda yakin ingin keluar dari aplikasi ini”, vbYesNo + vbQuestion, “Konfirmasi”)
If Konfir = vbYes Then
Cancel = 0
Cancel = 1
End If
End Sub
Private Sub mnuCase_Click()
End Sub
Modul Pemrograman Visual Basic 6.0
Dedy Arisandi, ST, M.Kom Halaman 52
Private Sub mnuIf_Click()
End Sub
Private Sub mnuIfElse_Click()
End Sub
Private Sub mnuOperasi_Click()
End Sub
Private Sub mnuPengulangan_Click()
End Sub
Private Sub mnuPercobaan_Click()
End Sub
Private Sub mnuPropertiForm_Click()
End Sub
Private Sub mnuTampiltoolbar_Click()
mnuTampilToolbar.Checked = Not mnuTampilToolbar.Checked
Toolbar1.Visible = mnuTampilToolbar.Checked
End Sub
Private Sub mnuTampilStatusbar_Click()
mnuTampilStatusbar.Checked = Not mnuTampilStatusbar.Checked
StatusBar1.Visible = mnuTampilStatusbar.Checked
End Sub
Private Sub StatusBar1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
StatusBar1.Panels(7).Text = “Status Aplikasi Anda”
End Sub
Private Sub Timer1_Timer()
StatusBar1.Panels(4).Text = Format(Now, “hh:mm:ss”)
End Sub
Private Sub Toolbar1_ButtonClick(ByVal Button As MSComctlLib.Button)
Select Case Button.Index
Case 1
Case 2
Case 3
Case 4
Case 5
Case 6
Case 7
Case 9
Unload Me
End Select
End Sub
Private Sub Toolbar1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
StatusBar1.Panels(7).Text = “Klik Salah Satu Icon pada Toolbar”
End Sub
‘ Teruskan sampai sempurna……….
Modul Pemrograman Visual Basic 6.0
Dedy Arisandi, ST, M.Kom Halaman 53
Database adalah kumpulan file-file yang mempunyai kaitan antara satu file dengan file yang
lain sehingga membentuk satu bangunanan data untuk menginformasikan satu aktivitas
tertentu. File-file tersebut disimpan ke dalam satu media penyimpanan fisik yang dapat
ditambah, diubah, dihapus, diseleksi, disortir, ditampilan, dan sebagainya. Dalam Visual basic
ada dua kontrol standar yang dapat Anda gunakan untuk pengelolaan database yaitu kontrol
data DAO dan kontrol data ADO.
A. Kontrol Data DAO
Dengan kontrol Data Acces Object (DAO) Anda dapat menampilkan field-field didalam
database. Field adalah atribut-atribut yang dimiliki oleh sebuah entiti. Entiti adalah objek
dunia nyata, seperti manusia, hewan, benda, dan sebagainya. Kontrol data dapat memilih
beberapa format database seperti Microsoft Access (mdb), dBase(dbf), FoxPro(dbf),
Excel(xls), Lotus(wk*), Paradox( db), bahkan database yang berbasis teks (*.txt).
Berikut ini properti yang dapat Anda gunakan pada kontrol data:
Caption Teks judul yang akan ditampilkan ditengah-tengah kontrol data.
Connect Memilih salah satu jenis database yang ada.
DatabaseName Menghubungkan kontrol data dengan file database.
RecordSource Memilih salah satu tabel dari database yang dipilih.
Langkah-langkah membuat program database dengan kontrol Data :
􀂾 Buatlah terlebih dahulu tabel yang akan dijadikan tempat penyimpanan data dengan cara
mengklik menu Add-Ins> Visual Data Manager..
􀂾 Klik menu File> New> Microsoft Access> Version 7.0 MDB… ketikkan nama file
database misal Latihan.mdb, klik tombol Save, selanjutnya tampil jendela berikut:
􀂾 Klik kanan pada properties, pilih New Table.
Modul Pemrograman Visual Basic 6.0
Dedy Arisandi, ST, M.Kom Halaman 54
􀂾 Katikkan pada jendela Add Field di atas data sebagai berikut:
Nama Field Type Size Keterangan
KodeMK Text 7 Index = Kode(KodeMK)
NamaMK Text 30
JlhSKS Single -
Semester Text 1
􀂾 Akhiri pembuatan tabel diatas dengan mengklik tombol Build The Table. Kemudian tutup
jendela Visual Data Manager.
􀂾 Rancanglah form berikut ini pada aplikasi Anda:
􀂾 Pengaturan properti:
Objek / Kontrol Properties Value
Form1 Name
Form Uji Kontrol Data
Data1 Caption
Mata Kuliah
(Browse file Latihan.mdb yang baru dibuat)
2 – Add New
Micorosft Data Bound Grid Control 5.0 (SP3)
Modul Pemrograman Visual Basic 6.0
Dedy Arisandi, ST, M.Kom Halaman 55
Label1 Caption Kode Mata Kuliah
Label2 Caption Nama Mata Kuliah
Label3 Caption Jumlah SKS
Label4 Caption Semester
Text1 Name
Text2 Name
Text3 Name
Text4 Name
Command1 Name
&Data Baru
C:\Program Files\Microsoft Visual Studio\Common\
Command2 Name
C:\Program Files\Microsoft Visual Studio\Common\
Command3 Name
C:\Program Files\Microsoft Visual Studio\Common\
Command4 Name
C:\Program Files\Microsoft Visual Studio\Common\
Command5 Name
C:\Program Files\Microsoft Visual Studio\Common\
DBGrid DataSource Data1
Modul Pemrograman Visual Basic 6.0
Dedy Arisandi, ST, M.Kom Halaman 56
Kode Program :
Option Explicit
Private Sub cmdExit_Click()
Unload Me
End Sub
Private Sub cmdHapus_Click()
Dim Konfir As Integer
Konfir = MsgBox(“Yakin Mata Kuliah ” & txtNamaMK.Text & ” Ingin
Dihapus”, vbQuestion + vbYesNo, “Penghapusan Data”)
If Konfir = vbYes Then
End If
End Sub
Private Sub cmdNew_Click()
On Error GoTo SALAH
Exit Sub
MsgBox “Terjadi Kesalahan Input”, vbExclamation, “Penyimpanan”
End Sub
Private Sub cmdSimpan_Click()
End Sub
Private Sub cmdCetak_Click()
End Sub
Private Sub txtJlhSKS_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = vbKeyReturn Then
End If
End Sub
Private Sub txtJlhSKS_KeyPress(KeyAscii As Integer)
If Not (KeyAscii >= Asc(“0″) And KeyAscii = Asc(“0″) And KeyAscii 3
.Text = Format(.Text, “###,##0″)
.SelStart = Len(.Text)
Case Is > 6
.Text = Format(.Text, “###,###,##0″)
.SelStart = Len(.Text)
Case Is > 9
.Text = Format(.Text, “###,###,###,##0″)
.SelStart = Len(.Text)
Case Is > 12
.Text = Format(.Text, “###,###,###,###,##0″)
.SelStart = Len(.Text)
End Select
End With
End Sub
􀂾 Tekan Ctr + S untuk menyimpan project anda.
􀂾 Klik 2 kali form jabatan, klik menu View, Code, lalu ketik program berikut ini:
Option Explicit
Dim Coba As Boolean
Private Sub Inisial()
Coba = False
txtNamaJab.Text = “”
txtTunjangan.Text = “”
txtNamaJab.Enabled = False
txtTunjangan.Enabled = False
cmdSimpan.Enabled = False
cmdEdit.Enabled = False
cmdHapus.Enabled = False
cmdBatal.Enabled = False
txtKodeJab.Text = “”
txtKodeJab.Enabled = True
End Sub
Private Sub txtTunjangan_Change()
FormatAngka txtTunjangan
End Sub
Private Sub cmdBatal_Click()
End Sub
Modul Pemrograman Visual Basic 6.0
Dedy Arisandi, ST, M.Kom Halaman 63
Private Sub TampilLV1()
Dim TJabatan As ADODB.Recordset
Dim Kata As String
Dim i As Byte
Dim vButir As ListItem
Me.MousePointer = 11
Kata = “SELECT * FROM Jabatan ORDER BY KD_Jabatan”
Set TJabatan = New ADODB.Recordset
TJabatan.Open Kata, DataAnsi, adOpenStatic
If Not TJabatan.EOF Then
i = 1
While Not TJabatan.EOF
Set vButir = LV1.ListItems.Add(, , i & “.”)
vButir.SubItems(1) = TJabatan![KD_Jabatan]
vButir.SubItems(2) = TJabatan![NM_Jabatan]
vButir.SubItems(3) = TJabatan![TJ_Jabatan]
i = i + 1
End If
Set TJabatan = Nothing
Me.MousePointer = 1
End Sub
Private Sub CmdEdit_Click()
Coba = True
cmdEdit.Enabled = False
cmdHapus.Enabled = False
txtNamaJab.Enabled = True
txtTunjangan.Enabled = True
cmdSimpan.Enabled = True
txtKodeJab.Enabled = False
End Sub
Private Sub cmdHapus_Click()
Dim Kata As String
Dim Tanya As Integer
Tanya = MsgBox(“Yakin Data Jabatan ” & txtNamaJab.Text & ” Ingin Dihapus ?”, vbQuestion +
vbYesNo, “Penghapusan Data”)
If Tanya = vbYes Then
Me.MousePointer = 11
Kata = “DELETE FROM Jabatan WHERE KD_Jabatan=’” & Trim(txtKodeJab.Text) & “‘”
DataAnsi.Execute Kata
Me.MousePointer = 1
End If
End Sub
Private Sub cmdSelesai_Click()
Unload Me
End Sub
Private Sub cmdSimpan_Click()
If Not Coba Then
End If
End Sub
Private Sub Form_Activate()
End Sub
Private Sub TambahData()
Dim Kata As String
Modul Pemrograman Visual Basic 6.0
Dedy Arisandi, ST, M.Kom Halaman 64
Me.MousePointer = 11
Kata = “INSERT INTO Jabatan VALUES (‘” & Trim(txtKodeJab.Text) & “‘, ‘” &
Trim(txtNamaJab.Text) & “‘, ” & _
IIf(txtTunjangan.Text = “”, “0″, Format(txtTunjangan.Text, “##############0″)) & “)”
DataAnsi.Execute Kata
Me.MousePointer = 1
End Sub
Private Sub EditData()
Dim Kata As String
Me.MousePointer = 11
Kata = “UPDATE Jabatan SET NM_Jabatan=’” & Trim(txtNamaJab.Text) & “‘, TJ_Jabatan = ” &
IIf(txtTunjangan.Text = “”, “0″, Format(txtTunjangan.Text, “##############0″)) & “)WHERE
KD_Jabatan=’” & Trim(txtKodeJab.Text) & “‘”
DataAnsi.Execute Kata
Me.MousePointer = 1
End Sub
Private Sub Form_Load()
End Sub
Private Sub Form_Unload(Cancel As Integer)
End Sub
Private Sub LV1_ItemClick(ByVal Item As MSComctlLib.ListItem)
txtKodeJab.Text = LV1.SelectedItem.SubItems(1)
txtNamaJab.Text = LV1.SelectedItem.SubItems(2)
txtTunjangan.Text = LV1.SelectedItem.SubItems(3)
cmdEdit.Enabled = True
cmdHapus.Enabled = True
cmdBatal.Enabled = True
End Sub
Private Sub txtTunjangan_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = vbKeyReturn Then cmdSimpan.SetFocus
End Sub
Private Sub txtKodeJab_KeyDown(KeyCode As Integer, Shift As Integer)
Dim TJabatan As ADODB.Recordset
Dim Kata As String
If KeyCode = vbKeyReturn Then
If txtKodeJab.Text = “” Then
MsgBox “Kode Data Jabatan Tidak Boleh Kosong”, vbExclamation, “Pengisian Data”
Exit Sub
End If
Me.MousePointer = 11
Kata = “SELECT * FROM Jabatan WHERE KD_Jabatan=’” & Trim(txtKodeJab.Text) & “‘”
Set TJabatan = New ADODB.Recordset
TJabatan.Open Kata, DataAnsi, adOpenStatic, adLockReadOnly
If TJabatan.EOF Then
Set TJabatan = Nothing
Me.MousePointer = 1
txtNamaJab.Text = “”
txtTunjangan.Text = “”
txtNamaJab.Enabled = True
txtTunjangan.Enabled = True
cmdSimpan.Enabled = True
cmdEdit.Enabled = False
cmdHapus.Enabled = False
cmdBatal.Enabled = True
Exit Sub
End If
Modul Pemrograman Visual Basic 6.0
Dedy Arisandi, ST, M.Kom Halaman 65
With TJabatan
txtNamaJab.Text = ![NM_Jabatan]
txtTunjangan.Text = ![TJ_Jabatan]
End With
Set TJabatan = Nothing
Me.MousePointer = 1
cmdSimpan.Enabled = False
cmdEdit.Enabled = True
cmdHapus.Enabled = True
cmdBatal.Enabled = True
End If
End Sub
Private Sub txtNamaJab_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = vbKeyReturn Then txtTunjangan.SetFocus
End Sub
􀂾 Simpan kembali Project anda, kemudian jalankan dengan menekan tombol keyboard F5,
maka akan muncul form input sebagai berikut:

semantic web

Disusun Sebagai Laporan Tugas Akhir
A Sasmito Adibowo
Judul : Penerapan Design Patterns untuk Implementasi Alat Bantu Requirements
Management berbasis Komputer Genggam
Nama : A Sasmito Adibowo
NPM : 1299000029
Tanggal : Juli 2003
Tugas akhir ini telah diperiksa dan disetujui oleh:
Pembimbing Tugas Akhir
Eko K. Budiardjo, Msc.
Proyek tugas akhir ini membuat sebuah alat bantu untuk requirements management
yang dapat digunakan di komputer genggam. Perangkat lunak yang dinamakan
Rambutan – Requirements Management Tool for Busy System Analysts ini terdiri dari
dua aplikasi, satu untuk digunakan di komputer desktop sedangkan yang lain untuk
di komputer handheld. Program di desktop diimplementasikan dengan Java 2
Standard Edition sebagai aplikasi GUI Swing. Sedangkan program untuk komputer
genggam diterapkan menggunakan SuperWaba sehingga dapat dijalankan di
komputer-komputer handheld berbasis Palm OS, Windows CE, dan PocketPC.
Perangkat lunak ini diterapkan dengan design patterns untuk meningkatkan kualitas
arsitektur program sehingga dapat memfasilitasi pengembangan selanjutnya.
Landasan konsep requirements management yang dipergunakan bertolak dari
Requirements Markup Language (RQML), sebuah format XML untuk menyimpan dokumen
requirements, yang juga menjadi format penyimpanan data yang dikelola oleh
program. Bentuk requirements yang menjadi cakupan RQML adalah yang ditulis
secara tekstual dalam bahasa alami. Sedangkan rancangan RQML sendiri didasarkan
pada sekelompok best practices di dalam requirements management sehingga RQML
tidak tergantung pada metodologi pengembangan perangkat lunak tertentu.
Laporan tugas akhir ini terdiri dari dua bagian utama yaitu landasan teori yang diikuti
dengan bab-bab yang terkait pada pembuatan program. Landasan teori memberikan
perkenalan terhadap berbagai teori yang digunakan dalam pembuatan program;
meliputi requirements engineering, XML, Requirements Markup Language (RQML), dan
design patterns. Sedangkan pembahasan program meliputi analisis dan perancangan,
implementasi, serta pengujian. Tulisan ini diakhiri dengan satu bab penutup yang
memberikan rangkuman, kesimpulan, dan saran untuk penelitian-penelitian
xi + 143 hlm; 37 gbr; 10 tbl.
Daftar Pustaka: 69 (1977 – 2003).
Dulu, sewaktu belum terlalu lama tertarik pada komputer dan programming, saya itu
orangnya sangat technical sekali. Bacaan sehari-hari tidak jauh dari programming manuals
dan dokumentasi API. Selain itu saya juga senang mencoba-coba berbagai
development tools serta belajar macam-macam bahasa pemrograman. Bahkan saya
dulu suka melihat-lihat koran bagian lowongan pekerjaan untuk memutuskan programming
language atau tool apa yang akan saya coba berikutnya – dengan cara melihat
lowongan-lowongan IT (Information Technology) serta kemampuan apa saja yang
diminta untuk posisi itu.
Di bangku kuliah saya sempat kerja programming sambilan dan cukup beruntung untuk
terlibat dalam beberapa proyek ‘swasta’. Selain itu dari berbagai kuliah yang saya
ambil ada beberapa tugas programming yang cukup menantang. Dalam berbagai
kesempatan, saya cenderung untuk memprogram dalam bahasa yang object-oriented
dan berbagai masalah teknis saya pecahkan secara ad-hoc.
Sewaktu semester lima saya diperkenalkan dengan design patterns, waktu itu saya
merasa senang sekali. Karena dari dulu saya suka dengan yang namanya programming
libraries – komponen-komponen siap pakai untuk digunakan dalam suatu program
– maka saya memandang design patterns sebagai sebuah higher-order library
(analogis dengan higher-order functions). Cuma waktu itu agak sedih juga: kenapa baru
diperkenalkan pada semester yang cukup ‘tua’ – andaikata dikenalkan lebih awal
maka banyak masalah programming yang saya alami dulu akan menjadi lebih mudah
Pada waktu akan mengerjakan tugas akhir ini, ketertarikan akan design patterns saya
bawa ke Bapak Eko K Budiardjo, yang dulu memperkenalkan saya kepada design
patterns dan kemudian menjadi pembimbing tugas akhir ini. Beliau pada waktu itu
memperluas wawasan saya lebih jauh ke requirements engineering serta menawarkan
topik ini untuk dibahas dalam tugas akhir selain design patterns.
Perkenalan saya dengan bidang requirements engineering benar-benar mengubah
perspektif saya tentang bidang IT. Saya yang dulunya suka bikin-bikin berbagai utility
canggih namun tidak ada yang memakainya; sewaktu kerja part-time hanya mengikuti
instruksi tambahan requirement dari employer yang datang setiap Sabtu; juga yang
cenderung mempromosikan teknologi-teknologi tertentu dengan menjelek-jelekkan
yang lain. Banyak pandangan saya yang keliru jadi terkoreksi.
Ternyata requirements engineering itulah yang menghubungkan segi bisnis dengan IT
– di mana bidang yang kedua ini umumnya didominasi oleh para techies. Ternyata
masalahnya bukanlah bahasa C versus Java, bukanlah JSP versus PHP atau bahkan
Windows versus Linux. Masalah sebenarnya ada di requirements. Bukankah IT ditujukan
untuk memecahkan masalah di dunia nyata, masalah-masalah yang mayoritas
dimiliki oleh orang-orang di luar dunia IT?
Menerawang lebih jauh, bukankah bisnis di bidang manapun yang paling penting adalah
customer satisfaction? Kepuasan pelanggan berarti pemenuhan akan kebutuhan
yang dimilikinya… Sebuah penyedia jasa IT tentulah perlu mengerti masalah yang
sedang dihadapi oleh pelanggannya sehingga bisa ditemukan solusi yang tepat guna,
bukanlah hanya setumpuk hardware dan bergiga-giga program code yang tidak
Pada kesempatan ini, ijinkan saya untuk mengucapkan beberapa patah kata berikut:
• Kepada Bapak Eko K Budiardjo: terima kasih telah meluangkan waktu, pikiran,
serta bandwidth untuk membimbing saya dalam pengerjaan tugas akhir ini.
• Kepada Bapak Dadan Hardianto: terima kasih telah memegang peran sebagai
pembimbing akademis selama masa kuliah saya di Fasilkom UI.
• Terima kasih kepada orang tua saya yang telah memberi dukungan moral dan
material selama masa hidup saya sampai kini.
• Kepada Guilherme C Hazan: terima kasih sudah membuat SuperWaba dan
membantu menunjukkan workaround pada awal-awal pembuatan program.
• Kepada Minnarto Djojo: terima kasih telah memperkenalkan saya kepada dunia
komputer genggam.
• Kepada Jeane Anne: terima kasih sudah mau diganggu malam-malam dengan
pertanyaan-pertanyaan yang trivial – walaupun sedang stress mengurusi gusigusi
orang ;-)
• Kepada Maya, Hansen, Lerry, dkk: terima kasih udah mau ‘berbagi’ Pak Eko dan
‘Hari Selasa’, sorry banget waktu itu kalo gua nyinggung dan rada ngeselin.
• Kepada anak-anak BNCC: sorry banget gua ga muncul-muncul lagi ke sekret dan
dateng expo cuma pas workshop J2ME doang – harus ngejar deadline TA nih ;-)
• Kepada mbak-mbak sekretariat, ibu-ibu perpustakaan, bapak-bapak satpam,
dan bapak-bapak janitor: terima kasih atas berbagai macam dukungannya
selama kehidupan saya di Fasilkom UI.
• Kepada teman-teman lain dan tidak dapat disebutkan satu per satu: terima
kasih atas bantuan dan dorongannya selama ini.
Jakarta, Agustus 2003
A Sasmito Adibowo
PENDAHULUAN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
Latar Belakang . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
Tujuan Penelitian . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
Ruang Lingkup Penelitian . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
Metodologi Penelitian . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
Sistematika Penulisan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
REQUIREMENTS ENGINEERING . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
Definisi Requirements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
Proses RE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
Traceability . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
Requirements Patterns . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
Alat Bantu RE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
Markup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
Terminologi XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
Konsep XML Secara Luas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
Document Type Definition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
eXtensible Stylesheet Language (XSL) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
Pengurai XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
Standar Pendukung Lainnya . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
REQUIREMENTS MARKUP LANGUAGE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
Fakta-fakta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
Best Practices RE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
Quality Attributes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
Requirements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
Data Model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
Markup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
DESIGN PATTERNS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
Gang of Four Patterns . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
Model-View-Controller (MVC) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
Separable Model Architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
ANALISIS DAN PERANCANGAN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
User Story . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
Spesifikasi Kebutuhan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
Batasan Rancangan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
Perancangan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
IMPLEMENTASI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
Teknologi yang Digunakan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
Arsitektur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
Pemetaan dari RQML ke class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
Antarmuka pemakai . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
Penerapan Design Patterns . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
Data Statistik . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
PENGUJIAN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
Terhadap Spesifikasi Kebutuhan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
Terhadap Batasan Rancangan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
Terhadap Standar RQML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
Terhadap Fitur dari Alat Bantu Sejenis . . . . . . . . . . . . . . . . . . . . . . . . . . 131
PENUTUP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
Rangkuman . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
Kesimpulan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
Saran . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
DAFTAR PUSTAKA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
Gambar 1.1 Metodologi Penelitian . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
Gambar 1.2 Sistematika Penulisan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
Gambar 2.1 Proses RE. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
Gambar 2.2 Empat jenis informasi traceability tradisional . . . . . . . . . . . . . . . . . 15
Gambar 2.3 Sebuah requirement management system tradisional . . . . . . . . . . . . 19
Gambar 3.1 Arsitektur pengurai XML secara umum . . . . . . . . . . . . . . . . . . . . . 27
Gambar 3.2 Hirarki tipe dalam DOM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
Gambar 4.1 Tahap-tahap perancangan RQML . . . . . . . . . . . . . . . . . . . . . . . . . . 33
Gambar 4.2 Hirarki data model RQML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
Gambar 5.1 Arsitektur MVC dan hubungannya dengan Java . . . . . . . . . . . . . . . 60
Gambar 5.2 Separable Model Architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
Gambar 6.1 Rancangan layar aplikasi handheld . . . . . . . . . . . . . . . . . . . . . . . . 78
Gambar 6.2 State diagram rancangan antarmuka pemakai aplikasi handheld . . . 79
Gambar 7.1 Evolusi bahasa pemrograman Java untuk komputer genggam . . . . 82
Gambar 7.2 Selayang pandang arsitektur kedua aplikasi . . . . . . . . . . . . . . . . . . 86
Gambar 7.3 Selayang pandang arsitektur aplikasi handheld . . . . . . . . . . . . . . . 88
Gambar 7.4 Selayang pandang arsitektur aplikasi desktop . . . . . . . . . . . . . . . . . 89
Gambar 7.5 Selayang pandang arsitektur komponen bridge . . . . . . . . . . . . . . . . 91
Gambar 7.6 Diagram status dari antarmuka aplikasi handheld . . . . . . . . . . . . . 96
Gambar 7.7 Layar Document List . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
Gambar 7.8 Salah satu layar Element List . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
Gambar 7.9 Salah satu layar Element Edit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
Gambar 7.10 Selayang pandang tampilan aplikasi desktop . . . . . . . . . . . . . . . . 99
Gambar 7.11 Contoh tampilan yang menampilkan jendela penyunting elemen firstclass
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
Gambar 7.12 Antarmuka serta implementasi data model RQML . . . . . . . . . . . . 101
Gambar 7.13 Adapter pattern pada kelas representasi data untuk aplikasi desktop
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
Gambar 7.14 File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
Gambar 7.15 Jalannya penciptaan obyek adapter oleh AdapterCacheFlyweight
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
Gambar 7.16 Memento pattern pada kelas representasi data untuk aplikasi handheld
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
Gambar 7.17 Subsistem Element Copiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
Gambar 7.18 Sebagian hirarki MVC pada aplikasi handheld . . . . . . . . . . . . . . 109
Gambar 7.19 File . . . . . . . . . . . . . . . . . . . . . . 110
Gambar 7.20 Penerapan separable model architecture pada aplikasi desktop . . 112
Gambar 7.21 Penerapan decorator pattern oleh kelas ExceptionSafeActionWrapper
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
Gambar 7.22 File . . . . . . . . . . . . . . . . . . . . 114
Gambar 7.23 Observer pattern pada dialog penyunting RQML . . . . . . . . . . . . . 115
Gambar 7.25 Cuplikan . . . . . . . . . . . . . . . . . . . . . . . 120
Tabel 2.1 Beberapa alat bantu requirements management komersial . . . . . . . . . . 20
Tabel 5.1 Creational Patterns . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
Tabel 5.2 Structural Patterns . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
Tabel 5.3 Behavioral Patterns . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
Tabel 5.4 Korelasi komponen-komponen Swing dengan data model yang digunakannya
[Fowl02] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
Tabel 7.1 Ikhtisar hitungan NCSS untuk seluruh program . . . . . . . . . . . . . . . 121
Tabel 7.2 Ikhtisar hitungan NCSS per class . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
Tabel 7.3 Ikhtisar hitungan NCSS per method . . . . . . . . . . . . . . . . . . . . . . . . . 122
Tabel 7.4 Hitungan NCSS per package . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
Tabel 8.1 Pemenuhan sistem terhadap requirement RQML . . . . . . . . . . . . . . . . 128
Bab 1
1.1 Latar Belakang
Proses requirements engineering bukanlah merupakan hal yang mudah. Seorang
system analyst, project manager, atau siapapun yang memegang peran project champion
harus mengumpulkan berbagai requirement dari para stakeholder, menganalisa
requirement tersebut, mengkomunikasikasikannya dengan para programmer, serta menyelesaikan
konflik yang terjadi antar berbagai requirement yang ada.
Seringkali project champion ini harus bekerja di luar kantor untuk bertemu dengan para
stakeholder. Hal ini terutama terjadi pada kasus proyek software development di
mana organisasi pengembang berbeda dengan organisasi yang pada akhirnya akan
menggunakan perangkat lunak tersebut.
Sebagai seorang pekerja IT yang mobile dengan jadwal yang padat, besar kemungkinannya
ia akan menggunakan sebuah PDA (Personal Digital Assistant) dalam mengatur
jadwal pekerjaannya sehari-hari. Aplikasi-aplikasi PIM (Personal Information Management)
yang menjadi ciri khas suatu PDA belum tentu dapat secara optimal membantu
tugasnya dalam pengumpulan serta perumusan requirement. Alangkah baiknya apabila
ada suatu perangkat lunak di dalam PDA-nya yang ditujukan khusus pengaturan
berbagai requirement – yang merupakan salah satu tugas utama project champion ini.
1.2 Tujuan Penelitian
Dari beberapa pencarian singkat di Google (terakhir pada
tanggal 2 Juli 2003), ternyata belum ada alat bantu requirements management yang
ditujukan untuk komputer genggam. Dua jenis software yang paling mendekati
kegunaan ini adalah untuk Project Management dan Mind-Mapping. Fakta ini
1 Ada orang bijak yang pernah mengatakan, “Problem dan opportunity itu adalah dua
sisi pada koin yang sama.” – Sebuah permasalahan membuka peluang bagi yang dapat
memecahkan masalah tersebut.
menandakan adanya suatu market opportunity untuk sebuah requirements management
tool berbasis komputer genggam1.
Problem statement (atau lebih tepatnya, opportunity statement) tersebut menjadi titik
tolak penelitian ini yang bertujuan untuk membuat sebuah prototipe alat bantu
requirements management berbasis komputer genggam. Sebuah nilai tambah
diberikan melalui penggunaan design patterns dalam implementasinya.
Alat bantu yang dibuat dinamakan Rambutan – Requirements Management Tool for
Busy System Analysts. Rambutan terdiri dari dua software terpisah di mana keduaduanya
berfungsi saling melengkapi. Salah satunya untuk digunakan di komputer
desktop, sedang yang lain untuk digunakan di komputer genggam. Kedua aplikasi ini
ditujukan hanya untuk digunakan oleh satu orang (single-user system).
1.3 Ruang Lingkup Penelitian
Ruang lingkup penelitian meliputi penerapan sebuah alat bantu requirements management
yang berbasis RQML serta dapat digunakan di sebuah komputer genggam.
Fungsi utama yang diharapkan adalah data entry pada saat sang requirements engineer
berinteraksi dengan klien. Beberapa fungsi esensial namun kompleks terpaksa dikesampingkan
karena keterbatasan waktu. Fungsi-fungsi ini termasuk traceability, focus
group, dan reporting. Demikian pula dengan fungsi kolaborasi yang tidak termasuk
dalam ruang lingkup sebuah single-user system.
Alat bantu requirements management ini dikembangkan atas dasar konsep-konsep
RQML, sebuah format XML untuk menyimpan dokumen requirements [Gudg00]. Sebagian
besar theoretical work yang diperlukan pada problem domain – yaitu requirements
engineering – telah dilakukan oleh Gudgeirsson dalam penelitiannya pada saat membuat
RQML. Penelitian ini melanjutkan pekerjaannya dengan mengimplementasikan
sebuah software yang dibuat atas dasar RQML dan juga menyimpan datanya dalam
bentuk XML.
Design patterns yang digunakan adalah pola-pola yang dimuat di [Gamm95]. Walaupun
masih banyak pattern lainnya, berbagai pattern dalam buku ini telah terbukti
cukup general purpose dalam penerapannya di berbagai object-oriented systems.
Komputer genggam yang menjadi sasaran adalah yang dijual sebagai Personal Digital
Assistant (PDA) dan berbasis PalmOS maupun PocketPC. Namun karena keterbatasan
sumber daya maka pengujian aplikasi komputer genggam hanya dilakukan di PalmOS.
1.4 Metodologi Penelitian
Penelitian melalui tahap-tahap studi literatur, studi perbandingan, analisis, perancangan,
implementasi dan terakhir pengujian. Dalam studi literatur, tiga referensi
utama yang digunakan adalah [Gudg00], [Gamm95], dan [Leff00] di samping berbagai
referensi pendamping. Studi perbandingan menggunakan program Rational Requisite-
Pro 2002 sebagai contoh alat bantu requirements management yang telah matang.
Analisis yang dilakukan terutama terhadap spesifikasi RQML serta bagaimana sebuah
komputer genggam dapat digunakan untuk pengumpulan requirement. Pada tahap
perancangan dibuat berbagai tampilan mock-up serta sebuah himpunan requirement
untuk program yang akan dibuat. Pada tahap implementasi, program dibuat dengan
semaksimal mungkin digunakan design patterns serta memperlakukan [Gamm95]
sebagai ‘buku solusi’ untuk masalah-masalah pemrograman. Setelah implementasi
selesai, program hasilnya diujikan dari berbagai perspektif dengan himpunan
requirement-nya masing-masing. Tahapan studi literatur dilakukan secara parallel dengan
studi perbandingan. Sedangkan tahapan-tahapan perancangan dan implementasi
dilakukan secara iteratif.
Studi Studi Literatur
Gambar 1.1 Metodologi Penelitian
Analisis dilakukan atas dasar sebuah user story yang menggambarkan situasi
penggunaan Rambutan nantinya. Cara ini merupakan salah satu varian dari metode
skenario seperti CREWS [Maid96]. Bersamaan dengan spesifikasi RQML, user story
ini menjadi dasar untuk merumuskan requirement yang dibebankan kepada
Berangkat dari data model RQML, perancangan Rambutan diawali dengan gambaran
garis besar sistem secara deskriptif (dituliskan berbentuk prosa) serta pembuatan
beberapa rancangan tampilan layar (screenshots) dari aplikasi handheld. Rancangan
kasar ini kemudian diperinci seiring dengan proses implementasi secara iteratif,
dengan design patterns [Gamm95] sebagai panduan untuk mengambil keputusankeputusan
rancangan program.
1.5 Sistematika Penulisan
Laporan tugas akhir ini terdiri dari dua bagian utama yaitu landasan teori yang diikuti
dengan bab-bab yang terkait pada pembuatan program. Landasan teori memberikan
perkenalan terhadap berbagai teori yang digunakan dalam pembuatan program;
meliputi requirements engineering, XML, Requirements Markup Language (RQML), dan
design patterns. Sedangkan pembahasan program meliputi analisis dan perancangan,
Landasan Teori
2: Requirements Engineering
6: Analisis dan Perancangan
4: Requirements Markup Language
8: Pengujian
7: Implementasi
3: XML 5: Design Patterns
Gambar 1.2 Sistematika Penulisan
implementasi, serta pengujian. Tulisan ini diakhiri dengan satu bab penutup yang
memberikan rangkuman, kesimpulan, dan saran untuk penelitian-penelitian selanjutnya.
Gambar 1.2 menunjukkan hubungan ketergantungan antar bab yang ada dalam
laporan ini.
Bab 2
The King’s Companion
The King called his wizard, Harry, into his chambers. “Harry, I require a
companion. I want you to find one for me. She must be strong and capable, yet
warm and affectionate. She must be intelligent, yet loyal and accepting of my
supreme authority. She must be attractive, yet find me loveable. She must be
able to entertain herself, yet be ready to cheerfully accompany me anywhere
at a moments notice. She must be quick to joy, slow to anger, and must never
criticize me. Oh – and Harry – I need her by tonight.”
Harry stared at the King. After a long pause, he started to speak. The King
abruptly stood up and waved him away. “I have given you my requirements.
You are a powerful wizard, I know you can find the perfect companion for me
- now go.”
Harry slowly nodded and retired to his tower.
Several hours later, while eating his supper, the King allowed himself to dream
about the wonderful woman the wizard would bring to him. She would be
sweet and warm, yet strong and intelligent. Surely, she would be the queen to
match his magnificent kingliness. He chortled as he thought about the other
kings with their chatty, stupid queens. They will most certainly envy him at
next month’s Monarch Golf Tournament and Banquet.
Imagine the King’s surprise when Harry arrived at the door with a beautiful
golden retriever. Imagine Harry’s frustration as he was led to the dungeon.
Harry’s yells can still be heard echoing in the vast corridors of the castle….
“But….. you said you wanted….”
Diangkat dari [Saut03], kisah “The King’s Companion” ini menceritakan salah satu
masalah yang melatarbelakangi munculnya requirements engineering sebagai bidang
ilmu. Klien (“The King”) memberikan berbagai requirement dengan deadline yang ketat
kepada vendor (“Harry”) tanpa memberikan kesempatan untuk memperjelas apa yang
diinginkannya . Untung saja vendor dapat memberikan suatu produk (“golden retriever”)
yang sesuai dengan semua requirement yang diberikan – namun sayangnya ‘solusi’
ini sama sekali bukan yang diinginkan oleh klien. Cerita ini berakhir dengan
tragis di mana kesalahan ditimpakan kepada vendor.
2.1 Definisi Requirements
Sebuah requirement dalam konteks rekayasa perangkat lunak adalah sebuah kemampuan
yang harus dimiliki dari suatu software [Dorf90]. Kemampuan ini dapat
ditujukan untuk memecahkan suatu permasalahan ataupun diperlukan untuk memenuhi
ketentuan-ketentuan tertentu (seperti standar tertentu, keputusan manajemen,
ataupun alasan-alasan politis).
Kumpulan dari berbagai requirement digunakan dalam berbagai aspek dalam pengembangan
sebuah sistem. Dalam tahap perancangan, requirement digunakan untuk
menentukan berbagai fitur yang akan ada di dalam sistem. Pada penghujung sebuah
development effort, himpunan requirement ini digunakan untuk melakukan validation
& verification untuk memastikan perangkat lunak yang telah dibuat memang sesuai
dengan yang diinginkan. Bahkan selagi pengembangan berjalan, himpunan
requirement ini terus dimodifikasi untuk menyesuaikannya dengan berbagai
kebutuhan para stakeholder serta tenggat waktu dan dana yang tersedia.
Secara luas, software systems requirements engineering (RE) adalah proses untuk menemukan
suatu himpunan requirement yang tepat sehingga suatu perangkat lunak
dapat memenuhi kegunaannya. Proses ini dilakukan dengan cara mengenali para
stakeholder serta kebutuhan mereka serta mendokumentasikannya di dalam bentuk
yang dapat digunakan untuk analisa, komunikasi, dan implementasi yang mengikutinya
Zave [Zave97] memberikan salah satu definisi yang paling jelas dari RE:
Requirements engineering is the branch of software engineering concerned
with the real-world goals for, functions of, and constraints on software
systems. It is also concerned with the relationship of these factors to precise
specifications of software behavior, and to their evolution over time and across
software families.
[re-enter process]
[agreed requirements]
[go-ahead given]
[project not feasible]
Feasibility Study
Requirements Management
Requirements Elicitation
Requirements Analysis and Negotiation
Requirements Documentation
Requirements Validation
Gambar 2.1 Proses RE.
2.2 Proses RE
Terdapat lima aktivitas utama di dalam proses requirements engineering [Koto98]:
• Requirements elicitation
• Requirements analysis and negotiation
• Requirements documentation
• Requirements validation
2 Seperti misalnya masalah “untuk merebut pasar pria usia 14-30 tahun.” Bahkan
menurut [Leff00], masalah yang hendak dipecahkan untuk permainan seperti SimCity atau
Myst adalah “terlalu banyak waktu luang yang dimiliki seseorang.”
• Requirements management and evolution
Sebuah activity diagram UML yang menunjukkan hubungan yang umum terjadi antara
aktivitas-aktivitas tersebut tertera pada Gambar 2.1. Keterangan singkat mengenai
masing-masing aktivitas akan diberikan selanjutnya. Rincian dari masing-masing
tahap ini dapat ditemukan di [Koto98], [Wieg99] dan berbagai buku teks lainnya
mengenai requirements engineering.
2.2.1 Requirements Elicitation
Pada tahap ini dikumpulkan berbagai requirement dari para stakeholder [Pres01].
Seorang pelanggan mempunyai masalah yang dapat ditangani oleh solusi berbasis
komputer. Tantangan ini ditanggapi oleh seorang pengembang. Di sinilah komunikasi
dimulai antara pelanggan, pengembang, dan calon pengguna dari sistem yang akan
Namun istilah elicitation agak diperdebatkan. Ada yang menganalogikannya dengan
seperti yang dilakukan oleh para arkeolog ketika mengumpulkan runtuhan-runtuhan
di situs purbakala [Leff00]. Ada yang memberikan istilah requirements capture karena
dilakukan terutama dengan mengumpulkan fakta-fakta [Benn00]. Bahkan [Gudg00]
menyatakan bahwa requirement sebenarnya dibuat ketimbang didapatkan (elicitated).
Walau yang terakhir ini nampaknya “lain sendiri”, argumen ini dapat diterima untuk
pengembangan software yang sama sekali baru maupun untuk software-software permainan
(games) yang terkadang permasalahan yang akan dipecahkan oleh game
tersebut cenderung tidak berhubungan dengan solusinya ataupun sebenarnya
masalah yang ada berasal dari bagian marketing2.
Sejalan dengan proses RE secara keseluruhan, tujuan dari requirements elicitation
adalah [Gudg00]:
• Untuk mengetahui masalah apa saja yang perlu dipecahkan dan mengenali
perbatasan-perbatasan sistem (system boundaries).
• Untuk mengenali siapa saja para stakeholder.
• Untuk mengenali tujuan dari sistem; yaitu sasaran-sararan yang harus
Dalam [Nuse00] disebutkan beberapa jenis teknik pengumpulan requirement:
• Traditional techniques merupakan berbagai cara pengumpulan data. Cara-cara
ini termasuk kuesioner, survey, wawancara, serta analisis dari berbagai dokumentasi
yang ada seperti struktur organisasi, petunjuk pelaksanaan (juklak)
serta manual-manual dari sistem yang sudah ada.
• Group elicitation techniques bertujuan untuk mengembangkan dan mendapatkan
persetujuan stakeholder, sementara memanfaatkan dinamika kelompok
untuk memperoleh pengertian yang lebih mendalam. Cara-cara ini termasuk
brainstorming dan focus group, juga berbagai workshop RAD/JAD (workshop
untuk membangun sebuah konsensus dengan menggunakan seorang fasilitator
yang netral).
• Prototyping techniques membuat suatu implementasi parsial dari software yang
akan dibangun untuk membantu para pengembang, pengguna, serta pelanggan
untuk lebih mengerti berbagai requirement sistem [Leff00]. Digunakan untuk
mendapatkan umpan-balik yang cepat dari para stakeholder [Davi92], teknik ini
juga dapat digabungkan dengan berbagai teknik yang lain, seperti misalnya
digunakan di dalam sebuah acara group elicitation ataupun sebagai basis dari
sebuah kuesioner.
• Model-driven techniques menempatkan suatu model khusus dari jenis informasi
yang akan dikumpulkan untuk digunakan sebagai pedoman proses elicitation.
Termasuk di antaranya adalah goal based methods seperti KAOS [Lams98] dan
I* [Chun00] dan juga cara-cara berbasis skenario seperti CREWS [Maid96].
• Cognitive techniques termasuk serangkaian cara yang semulanya dikembangkan
untuk knowledge acquisistion untuk digunakan di knowledge-based systems
[Shaw96]. Teknik-teknik ini termasuk protocol analysis (di mana seorang ahli
melakukan sebuah tugas sembari mengutarakan pikiran-pikirannya), laddering
(menggunakan berbagai pemeriksaan untuk mendapatkan struktur dan isi dari
pengetahuan stakeholder), card sorting (meminta para stakeholder untuk
menysun kartu-kartu secara berkelompok, di mana setiap kartu tertera nama
sebuah domain entity), dan repertory grids (membuat sebuah attribute matrix for
entities di mana para stakeholder diminta untuk mengisi matriks tersebut).
• Contextual techniques muncul pada tahun 1990-an sebagai sebuah pilihan di
luar traditional maupun cognitive techniques [Gogu94]. Termasuk di antaranya
penggunaan teknik etnografis seperti pengamatan terhadap para peserta. Juga
termasuk ethnomethodogy dan analisis percakapan, yang keduanya menggunakan
analisis terinci untuk mengenali pola-pola dalam percakapan dan interaksi
Dalam aktivitas requirements elicitation, ada baiknya untuk mengkategorikan berbagai
requirement yang ditemukan. Suatu requirement dapat diklasifikasi sebagai functional
requirement, non-functional requirement, maupun constraints [Grad92]. Sedangkan[
Koto98] mengatakan bahwa suatu requirement dapat diklasifikasikan menjadi very
general requirements, functional requirements, implementation requirements, performance
requirements, dan usability requirements.
Namun nyatanya klasifikasi (atau cara-cara pengkategorian lainnya) requirement ini
tidak mutlak diperlukan; klasifikasi requirement ditujukan terutama untuk menuntun
proses elicitation. Hal ini perlu diwaspadai karena gara-gara para anggota tim tidak
dapat setuju akan klasifikasi dari sekumpulan requirement, maka development effort
dari sebuah perusahaan Fortune 500 mengalami stagnasi [Leff00]. Terjebaknya
mereka di dalam masalah semantik ini merupakan salah satu contoh dari analysis
paralysis [Whit99].
2.2.2 Requirements modeling and analysis
Sebuah model adalah perwakilan dari benda lain yang mempunyai rincian yang cukup
untuk membantu penyelesaian tugas-tugas tertentu [Benn00]. Data modeling
bertujuan untuk mendapatkan pengertian dari pemrosesan serta pengaturan
informasi. Behavioral modeling memodelkan berbagai perilaku dari para stakeholder
serta berbagai sistem lain yang berhubungan dengannya. Domain modeling menyediakan
suatu bentuk abstrak dari dunia tempat beroperasinya sistem yang akan
Model-model yang dihasilkan dalam tahap ini ditujukan untuk analisa terhadap
berbagai requirement yang ada. Para stakeholder berunding untuk mendapatkan
suatu himpunan requirement akhir yang akan digunakan untuk tahap pengembangan
selanjutnya. Menurut [Koto98] setelah selesainya tahap idealnya ini akan berlaku:
• Berbagai requirement dari masing-masing stakeholder tidak bertentangan.
• Informasi di dalam semua requirement harus lengkap.
• Berbagai requirement yang ada harus selaras dengan anggaran yang dimiliki.
Walaupun dengan adanya batasan-batasan tersebut, seluruh requirement sebaiknya
mudah diubah ataupun disesuaikan.
2.2.3 Requirements documentation
Tahap ini adalah penulisan dari requirements document, yang terkadang disebut
dokumen Software Requirements Specification (SRS). Menurut [Hen80], dokumen ini
• Hanya menetapkan perilaku sistem sebagaimana terlihat dari luar
• Menetapkan batasan-batasan (constraints) yang diberikan kepada implementasinya.
• Mudah diubah.
• Berguna sebagai alat referensi untuk pemeliharaan sistem.
• Memuat gambaran akan siklus kehidupan sistem di masa yang akan datang.
Untuk meningkatkan readability, beberapa standar dokumentasi SRS telah dikembangkan.
Namun menurut [Kov99], serangkaian standar dan template apabila berdiri
sendiri tidak dapat digunakan sebagai cara yang mandraguna untuk memberi struktur
bagi sekumpulan requirement; tetapi struktur yang digunakan haruslah dikembangkan
sendiri-sendiri tergantung dari masalah yang sedang ditangani. Masalah standarisasi
notasi dan pendokumentasian requirement membuat pendekatan sistematis terhadap
RE menjadi sulit. [McDe94] memberikan sebuah daftar praktis ciri-ciri yang dinginkan
pada sebuah requirements document:
• Unambigous. Idealnya, hanya ada satu interpretasi terhadap sebuah requirements
• Complete. Semua aspek yang bersangkutan haruslah dijelaskan secara lengkap
di dalam requirements document.
• Consistent. Tidak ada pernyataan yang bertentangan dalam requirements
• Verifiable. Setelah sebuah sistem diimplementasikan, sebaiknya dapat dipastikan
bahwa sistem tersebut memenuhi requirement awal.
• Validatable. Suatu requirement sebaiknya dapat diperiksa oleh pelanggan untuk
memastikan bahwa requirement tersebut memang memenuhi kebutuhannya.
• Modifiable. Perubahan sebaiknya mudah dilakukan dan efek dari perubahan ini
terhadap bagian-bagian lain sebaiknya minimal.
• Understandable. Semua stakeholder sebaiknya dapat mengerti requirement seperti
ditetapkan di dalam dokumen.
• Testable. Semua requirement sebaiknya cukup kuantitatif untuk digunakan sebagai
titik tolak pengujian sistem.
• Traceable. Harus dimungkinkan adanya pengacuan (reference) antar berbagai
bagian di dokumen requirement ataupun ke bagian-bagian lain dari proses pembuatan
perangkat lunak.
2.2.4 Requirements validation
Dalam tahap ini, dokumen dari tahap sebelumnya diperiksa agar memenuhi kriteriakriteria
sebagai berikut [Koto98]:
• Lengkap.
• Konsisten.
• Tunduk pada keputusan-keputusan yang diambil pada tahap requirements
Apabila ada requirement yang tidak memenuhi kriteria-kriteria tersebut, mungkin ada
baiknya bagi proses RE untuk kembali ke tahap-tahap sebelumnya. Beberapa contoh
masalah requirement yang terungkap pada tahap validasi antara lain [Koto98]:
• Kurang/tidak cocok dengan bakuan-bakuan kualitas.
• Kata-kata yang digunakan kurang baik sehingga requirement menjadi ambigu.
• Berbagai kesalahan yang terdapat pada model-model baik – model sistem
ataupun model permasalahan yang hendak dipecahkan.
• Pertentangan antar requirement yang tidak ditemukan pada tahap analisis.
2.2.5 Requirements management and evolution
Sebuah software yang sukses pasti akan berevolusi mengikuti perubahan lingkungannya.
Sebaliknya, software yang sudah tidak diperbaharui berarti telah ditinggalkan
oleh para penggunanya. Dalam perjalanan evolusi sebuah software, requirement akan
software tersebut akan bertambah, berubah, atau terkadang berkurang. Agar
perubahan ini terkendali, perlu adanya aktivitas requirements management (RM).
Walaupun berbagai aktivitas RE dalam Gambar 2.1 digambarkan secara terpisah,
namun sebenarnya pemisahan antara aktivitas-aktivitas ini tidaklah terlalu kentara.
Proses elicitation, analysis, documentation, dan validation dalam RE berjalan secara
berkesinambungan tanpa adanya batasan-batasan yang definitif. Fungsi lain dari
requirements management adalah untuk memastikan agar berbagai aktivitas dalam
proses RE ini berjalan dengan baik – agar iterasi demi iterasi dalam RE dilakukan
secara terkendali dan (diharapkan) menuju suatu kemajuan. Maka dari itu
requirements management digambarkan secara paralel dengan pengulangan dari
aktivitas-aktivitas RE lainnya.
Dalam aktivitasnya mengendalikan perubahan requirement maupun mengendalikan
proses RE itu sendiri, pada requirements management juga dilakukan penyusunan berbagai
informasi traceability – yaitu keterhubungan antara berbagai artifak di dalam
proses RE (termasuk perubahan requirement). Traceability itu sendiri merupakan
konsep yang penting di dalam RE yang akan selanjutnya dibahas berikutnya.
2.3 Traceability
Traceability adalah cara untuk membentuk hubungan-hubungan antara manusia dan
sistem dengan model-model di mana mereka dikelola [Jark98]. Kutipan berikut
memberikah sebuah garis besar mengenai pentingnya traceability di dalam rancangan
sistem secara keseluruhan:
“Requirement tracing is emerging as an effective bridge that aligns system
evolution with changing stakeholder needs. It also helps uncover unexpected
problems and innovative opportunities, and lays the groundwork for corporate
knowledge management.” [Jark98]
problem domain
solution domain
Gambar 2.2 Empat jenis informasi traceability tradisional
Secara tradisional ada empat jenis informasi traceability ([Koto98], [Jark98]):
• Forward-from traceability menghubungkan requirement ke rancangan
komponen-komponen dan penerapannya serta memberikan tanggungjawab
kepada komponen-komponen sistem tersebut untuk pencapaian requirementrequirement
• Backward-to traceability menghubungkan rancangan serta komponenkomponen
penerapannya kembali kepada requirement untuk memungkinkan
pengujian sistem terhadap pemenuhan requirement tersebut.
• Forward-to traceability menghubungkan informasi domain beserta informasi
lain yang bersangkutan yang mendahului rancangan sistem ke berbagai requirement.
Traceability ini memungkinkan penaksiran pengaruh perubahan kebutuhan
stakeholder maupun perubahan berbagai asumsi.
• Backward-from traceability menghubungkan requirement ke sumber-sumbernya
pada dokumen-dokumen ataupun orang-orang lain. Traceability ini memungkinkan
diketahuinya struktur kontribusi yang mendasari berbagai requirement
yang ada – yang sangat penting di dalam validasi requirement.
3 IT: Information Technology
Dua jenis trace yang pertama sering disebut post-traceability sedangkan dua yang
terakhir disebut pre-traceability. Seperti ditunjukkan di [Jark98], saat ini post-traceability
cenderung lebih dimengerti ketimbang pre-traceability, walaupun pre-traceability
mempunyai kemungkinan untuk menyediakan hubungan antara bisnis dengan IT3
yang saat ini sangat diperlukan.
Walaupun empat jenis trace tersebut sangat populer di dalam berbagai literatur,
mereka bukanlah satu-satunya jenis traceability yang ada. Bahkan pada [DP98], nampak
bahwa untuk setiap proyek mungkin diperlukan jenis-jenis trace-nya sendiri
sesuai dengan kebutuhan proyek tersebut; kemampuan ini disediakan di banyak alat
bantu RE (hal ini akan ditelusuri lebih lanjut pada bab ini juga).
2.4 Requirements Patterns
Dalam [Gamm95] telah ditunjukkan bahwa pattern dapat membawa pengaruh positif
dalam bidang software engineering. Walau buku ini membahas design pattern – yang
notabene adalah artifak dari solution space, semangat yang sama juga dapat
diterapkan pada problem space. Dengan mengumpulkan serta mengkategorisasikan
berbagai pengalaman kolektif dalam bidang RE, tentulah akan meningkatkan kualitas
RE sebagai ilmu praktis.
Sebuah pattern adalah pemecahan yang telah ditemukan untuk suatu masalah yang
umum. Praktis diresmikan oleh Gamma dkk. dalam [Gamm95], suatu pattern digambarkan
sebagai kesatuan dari niatan, alias, motivasi, penggunaan, akibat, serta contoh
penerapannya (lihat subbab 5.1 di halaman 55).
Berbagai keuntungan yang bisa didapatkan dengan mempelajari pattern menjadi pendorong
riset ke arah RE patterns. Sedikit berbeda dengan design patterns, tujuan dari
setiap RE pattern adalah untuk mengurangi ambiguitas yang dapat terjadi serta pada
saat yang bersamaan memberikan kebebasan terhadap pemenuhan requirement
tersebut [Cree99].
Memang studi RE patterns masih ketinggalan ketimbang yang telah dilakukan di dalam
solution space. Walaupun demikian, [Cree99] telah memberikan tiga pattern sebagai
satu permulaan bagi sebuah katalog yang dapat menandingi [Gamm95]. Ketiga
pattern ini telah digunakan dengan sukses di dalam empat SRS yang berbeda di mana
masing-masing menangani problem domain yang berbeda pula:
• Specify (Locate) – menggambarkan bagaimana seorang (sebuah) aktor dapat
menemukan suatu obyek di dalam aplikasi.
• Present (Display) – menggambarkan data yang harus ditampilkan oleh aplikasi.
• Prioritize (Sort) – untuk mengkomunikasikan bagaimana suatu aspek aplikasi
didahulukan dari yang lain.
Ketiga pattern di atas terutama difokuskan untuk pembuatan berbagai requirement
statement. Tetapi karena RE juga meliputi requirements management, maka [Ambl00]
memberikan dua pattern berikut untuk mengatasi berbagai tantangan politis di dalam
• Requirement As [a] Shield – ketika seseorang mengkritik pekerjaan yang
dilakukan, untuk menunjukkan bahwa kritik yang dilontarkan tidak berhubungan
dengan masalah yang sedang ditangani.
• Requirement As [a] Stick – untuk meniadakan berbagai pendekatan atau strategi
yang diusulkan namun tidak menguntungkan bagi organisasi; dengan mengevaluasi
pendekatan-pendekatan dan strategi ini terhadap requirement yang telah
diterima, kelemahan-kelemahannya akan cepat nampak.
2.5 Alat Bantu RE
Tipe alat bantu RE yang menjadi fokus proyek ini adalah alat bantu untuk requirements
management. Alat bantu ini berguna untuk mengumpulkan system requirements
di dalam sebuah tempat penyimpanan serta menyediakan berbagai fasilitas
untuk mendapatkan informasi mengenai berbagai requirement tersebut. Menurut
[Koto98], sebuah alat bantu requirements management umumnya memiliki fasilitasfasilitas
• Sebuah requirements browser sehingga para pembaca dapat mengambil suatu
requirement yang spesifik dari database ataupun repository.
• Sebuah query system sehingga para pengguna dapat mengambil berbagai
requirement yang berhubungan.
• Sebuah requirements converter dan processor linker yang dapat mengubah
berbagai requirement di dalam sebuah dokumen pengolah kata ke dalam bentuk
basis data requirement dan dapat memelihara hubungan antara database dengan
perwakilan bahasa alami dari requirement tersebut.
• Sebuah change control system yang dapat memelihara informasi mengenai
perubahan-perubahan requirement dan hubungan-hubungan dengan berbagai
requirement yang terpengaruhi oleh perubahan tersebut.
2.5.1 Arsitektur Alat Bantu
Secara tradisional, alat bantu RE menyimpan berbagai requirement di dalam bentuk
database atau dokumen. Menurut [Wieg99], pendekatan berbasis dokumen untuk
menyimpan requirement mempunyai beberapa keterbatasan:
• Sulit untuk menjaga agar semua dokumen tetap tersinkronisasi dan terkini.
• Mengkomunikasikan perubahan-perubahan kepada semua anggota tim yang
terpengaruh merupakan sebuah proses manual.
• Sulit untuk membuat hubungan-hubungan antara functional requirement dengan
berbagai use case, rancangan, kode program, pengujian, dan berbagai tugas
untuk menghasilkan artifak-artifak tersebut.
• Tidak praktis untuk melacak status dari setiap requirement.
Selain masalah-masalah di atas, masalah umum yang terjadi dengan bahasa alami
sudah umum diketahui. Sebuah pemecahan kepada masalah-masalah ini adalah
dengan menyimpan berbagai requirement di dalam sebuah basis data multi-user serta
mengendalikan akses kepadanya dengan alat bantu requirement management. Namun
juga ada beberapa batasan dengan pendekatan ini [Gudg00]:
• Format file database seringkali proprietary dan tidak dapat dibaca oleh manusia.
• Format file database tidak komplementer; apabila sebuah dokumen requirement
disimpan di dalam suatu database menggunakan satu alat bantu maka tidaklah
mungkin untuk menambah informasi dengan suatu alat bantu lain yang
berbeda. Hal ini hanya mungkin dengan dokumen, di mana lebih banyak
informasi dapat diberikan dengan menambahkan lebih banyak teks.
• Karena sebenarnya tidak ada dokumen requirement, maka proses requirement
yang ada sangat tergantung dengan alat bantu yang digunakan.
Banyak alat bantu RE yang menggabungkan kedua pendekatan, baik yang berbasis
dokumen maupun dengan database. Dengan pendekatan itu, sebuah dokumen
Natural language
query system
Gambar 2.3 Sebuah requirement management system tradisional, di mana dokumen-dokumen dalam
bahasa alami, laporan-laporan, dan basis data requirement adalah kesatuan-kesatuan yang terpisah
requirement dimanipulasi dengan sebuah alat bantu, tetapi sebuah basis data
dipelihara di sampingnya untuk menyimpan berbagai attribut, tabel traceability, dan
sebagainya. Sebuah gambaran luas mengenai alat seperti itu ada pada Gambar 2.3.
Sedangkan INCOSE [Jone95] memberikan empat jenis arsitektur alat bantu
requirements management:
• Arsitektur A – document based. Arsitektur ini menggunakan komponen utama
sebuah program spreadsheet (seperti QuattroProTM, Lotus 1-2-3TM, ExcelTM) atau
word processor (seperti WordPerfectTM, AmiProTM, atau MS WordTM) dengan diberi
fungsi-fungsi tambahan untuk melakukan RM dengan menggunakan fasilitas
pemrograman yang diberikan oleh program paket tersebut (umumnya bahasa
macro). Teks di dalam dokumen diberi tanda-tanda khusus yang menandakan
teks tersebut sebagai sebuah requirement.
• Arsitektur B – hybrid. Seperti pada Arsitektur A namun dengan tambahan
validasi automatis dari berbagai requirement yang terdapat di dalam dokumendokumen.
Alat-alat ini dapat menghasilkan sebuah daftar yang memuat
berbagai requirement yang terlalaikan ataupun tidak perlu.
• Arsitektur C – special-purpose-database-based. Alat-alat RM yang termasuk
di dalam kategori ini menyimpan seluruh teks requirement di dalam sebuah basis
data, namun program database yang digunakan adalah bagian dari program RM
itu sendiri.
• Arsitektur D – general-purpose-database-based. Alat bantu yang termasuk
kategori ini menyimpan teks requirement menggunakan database yang terpisah.
Program DBMS yang digunakan adalah suatu program – umumnya komersial –
2.5.2 Alat bantu komersial
Tabel berikut ini memuat beberapa alat bantu RM yang banyak digunakan, sebagaimana
dituliskan oleh Wiegers [Wieg00]. Dalam tabel berikut juga diberikan kelas
arsitektur alat bantu RM menurut klasifikasi INCOSE [Jone95].
Tabel 2.1 Beberapa alat bantu requirements management komersial
Alat Bantu Penyedia Arsitektur
Caliber-RM Technology Builders, Inc.
D (version 3.0)
DOORS Quality Systems and Software, Inc.
C (version 2.1)
RequisitePro Rational Software Corporation
B, D (version 2002)
RTM Workshop
Integrated Chipware, Inc.
D (version 2.3)
Vital Link Compliance Automation, Inc.;
C (version 2.0)
Ulasan mengenai perbandingan alat-alat bantu requirements management bisa
didapatkan di [Inco02] dan [Achr03].
Bab 3
Sebelum memperkenalkan XML, ada baiknya untuk membahas dasar-dasarnya di
dalam ilmu komputer. XML adalah sebuah versi penyederhanaan dari Standard
Generalized Markup Language (SGML), sebuah sistem untuk mengatur dan menandai
elemen-elemen dari sebuah dokumen. SGML dikembangkan dan distandarisasi oleh
International Organization for Standards (ISO) pada tahun 1986. SGML masih digunakan
secara luas di dalam industri penerbitan, namun karena besar dan kerumitannya,
SGML menjadi kurang ideal untuk penggunaan secara luas di era Internet. Untuk memecahkan
masalah-masalah ini, World-Wide Web Consortium (W3C) [Cons] membuat
XML sebagai sebuah subset dari SGML – walaupun kini XML mempunyai fitur-fitur
yang tidak didukung SGML sehingga XML tidak lagi merupakan sebuah subset.
Seperti dijelaskan di [Marc99], XML awalnya dirancang sebagai HTML yang lebih baik.
Sejalan dengan perkembangan popularitasnya, kegunaan XML sekarang menjadi lebih
luas ketimbang tujuan awalnya. Nampak bahwa XML telah menjadi sebuah standar
untuk pertukaran data, di mana penggunaannya tidak hanya untuk halaman web saja,
namun juga untuk data yang lain. Melalui berbagai inisiatif seperti BizTalk,
RosettaNET dan ebXML – yang bertujuan untuk memajukan penggunaan XML untuk
memungkinkan perniagaan elektronis dan penggabungan aplikasi – serta standar seperti
Simple Object Access Protocol (SOAP) [Cons00a] – yang merupakan protokol untuk
pertukaran informasi di sebuah lingkungan terdesentralisir dan terdisitributif – perkembangan
XML telah melampaui kegunaan awalnya. Pada saat standar integrasi dan
pertukaran data seperti IDEF0 [Fede] dan OpenDoc [IBM] telah gagal, atau setidaknya
tidak dapat mencapai potensinya secara penuh, XML akan sangat mungkin menjadi
Ciri kunci dari XML adalah sifat keterbukaannya. Pada [Oxfo90], open system didefinisikan
sebagai berikut:
Any system in which the components conform to non-proprietary standars
rather then to the standards of specific supplier of hardware or software.
BAB 3 – XML 22
Karena standar XML serta berbagai standar pendukungnya didefinisikan oleh sebuah
konsorsium (W3C) ketimbang satu vendor tertentu, maka XML memenuhi kriteria open
3.1 Markup
Markup adalah nama yang diberikan pada keterangan yang menjelaskan teks:
Igor 􀂖 Name
Asisten Laboratorium 􀂖 Job
XML adalah sebuah markup language yang menetapkan suatu cara untuk menulis
markup. Pada XML markup di atas mungkin berbentuk seperti ini:
Asisten Laboratorium
XML juga extensible karena memungkinkan Anda untuk menambah jenis-jenis
markup Anda sendiri. Ini tercermin dari nama XML, eXtensible Markup Language.
Ringkasnya, XML adalah sebuah meta-language yang memungkinkan Anda untuk
membuat dan membentuk sebuah markup untuk dokumen-dokumen Anda sendiri.
XML dikembangkan oleh W3C [Grah99], awalnya untuk menanggulangi keterbatasanketerbatasan
HTML. Akan tetapi kegunaannya telah berkembang melewati maksud
awalnya. Sebuah hasil sampingan pada rancangan XML – seperti disebutkan di
[Ecks99] – adalah bahwa XML memungkinkan pemisahan isi dari penampilan.
Ulasan XML ini dipusatkan untuk memberi perkenalan sangat singkat pada dasardasar
XML dan terus untuk menjelaskan lebih dalam hasil-hasil XML yang secara
istimewa mempunyai sangkut paut dengan proyek ini.
3.2 Terminologi XML
Sebuah dokumen XML terdiri dari satu atau lebih elemen (unsur). Sebuah elemen
ditandai dengan bentuk sebagai berikut:

Ini adalah data menurut susunan unsur contoh.

Elemen ini terdiri dari dua tag (etiket), sebuah tag pembuka yang melingkupi unsur
di antara sebuah tanda kurang-dari () dan sebuah tag
BAB 3 – XML 23
penutup yang serupa kecuali untuk garis-miring-depan (/) yang nampak sebelum
nama elemen. Teks di antara tag pembuka dan penutup dianggap sebagai bagian dari
elemen tersebut. Tidak seperti HTML, semua tag pembuka harus mempunyai tag
penutup yang bersesuaian, kecuali untuk elemen kosong. Suatu elemen dapat
disarangkan (nested) di dalam unsur lain, seperti berikut:
namun penyarangan tidak dapat saling meliputi, seperti berikut:
Tidak diperbolehkan
Selanjutnya, setiap dokumen XML harus mempunyai hanya satu unsur akar (root
element). Hal ini berarti dokumen XML dapat diwakili oleh struktur data pohon.
Unsur dapat mempunyai atribut (perlengkapan), seperti:
“usia” adalah atribut dari unsur “nama” dan nilainya adalah 45, yang diberikan di
dalam tanda kutip.
Selain elemen biasa, XML juga mendukung elemen kosong di mana tidak ada teks di
antara tag pembuka dan penutup. Maka dari itu kedua etiket dapat digabungkan.
Kedua elemen berikut ini adalah serupa:

3.3 Konsep XML Secara Luas
Walaupun sebuah keberadaan dokumen XML hanya dapat menampung teks yang
diberi markup dengan berbagai tag seperti telah dibahas sebelumnya, sebuah dokumen
XML juga dapat mengandung hal-hal lain. Nyatanya ada tiga kesatuan yang dapat
diuraikan oleh sebuah aplikasi XML (seperti digambarkan di [Ecks99]):
• XML Document Mengandung data dokumen, dietiketkan dengan unsur-unsur
XML yang mempunyai arti, beberapa di antaranya dapat mengandung perlengkapan.
BAB 3 – XML 24
• Document Type Definition (DTD) Menentukan aturan-aturan bagaimana
unsur-unsur dan perlengkapan-perlengkapan, dan penentapan data lainnya dari
sebuah dokumen yang tunduk pada standar XML.
• Stylesheet Memerintahkan bagaimana sebuah dokumen sebaiknya dibentuk
ketika mereka ditampilkan. Berbagai stylesheet yang berbeda dapat diterapkan
pada dokumen yang sama, sehingga mengubah penampilannya tanpa
memempengaruhi data yang mendasarinya.
Maka dari itu, DTD menentukan informasi apa saja yang dapat disimpan di dalam
sebuah berkas XML dan stylesheet mengubah bentuk satu dokumen XML menjadi
bentuk yang lain. DTD dan stylesheet ditetapkan di dalam standarnya masingmasing,
yang akan ditinjau pada dua bagian berikut ini.
3.4 Document Type Definition
Keberadaan-keberadaan dari dokumen XML adalah well-formed (bentuk-baik) atau
valid (sah). Sebuah keberadaan dokumen XML dikatakan well-formed apabila dokumen
tersebut mengikuti sintaksis XML, yaitu bagian-bagian paling penting yang ditetapkan
sebelumnya di Terminologi XML (subbab 3.2). Kebentukbaikan didefinisikan
secara lengkap di [Grah99], namun pada umumnya sebuah dokumen adalah wellformed
jika dokumen tersebut memiliki dari campuran tag awal dan akhir yang benar,
semua attribut diberi tanda kutip secara benar, character set digunakan secara benar,
dan seterusnya. Kebentukbaikan adalah satu hal yang harus dimiliki oleh semua
dokumen XML; tanpa menjadi well-formed, sebuah dokumen XML bukanlah dokumen
Hal lain yaitu sebuah keberadaan dokumen XML dapat valid (sah). Keabsahan secara
tidak langsung menyatakan bahwa dokumen tersebut juga well-formed. Perbedaan
di antara dokumen yang valid dan dokumen yang well-formed adalah sebuah dokumen
valid harus memenuhi sebuah Document Type Definition (DTD), tetapi sebuah dokumen
well-formed tidak memerlukannya. Maka dari itu dokumen valid dikatakan lebih
ketat. Peran dari DTD adalah untuk menentukan elemen-elemen apa saja yang dapat
berada di dalam suatu dokumen berikut susunannya. Berikut ini adalah contoh dari
sebuah dokumen well-formed:

BAB 3 – XML 25
Asisten Laboratorium

Seseorang dapat saja menambahkan berbagai tag dan/atau attribut lainnya ke
dokumen ini dan akan masih well-formed:

Asisten Laboratorium
Tidak ada!

Walaupun demikian, ekstensibilitas ini tidak selalu diinginkan. Katakanlah contohcontoh
di atas diciptakan oleh seorang ilmuwan gila yang ingin menggunakan XML
untuk melacak kakitangannya (yaitu Henchmen Tracking Markup Language – atau
HTML). Jika ia juga ingin untuk menulis program-program komputer untuk mengolah
bahasa tersebut, sangat mungkin ia akan ingin membatasi cara-cara markup yang
dapat digunakan (sehingga program-programnya dapat bekerja dengan instance mana
pun dari dokumennya). Hal ini dapat dicapai menggunakan DTD sebagai berikut:

Dokumen XML pertama di atas adalah sah menurut DTD ini, namun dokumen yang
kedua tidak. Sebuah ciri penting dari DTD adalah kemampuannya untuk menetapkan
jenis-jenis attribut yang berbeda. Sebuah daftar lengkap jenis-jenis attribut yang
mungkin ada diberikan di [Marc99], namun jenis-jenis berikut ini adalah yang relatif
sering digunakan:
• CDATA untuk attribut string.
• ID untuk pengenal, yaitu sebuah nama yang khas di dalam dokumen.
• IDREF adalah pengacuan kepada sebuah attribut ID yang ditentukan di tempat
lain pada dokumen yang sama.
• IDREFS adalah sebuah daftar IDREF yang dipisahkan oleh spasi-spasi.
• NMTOKEN pada dasarnya adalah sebuah kata tanpa spasi.
• NMTOKENS adalah sebuah daftar attribut NMTOKEN yang dipisahkan oleh spasispasi.
BAB 3 – XML 26
Sebuah nilai awal dapat ditentukan untuk sebuah attribut. Jika dokumen tidak
mempunyai attribut itu, maka nilanya dianggap nilai awal yang dapat mengambil
salah satu dari nilai-nilai berikut:
• #REQUIRED berarti sebuah nilai harus disediakan di dokumen.
• #IMPLIED berarti jika tidak ada nilai yang diberikan, aplikasi yang mengolah
dokumen XML harus menggunakan nilai awalnya sendiri.
• #FIXED diikuti oleh sebuah nilai berarti perlengkapan yang bersangkutan adalah
tetap pada nilai tersebut.
Sebuah nilai literal perarti attribut tersebut akan diberikan nilai itu bila tidak ada yang
ditentukan di dokumen.
3.4.1 Masa depan DTD
DTD merupakan warisan dari SGML. Karena alasan sejarah, kemampuan DTD menjadi
agak terbatas. Keterbatasan terbesar adalah sintaks yaitu DTD bukanlah XML
well-formed, yang berarti dokumen-dokumen DTD tidak dapat diolah oleh peralatan
XML. Untuk memecahkan masalah ini, W3C sedang mengerjakan beberapa usulan
untuk mengendalikan isi dokumen kemudahan dan daya yang lebih ketimbang yang
dimungkinkan sekarang.
3.5 eXtensible Stylesheet Language (XSL)
eXtensible Stylesheet Language (XSL) terdiri dari serangkaian markup yang dapat
digunakan untuk menerapkan aturan-aturan pembentukan untuk setiap elemen di
dalam sebuah dokumen XML. XSL bekerja dengan menerapkan berbagai aturan style
pada isi dari sebuah dokumen XML, berdasarkan unsur-unsur yang ditemukannya
[Ecks99]. XSL diatur menjadi dua bagian:
• XSLT; untuk XSL Transformation
• XSLFO; untuk XSL Formatting Objects
Sebuah XSL Processor menerima sebuah dokumen XSL dan menggunakannya untuk
mentransformasikan suatu bentuk dokumen XML menjadi bentuk dokumen XML
BAB 3 – XML 27
Gambar 3.1 Arsitektur pengurai XML secara
3.6 Pengurai XML
Walaupun struktur dokumen XML termasuk sederhana, pembuatan program untuk
menguraikan dokumen-dokumen XML tidak dapat dikatakan suatu tugas yang sepele.
Oleh karena itu muncul suatu jenis perangkat lunak yang disebut Pengurai XML (XML
Sebuah pengurai XML umumnya berbentuk pustaka (software library) tingkat menengah
yang memberikan layanan-layanan bagi aplikasi pada tingkat yang lebih tinggi
untuk membaca serta mengambil data yang terletak di dalam dokumen XML.
Pengurai-pengurai XML ini menetapkan API tertentu untuk berinteraksi dengan
program aplikasi yang menggunakannya. API ini mendefinisikan data model dari
sebuah dokumen XML kepada aplikasi yang menggunakan pengurai tersebut (Gambar
Terdapat dua standar API untuk kegunaan ini: Simple API for XML (SAX) dan Document
Object Model (DOM). SAX tercipta awalnya melalui proses informal yang terjadi di
mailing list XML-DEV kemudian diterbitkan oleh David Megginson di [Marc99]. Sedangkan DOM ditetapkan oleh W3C –
sebuah badan formal yang mengawasi dan memberikan acuan-acuan untuk
perkembangan world-wide web. Karena menggunakan paradigma yang berbeda,
kedua API ini tidak menjadi saingan satu sama lain, melainkan saling melengkapi.
Tidak jarang pustaka-pustaka pengurai XML memberikan kedua pilihan API bagi
program-program aplikasi.
BAB 3 – XML 28
3.6.1 Simple API for XML (SAX)
Standar SAX menggunakan gaya Hollywood untuk memproses dokumen XML, “Don’t
call us, we’ll call you.” Pustaka pengurai XML menggunakan fungsi-fungsi ataupun
antarmuka callback untuk memanggil aplikasi pada saat dokumen XML diuraikan.
Pusat kendali terletak pada pustaka pengurai ketimbang program aplikasi.
Penggunaan SAX lebih cocok pada aplikasi-aplikasi yang menggunakan XML sebagai
representasi data eksternal dan menggunakan struktur datanya sendiri yang dapat
berbeda jauh dari struktur dokumen-dokumen XML yang digunakannya. Sejalan
dengan penguraian XML, fungsi-fungsi callback yang dipanggil pengurai XML mengisi
struktur data aplikasi berdasarkan parameter-parameter yang diberikan.
Karena pengurai XML tidak perlu menyimpan data pada saat dokumen diuraikan,
aplikasi-aplikasi yang menggunakan SAX cenderung memerlukan lebih sedikit memory
untuk memproses dokumen XML. Selain itu, sifat penguraian SAX yang on-the-fly
tidak memerlukan keberadaan seluruh dokumen sebelum penguraian dimulai. Hal ini
kontras dengan DOM yang memerlukan seluruh dokumen diterima sebelum dapat
memulai pemrosesan.
3.6.2 Document Object Model (DOM)
Standar DOM dikembangkan oleh W3C sebagai usaha untuk menyatukan model obyek
dari web browser Netscape 3 dan Internet Explorer 3. Rekomendasi DOM mendukung
dokumen XML maupun HTML.
Oleh Pengurai XML, data XML diwakilkan di dalam suatu struktur data DOM
Document Tree. Struktur pohon di memory ini serupa dengan dokumen XML yang
sedang diurai. Terdapat satu node untuk setiap elemen XML dengan tipenya masingmasing.
Perwakilan data Document Tree digunakan secara bersama oleh Pengurai
XML maupun aplikasi yang menggunakannya.
BAB 3 – XML 29
Gambar 3.2 Hirarki tipe dalam DOM
Dalam DOM, dokumen XML memiliki tipe Document. Elemen-elemen di dalam
dokumen tersebut umumnya bertipe Element. Berbagai attribut yang dimiliki oleh
elemen diwakili oleh obyek-obyek bertipe Attr. Data tekstual seperti komentar dan
elemen yang berisi teks diwakili oleh CharacterData. Sedangkan ada beberapa tipe
khusus lainnya seperti Entity, EntityReference, Notation, dan
ProcessingInstruction. Kesemua tipe ini merupakan turunan dari tipe Node (Gambar
Elemen terluar atau root node dari suatu dokumen bukanlah juga merupakan
dokumen itu sendiri. Sebuah keberadaan dari Document memiliki paling banyak satu
keberadaan dari Node yang menjadi root node. Sedangkan Document yang tidak
mempunyai root node dikatakan dokumen kosong (blank document).
Traversal untuk masing-masing Node dilakukan secara random access dari Node yang
memilikinya (parent node). Masing-masing node memiliki sebuah daftar dari
anakannya dan daftar ini dapat diakses melalui operasi indexing.
Operasi-operasi berikut ini diberikan oleh Node untuk operasi traversal [Marc99]:
BAB 3 – XML 30
• nodeType adalah sebuah kode yang mewakili tipe sebenarnya dari Node yang
• parentNode adalah induk dari node ini, jika ada.
• childNode adalah daftar anakan dari node ini.
• firstChild adalah anak pertama dari node ini.
• lastChild adalah anak terakhir dari node ini.
• previousSibling bila diberikan sebuah child node, maka akan memberikan child
node sebelumnya.
• nextSibling bila diberikan sebuah child node, maka akan memberikan child node
• attributes adalah daftar attribut yang dimiliki oleh node ini, jika ada.
W3C mendefinisikan API DOM dalam bentuk Interface Definition Language (IDL) –
sebuah standar yang digunakan oleh Object Management Group (OMG) untuk
mendefinisikan antarmuka berorientasi obyek untuk komponen-komponen perangkat
lunak namun tidak bergantung pada suatu bahasa pemrograman tertentu.
Didefinisikannya DOM dalam IDL memungkinkan penerapan XML Parser untuk
berbagai bahasa pemrograman – terdapat XML parser untuk C++, Java, SmallTalk,
Ada, bahkan COBOL.
Walaupun IDL ditujukan untuk pemrograman terdistribusi menggunakan CORBA,
namun tidak berarti bahwa semua pengurai XML harus diterapkan dalam bentuk
obyek-obyek CORBA. Bahkan tidak ada pengurai XML yang diterapkan sebagai obyekobyek
CORBA [Marc99]. W3C hanya menggunakan fasilitas multi-bahasa dari IDL
namun meninggalkan aspek-aspek distribusinya.
3.7 Standar Pendukung Lainnya
3.7.1 Namespaces
Namespace ditetapkan untuk memberikan kenunikan di antara elemen-elemen XML.
Penggunaan namespace tidak mutlak, namun sangat disarankan. Di dalam dokumen
XML, namespace ditetapkan dengan menggunakan sebuah string yang unik secara
global – penggunaan Universal Resource Identifier (URI) sangat disarankan untuk
menjamin keunikannya. URI ini dapat berupa Uniform Resource Locator (URL) yang
mengacu pada suatu dokumen ataupun tidak mengacu pada apapun. Agar dokumen
BAB 3 – XML 31
tetap ringkas, sebuah URI namespace dapat diberikan suatu prefix yang lebih pendek
dan keunikannya cukup dalam dokumen itu saja. Suatu deklarasi namespace tanpa
prefix menandakan sebuah default namespace bagi dokumen XML yang memuatnya.
Katakanlah ilmuwan gila kita tadi takut orang lain akan menggunakan tag yang
menggunakan nama yang sama dengan yang ada pada Henchmen Tracking Markup
Language. Lagipula, tag name memang sangat umum. Hal ini dapat dipecahkan
dengan menetapkan sebuah namespace untuk markup language tersebut. Misalkan
nama domain dari ilmuwan tersebut adalah, maka ia dapat
membuat suatu namespace dengan URI
dan menggunakannya sebagai berikut:

Asisten Laboratorium

Atau versi lainnya seperti ini

Asisten Laboratorium

Dalam versi di atas, URI menyatakan
suatu default namespace dari dokumen XML secara keseluruhan. Ilmuwan ini dapat
memberikan DTD untuk diperoleh dari URL tersebut ataupun tidak sama sekali.
3.7.2 XLink dan XPointer
XLink [Con00b] dan XPointer [Con00c] merupakan bakuan-bakuan untuk membuat
hubungan antar sumber-sumber daya. Karena XLink menggunakan XPointer maka
XPointer akan diperkenalkan terlebih dahulu.
Pada 3.4 telah diperkenalkan suatu attribut ID yang memberikan suatu nama yang
unik di dalam suatu dokumen XML. Attribut ID ini dapat digunakan untuk mengacu
suatu elemen di dalam sebuah dokumen XML. Katakanlah di dalam file XML
contoh.xml terdapat suatu elemen dengan ID smurf. Maka elemen ini dapat diakses
dengan XPointer berikut:
BAB 3 – XML 32
Sebuah contoh yang lebih rumit yaitu:
XPointer di atas mengakses elemen keenam dari contoh.xml. Sebuah
penjelasan yang lebih lengkap mengenai XPointer bisa didapatkan di [Con00c].
Seperti telah dijelaskan di [Marc99], XLink memungkinkan penghubungan antara
dokumen-dokumen XML. Selain hubungan antar dokumen, XLink juga memungkinkan
penghubungan yang terjadi di antar elemen-lemen dalam satu dokumen (intradokumen).
Dalam XLink ada dua jenis hubungan:
• Simple links yang mirip seperti link yang terdapat di dalam HTML.
• Extended links yang memungkinkan penghubungan ke beberapa sumber daya
dari satu link yang sama.
Berikut ini adalah contoh dari simple link. Namespace xlink digunakan untuk menandakan
attribut-attribut yang menjadi bagian dari bakuan XLink. Contoh ini
menggunakan XPointer yang digunakan sebagai contoh pada bagian sebelumnya.

Walaupun XLink menggunakan sintaks XML, namun XLink tidak mempunyai DTD.
Tetapi DTD sebuah markup dapat dibuat untuk memaksakan sintaks XLink yang
benar pada dokumen-dokumennya.
Data Model
Gambar 4.1 Tahap-tahap perancangan RQML
Bab 4
RQML adalah suatu usulan standar untuk penulisan dokumen system requirements
specification di dalam file XML. Dikembangkan oleh Gardar Gudgeirsson, University
of York [Gudg00], sebuah dokumen RQML bertujuan untuk menampung berbagai
requirement yang ditulis dalam bahasa alami.
Dalam mengembangkan RQML, Gudgeirsson memulai dengan penelaahan terhadap
berbagai literatur dalam bidang requirements engineering (RE) dan juga software
engineering secara umum. Dari studi literatur ini didapat serangkaian fakta yang
menggambarkan praktek-praktek software requirements engineering pada masa kini.
Selain itu dari salah satu literatur yang dipelajari, [Wieg99], didapatkan serangkaian
best practices dalam RE.
Sebagai domain information untuk RE, berbagai fakta dan best practices ini mendasari
dibuatnya sekumpulan requirements dan juga quality attributes yang menuntun
perancangan RQML. Setelah beberapa keputusan dasar (“design decisions”) diambil,
rancangan RQML dibuat dalam bentuk data model yang menjadi dasar dibentuknya
sebuah document type definition (DTD) yang menentukan sintaks RQML.
Dalam bab ini diberikan pembahasan singkat mengenai fakta-fakta, best practices, dan
requirements yang membentuk RQML. Selain itu juga akan dibahas mengenai markup
RQML dengan mengutip bagian-bagian dari RQML DTD.
4.1 Fakta-fakta
Bagian ini memuat sebuah subset dari fakta-fakta yang dikemukakan oleh [Gudg00]
di dalam studi literaturnya. Berbagai fakta yang dikemukakan ulang di sini adalah
yang dapat dilacak balik (back-trace) dari rancangan RQML. Penomoran fakta sengaja
disamakan dengan yang ada pada [Gudg00] sehingga nomor ini nampak tidak terurut
– Gudgeirsson mengemukakan 16 fakta namun hanya enam di antaranya dapat
dilacak balik secara eksplisit dari data model RQML.
4.1.1 Fact 1
Dengan banyaknya jenis requirement maka tidaklah mungkin untuk memberikan
suatu ketetapan untuk mengkategorisasikannya ataupun untuk menggariskan caracara
yang ‘terbaik’ di dalam penggambarannya; kendati cara-cara tertentu memang
lebih baik dari yang lain.
4.1.2 Fact 2
Banyaknya teknik elicitation yang digunakan berakibat ganda. Pertama, karena
himpunan requirement masih limbung maka berbagai requirement yang ada bisa saling
meliputi dan/atau bertentangan. Kedua, seiring dengan jalannya pekerjaan
menyebabkan munculnya berbagai requirement baru ataupun hilangnya requirement
yang sudah ada.
4.1.3 Fact 3
Dengan cara-cara yang ada pada masa kini masih sulit untuk merekam berbagai
requirement di seluruh aktivitas-aktivitas analisis dan negosiasi, dan pada saat yang
bersamaan mengelola pertentangan antar stakeholder ataupun berhadapan dengan
requirement yang tidak lengkap.
4.1.4 Fact 4
Seperti dituliskan di [Nuse00], semakin dirasa penting sekali kemampuan untuk tidak
hanya menulis berbagai requirement, namun juga untuk melakukannya sedemikian
rupa sehingga dapat dilacak oleh banyak orang untuk pengelolaan evolusinya sejalan
dengan waktu.
4.1.5 Fact 7
Karena secara teoritis banyak sekali data pelacakan yang dapat dikumpulkan di suatu
proyek, organisasi-organisasi harus dapat memilih dengan cermat data mana yang
akan dipelihara. Menurut [Koto98], pada prakteknya sangatlah mahal sekali untuk
mengumpulkan dan mengelola semua jenis informasi traceability.
4.1.6 Fact 8
Menurut [Ram98], pada saat ini tidak ada cara yang efisien di dalam menyimpan
informasi traceability yang rumit.
4.2 Best Practices RE
Bagian ini memuat sebuah subset dari serangkaian best practices dalam bidang
requirements engineering yang dikemukakan oleh [Wieg99]. Subset ini digunakan oleh
Gudgeirsson untuk membuat berbagai requirement terhadap rancangan RQML.
Berbagai best practices yang tidak dipergunakan umumnya karena tidak terkait
dengan penulisan dokumen SRS – karena itu di luar cakupan RQML.
Penomoran best practices pada bagian ini disamakan dengan yang ada di [Gudg00]
sehingga nampak tidak terurut.
• BP4 Membuat suatu daftar kata-kata.
• BP8 Melacak setiap perubahan pada semua hasil kerja yang terpengaruh.
• BP9 Membuat garis pangkalan serta mengendalikan versi-versi dari requirements
• BP11 Melacak status berbagai requirement.
• BP12 Mengukur kemantapan requirement.
• BP18 Melacak usaha-usaha yang dihabiskan untuk berbagai requirement.
• BP19 Menulis visi serta cakupan.
• BP21 Mengenali kelas-kelas pengguna.
• BP22 Memilih product champion.
• BP23 Membentuk focus groups.
• BP24 Mengenali use-cases.
• BP27 Menetapkan quality attributes.
• BP29 Menggunakan kembali berbagai requirement.
• BP33 Memprioritaskan requirement.
• BP34 Memodelkan berbagai requirement.
• BP38 Mengenali sumber-sumber dari berbagai requirement.
• BP39 Memberi nama pada setiap requirement.
• BP40 Mencatat aturan-aturan bisnis.
• BP41 Membuat matriks traceability.
4.3 Quality Attributes
Bagian ini memuat tiga attribut kualitas yang membentuk rancangan RQML. Sebagai
analogi dari nilai-nilai moral, attribut-attribut kualitas ini menuntun berbagai
pengambilan keputusan terhadap hasil akhir dari sintaks RQML.
• Integratibility. Dapat digabungkan berarti kemampuan komponen-komponen
yang dibuat secara terpisah untuk dapat bekerja sama dengan benar. Hal ini
bergantung pada kompleksitas eksternal dari komponen-komponen tersebut,
mekanisme-mekanisme interaksi serta berbagai protokol yang dimilikinya, dan
juga tingkat pemisahan tanggung jawab dari masing-masing komponen.
• Extensibility. Dapat dikembangkan mengukur seberapa mudah untuk menambah
fungsionalitas kepada sistem. Ini juga merupakan suatu indikasi mengenai
seberapa mudah untuk menambahkan komponen-komponen yang ada di
pasaran terhadap sistem yang sudah dipergunakan.
• Portability. Dapat dipindahkan yaitu kemampuan sistem untuk dijalankan di
dalam berbagai lingkungan komputasi yang berbeda. Sebuah sistem disebut
portable bila sedemikan rupa sehingga semua anggapan memgenai lingkungan
komputasi tertentu dibatasi pada satu komponen atau pada beberapa komponen
yang sangat berhubungan.
4.4 Requirements
Bagian ini memuat seluruh requirement yang diminta dari RQML. Beberapa requirement
ini dapat dilacak secara langsung kepada best practices maupun fakta-fakta yang
telah dikemukakan sebelumnya. Traceability ada pada nomor requirement yang
dicetak tebal dan diberikan sebagai nomor best practice (BPx) ataupun nomor fakta
(Fact x) pada akhir kalimat requirement. Persis setelah nomor requirement ditulis
kategori dari requirement tersebut dalam kurung siku, yaitu [fungsional] atau [nonfungsional].
• REQ1 [fungsional] RQML akan menjadi sebuah data format untuk menyimpan
software requirements specification.
• REQ2 [non-fungsional] RQML akan menggabungkan berbagai kekuatan metodemethode
masa kini yang menggunakan dokumen maupun database untuk
menyimpan berbagai requirement.
• REQ3 [fungsional] RQML akan dapat dikembangkan menuju metode-metode
pemodelan baru. Requirement ini adalah fungsional dan bukanlah attribut
kualitas extensible.
• REQ4 [non-fungsional] RQML akan diarahkan untuk digunakan sebagai standar
penyimpanan data untuk alat bantu requirement.
• REQ5 [fungsional] RQML akan mendukung best practices untuk requirements
engineering (RE); namun tidak mendukung suatu metode RE tertentu.
• REQ5-1 [fungsional] RQML akan mendukung pendokumentasian daftar istilah
• REQ5-2 [fungsional] RQML akan memungkinkan pelacakan setiap perubahan
pada hasil-hasil kerja (BP8).
• REQ5-3 [fungsional] RQML akan mendukung pembuatan garis pangkal serta
pengendalian versi dari berbagai requirements document (BP9).
• REQ5-4 [fungsional] RQML akan memungkinkan pelacakan status requirement
• REQ5-5 [fungsional] RQML akan membuat mungkin pengukuran kemantapan
requirement (BP12).
• REQ5-6 [fungsional] RQML akan membuat mungkin untuk mendokumentasikan
usaha yang dilakukan dalam penerapan masing-masing requirement. (BP18)
• REQ5-7 [fungsional] RQML akan membuat mungkin pendokumentasian visi dan
cakupan untuk proyek-proyek tertentu (BP19).
• REQ5-8 [fungsional] RQML akan mendukung pengenalan kelas-kelas pengguna
• REQ5-9 [fungsional] RQML akan mendukung pemilihan berbagai product
champion (BP22).
• REQ5-10 [fungsional] RQML akan membuat mungkin untuk membentuk
berbagai focus group (BP23).
• REQ5-11 [fungsional] RQML akan memungkinkan untuk menetapkan berbagai
attribut kualitas (BP27).
• REQ5-12 [fungsional] RQML akan mendukung penggunaan kembali berbagai
requirement (BP29).
• REQ5-13 [fungsional] RQML akan memungkinkan pemrioritasan requirement
• REQ5-14 [fungsional] RQML akan medukung pendokumentasian requirement
dalam bahasa alami. (BP24, BP34)
• REQ5-15 [fungsional] RQML akan memungkinkan untuk mengenali sumbersumber
dari berbagai requirement (BP38).
• REQ5-16 [fungsional] RQML akan mendukung penamaan berbagai requirement
• REQ5-17 [fungsional] RQML akan mendukung perekaman aturan-aturan bisnis
• REQ5-18 [fungsional] RQML akan memberikan suatu cara untuk menyimpan
informasi traceability yang merupakan sebuah peningkatan dari cara-cara yang
digunakan sekarang (BP41, Fact 7, Fact 8).
• REQ6 [fungsional] RQML akan menyediakan suatu cara untuk mengklasifikasikan
jenis-jenis dari berbagai requirement (Fact 1).
External RQMLFirstClass Term
Taxonomy Requirement Stakeholder Usecase
Project Assumption Context Issue Lexicon Group
Gambar 4.2 Hirarki data model RQML
• REQ7 [fungsional] RQML akan mendukung pendokumentasikan berbagai
requirement yang berubah ataupun tidak lengkap (Fact 2, Fact 3, Fact 4).
• REQ8 [fungsional] RQML akan mendukung traceability ke dalam dan ke luar dari
bagian-bagian teks dalam bahasa alami (Fact 7).
• REQ9 [fungsional] RQML akan memungkinkan penamaan, penggambaran, serta
pemberian alasan untuk berbagai kesatuan terkait yang sedang didokumentasikan.
• REQ10 [fungsional] RQML akan mendukung pendokumentasian informasi
• REQ10-1 [fungsional] RQML akan membuat mungkin pendokumentasian
berbagai anggapan.
• REQ10-2 [fungsional] RQML akan membuat mungkin pendokumentasian
masalah-masalah yang belum terselesaikan.
4.5 Data Model
Bagian ini membahas data model yang digunakan sebagai dasar dibuatnya markup
RQML. Paradigma data model yang digunakan adalah data berorientasi obyek, tetapi
semua kelas hanya terdiri dari attribut (tanpa adanya method). Dari data model ini
nampak jenis-jenis dari berbagai data yang dapat dimuat di dalam suatu dokumen
4.5.1 Kelas RQMLSecondClass
Kelas RQMLSecondClass adalah base class bagi semua kelas di dalam RQML. Kelas ini
memuat attribut-attribut umum yang harus dimiliki oleh semua elemen. Berbagai
attribut tersebut adalah:
• ID merupakan identitas unik dari obyek ini di dalam suatu file RQML.
• URI mereferensikan obyek lain di luar file RQML lewat suatu URI (Universal
Resource Identifier).
4.5.2 Kelas External
Kelas External mewakili obyek-obyek yang ada di luar file XML (dokumen RQML).
Pada dasarnya, obyek apapun yang mempunyai URI dapat diwakili oleh suatu obyek
4.5.3 Kelas RQMLFirstClass
Kelas RQMLSecondClass adalah base class bagi elemen-elemen yang disebut elemen
first-class. Berbagai elemen first-class ini adalah top-level elements – yaitu elemen
teratas sebelum elemen akar (root element) – di dalam file RQML. Attribut-attribut
yang harus dimiliki oleh sebuah elemen first-class adalah:
• Versi dari obyek first-class ini (REQ5-3).
• Status dari obyek first-class ini (REQ5-4, REQ 5-7).
• Kemantapan dari obyek first-class ini (REQ5-5).
• Kesulitan yang ada dalam mewujudkan informasi yang ada dalam obyek firstclass
ini (REQ5-6).
• Prioritas dari obyek first-class ini (REQ5-13).
• Nama dari obyek first-class ini (REQ9).
• Keterangan dari obyek first-class ini (REQ9)
• Alasan yang mendasari adanya masukan obyek first-class ini (REQ9).
4.5.4 Kelas Term
Obyek-obyek dari kelas Term digunakan sebagai elemen tujuan (target atau anchor)
dalam melakukan traceability ke dalam dan ke luar dari teks bahasa alami. Kelas ini
akan diturunkan langsung dari RQMLSecondClass (REQ8, REQ5-1).
4 Ada kekeliruan di dalam [Gudg00], halaman 46, yang merunutkan obyek ini ke
4.5.5 Jenis-jenis obyek first-class
Dalam bagian ini diberikan jenis-jenis obyek first-class yang ada dalam RQML.
Berbagai obyek first-class ini adalah subclass dari RQMLFirstClass.
• Taxonomy Menyediakan suatu cara untuk membuat berbagai klasifikasi di mana
obyek-obyek first-class lainnya dapat diasosiasikan dengannya. Umumnya
obyek ini digunakan untuk mengklasifikasikan berbagai requirement menjadi
functional requirement, non-functional requirement, business rules, dan sebagainya,
namun juga dapat digunakan untuk mengklasifikasikan obyek-obyek first-class
lainnya (REQ6, REQ5-11, REQ5-10, REQ5-8, REQ5-17).
• Requirement Merupakan suatu requirement di dalam bahasa alami (REQ5-14).
• Stakeholder Menggambarkan seorang stakeholder (REQ5-9, REQ10).
• Usecase Adalah gambaran sebuah use-case (REQ5-14).
• Project Merupakan gambaran luas sebuah proyek ataupun sub-proyek
• Assumption Menggambarkan sebuah anggapan (REQ10-1).
• Context Menyediakan sebuah konteks di mana obyek-obyek first-class lainnya
dapat diasosiasikan dengannya. Salah satu contoh konteks adalah domain
information (REQ5-15).
• Issue Mendokumentasikan sebuah permasalahan yang belum terpecahkan
• Lexicon Menyimpan definisi dari sebuah konsep (REQ5-1).
• Group Mengelompokkan beberapa obyek first-class (REQ5-10).
• Trace Menetapkan pelacakan dari satu obyek first-class ke obyek first class yang
4.5.6 Jenis-jenis trace
Berikut ini adalah jenis-jenis traceability yang terdapat di dalam RQML. Dimuat
sebagai suatu obyek first-class Trace, berbagai traceability ini menghubungkan dua
obyek first-class di dalam satu file XML. Untuk masing-masing jenis traceability
diberikan nomor requirement yang mendasarinya.
• parent-type Adalah pelacakan antara dua obyek taxonomy (REQ5-6).
• instantiation Memungkinkan pembuatan suatu keberadaan dari satu obyek
first-class (selain dari taxonomy) ke obyek first-class yang lain (REQ5-6).
• contextual-scope Memungkinkan sebuah obyek first-class untuk diasosiasikan
dengan konteks tertentu (REQ5-10, REQ5-15).
• baseline Menetapkan sebuah garis pangkal untuk obyek-obyek first-class dari
sebuah proyek (REQ5-3, REQ5-7).
• subproject Menetapkan sebuah proyek sebagai bagian dari proyek lain (REQ5-3,
• project-data Menghubungkan suatu proyek ke obyek second-class yang
berhubungan dengannya (REQ5-3, REQ5-7).
• refinement Perincian dari satu requirement ataupun use case ke yang lainnya
(REQ5-2, REQ5-3).
• supersede Memungkinkan satu obyek first-class untuk digantikan dengan yang
lain (REQ5-2, REQ5-3).
• parent Menetapkan suatu obyek first-class sebagai induk dari yang lain (REQ5-2,
• conflict Menunjukkan bahwa dua requirement atau use case bertentangan
(REQ5-2, REQ5-3).
• forward-from Adalah suatu pelacakan tradisional forward-from (REQ5-2,
• backward-to Adalah suatu pelacakan tradisional backward-to (REQ5-2, REQ15).
• forward-to Adalah suatu pelacakanpelacakan tradisional forward-to (REQ5-2,
• backward-from Adalah suatu pelacakanpelacakan tradisional backward-from
(REQ5-2, REQ15).
• stakeholder-view Memungkinkan seorang stakeholder untuk dihubungkan
dengan suatu obyek first-class yang menandakan kepemilikan, ketertarikan, atau
jenis-jenis hubungan lainnya (REQ10-1).
5 Nampaknya domain telah diambil alih oleh pihak lain.
• trace-to-trace Menghubungkan antara dua trace (REQ10-1).
• general-conflict Menandakan adanya konflik antara dua obyek first-class
• lexref Menciptakan suatu hubungan antara sebuah term dengan masukan
lexicon untuk term tersebut (REQ5-1).
• see-also Menghubungkan antara dua masukan lexicon (REQ5-1).
• universal-trace Adalah pelacakan untuk penggunaan umum (REQ5-2).
4.6 Markup
Pada bagian ini akan dibahas document type definition (DTD) yang menjadi penentu
sintaks RQML. DTD ini dibuat dari data model RQML yang dibahas pada bagian
Karena XML tidak object-oriented maka pemetaan dari data model ke DTD dilakukan
dengan cara meratakan (“flatten”) pohon hirarki data model (Gambar 4.2) kemudian
membuat definisi tag XML dari berbagai leaf node yang dimiliki oleh pohon tersebut.
Tipe-tipe data sederhana (terutama string dan enumerasi) dipetakan menjadi attribut
dari suatu elemen. Sedangkan jenis-jenis data kompleks dijadikan sub-elemen dari
elemen yang memilikinya. Cara pemetaan ini analogis dengan cara meng-instantiate
semua class kemudian membuat elemen-elemen dari obyek-obyek yang merupakan
instance dari leaf class.
4.6.1 Root Element
Elemen rqml merupakan elemen akar di dalam suatu dokumen RQML. Dokumen ini
memuat hanya memuat berbagai elemen first-class sebagai child element langsung.
Perlu diketahui bahwa URL yang digunakan sebagai basis
namespace bukanlah website RQML5; situs web RQML yang terakhir diketahui adalah

4.6.2 Elemen term
Elemen term digunakan di banyak elemen lain untuk memungkinkan pemberian
attribut kepada sekelompok kata di dalam sebuah blok teks bahasa alami. Selain itu
elemen ini juga digunakan untuk melakukan traceability ke dalam bagian teks bahasa
Ada suatu ketidakkonsistenan di dalam [Gudg00] pada definisi elemen ini. Walau
seharusnya elemen ini adalah turunan dari RQMLSecondClass, namun attribut URI
tidak diwariskannya (lihat subbab 4.5.1 untuk keterangan kelas RQMLSecondClass).

4.6.3 Kelas RQMLFirstClass
Kelas RQMLFirstClass merupakan suatu abstract class yang menjadi dasar bagi
elemen-elemen lainnya. Walau sebenarnya tidak ada di dalam DTD, namun kelas ini
berguna untuk mendefinisikan berbagai attribut serta child elements yang umum ada
di semua elemen-elemen first-class. Elemen-elemen taxonomy, requirement,
stakeholder, use-case, project, assumption, issue, lexicon, group, dan trace semua
memiliki sekelompok attribut dan elemen anakan yang sama; kesamaan itu
didefinisikan di RQMLFirstClass.
Kelas ini mengalami ketidakkonsistenan yang sama dengan elemen term, yaitu tidak
adanya attribut URI yang seharusnya diwariskan dari RQMLSecondClass.

4.6.4 Elemen-elemen first-class
Pada bagian ini diberikan penjelasan singkat mengenai elemen-elemen first-class yang
semuanya merupakan turunan dari RQMLFirstClass. Pada beberapa definisi elemen
ditemukan ketidakkonsistenan yang ada di dalam [Gudg00]. Berbagai ketidakkonsistenan
tersebut akan ditunjukkan di dalam keterangan elemen yang bersangkutan. Requirement
Elemen requirement digunakan untuk mendokumentasikan sebuah requirement dalam
bahasa alami. Elemen ini tidak menambahkan informasi apapun dari yang
didapatnya dari kelas RQMLFirstClass; namun hanya merupakan penamaan ulang dari
superclass-nya. Stakeholder
Seperti requirement, elemen stakeholder tidak menambah informasi apapun kepada
RQMLFirstClass. Elemen ini menampung nama, keterangan, dan alasan untuk
seorang stakeholder. Walaupun informasi tambahan seperti alamat, e-mail, dan lainlain
akan menguntungkan, tambahan ini tidak disertakan agar rancangan RQML tetap
sederhana. Lagipula, informasi data pribadi seperti ini umumnya diletakkan di dalam
suatu relational database dan dapat dihubungkan dengan menggunakan traceability.
Elemen assumption adalah suatu penamaan ulang dari RQMLFirstClass yang ditujukan
untuk mendokumentasikan sebuah anggapan.
Ternyata ada ketidakkonsistenan di [Gudg00] untuk spesifikasi elemen ini, yaitu
spesifikasi elemen-elemen anakan yang dimiliki oleh elemen assumption berbeda
dengan yang digariskan oleh superclass-nya, RQMLFirstClass. Perbedaan ini dicetak
tebal dalam penggalan berikut. Issue
Seperti requirement, stakeholder, dan assumption, elemen issue adalah penamaan
ulang dari RQMLFirstClass. Kegunaan elemen ini adalah untuk mendokumentasikan
permasalahan yang belum terpecahkan.

Elemen use-case didasari oleh template use-case yang diambil dari [Dary00]. Elemen
ini mendokumentasikan seorang aktor, nol atau beberapa precondition dan
postcondition, nol atau beberapa alternative course, dan nol atau beberapa exception. Project
Elemen project digunakan untuk mendokumentasikan suatu proyek atau subproyek.
Ada beberapa ketidakkonsistenan di dalam [Gudg00] mengenai definisi elemen ini.
Perbedaan pertama yaitu spesifikasi child elements yang diperbolehkan bukan merupakan
superset dari yang dimiliki oleh RQMLFirstClass, yang seharusnya menjadi
superclass dari elemen ini. Perbedaan kedua yaitu adanya ketidaksamaan di antara
bagian pembahasan dengan bagian lampiran untuk elemen ini.
Di [Gudg00], halaman 57 (Chapter 3. Design), elemen project didefinisikan sebagai:


Sedangkan di halaman 90 (RQML DTD), spesifikasinya adalah: Taxonomy
Elemen taxonomy hanya menambahkan satu buah informasi kepada kelas RQMLFirst-
Class. Tambahan ini adalah attribut type-element yang merupakan jenis-jenis elemen
first class lainnya kecuali term dan taxonomy. Context
Elemen context memungkinkan pendokumentasian domain information ataupun
berbagai informasi lainnya yang menyusun konteks untuk bagian-bagian sistem yang
lain. Tambahan yang diberikan kepada kelas RQMLFirstClass adalah elemen-elemen
origin dan textual-data.
Elemen lexicon memungkinkan berbagai definisi diberikan untuk elemen-elemen term
yang nampak di bagian-bagian lain. Traceability dapat digunakan untuk
menghubungkan elemen-elemen ini dengan elemen lexicon. Group
Elemen group digunakan untuk mengelompokkan beberapa elemen lainnya. Mekanisme
pengelompokkan yang digunakan yaitu XLink. Pengelompokan ini ditujukan
untuk membantu bekerjanya sebuah focus group (REQ5-10).

Elemen trace digunakan untuk melakukan traceability antara elemen-elemen firstclass
lainnya. Fungsionalitas traceability yang diberikan oleh elemen ini lebih dari
hanya empat jenis trace tradisional (forward-to, backward-to, forward-from, dan
backward-from) namun juga untuk hal-hal seperti hubungan parent-child, pengkategorisasian
elemen, pembuatan garis pangkal, konflik, dan berbagai hubungan lainnya.

<!– Source: Sink: –>

<!– Source: * except Sink: –>

<!– Source: Sink: * –>

<!– Source: Sink: * –>

<!– Source: Sink: –>

<!– Source: Sink: * except –>


<!– Source: or Sink: second class object –>

<!– Source: second class object Sink: or –>

<!– Source: or Sink: second class object –>

<!– Source: , or Sink: * –>

<!– If the source is a , it must describe a type of stakeholder.
<!– If the source is a , it must only contain objects of type –>
<!– or (again describing a stakeholder type). –>

<!– Source: Sink: –>

<!– Source: Sink: –>

<!– Source: Sink: –>

Bab 5
Design patterns adalah unsur-unsur rancangan yang seringkali muncul pada berbagai
sistem yang berbeda. Setiap kemunculan ini menguji pattern tersebut di berbagai situasi.
Semakin terujinya suatu unsur rancangan berarti semakin matangnya unsur
tersebut – sedemikian sehingga beberapa dapat dikatakan sebagai best practices dalam
perancangan sistem.
Istilah design patterns dimulai di bidang perancangan bangunan oleh Christopher
Alexander. Dalam bukunya A Pattern Language [Alex77], ia menerangkan pola-pola
yang terdapat di dalam berbagai rancangan arsitektur bangunan. Arti design pattern
diterangkannya dalam kalimat berikut:
Each pattern describes a problem which occurs over and over again in our
environment, and then describes the core of the solution to that problem, in
such a way that you can use this solution a million times over, without ever
doing it the same way twice [Alex77].
Dengan kata lain, design pattern adalah gambaran formal dari suatu masalah berikut
pemecahannya. Masing-masing pattern harus mempunyai nama yang sederhana dan
deskriptif yang dapat langsung digunakan untuk mengacu pada pola tersebut. Sebuah
pattern harus mendokumentasikan permasalahan, pemecahan, serta akibat-akibat
penggunaannya [Wall00].
Dalam bidang software engineering, debut design patterns diawali oleh Erich Gamma,
Richard Helm, Ralph Johnson dan John Vlissides dalam bukunya Design Patterns:
Elements of Reusable Object-Oriented Language [Gamm95]. Setelah buku ini, banyak
praktisi dan akademisi lainnya yang mulai mengkategorikan pola-pola rancangan
lainnya dalam berbagai software-intensive systems [Sun01a] [Wall00].
Pembahasan design patterns tentu tidak terlepas dari pembahasan arsitektur software
secara keseluruhan. Sebagai best practices dari perancangan software, design patterns
muncul sebagai komponen-komponen dari arsitektur software. Dalam bab ini juga
dibahas dua arsitektur software dalam keterhubungannya dengan design patterns:
model-view-controller dan diikuti dengan salah satu variannya yaitu separable model
5.1 Gang of Four Patterns
Pola-pola rancangan yang terdapat pada [Gamm95] secara kolektif disebut Gang of
Four Patterns [Coop98] – bukan karena mereka yang membuatnya, namun empat sekawan
ini membuat daftar pola-pola rancangan yang telah cukup stabil dan digunakan
di dalam berbagai sistem berorientasi obyek. [Gamm95] membagi katalog design
patterns mereka dalam tiga kategori: creational, structural, dan behavioral.
Creational patterns berhubungan dengan penciptaan obyek. Pola-pola ini berkisar seputar
obyek mana yang diciptakan, siapa yang menciptakannya, serta berapa banyak
obyek diciptakan.
Structural patterns berhubungan dengan struktur statis obyek dan kelas. Pola-pola
dalam structural patterns dapat dilihat pada saat program di-compile melalui struktur
inheritance, properties, serta agregasi obyek-obyek.
Behavioral patterns lebih berkenaan terhadap perilaku run-time program. Pola-pola ini
berkaitan dengan algoritma serta interaksi antar obyek saat program berjalan.
Penekanan behavioral patterns lebih pada komposisi obyek ketimbang inheritance.
Sedangkan masing-masing pattern dibahas oleh [Gamm95] sebagai kesatuan dari:
• Name – Merupakan nama yang diberikan pada pola ini.
• Intent – Merupakan pernyataan ringkas yang memberikan permasalahan yang
terjadi serta maksud yang hendak dicapai.
• Also Known As – Berbagai alias untuk pola ini, jika ada.
• Motivation – Sebuah skenario yang menerangkan sebuah permasalahan
rancangan dan bagaimana pola ini dapat memecahkannya.
• Applicability – Berbagai situasi di mana pola ini dapat diterapkan.
• Structure – Sebuah gambar yang menerangkan hubungan kelas dan obyek
dalam pattern ini.
• Participants – Berbagai kelas dan/atau obyek yang turut serta dalam pola ini
beserta peranannya.
• Collaborations – Bagaimana kerja sama dari para peserta untuk melaksanakan
peranannya masing-masing.
• Consequences – Bagaimana pola ini mencapai tujuannya serta kompromi (tradeoff)
yang harus dilakukan dalam penerapannya.
• Implementation – Petunjuk, peringatan, serta berbagai teknik yang digunakan
dalam penerapan pola ini.
• Sample Code – Contoh program yang mengilustrasikan penerapan pola ini.
• Known Uses – Contoh-contoh dari penggunaan pola ini pada sebuah sistem
• Related Patterns – Pola-pola lain yang berhubungan dengan pola ini.
Dalam bagian ini, pembahasan design pattern diringkas dalam bentuk tabular yang
diusulkan oleh [Gust99]. Teks yang menjadi keterangan niatan (intent) dari masingmasing
pattern diurai dalam bentuk kolom-kolom yang memberikan tambahan struktur
kepada gambaran pattern tersebut. Penguraian ini juga memungkinkan keseluruhan
pattern yang digunakan dapat dilihat dalam selayang pandang. Tidak
semua pattern dibahas di sini; namun hanyalah pola-pola yang digunakan di
Rambutan. Pembaca yang tertarik dapat mengacu pada [Gamm95], [Coop98], dan
[Sun01a] untuk pembahasan yang lebih lengkap.
5.1.1 Creational Patterns
Niatan dari masing-masing pola dalam creational patterns diuraikan menjadi lima
• Penciptaan – apakah membuat atau membatasi pembuatan suatu obyek.
• Kesatuan – obyek apa yang diciptakan.
• Tindakan – cara yang diambil dalam menciptakan obyek.
• Tekanan – batasan-batasan yang ada dalam penciptaan obyek.
• Informasi Tambahan – keterangan yang memperjelas niatan dari pola yang
Tabel 5.1 Creational Patterns
Penciptaan Kesatuan Tindakan Tekanan Informasi Tambahan
Menciptakan sekumpulan
obyek yang
atau saling
dengan menyediakan
suatu antarmuka
suatu kelas
yang nyata.
Menciptakan obyek-obyek dengan menyediakan
suatu antarmuka
untuk memutuskan
obyek mana yang
akan diciptakan.
Factory method
memungkinkan sebuah
kelas untuk
menunda pembuatan
obyek kepada
Singleton Jangan
lebih dari satu
dari suatu kelas
dengan menyediakan
suatu titik akes
global kepadanya.
5.1.2 Structural Patterns
Niatan dari masing-masing pola dalam structural patterns diuraikan menjadi empat
• Tindakan untuk diterapkan – apa yang dilakukan oleh pola yang bersangkutan.
• Kesatuan – perihal yang terkait dengan pola ini.
• Akibat – Dampak yang terjadi dari penerapan pola ini.
• Hasil – Apa saja yang didapatkan dari penerapan pola ini.
Tabel 5.2 Structural Patterns
Tindakan untuk
Kesatuan Akibat Hasil
Adapter Mengubah antarmuka sebuah
kepada antarmuka
kelas lain
yang diharapkan
Adapter memungkinkan kelaskelas
untuk bekerja sama yang
sebaliknya tidak mungkin karena
antarmuka-antarmuka yang
tidak cocok.
Tabel 5.2 Structural Patterns
Tindakan untuk
Kesatuan Akibat Hasil
Bridge Memisahkan satu
dari yang lainnya
sebuah abstraksi
dan penerapannya
sehingga keduanya dapat
berbeda dan tidak saling tergantung.
Composite Menyusun obyek-obyek ke dalam struktur
pohon untuk
mewakili hirarki
Composite memungkinkan klienklien
untuk memperlakukan
obyek tunggal maupun komposisi
dengan cara yang sama.
Decorator Secara dinamis
sebuah obyek. Decorator memberikan mekanisme
perluasan yang mudah
Façade Memberikan sebuah
antarmuka kepada
suatu himpunan
di dalam
sebuah subsistem.
Façade menetapkan antarmuka
dengan tingkat yang lebih tinggi
yang mempermudah penggunaan
sebuah subsistem.
Flyweight Penggunaan
secara bersamasama
obyek-obyek. Flyweight memungkinkan sejumlah
besar dari obyek-obyek yang
berukuran kecil untuk ditangani
secara tepatguna.
5.1.3 Behavioral Patterns
Niatan dari masing-masing pola dalam behavioral patterns diuraikan menjadi tiga
• Tujuan – Hal yang ingin dicapai dari penerapan pola.
• Rangkaian tindakan – cara pola ini diterapkan.
• Hasil – Apa saja yang didapatkan dari penerapan pola ini.
Tabel 5.3 Behavioral Patterns
Tujuan Rangkaian tindakan
/ langkahlangkah
Command Memparameterkan klien dengan
yang berbeda
dengan cara
membungkus sebuah
permintaan di
dalam sebuah obyek.
Command memungkinkan Anda untuk
mengantrikan atau mencatat permintaanpermintaan
dan mendukung operasi
yang dapat dibalikkan.
Iterator Mengakses unsur-unsur dari
sekumpulan obyek secara
Iterator memberikan suatu jalan untuk
mengakses unsur-unsur tanpa menyingkap
implementasi yang mendasarinya.
Observer Semua obyek yang bergantung
diberitahukan serta
diperbaharui ketika suatu
obyek berganti keadaan
dengan menetapkan
hubungan satuke-
banyak antara
Memento Menangkap dan mengeluarkan
keadaan dalam suatu
obyek sehingga keadaan ini
dapat dikembalikan belakangan.
Memento melakukan hal ini tanpa
melanggar pembungkusan.
Strategy Membuat algoritma-algoritma
dari suatu keluarga algoritma
dapat dipertukarkan
dengan cara
Strategy memungkinkan algoritma
berubah-ubah terlepas dari klien-klien
yang menggunakannya.
Menunda langkah-langkah
suatu algoritma ke subkelassubkelas
dengan cara
menetapkan rangka
dari suatu algoritma
di satu operasi.
Template Method memungkinkan
subkelas-subkelas untuk menetapkanulang
langkah-langkah tertentu dari
suatu algoritma tanpa mengubah susunan
algoritma tersebut.
5.2 Model-View-Controller (MVC)
Arsitektur MVC memisahkan suatu aplikasi interaktif ke dalam tiga kategori kelas:
model, view, dan controller. Kelas-kelas yang termasuk dalam model merepresentasikan
data yang diolah aplikasi tersebut. Sedangkan kelas-kelas di dalam view dan
controller adalah penerapan antarmuka pemakai; view merupakan tampilan aplikasi
sedangkan controller menerima masukan dari pemakai.
Gambar 5.1 Arsitektur MVC dan hubungannya dengan Java [Stan97]
Dipopulerkan oleh SmallTalk-80 [Burb92], arsitektur MVC beserta varian-variannya
masih digunakan sampai saat ini. Arsitektur Doc/View yang ada pada framework
Borland ObjectWindows [Borl93] bisa dikatakan cukup mirip dengan MVC.
Penerapannya juga tidak terbatas pada aplikasi GUI yang menjadi tujuan awalnya;
framework seperti Jakarta Struts menerapkan arsitektur MVC pada lingkungan
berbasis web.
Umumnya suatu kelas controller dirancang untuk digunakan bersama dengan kelas
view tertentu, karena sulit untuk membuat controller umum yang tidak tergantung
pada view tertentu [Fowl02]. Karena itu hubungan antara view dan controller bisa
dikatakan tightly coupled.
Bertugas menerima masukan dari pemakai, kelas-kelas controller mengubah data di
dalam model berdasarkan masukan ini. Perubahan data dilakukan dengan memanggil
method-method tertentu pada kelas model – agar tidak melanggar enkapsulasi.
Perubahan data di dalam model menyebabkan view diberitahukan akan adanya perubahan
Di antara view dengan model terdapat hubungan publish/subscribe. Sebuah model
memiliki daftar view yang subscribe kepadanya. Pada saat data di dalam model berubah,
semua view diberitahukan akan perubahan ini. Dengan diterimanya pemberitahuan,
view akan secara otomatis memperbaharui tampilannya untuk merefleksikan
perubahan ini. [Gamm95] menyebut hubungan antara view dengan model
ini sebagai penerapan dari Observer pattern.
Java 2 Standard Edition menyediakan dua kelas untuk mempermudah penerapan
hubungan publish/subscribe [Sun00a]. Di dalam package java.util terdapat pasangan
class Observable dan interface Observer. Suatu kelas model dapat di-extend
dari Observable sedangkan view dapat meng-implement Observer. Suatu view dapat
mendaftarkan dirinya untuk menerima pemberitahuan dari suatu model melalui
method Observable.addObserver(). Apabila data berubah, model yang bersangkutan
perlu memanggil method setChanged() untuk menandakan perubahan ini. Pengumuman
perubahan data dilakukan dengan memanggil method notifyObservers().
Kedua method tersebut ada di kelas Observable; dengan method setChanged() bersifat
protected sehingga hanya dapat dipanggil oleh subkelasnya.
5.3 Separable Model Architecture
Swing adalah nama panggilan (“code name”) untuk sekumpulan kelas antarmukapemakai
grafis (GUI) yang tersedia pada platform Java 2 Standard Edition. Pada release
sebelumnya platform ini menyediakan yang disebut Abstract Windowing Toolkit (AWT)
untuk membangun antarmuka pemakai. Walaupun AWT masih disediakan, aplikasiaplikasi
baru untuk Java 2 disarankan untuk menggunakan Swing ketimbang AWT
Perbedaan yang paling mendasar antara Swing dengan AWT yaitu Swing merupakan
pustaka yang pure Java [Sun00a]. Keseluruhan logika Swing dijalankan oleh JVM tanpa
memerlukan native code. Sedangkan pada AWT, fungsionalitas setiap komponen
antarmuka-pemakai sebenarnya didelegasikan kepada komponen-komponen native
dari host platform. Namun Swing menggunakan beberapa komponen AWT untuk
interaksi-interaksi primitifnya.
Suatu aplikasi dikatakan pure Java apabila sama sekali tidak menggunakan native
code – yaitu kode-kode program yang pribumi terhadap mesin yang menjalankannya
Gambar 5.2 Separable Model Architecture [Fowl02]
(host machine/platform). Program-program Java mendapatkan kemampuan crossplatform
karena program-program tersebut tidak di-compile ke bahasa mesin yang
menjadi tujuan dijalankannya program. Namun program Java di-compile ke suatu
bahasa mesin maya yang disebut Java bytecode. Pada setiap mesin yang akan menjalankan
program Java dipasang suatu perangkat lunak yang dinamakan Java Virtual
Machine (JVM). JVM ini secara software bertindak sebagai mesin maya yang menerjemahkan
bytecode menjadi machine code pada saat program berjalan.
Tight coupling yang terjadi di antara view dan controller pada arsitektur MVC berakibat
tidak praktisnya pembuatan komponen-komponen umum antarmuka-pemakai berbasis
murni MVC. Hal ini ditemukan pada saat pengembangan arsitektur Swing
sehingga para pengembangnya memutuskan untuk tidak mengikuti arsitektur MVC
secara penuh [Fowl02].
Arsitektur yang digunakan Swing dinamakan Separable Model Architecture (SMA). Berakar
dari MVC, arsitektur ini menggabungkan view dan controller menjadi satu obyek.
Sedangkan model masih merupakan obyek tersendiri. Perbedaan yang lain yaitu
penampilan (painting) komponen-komponen Swing tidak dilakukan oleh komponen itu
sendiri, namun didelegasikan ke suatu UI Manager.
Karena tidak tergantung pada problem domain tertentu, model yang digunakan lebih
disesuaikan pada kebutuhan komponen yang bersangkutan. Misalkan komponen
JScrollBar dan JSlider (dua komponen scroll bar dan slider, secara berurutan, dari
Swing) menggunakan jenis model yang sama, yaitu Bounded Range Model [Sun00a]
karena kedua komponen ini menampilkan data yang sejenis, yaitu suatu nilai yang
terletak di antara dua batas (bounds).
Obyek model di dalam Swing terdiri atas dua kategori, yaitu GUI-state model dan
Application-data model [Fowl02].
GUI-state model adalah sekumpulan interface yang merepresentasikan keadaan
penampilan suatu komponen antarmuka grafis. Misalkan apakah suatu tombol
sedang ditekan atau tidak, item mana saja di dalam sebuah list yang sedang dipilih,
ataupun posisi sebuah slider. Suatu aplikasi dapat saja menggunakan suatu GUI-state
model sendiri. Namun umumnya interaksi dengan model tidak diperlukan; aplikasi
dapat saja memanggil method dari komponen yang bersangkutan tanpa menyentuh
model yang digunakannya. Komponen akan mendelegasikan permintaan tersebut ke
model yang dimilikinya.
Application-data model adalah sekumpulan interface yang mewakili data yang
terutama berarti pada konteks aplikasi yang bersangkutan (berhubungan erat dengan
problem domain aplikasi). Penggunaan application-data model sangat disarankan untuk
aplikasi-aplikasi yang sangat berhubungan erat dengan data [Fowl02]. Interaksi yang
erat dengan data model lebih disarankan untuk beberapa komponen yang sangat datacentric
seperti JTable dan JTree.
Tabel berikut menunjukkan korelasi antara komponen-komponen Swing, interface dari
model yang digunakan serta tipe dari model yang diinginkan [Fowl02].
Tabel 5.4 Korelasi komponen-komponen Swing dengan data model yang digunakannya [Fowl02]
Component Model Interface Model Type
JButton ButtonModel GUI
JToggleButton ButtonModel GUI/data
JCheckBox ButtonModel GUI/data
JRadioButton ButtonModel GUI/data
JMenu ButtonModel GUI
JMenuItem ButtonModel GUI
JCheckBoxMenuItem ButtonModel GUI/data
JRadioButtonMenuItem ButtonModel GUI/data
JComboBox ComboBoxModel data
JProgressBar BoundedRangeModel GUI/data
JScrollBar BoundedRangeModel GUI/data
Component Model Interface Model Type
JSlider BoundedRangeModel GUI/data
JTabbedPane SingleSelectionModel GUI
JList ListModel data
JList ListSelectionModel GUI
JTable TableModel data
JTable TableColumnModel GUI
JTree TreeModel data
JTree TreeSelectionModel GUI
JEditorPane Document data
JTextPane Document data
JTextArea Document data
JTextField Document data
JPasswordField Document data
Salah satu kelebihan Swing bila dibandingkan dengan pustaka antarmuka pemakai
lainnya, yaitu masing-masing komponen Swing mendelegasikan penampilannya
(painting) pada kelas-kelas lain. Pendelegasian ini memungkinkan Swing untuk
mempunyai penampilan yang berbeda-beda dan dapat diubah pada saat program
dijalankan [Fowl02]. Fungsionalitas ini disebut pluggable look-and-feel (PL&F) dan
diatur oleh sebuah UIManager. Untuk masing-masing komponen, painting didelegasikan
lebih lanjut ke kelas-kelas look-and-feel. Kelas-kelas inilah yang menggambar
setiap komponen ke layar. PL&F memungkinkan suatu program Swing mempunyai
tampilan yang berbeda-beda.
Pada Java Development Kit 1.3 untuk platform Windows, ada tiga look-and-feel yang
• Metal – Juga disebut cross-platform look-and-feel, ini merupakan look-and-feel
default yang diambil apabila tidak dipilih lainnya.
• Motif – Meniru penampilan aplikasi-aplikasi Motif yang umum terdapat pada
platform Unix.
• Windows – Meniru penampilan Microsoft Windows.
Selain ketiga look-and-feel di atas, beberapa vendor pihak ketiga juga menyediakan
look-and-feel alternatif untuk digunakan sebuah aplikasi Swing.
Bab 6
Bab ini membahas analisa yang dilakukan serta rancangan awal untuk sistem yang
akan dibuat. Analisa meliputi user story, serangkaian requirement serta berbagai
batasan (constraints) yang ditentukan. Perancangan yang dibuat termasuk ide umum
rancangan, rencana data model, serta gambaran kasar antarmuka pemakai.
Analisis dilakukan atas dasar user story yang menggambarkan sebuah contoh situasi
di mana Rambutan akan digunakan. Cerita ini menuturkan seorang system analyst
yang sedang mewawancarai dua orang stakeholder untuk membuat draft requirement
pada saat project initiation (pra-kontrak). Sang analyst berasal dari suatu perusahaan
perangkat lunak yang berbasis proyek. Sedangkan dua orang stakeholder yang
diwawancarainya bekerja pada sebuah perusahaan dotcom yang tidak mempunyai IT
department sendiri – mayoritas new development dikontrakkan ke luar.
Bagian berikutnya membahas berbagai spesifikasi kebutuhan (requirement) untuk dipenuhi
oleh software yang akan dibuat. Umumnya rangkaian requirement ini disarikan
dari user story pada bagian sebelumnya.
Spesifikasi kebutuhan diikuti oleh batasan-batasan (constraints) yang dibebankan
pada rancangan hasil akhir dari sistem. Batasan-batasan ini terutama didorong oleh
pertimbangan-pertimbangan politis maupun bisnis untuk kebaikan pengembangan
sistem selanjutnya yang bertolak dari proyek ini.
Setelah itu akan dibahas rancangan-rancangan awal yang dibuat sebagai modal dasar
untuk implementasi Rambutan. Sebagai sebuah one-person prototyping project,
berbagai spesifikasi ini sangat high-level; perincian dari rancangan-rancangan ini
dibuat on-the-fly secara iteratif sejalan dengan proses coding seperti cara kerja seorang
hacker pada umumnya.
6.1 User Story
6 Apabila kata skimming yang digunakan – walaupun lebih tepat – nilai rasa yang
diberikan menjadi berkurang sehingga tidak mencerminkan keasyikan yang dialami.
Latar belakang cerita ini adalah pada dasawarsa pertama dari abad ke-21, di sebuah
kota metropolitan yang sibuk. Karena seluruh pelaku adalah para pekerja muda –
atau terkadang disebut sebagai Generation-X [Robb01] – maka bahasa percakapan
tetap dipertahankan dalam bentuk informal. Nama, merek dagang, maupun perusahaan
sebagian besar adalah fiktif – namun beberapa nama produk nyata digunakan
untuk menambah realisme cerita, tetapi tidak untuk mempromosikan produk
tersebut. Berikut ini adalah user story dalam bentuk narasi dialog.
Pada suatu pagi yang cerah, Rinoa, seorang system analyst, sedang bekerja di kantornya.
Seperti biasanya, ia memulai hari kerjanya di kantor pada jam delapan dengan
segelas cappucino beserta sederet e-mail dan IT newsletter. Selagi surfing6 di dalam
inbox-nya, tiba-tiba telepon berdering…
Operator: “Bu Rinoa, panggilan dari Binaraga di line satu.”
Rinoa: “Saya terima.” (Menjawab telepon di line satu…)
Telepon: “Halo, Rinoa? Masih inget gua?”
Rinoa: “Elu Vi, ada apa?”
Rupanya yang menelepon adalah kenalannya, Vivian, R & D Manager dari PT Binaraga
Maya Persada. Perusahaan ini merupakan klien lama dari PT Arcle Technologies,
tempat Rinoa bekerja.
Vivian: “Gini nih… gue – eh, kami – pengen bikin website baru…. Tempat lo bisa
handle ga?”
Rinoa: “Web apaan nih?”
Vivian: “Ga jauh lah, e-commerce juga… Kali ini kita mau jualan kamera, namanya
kamerafoto dot com…. Lo bisa ke tempat gua ga?”
Rinoa: “Hmm…” (Memeriksa jadwal pada aplikasi Palm Desktop di komputernya)
“Gimana kalo besok after lunch?”
Vivian: “Besok jam 13:30, OK?”
Rinoa: (Membuat appointment di Palm Desktop untuk keesokan harinya) “OK.”
Rinoa kemudian menjalankan program Rambutan Desktop untuk membuat dokumen
System Requirements Specification (SRS). Ia membuat dokumen SRS baru, kemudian
menambahkan proyek “kamerafoto” ke dalamnya. Di dalam project description
ditulisnya ‘e-commerce kamera buat binaraga.’ Ia juga menambahkan seorang
stakeholder, ‘Vivian’. Kemudian ia mengambil PDA-nya, sebuah Clie􀀖 model tidak terlalu
baru, dan melakukan sinkronisasi data dengan komputer desktop di kantornya.
Dengan sinkronisasi ini, dokumen SRS yang baru ia buat disalin ke dalam PDA-nya.
Keesokan harinya, Rinoa datang ke kantor Binaraga….
Vivian: “Hai… udah lama ga ketemu nih, gimana kabar Cowo Lo… eh, Bos…”
Rinoa: “Hus, jangan diomongin di sini… bisa runyam.”
Vivian: “Iya deh, kita ke meeting room yuk.”
Mereka berdua berjalan ke suatu ruangan tertutup di dalam kantor. Walaupun
tertutup, sekat ruangan itu adalah kaca kedap suara – sehingga orang-orang kantor
masih dapat melihat ke dalam dan sebaliknya.
Rinoa: (Sambil mengeluarkan PDA-nya dan mengaktifkan program Rambutan) “So,
kita bisa mulai?”
Vivian: (Penasaran, sebagai pemilik PDA juga) “Program baru ya?”
Rinoa: “Iya nih, buat ngumpulin requirement… Bos nyuruh gua nyoba, jadi kelinci
percobaan nih, mentang-mentang gua…”
Vivian: (Menyindir, kemudian batuk palsu) “Orang kepercayaannya? (ehem)”
Rinoa: “Ya sudah lah, back to business. Lo mo bikin website e-commerce? Jual
Vivian: “Iya, ekspansi, biasa….”
Rinoa: “Siapa aja yang ikutan proyek ini?”
Vivian: “Gua, Bos gua, Sugi…”
Rinoa: “Sugianto?”
Vivian: “Iya, sama Kristin, anak baru di marketing – nanti gua kenalin.”
Rinoa: (Menambah dua stakeholder baru selain Vivian yang telah dicatat kemarin:
Sugianto dan Kristin) “Udah? Ada lagi?”
Vivian: “Ya nanti paling anak-anak CS sama marketing, tapi itu Kristin yang urus.”
Rinoa: (Mencatat stakeholder: customer service dan marketing) “T’rus mo nampilin
apa aja?”
Vivian: “Produk, shopping cart – biasa lah, cuma kita mau ada sejarah pesanan
buat business intelligence.”
Rinoa: (Mencatat requirement: ‘shopping cart’, ‘daftar produk’, dan ‘sejarah pesanan’.
Untuk requirement ‘sejarah pesanan’, ia menambahkan rationale ‘business
Vivian: “Lalu nanti mau bikin komunitas penggemar fotografi, jadi kudu ada
tampilan info-info atau artikel yang bisa di-update.”
Rinoa: (Mencatat requirement, ‘tampilan artikel’ beserta rationale-nya: ‘untuk
membuat komunitas’). “Pake content management?”
Vivian: “Iya lah, lo tau kan kita ga punya IT staff khusus.. Jadi artikel, produk,
[dan] pesanannya kudu bisa diurus dari web… dan bisa gampang diupdate.”
Sementara mereka berbicara, Vivian melihat seseorang berjalan melewati ruang
pertemuan. Ia kemudian bangkit, keluar, dan memanggil orang tersebut. Menjawab
panggilan Vivian, orang itu ikut masuk kembali ke ruang pertemuan bersamanya.
Vivian: “Ini Kristin, anak yang gua bilang tadi.”
Kemudian Kristin dan Rinoa saling berkenalan.
Rinoa: “Bisa minta nomor telepon?”
Kristin: (Melihat Clie􀀖 milik Rinoa) “Gua beam ya… Bentar deh….”
Kristin kemudian mengeluarkan telepon genggamnya, sebuah 7650, standard issue
bagi pegawai marketing Binaraga. Rinoa mengarahkan PDA-nya pada telepon genggam
7 Anak-anak: para programmer.
Kristin dan sebaliknya. Mereka lalu bertukaran virtual business card (VCard) lewat
jalur inframerah.
Kristin: “Lagi pada ngapain nih?”
Vivian: “Ini nih, lagi bicarain kamerafoto… Rinoa itu system analyst dari Arcle
Technologies, yang bakal ngebuatin web baru kita itu. Lo bisa bantuin
Kristin: “Oh gitu… bisa lah, jelas udah tugas gua.” (Kemudian duduk untuk
mengikuti rapat).
Vivian: “Sampai mana tadi… Oh ya, bisa integrasi dengan web yang lama ga? Terus
pake PHP dan MySQL biar bisa ditaruh di webhosting yang sama.”
Rinoa: (Mencatat masalah: ‘integrasi dgn legacy sys’. Kemudian mencatat batasan
‘PHP & MySQL’. Batasan ini diberi alasan, ‘webhosting yg sama dgn legacy
Kristin: “Bisa dibuat untuk nyaring Pak Ogah dan Paman Gober ga?”
Rinoa: “Pak Ogah? Paman Gober? Siapa mereka?”
Kristin: “Istilah marketing sini – Pak Ogah itu orang-orang yang daftar sebagai
member tapi ga pernah login lagi atau lama sekali ga aktif. Kalo Paman
Gober itu member udah lama, sering login, tapi ga pernah beli apa-apa.”
Rinoa: (Mencatat istilah: Pak Ogah dan Paman Gober. Kemudian membuat dua
requirement ‘filter Pak Ogah’ dan ‘filter Paman Gober’. Lalu ia membuat
hubungan antara kedua requirement dengan definisi artinya masing-masing).
Kristin: (Setengah memaksa) “Jadi bisa ga?”
Rinoa: “Nanti gua tanyain anak-anak7 deh, yang penting sekarang keperluankeperluannya
dikumpulin dulu.”
Vivian: (berbicara perlahan kepada Kristin) “Tenang aja, kita udah sering kerja
sama dengan mereka, koq.”
8 JAD: Joint Application Development.
Rinoa: “Visi proyeknya apa nih?”
Vivian: “Visinya…” (diam sejenak) “Eh, nanti gua tanya Bos dulu boleh bilang
sekarang apa engga – maklum, rada classified, takut bocor.”
Rinoa: “Tapi proyeknya jadi kan?”
Vivian: “Jadi lah, kita udah beli domain name-nya koq. So, berapa duwit bikinnya
Rinoa: “Kayaknya ini rada sulit…” (menghitung requirement yang sudah dicatat
kemudian berpikir sejenak) “Mungkin sekitar satu setengah dari proyek lo
yang terakhir itu – tapi ini masih kira-kira lho.”
Tiba-tiba telepon genggam Rinoa berdering. Ternyata Yenny, sekretaris kantor, yang
Yenny: “Rin, besok kan kita ada JAD8, jadi si Bos mau kumpulin kita-kita sore ini
buat rapat – lembur dikit lah. Abis ini gua kirimin agenda rapatnya via
Rinoa: (kepada telepon) “OK. Btw, gua kayaknya dapet proyek nih, draft SRS-nya
ntar gua kirim. Tolong kasi tau bos sama anak-anak.”
Yenny: “Tentu, Bos….”
Rinoa: (menutup telepon) “Kawan-kawan, gua dipanggil nih, sorry. Ada yang mau
diomongin lagi tidak?”
Vivian: “Kayaknya segitu dulu deh.”
Kristin: (Mengangguk diam).
Rinoa: “Ya udah, gua balik dulu ya. Nanti gua kontak lo lagi sama ngasi draft
Vivian: “Oke deh. Good luck ya. Ati-ati di jalan.”
Rinoa: (bangkit untuk meninggalkan ruang rapat) “Makasih banyak ya.”
Di dalam subway, Rinoa mengirimkan draft SRS yang sudah ditulisnya pada saat
pertemuan tadi ke kantor via telepon genggam. Ia kemudian menerima satu halaman
agenda rapat yang kemudian dibacanya dengan menggunakan PDA.
6.2 Spesifikasi Kebutuhan
6.2.1 Sistem membantu dalam pengumpulan informasi requirements
Sebagai sebuah requirements management tool, tentulah fungsi utamanya adalah
untuk membantu mengumpulkan berbagai requirement yang ada. Pengumpulan ini
dilakukan terutama pada saat system analyst berinteraksi dengan stakeholder.
Interaksi dapat dilakukan dalam sesi-sesi formal maupun informal – seperti
wawancara, brainstorming, workshop, rapat, maupun pada saat diskusi lewat telepon.
Dalam beberapa kesempatan ini, mungkin sang analyst sedang tidak dapat
menggunakan sebuah komputer desktop maupun notebook – untuk alasan kepraktisan
ataupun alasan-alasan yang lain.
6.2.2 Sistem membantu dalam pengelolaan informasi requirements
Data maupun informasi yang telah dikumpulkan haruslah dapat dikelola agar menjadi
suatu informasi yang berkualitas. Sistem harus dapat mengkategorikan berbagai data
requirement yang ada untuk mempermudah akses maupun analisis lebih lanjut.
Dari user story pada bagian 6.1, sebuah dokumen SRS yang menjadi penampung dari
berbagai informasi requirement terdiri atas sekumpulan entry yang dapat dikategorikan
sebagai berikut:
• proyek
• stakeholder
• requirement
• istilah
• masalah
• batasan
Selain itu juga ada informasi traceability yang menghubungkan berbagai entry di dalam
sebuah SRS.
9 Tokoh Kristin pada user story di bagian 6.1 bukanlah merupakan contoh dari
pegawai marketing yang technophobic.
Berbagai entry yang telah dimasukkan ke dalam sistem haruslah dapat diubah (edit)
untuk memfasilitasi perubahan requirement pada analisa lebih lanjut.
6.2.3 Sistem mempunyai sebuah modul untuk digunakan di komputer genggam
Berhubungan dengan requirement 6.2.1, di saat absennya keberadaan komputer
desktop atau notebook, system analyst dapat juga menggunakan sebuah handheld
computer (yang beberapa di antaranya disebut Personal Digital Assistant – PDA).
Sebuah komputer berukuran kecil dan software pendukungnya akan memungkinkan
data entry dilakukan langsung di lokasi klien.
Sebagai staff Information Technology (IT), penggunaan sebuah PDA tentu tidak terlalu
menjadi masalah. Hal ini kontras dengan staff marketing yang terkadang mengalami
6.2.4 Sistem mempunyai sebuah modul untuk digunakan di komputer desktop
Fungsi-fungsi yang diberikan oleh komputer genggam tentulah lebih terbatas bila
dibandingkan dengan komputer desktop atau notebook. Walaupun kekuatan prosesor
dan ukuran memory dari gadgets ini terus meningkat, namun ukuran fisik layar tidak
akan bertambah besar – apabila ukurannya bertambah tentulah tidak dapat lagi
disebut handheld computer, karena sudah melampaui ukuran genggaman manusia.
Belum lagi dengan minim atau absennya sebuah keyboard yang membatasi kecepatan
maupun kemudahan data entry.
Karena itu perlu adanya sebuah modul untuk dijalankan di komputer desktop yang
fungsi-fungsinya merupakan superset dari modul yang terdapat di komputer handheld.
Modul ini terutama berfungsi untuk editing yang lebih intensif pada saat requirement
6.2.5 Informasi di aplikasi desktop dan handheld dapat dipertukarkan
Agar aplikasi desktop dan handheld dapat digunakan secara bergantian, data
dokumen SRS haruslah dapat dipertukarkan antar aplikasi – secara transitif, antar
device. Pergantian data ini haruslah terjadi semudah dan setransparan mungkin,
seperti yang ada pada aplikasi PIM (Personal Information Management) yang disertakan
di semua komputer genggam yang dijual sebagai PDA.
6.3 Batasan Rancangan
6.3.1 Aplikasi harus dirancang untuk mempermudah pengembangan selanjutnya
Sebagai suatu proyek prototyping dengan jatah waktu yang sangat singkat, tentulah
tidak semua requirement maupun fitur yang diinginkan dapat diterapkan. Oleh karena
itu, program-program yang dibuat haruslah dirancang sedemikian rupa untuk
memfasilitasi pengembangan lebih lanjut.
Aspek-aspek rancangan ini termasuk dokumentasi yang lengkap serta sebuah open
architecture yang diharapkan akan relatif stabil. Pencapaian sebuah arsitektur yang
stabil dapat dilakukan dengan penerapan design patterns yang telah terbukti
manfaatnya serta teruji oleh waktu.
6.3.2 Menggunakan [Gamm95] design patterns
Batasan ini berhubungan dengan requirement 6.3.1. Karena pola-pola rancangan yang
dikategorikan di [Gamm95] telah teruji di banyak object-oriented systems, maka
penggunaannya diharapkan dapat menghasilkan sebuah arsitektur yang baik. Fakta
pendukung lainnya yaitu buku ini telah melakukan evangelisasi design patterns di
bidang pengembangan perangkat lunak.
6.3.3 Aplikasi handheld harus multi-platform
Setidaknya saat ini terdapat dua sistem operasi PDA: Palm OS dan Pocket PC.
Walaupun Palm OS masih memegang mayoritas, namun pangsa pasarnya telah
banyak dikurangi oleh Pocket PC dari Microsoft. Belum lagi sistem operasi
Symbian OS yang banyak digunakan di telepon genggam high-end Nokia – yang
memiliki berbagai fungsi tambahan menyerupai PDA.
Untuk mengurangi resiko terjebak di tengah platform wars ini, modul yang diperuntukkan
bagi komputer handheld jangan sampai tergantung pada sistem operasi tertentu.
Program harus dapat dijalankan di setidaknya dua sistem operasi handheld; atau
minimal dapat dibuat dua versi untuk masing-masing sistem operasi hanya dengan
10 Terutama yang masih termasuk CMM Level 1(initial)
cara kompilasi ulang (analogis dengan portabilitas antar Unix dan Windows yang
ditawarkan oleh pustaka Qt untuk program C++).
6.3.4 Aplikasi desktop harus multi-platform.
Sebagaimana dengan batasan yang diberikan pada aplikasi untuk handheld, ketergantungan
pada sistem operasi desktop tertentu juga perlu dihindari. Walaupun dominasi
Microsoft Windows saat ini cukup signifikan, namun pengguna MacOS tidak bisa
dibilang sedikit – terutama di Amerika Serikat. Belum lagi dengan mulai bangkitnya
Linux untuk penggunaan di komputer desktop. Ketergantungan pada sistem operasi
tertentu dapat memperkecil pangsa pasar sebuah RE Tool – yang pada awalnya juga
tidak bisa dibilang besar.
6.3.5 Terdapat kode program pada handheld dan desktop yang digunakan
Sehubungan dengan requirement 6.2.5, data transfer antar-aplikasi haruslah difasilitasi
dengan adanya sejumlah common code pada kedua belah sisi pada antarmuka
aplikasi desktop dengan handheld. Keuntungan yang didapatkan dengan adanya
common code ini adalah:
• Meningkatkan konsistensi representasi data antar aplikasi.
• Mempermudah maintenance pada kedua aplikasi.
• Meminimalkan recoding maupun reimplementation pada kedua aplikasi.
6.3.6 Aplikasi yang dibuat tidak tergantung pada metodologi RE tertentu
Sebagai suatu bidang yang relatif baru, industri perangkat lunak masih belum setuju
pada satu metodologi requirements engineering tertentu. Walaupun ada beberapa
metodologi yang cukup populer, namun berbagai organisasi yang melakukan software
development masih cenderung untuk menggunakan metodologi kesukaannya sendiri
– malahan beberapa organisasi10 tidak menggunakan metodologi RE yang baku.
Selain itu, pertanyaan “Metodologi RE mana yang terbaik” juga masih diperdebatkan
Mengingat keadaan-keadaan tersebut, ketergantungan pada metodologi RE tertentu
akan dapat menghambat perkembangan suatu RE Tool yang masih infant seperti
Rambutan. Sehingga suatu RE Tool yang masih baru ini sebaiknya dapat digunakan
untuk beberapa metodologi RE yang berbeda.
6.3.7 Tidak ada pembayaran kontinu kepada pihak ketiga
Pembayaran license fee ataupun biaya-biaya pihak ketiga lainnya secara berkelanjutan
tentu dapat mengurangi keuntungan dari penjualan sebuah perangkat lunak. Apalagi
bila license fee ini merupakan variable cost yang menambah biaya jual untuk setiap
salinan aplikasi yang dijual.
Sebagai sebuah prototype yang belum mempunyai sponsor yang jelas, komponenkomponen
komersial – terutama yang bisa mendatangkan biaya-biaya tambahan
seperti disebutkan sebelumnya – sebaiknya dihindari. Ini ditujukan agar Rambutan
tetap mempunyai banyak alternatif development branches yang mungkin.
6.4 Perancangan
6.4.1 Gambaran umum sistem
Sistem terdiri atas dua aplikasi yang berdiri sendiri: satu untuk komputer handheld
dan satu lagi untuk komputer desktop. Aplikasi handheld diterapkan dengan
SuperWaba sedangkan aplikasi desktop dibuat untuk platform Java 2 Standard
Edition (J2SE). Kedua aplikasi diprogram untuk API yang berbeda, namun keduanya
dibuat dengan bahasa pemrograman Java. Hal ini memungkinkan beberapa
komponen untuk digunakan secara bersama di aplikasi handheld ataupun desktop.
Berkat SuperWaba, aplikasi handheld dapat dijalankan di sistem operasi Palm OS dan
Pocket PC tanpa perlu dilakukan kompilasi ulang. Karena – seperti Java –
SuperWaba adalah sebuah sistem berbasis virtual machine, maka executable file yang
persis sama dapat digunakan untuk kedua platform. Selain itu berkat suatu
compatibility layer, program-program SuperWaba dapat dijalankan dengan menggunakan
sebuah Java Virtual Machine (JVM) yang memenuhi standar JDK 1.1. Pilihan
kompatibilitas ini dapat digunakan untuk mendukung handheld dengan sistem
11 Misalnya Sharp ZaurusTM.
operasi lain yang mendukung Java 1.1, seperti misalnya komputer genggam berbasis
Sebagai program J2SE, aplikasi desktop dapat digunakan di semua sistem operasi
yang mendukung Java 2 – termasuk Windows, Linux, Macintosh, OS/390, bahkan
Novell Netware. Selain portabilitas, platform J2SE juga memberikan suatu pustaka
serta API yang kaya yang akan memudahkan pengembangan aplikasi selanjutnya.
Dukungan SuperWaba terhadap Palm OS dan Pocket PC memenuhi requirement 6.3.3.
Penggunaan J2SE memenuhi requirement 6.3.4. Bahasa pemrograman Java yang digunakan
oleh SuperWaba dan J2SE memungkinkan pemenuhan requirement 6.3.5 dan
6.2.5. Fakta bahwa program-program SuperWaba dapat dijalankan di J2SE juga mendukung
pencapaian requirement 6.2.5. Selain itu, bahasa Java yang object-oriented
serta platform J2SE yang kaya akan pustaka kelas mendukung pencapaian requirement
6.3.1 dan 6.3.2. SuperWaba yang open-source serta J2SE yang dapat didownload
secara gratis tidak bertentangan dengan batasan 6.3.7.
6.4.2 Rancangan umum
Rancangan problem domain sistem didasarkan terutama pada RQML. Pada dasarnya,
aplikasi desktop maupun handheld adalah editor untuk dokumen-dokumen RQML.
Aplikasi-aplikasi ini memberikan cara untuk membuat berbagai entry di mana masingmasing
entry merupakan salah satu dari first-class RQML element (subbab 4.3 di
halaman 36). RQML dipilih terutama karena jenis-jenis first-class element yang ada
adalah superset dari jenis-jenis entry dokumen SRS yang terdapat pada requirement
6.2.2. Selain itu karena RQML berdasarkan XML, maka format dokumen SRS yang
dihasilkan oleh Rambutan adalah non-proprietary.
Aplikasi desktop melakukan load/save terhadap data RQML secara langsung (dalam
bentuk file XML). Sedangkan aplikasi handheld menggunakan suatu format data
tersendiri (proprietary) yang dapat dibaca oleh aplikasi desktop dan kemudian
disimpan dalam bentuk XML. Aplikasi desktop juga dapat menyimpan data RQML ke
dalam format yang digunakan oleh aplikasi handheld. Bentukan proprietary dari data
di aplikasi handheld dipilih agar memudahkan implementasi aplikasi tersebut serta
12 Konsep sinkronisasi ini umum terdapat pada komputer genggam yang dijual
sebagai PDA dan dilakukan secara periodik oleh penggunanya untuk melakukan backup
data ke desktop. Istilah Palm OS untuk hal ini adalah ‘HotSync’ sedangkan Pocket PC
menamakannya ‘ActiveSync’.
13 Para programmer untuk platform Palm OS mungkin akan lebih memahami kalimat,
“Belum ada conduit yang dibuat untuk HotSync.”
menghemat tempat yang diperlukan untuk menyimpan data di dalam komputer
Sebagai sebuah RQML editor, kedua aplikasi terdiri dari beberapa dialog yang masingmasing
digunakan untuk menyunting sebuah first-class RQML element. Misalkan
untuk elemen stakeholder terdapat editor-nya sendiri yang berbeda dengan editor
untuk elemen project.
Kedua aplikasi ditujukan untuk satu pengguna saja (single-user) dan dapat menangani
lebih dari satu dokumen RQML. Masalah pengumpulan dan analisis requirement
secara kolaboratif belum ditangani pada prototipe ini.
Dokumen-dokumen di aplikasi handheld disimpan di dalam device dan ditransfer ke
komputer desktop pada saat sinkronisasi12. Untuk tahap pertama pengembangan,
aplikasi desktop cukup dapat membaca dan menyimpan data yang dimiliki oleh
aplikasi handheld – namun satu dokumen belum dapat di-edit secara bersamaan di
desktop dan handheld dengan perubahan-perubahannya akan digabungkan pada saat
Pada kedua aplikasi dilakukan pemisahan antara user-interface dan data model.
Aplikasi desktop menggunakan Swing untuk antarmuka pemakainya. Sedangkan
aplikasi handheld tidak mempunyai banyak piliha standar antarmuka pemakai selain
yang telah disediakan oleh SuperWaba. Diharapkan bahwa komponen-komponen data
yang diimplementasikan oleh aplikasi desktop dapat digunakan kembali (re-use) untuk
pengembangan lebih lanjut – seperti misalnya aplikasi untuk server.
6.4.3 Rancangan kelas representasi data
Kelas representasi data dirancang dengan memetakan data model RQML yang
diberikan oleh [Gudg00] hampir secara langsung ke dalam suatu interface inheritance.
14 RDBMS seperti Oracle 9i memberikan fasilitas ini.
Koka-Koli BPR
Remote Pair Programming
Virtual JAD
HelloWorld System
New Details New
HelloWorld System Requirements
req-3 Fonts
ID Name
General Actors Conditions Cour…
Cancel Delete
This describes the most
ordinary use of the “hello
world” system
Traditional Hello World usage
Gambar 6.1 Rancangan layar aplikasi handheld. Dari kiri ke kanan: Document List, Entry List, dan
Edit Entry.
Kemudian interface tree ini diimplementasikan oleh dua data model, masing-masing
untuk aplikasi desktop dan handheld.
Data model pada aplikasi desktop akan dibuat sebagai sekumpulan adapter yang
menggunakan komponen-komponen dari pustaka pengurai XML untuk menyimpan
datanya baik di memory maupun sebagai file dalam disk. Berbagai method call
implementasi dari interface RQML di-forward ke method call untuk XML parser.
Penggunaan pustaka pengurai XML secara eksklusif sebagai back-end memungkinkan
pengembangan lebih lanjut yang menyimpan data RQML bukan di file – misalnya
penyimpanan data XML di dalam sebuah basis data relasional14.
Sedangkan data model pada aplikasi handheld menyimpan datanya sendiri dalam
bentuk instance variables. Ini dilakukan karena berbagai keterbatasan yang ada pada
platform yang digunakan – sebuah XML parser yang fully-featured masih terlalu besar
untuk diterapkan secara efisien di dalam sebuah komputer genggam. Selain itu untuk
mengikuti salah satu filsafat komputer handheld yaitu sebagai satellite viewer untuk
komputer desktop [Palm].
6.4.4 Rancangan antarmuka pemakai
Rancangan antarmuka pemakai dibuat awalnya untuk aplikasi handheld. Sebagai
sebuah superset, rancangan antarmuka pemakai untuk aplikasi desktop akan
mengikuti semangat dari antarmuka aplikasi handheld.
Terdapat tiga jenis layar di aplikasi handheld: sebuah Document List, Entry List dan
akhirnya Edit Entry. Layar Document List memungkinkan pengguna untuk memilih
sebuah dokumen SRS yang akan di-edit. Layar Entry List berguna untuk memilih
[Document List]
[Edit Entry]
Select Document [Entry List]
Select Entry
New Entry
Delete Entry
Confirm Edit
Cancel Edit
Close Document
[Confirm Delete]
(Remove Entry)
Gambar 6.2 State diagram rancangan antarmuka pemakai aplikasi handheld.
sebuah elemen RQML first-class untuk disunting. Sedangkan layar Edit Entry
digunakan untuk mengubah sebuah elemen RQML first-class. Pada layar Entry List,
pengguna dapat memilih jenis dari elemen-elemen RQML first-class yang ditampilkan.
Gambar 6.2 menampilkan state diagram untuk berbagai tampilan pada aplikasi
handheld. Status-status Document List, Entry List, dan Edit Entry bersesuaian dengan
layar-layar yang dilukiskan sebelumnya. Karena status Confirm Delete hanyalah
sebuah dialog box pertanyaan sederhana, maka ilustrasi tampilannya tidak diberikan.
Pada awalnya program menampilkan layar Document List. Di layar ini, pengguna
dapat memilih salah satu dokumen yang akan di-edit ataupun membuat dokumen
baru (status tidak ditampilkan). Kedua pilihan akan membawa pengguna pada layar
Entry List yang menampilkan daftar berbagai entry yang terdapat di dalam dokumen.
Di dalam layar ini, pengguna dapat membuat entry baru maupun menyunting entry
yang telah ada. Kedua pilihan akan menampilkan layar Edit Entry yang berguna
untuk mengubah entry yang telah dipilih. Pada layar ini, operasi editing dapat
kemudian disimpan ataupun untuk menghapus entry yang sedang aktif. Setelah
selesai melakukan editing, pengguna akan dikembalikan ke layar Entry List. Dari layar
Entry List, pengguna dapat menutup dokumen yang sedang aktif untuk melakukan
editing terhadap dokumen SRS lainnya.
Bab 7
Bab ini akan membahas rincian-rincian implementasi dari program yang telah dihasilkan.
Sebelumnya didahului oleh uraian singkat mengenai berbagai teknologi yang
digunakan dalam pembuatan program, pembahasan dimulai pada tinjauan luas
arsitektur masing-masing aplikasi. Kemudian dilanjutkan pada cara yang telah ditempuh
untuk mengekspresikan data RQML – yang didefinisikan dengan sebuah XML
DTD – ke dalam bentuk object-oriented. Dari sini pembahasan diteruskan ke
antarmuka pemakai berikut beberapa contoh screenshot kedua aplikasi. Setelah itu
akan dibahas beberapa komponen yang dominan secara arsitektural berikut design
patterns yang digunakannya. Pembahasan pada bab ini ditutup dengan memberikan
hitungan source code metric pada Rambutan.
7.1 Teknologi yang Digunakan
Aplikasi handheld diterapkan untuk platform SuperWaba, sedangkan aplikasi desktop
diprogram untuk Java 2 Standard Edition (J2SE). Untuk implementasi GUI pada
aplikasi desktop digunakan Swing, suatu pustaka dan framework alternatif dari J2SE
di samping Abstract Windowing Toolkit (AWT). Pengurai (parser) XML yang digunakan
adalah Apache Xerces. Sedangkan build tool yang digunakan untuk meng-compile
program serta membuat paket-paket distribusi adalah Apache Ant. Dokumentasi
source code dibuat menggunakan Doxygen.
7.1.1 Java
Java adalah suatu bahasa pemrograman berorientasi obyek yang dibuat oleh Sun
Microsystems. Tidak seperti bahasa pemrograman pada umumnya, program-program
Java di-compile ke dalam bentuk bytecode, yaitu sebuah bahasa mesin untuk prosesor
abstrak. Sebuah perangkat lunak yang dinamakan Java Virtual Machine (JVM)
mengimplementasikan mesin abstrak ini secara software. Sebagai platform, Java juga
mendefinisikan sekelompok API untuk digunakan oleh program-programnya. Karena
di-compile menjadi bahasa mesin abstrak serta adanya standarisasi API membuat
Java menjadi bahasa pemrograman yang multi-platform.
Sun juga menyediakan beberapa implementasi JVM berikut API-nya untuk berbagai
sistem operasi yang dapat di-download secara gratis. Software ini secara resmi disebut
Java Software Development Kit, dan secara tradisional disebut sebagai JDK.
Beberapa vendor independen juga menyediakan berbagai implementasi JDK lainnya
sebagai alternatif dari yang disediakan oleh Sun.
Sampai saat ini, platform Java yang ditetapkan Sun dinamakan Java 2. Platform ini
dibagi dalam tiga edisi [Sun02a]:
• Java 2 Standard Edition (J2SE) – ditujukan untuk pengembangan aplikasi bagi
komputer-komputer client maupun personal computer.
• Java 2 Enterprise Edition (J2EE) – ditujukan bagi komputer-komputer server
untuk pengembangan enterprise applications.
• Java 2 Micro Edition (J2ME) – ditujukan untuk consumer electronic devices
seperti telepon genggam, smart card, pager, dan set-top box.
7.1.2 SuperWaba
SuperWaba ( merupakan salah satu implementasi
alternatif Java yang ditujukan untuk komputer genggam (handheld) berbasis Palm OS
dan Pocket PC. Dikembangkan oleh Guilherme Campos Hazan, SuperWaba
merupakan pengembangan lanjutan dari Waba 1.0g [Fari03]. Penggunaan SuperWaba
diatur oleh lisensi open-source LGPL dan dapat di-download secara gratis.
Waba merupakan sebuah implementasi Java Virtual Machine (JVM) yang ditujukan
untuk komputer-komputer dengan arsitektur yang sangat terbatas. Dikembangkan
oleh Rick Wild pada tahun 1999, Waba ditargetkan sebagai subset yang hanya mendukung
sebagian dari language features yang dimiliki oleh Java. Tidak semua bytecode
yang didukung oleh JVM juga didukung oleh Waba VM. Walaupun merupakan
implementasi JVM, namun standar API yang digunakan berbeda jauh dengan yang
digariskan oleh pencipta Java, Sun Microsystems. Perbedaan-perbedaan ini memungkinkan
Waba menjadi jauh lebih ramping dibandingkan Java sehingga dapat
diterapkan di komputer handheld (yang pada masa itu lebih terbatas dibandingkan
1995 1997 2001
1999 2003
Gambar 7.1 Evolusi bahasa pemrograman Java untuk komputer genggam
[Dick02] [Fari03] [Haza03] [Sun00b] [Wild99].
Salah satu keuntungan utama dari menggunakan Waba adalah penggunaan tools Java
untuk pengembangan program. Learning curve untuk para developer Java relatif
landai karena bahasa pemrograman yang digunakan benar-benar subset dari Java.
Walaupun API yang digunakan berbeda, Waba memberikan suatu compatibility layer
yang menjadi perantara antara Waba API dengan Java API sehingga program-program
Waba dapat dijalankan di komputer desktop dengan menggunakan Java 1.1.
Kesemua ini terjadi ketika standar Java 2 Micro Edition (J2ME) masih dalam proses
tinggal landas [Sun00b] – juga pada waktu itu masih sedikit development tools yang
cukup viable untuk cross-platform handheld programming. Salah satu yang ada untuk
kegunaan tersebut, MobileBuilder (, sangat mahal dengan
harga lisensi $1595 per developer seat [Adib02]. Dengan Waba didistribusikan secara
gratis dalam lisensi LGPL membuatnya menjadi platform yang sangat menarik.
Implementasi Waba 1.0 mendukung banyak sekali platform seperti Palm OS,
Windows CE, Newton, TI (kalkulator scientific), dan DOS [Adib02]. Namun sayangnya
kemampuannya sangat terbatas – seperti sedikitnya user-interface controls, tidak mendukung
warna, dan tidak mendukung exception. Selain itu nampaknya Rick Wild berhenti
meneruskan pengembangan Waba pada tahun 2000 [Haza03].
15 Sebagai perbandingan, J2ME MIDP tidak mendukung floating-point.
Perkembangan selanjutnya dari Waba adalah SuperWaba dan WabaJump. WabaJump
dikembangkan di yang merupakan penggabungan dari
Waba dan Jump. WabaJump memungkinkan untuk menulis program-program Jump
dengan API dari Waba. Namun perkembangan proyek ini sejak tahun 2001
nampaknya tidak banyak yang tercermin dari rendahnya aktivitas di website-nya.
Dikembangkan secara estafet oleh Greg Hewgill, Ralf Kleberhoff, dan terakhir Peter
Dickerson, Jump ( merupakan salah satu effort untuk
menghasilkan development tools berbasis Java bagi Palm OS [Dick02]. Dengan Jump,
program dalam bahasa Java di-compile ke native code prosesor keluarga Motorolla
DragonBall yang menjadi prosesor handheld berbasis Palm OS 2.0 – 4.1 (Palm OS 5
menggunakan prosesor jenis lain [Palm02]). API yang digunakan oleh Jump bukanlah
API standar Java, namun API Palm OS yang di-wrap ke bahasa Java.
Pembuat SuperWaba mengklaim bahwa SuperWaba adalah extension dari Waba. Namun
pada kenyataannya, untuk menjalankan program-program Waba di SuperWaba
terkadang diperlukan modifikasi pada source code program tersebut – tidak hanya dicompile
ulang [Haza03]. Walaupun modifikasi ini relatif kecil dan tidak perlu
dilakukan untuk beberapa program, namun keberadaan inkompatibilitas ini berarti
bahwa SuperWaba bukanlah murni superset dari Waba.
Platform yang didukung SuperWaba juga lebih terbatas dibandingkan dengan Waba.
Sampai pada versi 3.51, program-program SuperWaba hanya dapat dijalankan di
Windows CE (HPC 2.11 dan PPC 2.11, untuk prosesor ARM, MIPS, maupun SH3),
Pocket PC (ARM, MIPS, SH3), Palm OS (2.0–4.1 dan 5) serta JVM (minimal Java 1.1).
Namun fasilitas pemrograman yang diberikan oleh SuperWaba jauh lebih banyak
ketimbang Waba pendahulunya. Dukungan layar warna, kaya akan user-interface
controls, dukungan exception, pemrosesan bilangan floating-point15, komunikasi via
TCP/IP network, serial port, infrared maupun bluetooth, serta adanya dukungan untuk
cooperative thread (tidak preemptive seperti thread pada umumnya) ada pada
Performa (kecepatan) yang diberikan oleh SuperWaba juga jauh di atas Waba pada
device yang sama [Haza03]. Bahkan kecepatan SuperWaba lebih dari dua kalinya Sun
MIDP (salah satu sub-platform dari J2ME) ketika keduanya diujikan pada Sony Clie􀀖
PEG-770C (33Mhz DragonBall) [Duve02].
7.1.3 Apache Xerces
Xerces merupakan pustaka pengurai (parser) XML yang dikembangkan di bawah
naungan Apache Software Foundation (ASF). Separti perangkat lunak ASF lainnya,
Xerces disebarluaskan secara open-source dengan lisensi Apache Software License. Ada
dua versi dari implementasi Xerces, masing-masing untuk C++ dan Java.
Sampai pada versi 2.4.0, fitur-fitur yang ditawarkan oleh Xerces adalah:
• eXtensible Markup Language (XML) 1.0 Second Edition Recommendation
• Namespaces in XML Recommendation
• Document Object Model (DOM) Level 2 Core, Events, and Traversal and Range
• Simple API for XML (SAX) 2.0 Core, and Extension
• Java APIs for XML Processing (JAXP) 1.2
• XML Schema 1.0 Structures and Datatypes Recommendations
Pembahasan mengenai pengurai XML telah diberikan pada subbab 3.6 (halaman 27).
Informasi lengkap mengenai Xerces bisa didapatkan di
7.1.4 Apache Ant
Apache Ant adalah suatu build tool seperti make, namun tanpa kekurangankekurangannya.
Ant memecahkan masalah tab yang sering terjadi pada para
pengguna make. Diimplementasikan untuk Java 1.1 (untuk Ant versi 1.x), maka Ant
menjadi suatu alat yang cross-platform untuk melakukan build pada program-program
Awalnya Ant merupakan bagian dari Jakarta Tomcat, suatu web server serta JSP
container yang dibuat sebagai bagian dari Jakarta Project di bawah naungan Apache
Software Foundation (ASF). Pada waktu itu, Ant hanya digunakan untuk melakukan
build pada source code Tomcat. Seiring dengan perjalanan waktu, ternyata Ant dapat
berguna untuk proyek-proyek Jakarta lainnya. Maka pada 19 Juli 2000, versi 1.1 dari
Ant menjadi suatu proyek yang berdiri sendiri [Apac02a].
Seperti layaknya produk ASF lainnya, Ant merupakan perangkat lunak open-source
yang disebarluaskan dengan lisensi Apache Software License. Berbeda dengan lisensi
open-source GNU General Public License (GPL), produk ASF dapat dikembangkan
menjadi software komersial yang tidak open-source.
Visi dari Ant adalah simplicity, understandability, dan extensibility. Simplicity berarti
Ant haruslah mudah digunakan oleh seorang programmer yang kompeten.
Understandability berarti mudah bagi seorang programmer yang sama sekali baru
untuk mempelajari dan kemudian menggunakan Ant. Extensibility berarti Ant
haruslah mudah untuk dikembangkan dengan cara menambahkan berbagai kelas
Java kepadanya [Apac00a].
Menurut pembuat awalnya, James Duncan Davidson, Ant adalah sebuah akronim dari
Another Neat Tool. Selanjutnya nama Ant lebih diasosiasikan dengan semut yang
merupakan pekerja keras dan dapat mengangkat beban yang lebih daripada berat
tubuhnya sendiri [Apac02a].
Karena extensible, kegunaan awal Ant sebagai build tool telah terlampaui dengan
banyaknya fasilitas yang diberikan. Selain untuk meng-compile file-file Java, Ant juga
dapat melakukan packaging, deployment, javadoc, operasi-operasi CVS, automated
testing; bahkan ftp, telnet, dan e-mail. Ant juga dapat digunakan sebagai build tool
untuk lingkungan pemrograman lainnya, seperti misalnya platform .NET dari
Unit kerja Ant adalah satu project, yang dimuat di dalam satu file XML. Biasanya
dinamakan build.xml, file project ini memuat beberapa target dan property set.
Pada setiap target ada serangkaian terurut task yang merupakan perintah-perintah
yang perlu dijalankan untuk melakukan build pada target tersebut. Di antara target
dimungkinkan adanya dependency yang menyatakan bahwa suatu target tertentu
membutuhkan target-target lain untuk di-build terlebih dahulu. Sedangkan property
set merupakan serangkaian konstanta yang mengendalikan proses build. Keterangan
lengkap untuk menggunakan Ant dapat ditemukan di website
7.1.5 Doxygen
Doxygen ( adalah sebuah alat bantu untuk membuat
dokumentasi source code. Dokumentasi dibuat sebagai comment bertanda khusus
yang diletakkan persis sebelum class, method, function, ataupun variables untuk
memberikan keterangan mengenai bagian kode yang bersangkutan. Doxygen akan
memproses source code ini dan kemudian mengambil comment-comment khusus
tersebut untuk diformat dan dijadikan sebuah dokumentasi tersendiri.
Dibuat oleh Dimitri Van Heesch, Doxygen awalnya ditujukan untuk memproses source
code C++ untuk proyek-proyek pribadi yang ditulis menggunakan pustaka Qt. Kini
source code yang dapat diproses oleh Doxygen juga meliputi Java, PHP, C#, dan juga
Kelebihan-kelebihan Doxygen antara lain:
• Mampu membuat dokumentasi dalam berbagai format: HTML, RTF, LaTeX, man
page, XML, dan bahkan Compiled HTML (alias Windows 98 help).
• Kompatibel dengan JavaDoc 1.1, Qt-Doc dan KDOC.
• Dapat membuat class diagram dan collaboration diagram secara automatis.
• Dapat membuat tampilan source code secara hypertext, lengkap dengan syntax
Doxygen diimplementasikan dalam bahasa C++ dengan pustaka Qt sehingga dapat
digunakan di platform Unix dan Windows. Selain itu Doxygen juga disebarluaskan
dengan lisensi GNU GPL dan dapat di-download secara gratis.
7.2 Arsitektur
Rambutan terdiri dari dua aplikasi: sebuah aplikasi desktop dan aplikasi handheld.
Aplikasi desktop diprogram untuk API Java 2 Standard Edition (J2SE) sedangkan
aplikasi handheld diprogram untuk API SuperWaba. Kedua aplikasi ditulis dalam
bahasa pemrograman Java. Penggunaan bahasa pemrograman yang sama memungkinkan
kedua aplikasi untuk menggunakan beberapa komponen yang sama.
Swing GUI SuperWaba GUI
J2SE API SuperWaba API
desktop application handheld application
RQML Abstraction
Gambar 7.2 Selayang pandang arsitektur kedua aplikasi
Secara umum aplikasi desktop maupun handheld masing-masing terbagi dalam dua
lapisan utama: lapisan antarmuka pemakai dan lapisan model data. Lapisan
antarmuka pemakai bertanggungjawab atas tampilan grafis serta interaksi dengan
pengguna. Sedangkan lapisan model data mengatur data requirement yang diproses
oleh masing-masing aplikasi.
Kedua aplikasi ini menggunakan satu komponen yang sama, yaitu RQML Abstraction.
Komponen ini adalah serangkaian interface yang berfungsi untuk mendefinisikan
abstraksi data RQML. Pada gilirannya, kumpulan antarmuka ini diimplementasikan
oleh kelas-kelas data model pada masing-masing aplikasi desktop maupun handheld.
Akses terhadap penerapan RQML di kedua aplikasi dilakukan sebanyak mungkin
melalui abstraksi RQML ini. Dengan adanya komponen bersama ini maka konsistensi
representasi data antara aplikasi desktop dan aplikasi handheld akan lebih terjamin
– perubahan interface RQML akan beriak ke kedua data model di desktop maupun
Rambutan terbagi atas empat package utama yang kesemuanya dinaungi dalam
package com.arcle.rmt:
• com.arcle.rmt.j2se – Aplikasi desktop
• com.arcle.rmt.superwaba – Aplikasi handheld
• com.arcle.rmt.rqml – Antarmuka-antarmuka abstraksi RQML
• com.arcle.rmt.xplat – Kelas-kelas multiguna lintas-platform
SuperWaba GUI
SuperWaba API
Handheld Model RQML Abstraction
RQML Implementation
Gambar 7.3 Selayang pandang arsitektur aplikasi handheld
7.2.1 Aplikasi Handheld
Aplikasi handheld sebenarnya terdiri dari tiga lapisan besar: lapisan SuperWaba GUI,
Handheld Model, dan RQML Implementation. Sedangkan RQML Abstraction merupakan
komponen yang digunakan bersama di desktop maupun handheld. Kesemua lapisan
bergantung pada API SuperWaba.
Lapisan SuperWaba GUI merupakan implementasi dari antarmuka pemakai. Kelaskelas
dalam lapisan ini umumnya merupakan turunan dari kelas Window yang dimiliki
oleh SuperWaba. Akses kepada data dilakukan hanya melalui lapisan-lapisan
Handheld Model ataupun RQML Abstraction; kelas-kelas di dalam RQML Implementation
tidak pernah diakses secara langsung oleh kelas-kelas GUI.
Kelas-kelas di dalam lapisan Handheld Model menyediakan layanan pengaturan
elemen-elemen RQML kepada GUI. Sebagian besar operasi yang dilakukan oleh
lapisan ini untuk menangani elemen-elemen RQML hanya bergantung kepada
antarmuka-antarmuka yang ditetapkan oleh komponen RQML Abstraction. Salah satu
perkecualian utama adalah pada saat pembuatan obyek dari elemen-elemen RQML (di
mana lapisan ini bertindak sebagai abstract factory kepada penggunanya).
Karena kelas-kelas di dalam RQML Abstraction semuanya adalah interface yang
abstrak, agar berguna mereka harus dibuat penerapannya. Lapisan RQML Implementation
menerapkan antarmuka-antarmuka ini untuk digunakan di dalam aplikasi
handheld. Karena lapisan ini terlindung dari GUI oleh lapisan Handheld Model
maupun RQML Abstraction, perubahan implementasi padanya tidak akan mempengaruhi
lapisan GUI.
Aplikasi handheld terletak di dalam package com.arcle.rmt.superwaba, dan diatur
dalam beberapa sub-package berikut:
Swing GUI
Desktop Model
Xerces Implementation
RQML Abstraction
Element Adapters
Gambar 7.4 Selayang pandang arsitektur aplikasi desktop
Kelas-kelas antarmuka pemakai
• com.arcle.rmt.superwaba.model
Kelas-kelas data model serta penerapan RQML.
• com.arcle.rmt.superwaba.ui
Kelas-kelas antarmuka pemakai multiguna
• com.arcle.rmt.superwaba.util
Kelas-kelas multiguna
• com.arcle.rmt.superwaba.framework
Antarmuka-antarmuka untuk framework MVC
7.2.2 Aplikasi Desktop
Aplikasi desktop juga terdiri dari tiga lapisan utama: Swing GUI, Desktop Model, dan
RQML Implementation. Lapisan RQML Abstraction adalah komponen yang sama dengan
yang digunakan di aplikasi handheld. Kesemua lapisan bergantung pada API J2SE.
Antarmuka dari aplikasi desktop menggunakan pustaka GUI Swing yang tersedia di
J2SE. Walaupun fungsi-fungsinya serupa dengan aplikasi handheld, GUI pada
aplikasi desktop meraup keuntungan layar yang lebih besar serta kemampuan
antarmuka pemakai yang lebih kaya yang umum terdapat di sebuah komputer
desktop. Akses terhadap data juga dilakukan hanya melalui kelas-kelas model dan
RQML Abstraction.
Karena sebuah komputer desktop menawarkan kemampuan pemrosesan yang lebih
besar serta antarmuka pemakai yang lebih kaya, data model di desktop mempunyai
lebih banyak fitur untuk mengambil manfaat dari kenyataan ini. Maka dari itu, data
model pada aplikasi desktop mempunyai method signature serta implementasi yang
berbeda dengan data model pada aplikasi handheld. Seperti aplikasi handheld, data
model ini juga bergantung pada antarmuka-antarmuka pada RQML Abstraction untuk
memanipulasi elemen-elemen RQML dan bertindak sebagai kelas factory untuk
membuat obyek implementasinya.
Lapisan RQML Implementation pada aplikasi desktop berbeda dengan rekannya di
handheld. Ketimbang menyimpan datanya sendiri, kelas-kelas ini bergantung pada
obyek-obyek DOM untuk mewakili data RQML di memory. Maka dari itu kelas-kelas
dalam lapisan ini secara kolektif disebut Element Adapters. Karena adapter-adapter
ini berkomunikasi dengan XML parser hanya melalui antarmuka DOM yang
disediakan, sebuah pengurai XML lainnya dapat digunakan asalkan memenuhi
standar DOM.
Aplikasi desktop terdapat dalam package-package ini:
Kelas-kelas antarmuka pemakai.
• com.arcle.rmt.j2se.model
Kelas-kelas data model and element adapter.
• com.arcle.rmt.j2se.swing.ui
Kelas-kelas umum antarmuka pemakai
• com.arcle.rmt.j2se.util
Kelas-kelas multiguna
• com.arcle.rmt.j2se.framework
Antarmuka-antarmuka framework
7.2.3 Komponen Jembatan
SuperWaba to Java Bridge
Bridge Facade
Import Facade Export Facade
First-Class Copy Facade
Element Copiers Exporter
SuperWaba API
RQML Abstraction
Handheld & Desktop Models
Gambar 7.5 Selayang pandang arsitektur komponen bridge
Ilustrasi aplikasi desktop yang ditunjukkan pada Gambar 7.4 hanya menampilkan
sebagian dari arsitekturnya secara keseluruhan. Sebuah komponen jembatan sengaja
disembunyikan agar gambar ini lebih mudah dicerna. Komponen jembatan ini
digunakan oleh aplikasi desktop untuk mengakses data yang dimiliki oleh aplikasi
handheld. Ia menangani pengubahan antara representasi data desktop dengan
Ketika seorang pengguna membuka ataupun menyimpan dokumen handheld
menggunakan aplikasi desktop, antarmuka pemakai dari aplikasi desktop memanggil
komponen Bridge Facade untuk membaca data dalam format handheld dan memuatnya
ke dalam data model desktop serta sebaliknya. Pada gilirannya, facade ini mendelegasikan
permintaan tersebut ke Import Facade atau Export Facade yang sesuai
dengan operasi yang dilakukan. Kedua facade ini kemudian menangani operasi import
ataupun export yang diminta.
Komponen Import Facade menggunakan suatu himpunan kelas First-Class Importer
untuk memuat data dari representasi handheld ke desktop. Setiap kelas pengimpor
ini mengimpor satu jenis elemen RQML First-Class.
Dengan cara yang sama, komponen Export Facade menggunakan suatu himpunan
First-Class Exporter untuk menyimpan data dari desktop ke handheld. Mirip dengan
pengimpor, ada pemetaan satu-satu antara kelas pengekspor dengan tipe elemen
RQML First-Class.
Kedua facade bergantung pada sebuah Copy Facade untuk menyalin data antar
elemen-elemen RQML. Pada gilirannya, facade ini menggunakan sehimpunan kelas
Element Copier untuk menyalin data-data tersebut. Ada pemetaan satu-satu antara
sebuah kelas penyalin dan elemen RQML (untuk elemen first-class maupun secondclass).
Para penyalin ini hanya bergantung pada antarmuka RQML Abstraction –
mereka tidak mengetahui implementasi yang mendasari antarmuka-antarmuka ini.
Maka dari itu para penyalin ini dapat digunakan untuk menerapkan pengimpor dan
pengekspor RQML untuk berbagai implementasi data model lainnya di masa depan.
Baik facade pengimpor maupun pengekspor berinteraksi secara langsung dengan data
model di desktop maupun handheld. Bertindak sebagai client terhadap kedua model,
mereka mengambil serta menyimpan data RQML antara keberadaan-keberadaan dari
kedua model.
Kode program untuk data model aplikasi handheld dijalankan di desktop sehingga data
RQML dalam format handheld dapat dibaca dan dimuat ke dalam data model aplikasi
desktop. Walaupun data model di handheld diprogram untuk SuperWaba API, hal ini
dimungkinkan karena adanya lapisan simulasi (SuperWaba to Java Bridge) yang disediakan
oleh SuperWaba agar program-programnya dapat dijalankan di Java 1.1.
Karena itu tidaklah perlu untuk menduplikasikan logika program dari aplikasi
handheld untuk membaca datanya.
Komponen jembatan ini terletak di dalam package com.arcle.rmt.j2se.bridge dan
dibagi lagi menjadi beberapa sub-package berikut:
• com.arcle.rmt.j2se.bridge.copy
Kelas-kelas penyalin beserta facade-nya
• com.arcle.rmt.j2se.bridge.swimport
Kelas-kelas pengimpor untuk memuat data dari aplikasi handheld.
• com.arcle.rmt.j2se.bridge.swexport
Kelas-kelas pengekspor untuk menyimpan data ke dalam format handheld.
7.3 Pemetaan dari RQML ke class
Pemetaan data model RQML ke kelas dilakukan dengan cara mengubah hirarki data
model pada Gambar 4.2 (halaman 39) menjadi hirarki interface. Untuk setiap
16 Berhubung proyek ini tidak bertujuan untuk memvalidasi [Gudg00], kemungkinan
masih ada lagi ketidakselarasan yang ada selain yang sudah ditemukan.
17 Bahkan satu-satunya software requirements management berbasis RQML lainnya
yang diketahui adalah [Dhar02].
elemen RQML dibuatkan satu interface yang mewakilinya, baik bagi elemen first-class
maupun second-class – termasuk berbagai sub-elemen dari elemen-elemen first-class.
Dalam proses pembuatan hirarki interface RQML dilakukan refactoring. Bila ada dua
elemen yang mempunyai sekelompok attribut yang sama, maka dibuat satu
superinterface dari kedua interface yang mewakili elemen-elemen tersebut. Superinterface
ini memuat common attributes yang dimiliki oleh kedua elemen. Proses ini
juga dilakukan untuk kasus umum di mana ada lebih dari dua elemen yang mempunyai
attribut yang sama: untuk elemen-elemen yang mempunyai sekelompok attribut
yang sama dibuat satu atau lebih superinterface untuk interface-interface yang
mewakili elemen-elemen itu.
Dalam rangka menyederhanakan hirarki interface serta kelas-kelas yang akan mengimplementasinya,
suatu elemen yang dapat mempunyai lebih dari satu instance dari
child element untuk suatu jenis elemen yang sama – yaitu elemen-elemen anakan yang
ditulis dengan suffix ‘*’ atau ‘+’ dalam DTD [Marc99], maka interface yang mewakilinya
hanya mendukung satu instance dari child element tersebut. Ada tiga hal yang
memotivasi penyederhanaan ini:
• Ditemukan beberapa ketidakkonsistenan pada spesifikasi RQML dalam
[Gudg00]16 yang menandakan bahwa (spesifikasi) RQML masih belum stabil.
• RQML belum menjadi bakuan yang disahkan oleh suatu badan independen
(seperti misalnya ISO, IETF atau W3C) sehingga tidak perlu 100% compliant
dengan spesifikasi RQML untuk interoperabilitas dengan alat bantu berbasis
RQML lainnya17.
• Kesulitan teknis dalam pengimplementasian antarmuka pemakai yang efisien
pada aplikasi handheld untuk mendukung multiple child elements ini.
Berikut ini adalah penggalan DTD untuk elemen , ditulis kembali dari

Elemen ini dipetakan menjadi beberapa interface yaitu RQMLSecondClass, RQMLFirst-
Class, dan Requirement:
public interface RQMLSecondClass {
public abstract java.lang.String getURI();
public abstract void setURI(java.lang.String URI);
public abstract java.lang.String getID();
public abstract void setID(java.lang.String ID);
Attribut-attribut priority, difficulty, status, dan stability semuanya adalah jenis
enumerasi di mana satu nilai dapat dipilih dari sekumpulan pilihan nilai yang
terbatas. Attribut-attribut ini dipetakan menjadi tipe data int di mana nilai dari tipe
enumerasinya dispesifikasikan dengan menggunakan konstanta-konstanta. Misalkan
untuk memberikan attribut status nilai approved digunakan konstanta
public interface RQMLFirstClass extends RQMLSecondClass {
public static final int PRIORITY_LOW = -1;
public static final int PRIORITY_NORMAL = 0;
public static final int PRIORITY_HIGH = 1;
public static final int DIFFICULTY_LOW = -1;
public static final int DIFFICULTY_NORMAL = 0;
public static final int DIFFICULTY_HIGH = 1;
public static final int STATUS_PROPOSED = 0;
public static final int STATUS_APPROVED = 1;
public static final int STATUS_INCORPORATED = 2;
public static final int STATUS_VALIDATED = 3;
public static final int STABILITY_LOW = -1;
public static final int STABILITY_NORMAL = 0;
public static final int STABILITY_HIGH = 1;
public abstract Name getName();
public abstract int getPriority();
public abstract int getDifficulty();
public abstract int getStatus();
public abstract int getStability();
public abstract java.lang.String getVersion();
public abstract Description getDescription();
public abstract Rationale getRationale();
public abstract void setName(Name NAME);
public abstract void setDescription(Description DESC);
public abstract void setRationale(Rationale RATIONALE);
18 Sesuai dengan salah satu nasihat dari [Gamm95], “Program to an interface, not to an
public abstract void setPriority(int PRIORITY);
public abstract void setDifficulty(int DIFFICULTY);
public abstract void setStatus(int STATUS);
public abstract void setVersion(java.lang.String VERSION);
public abstract void setStability(int stability);
Karena tag tidak menambah informasi apapun dari superclass-nya,
maka interface yang mewakilinya menjadi kosong (tidak mendefinisikan method
public interface Requirement extends RQMLFirstClass {
Ketidakkonsistenan pada elemen (subbab, di halaman 47) ditanggulangi
dengan menurunkan interface Project dari interface RQMLFirstClass dan
menggunakan property-property berikut sebagai informasi tambahan yang dimiliki oleh
elemen project:
• product
• problem
• scope
• vision
Sedangkan ketidakkonsistenan pada definisi elemen (subbab di
halaman 46) dianggap tidak ada – interface Assumption diturunkan langsung dari
RQMLFirstClass dan tidak mendefinisikan method tambahan apapun.
Dalam implementasinya, ternyata untuk mengakses property-property yang bertipe
obyek hanya method getter (dengan pola menamaan getXxx() pada definisi interface)
yang dipergunakan. Berbagai method setter (dengan pola penamaan setXxx()) hanya
digunakan untuk mengakses property-property dengan tipe sederhana, seperti String
atau int. Karena aplikasi hanya diberi interface dari kelas-kelas elemen RQML18,
maka kesulitan yang ditemui pada penerapan method setter bagi property yang juga
interface RQML adalah bagaimana caranya aplikasi dapat menciptakan obyek baru
untuk di-set ke dalam obyek RQML yang bersangkutan. Salah satu alternatif adalah
dengan memberikan sebuah factory method ataupun factory object bagi application
Document List Element List
Element Edit
Gambar 7.6 Diagram status dari antarmuka aplikasi handheld
code, namun hal ini akan mempersulit keadaan. Maka diputuskan bahwa factory
tetap hanya digunakan oleh obyek-obyek penerapan interface RQML dan obyek untuk
sub-elemen dibuat secara dinamis pada akses pertama dari elemen tersebut dengan
menggunakan method getXxxx(). Modifikasi data pada sub-elemen dilakukan
langsung pada obyek elemen tersebut dengan method setter untuk mengubah property
dengan tipe sederhana pada sub-elemen itu. Dengan kata lain, pengubahan data
dilakukan pada leaf property yang notabene memiliki tipe data sederhana.
7.4 Antarmuka pemakai
7.4.1 Aplikasi Handheld
Ada tiga layar utama di aplikasi handheld. Mereka adalah Document List, Element List,
dan Element Edit. Karena melingkupi seluruh daerah tampilan layar pada komputer
genggam, maka hanya salah satu dari layar-layar ini yang ditampilkan pada suatu
saat tertentu.
Aplikasi handheld dimulai pada tampilan Document List yang menampilkan daftar dokumen
requirement yang ada di dalam komputer genggam. Ketukan pada sebuah
nama dokumen akan membuka dokumen tersebut. Juga terdapat sebuah tombol
perintah New pada bagian bawah layar yang digunakan untuk membuat suatu dokumen
baru. Ketika pengguna mengetuk tombol ini, sebuah kotak dialog akan
ditampilkan yang menanyakan nama dari dokumen yang akan dibuat. Setelah si
pengguna memberikan sebuah nama, dokumen baru ini akan diciptakan kemudian
dibuka – seolah-olah dokumen itu telah ada sebelumnya dan sang pengguna
mengetuk namanya.
Membuka sebuah dokumen akan menampilkan layar Element List serta menampilkan
nama dokumen tersebut pada title-area di bagian atas layar. Sebenarnya layar ini
terdiri dari suatu himpunan tampilan di mana masing-masing menampilkan daftar
elemen-elemen RQML first-class dengan tipe-tipe tertentu. Masing-masing daftar
elemen ini menampilkan attribut-attribut RQML ID dan Name. Perpindahan antara
tipe elemen first-class dilakukan melalui sebuah combo box pada bagian kanan-atas
layar. Ketukan pada title-area akan menampilkan sebuah pull-down menu di mana
pengguna dapat menciptakan sebuah elemen RQML first-class baru dengan tipe yang
diinginkan. Sedangkan ketukan pada nama sebuah elemen first-class akan
menyunting elemen tersebut.
Tiga tombol perintah disediakan pada bagian bawah layar Element List:
• New – untuk menciptakan sebuah elemen first-class baru dengan tipe yang sama
dengan yang ditampikan pada saat itu.
• Close – untuk menutup dokumen yang sedang ditampilkan dan kembali ke layar
Document List.
• Delete – untuk menghapus dokumen yang sedang ditampilkan dan kembali ke
layar Document List.
Pengaturan antarmuka pemakai ini meniru gaya dari beberapa aplikasi yang disertakan
oleh Palm OS. Aplikasi-aplikasi Address Book, To Do List, Memo Pad, dan Mail
semuanya memiliki sebuah combo box pengubah kategori pada bagian kanan atas dan
suatu baris tombol perintah pada bagian bawah layar.
Ketika sang pengguna membuat sebuah elemen baru atau membuka elemen yang
telah ada, maka sebuah layar Element Edit akan ditampilkan. Layar ini juga merupakan
suatu himpunan layar di mana masing-masing layar digunakan untuk menyunting
suatu kelompok tertentu dari attribut-attribut yang dimiliki oleh sebuah elemen
RQML first-class. Combo box pengubah kategori digunakan untuk berpindah antara
pandangan-pandangan dari elemen first-class yang sama yang sedang di-edit. Daerah
judul dari layar-layar ini menampilkan tipe dari elemen yang sedang aktif.
Gambar 7.7 Layar Document
Gambar 7.8 Salah satu layar
Element List; yang ini
menampilkan daftar elemen
dengan tipe Use-case.
Gambar 7.9 Salah satu layar
Element Edit; yang ini
menampilkan sebagian dari
attribut-attribut sebuah
7.4.2 Aplikasi Desktop
Susunan antarmuka aplikasi desktop terutama terinspirasi oleh tampilan Rational
RequisitePro. Pada dasarnya tampilan adalah sebuah jendela Multiple Document
Interface (MDI) dengan sebuah tree view yang diletakkan di bagian kiri. Daerah desktop
digunakan untuk penampilkan jendela-jendela editor elemen first-class.
Active document
file name File modified flag
Document Tree
First-Class Element Type
Active Element
First-Class Element
Active Element
Desktop Area
Status Bar
Gambar 7.10 Selayang pandang tampilan aplikasi desktop
Tampilan Document Tree pada bagian kiri dari jendela menampilkan jenis-jenis
elemen first class sebagai folder di dalam tree. Klik ganda pada sebuah folder ini akan
membuat sebuah elemen first-class dengan tipe dari node tersebut. Elemen-elemen
baru juga dapat diciptakan melalui menu Requirement.
Kotak Active Element Description yang terletak persis di bawah Document Tree menampilkan
attribut description dari elemen di dalam pohon yang sedang disorot. Kotak
ini berfungsi untuk memberikan pandangan sekilas ketika pengguna sedang melihatlihat
berbagai elemen first-class yang ada di dalam dokumen – sehingga atribut ini
dapat dilihat tanpa perlu meng-edit elemen yang bersangkutan.
Bagian Desktop Area digunakan untuk menampung jendela-jendela penyunting
elemen first-class. Meraup keuntungan dari antarmuka pemakai yang lebih kaya di
komputer desktop, daerah ini mampu menampilkan lebih dari satu jendela editor.
Gambar 7.11 Contoh tampilan yang menampilkan jendela penyunting elemen first-class.
Status Bar adalah suatu daerah di bagian bawah jendela yang menampilkan informasi
status. Daerah ini disiapkan untuk pengembangan selanjutnya; pada saat ini tidak
Jendela-jendela penyunting elemen first-class semuanya adalah internal frame yang diletakkan
di Desktop Area. Seperti yang terdapat pada aplikasi handheld, setiap jendela
editor mempunyai beberapa sub-bagian di mana masing-masing mempunyai
himpunan komponennya sendiri untuk menyunting bagian-bagian dari elemen firstclass
yang bersangkutan. Pada aplikasi desktop, sub-bagian ini ditaruh di dalam
sebuah tabbed pane di dalam bingkai penyunting. Ada dua tombol perintah yang terletak
pada baris bawah dari masing-masing jendela penyunting:
• Close – menutup jendela penyunting dan memasukkan perubahan-perubahan
yang dilakukan.
• Delete – menghapus elemen yang sedang di-edit dari dokumen dan kemudian
menutup jendela penyuntingnya.
7.5 Penerapan Design Patterns
Usecase Project
UsecaseImpl ProjectImpl
Gambar 7.12 Antarmuka serta implementasi data model RQML.
7.5.1 Representasi data RQML
Sebagaimana telah digariskan di subbab 7.2, data model RQML didefinisikan oleh sebuah
hirarki interface. Kumpulan antarmuka ini kemudian diimplementasikan oleh
kelas-kelas representasi data pada aplikasi desktop maupun handheld. Untuk masingmasing
kelas antarmuka RQML terdapat satu kelas penerapannya sendiri, sehingga
terjadi korespondensi satu-satu antara kelas-kelas interface RQML dengan kelas-kelas
Nampak pada Gambar 7.12, hirarki paralel ini merupakan suatu penerapan dari
bridge pattern. Berbeda dengan pola rancangan bridge yang termuat di [Gamm95],
penjembatanan antar hirarki kelas tidak dilakukan dengan cara composition maupun
acquaintance oleh root class dari salah satu hirarki. Penghubungan kedua hirarki
dicapai oleh salah satu hirarki yang menjadi kelas-kelas implementasi dari hirarki
yang lain, dengan hirarki yang kedua ini murni terdiri dari interface.
Data model aplikasi desktop terletak dalam package com.arcle.rmt.j2se.model.
domimpl.rqml. Sedangkan data model aplikasi handheld terletak di com.arcle.rmt.
superwaba.model.imp.rqml. Dalam hubungannya dengan himpunan antarmuka
RQML pada package com.arcle.rmt.rqml, bentuk hirarki data model aplikasi desktop
dengan rekannya di handheld tidaklah berbeda.
ElementAdapter Node
com.arcle.rmt.rqml org.w3c.dom
Gambar 7.13 Adapter pattern pada kelas representasi data untuk aplikasi desktop
7.5.2 Data model aplikasi desktop
Kelas-kelas data model pada aplikasi desktop tidak menyimpan datanya sendiri, namun
penyimpanan data RQML didelegasikan kepada obyek-obyek DOM yang dimiliki
oleh XML Parser. Obyek-obyek ini adalah instance dari interface Element (di dalam
package org.w3c.dom ). Karena itu maka penerapan RQML di desktop adalah kelaskelas
adapter untuk antarmuka ini.
Penerapan adapter pattern [Gamm95] dilakukan oleh kelas akar dari data model
aplikasi desktop yaitu ElementAdapter. Kelas ini memiliki sebuah obyek DOM Element
yang diadaptasikannya. Instance obyek DOM ini digunakan oleh kelas-kelas turunan
untuk menyimpan data RQML. Masing-masing derived class mengadaptasikan suatu
tipe elemen RQML tertentu sesuai dengan antarmuka RQML yang diterapkannya.
Selain itu ElementAdapter memuat beberapa method pembantu untuk digunakan oleh
Pada gilirannya, kelas ElementAdapter ini menjadi base class dari RQMLSecondClass-
Impl, yaitu penerapan dari root interface RQMLSecondClass untuk aplikasi desktop.
Pararel dengan hirarki antarmuka RQML, semua penerapan elemen RQML adalah
turunan dari kelas ini.
Sebagai bagian dari document tree, sebuah elemen XML dapat mempunyai satu atau
lebih elemen-elemen anakan. Demikian pula dengan elemen RQML yang juga
mempunyai child elements. Kelas Element menyediakan suatu mekanisme akses
terhadap elemen-elemen anakannya. Umumnya child nodes ini juga merupakan
instance dari kelas Element. Penerapan composite pattern ini dibawa dari konsep
dokumen XML.
242 protected RQMLSecondClass getFirstChild(String name, boolean forceCreate) {
243 NodeList children = getElement().getChildNodes();
244 for (int i=0; i<children.getLength(); i++) {
245 Node child = children.item(i);
246 if (child instanceof Element && name.equals(child.getNodeName())) {
247 return getFactory().createRQMLSecondClass((Element) child);
248 }
249 }
250 // child not found
251 if (forceCreate) {
252 return createChild(name);
253 }
254 return null;
255 }
Gambar 7.14 File, baris 242 – 255
Agar extensible, aplikasi haruslah diabstraksikan dari implementasi data model yang
menggunakan DOM. Akses terhadap data RQML haruslah melalui hirarki antarmuka
RQML yang didefinisikan di package com.arcle.rmt.rqml. Sehingga apabila penerapan
representasi data berubah, lapisan-lapisan aplikasi yang lebih tinggi tidak terkena riak
dari perubahan ini.
Namun sebagai adapter, turunan-turunan dari ElementAdapter hanya dapat
mengakses instance DOM dari elemen anakan yang dimilikinya; tetapi tidak dapat
mengakses adapter dari child element tersebut. Kesulitan ini menjadi masalah ketika
client code mengakses sebuah child element: obyek yang diberikan kepada aplikasi
haruslah merupakan instance dari RQMLSecondClass, bukan instance dari kelas
Karena itu, untuk setiap child element yang ditemui dibuatlah suatu obyek adapter
baru. Obyek inilah yang diberikan kepada client code. Perilaku ini nampak pada
implementasi method getFirstChild() di kelas ElementAdapter. Method ini digunakan
untuk mendapatkan elemen anakan pertama yang mempunyai nama tertentu.
Apabila child element itu tidak ditemukan maka akan dibuat secara otomatis sehingga
method ini selalu berhasil. Terlihat pada Gambar 7.14 di baris 247 dan 252 bahwa
setiap kali sebuah child element ditemukan maka suatu obyek adapter baru diciptakan
Sayangnya cara ini menimbulkan suatu permasalahan baru. Penciptaan instance
adapter secara on-the-fly ini akan mengakibatkan satu instance dari elemen DOM untuk
mempunyai beberapa instance adapter yang berbeda. Redundancy ini tentulah
akan meningkatkan kebutuhan memory secara signifikan. Belum lagi dengan adanya
hubungan one-to-many antara obyek Element dengan adapter-nya, maka aplikasi tidak
dapat membandingkan kesamaan antara dua elemen hanya dengan membandingkan
instance dari masing-masing adapter-nya.
Masalah ini dipecahkan oleh kelas AdapterCacheFlyweight. Kelas ini bertindak sebagai
abstract factory kepada kelas-kelas adapter elemen DOM dengan menerapkan
interface RQMLSecondClassFactory. Namun pada saat diminta untuk menciptakan
suatu obyek adapter, kelas ini terlebih dahulu memeriksa apakah sebuah adapter
untuk elemen yang bersangkutan telah pernah dibuat sebelumnya. Pemeriksaan dilakukan
terhadap suatu cache yang merupakan pemetaan antara elemen-elemen DOM
dengan adapter-nya masing-masing. Instance adapter yang terdapat di dalam cache
akan diberikan ketimbang menciptakan suatu obyek adapter yang baru.
Letak dari penerapan flyweight pattern adalah pada penggunaan bersama dari setiap
instance adapter. Karena para client dari data model melihat AdapterCacheFlyweight
sebagai sebuah implementasi abstract factory lewat antarmuka RQMLSecondClass-
Factory, maka mereka ‘merasa’ menciptakan obyek-obyek adapter baru dengannya.
Namun pada kenyataannya obyek adapter yang diberikan oleh AdapterCacheFlyweight
lewat method createRQMLSecondClass() yang dideklarasikan oleh RQMLSecondClass-
Factory bukanlah selalu obyek baru.
:RQMLFirstClass :ElementAdapter
getCache ().ge t(elem)
ge tElementFa ctory()
return child adapter
[not exist]
[found in cache]
com.arcle.rmt.rqml com.arcle.rmt.j2se.model.domimpl
Gambar 7.15 Jalannya penciptaan obyek adapter oleh AdapterCacheFlyweight
Contoh proses ini dapat dilihat di Gambar 7.15. Interface RQMLFirstClass mempunyai
suatu child element Description yang diakses lewat method getDescription(). Pada
saat method ini dipanggil, kelas implementasinya akan memanggil method getFirst-
Child() yang diwariskan dari superclass-nya, ElementAdapter. Method getFirst-
Child() kemudian akan menggunakan method createRQMLSecondClass() dari abstract
factory yang telah diberikan kepadanya untuk membuat adapter dari elemen anakan
yang ditemukan. Agar dapat menciptakan adapter, maka method createRQMLSecond-
Class() diberikan obyek Element yang akan diadaptasikan. Sebagai abstract factory
penerap method createRQMLSecondClass(), kelas AdapterCacheFlyweight akan
memeriksa apakah sebuah adapter untuk elemen yang diminta telah ada di dalam
cache untuk kemudian memberikan instance ini. Apabila belum ada maka sebuah
instance adapter baru akan dibuat, ditambahkan ke dalam cache, dan kemudian
diberikan ke pemanggilnya. Untuk operasi pembuatan adapter baru, kelas Adapter-
CacheFlyweight mempunyai sekumpulan instance RQMLSecondClassFactory yang
melakukan operasi instantiation sebenarnya.
Gambar 7.16 Memento pattern pada kelas representasi data untuk aplikasi handheld.
7.5.3 Representasi data aplikasi handheld
Penerapan data model RQML pada aplikasi handheld dilakukan dengan obyek-obyek
biasa. Data RQML disimpan oleh obyek-obyek ini di dalam instance variables. Akses
terhadap data ini dilakukan lewat berbagai method yang dideklarasikan oleh
antarmuka-antarmuka RQML.
Karena tidak menggunakan pustaka pengurai XML, maka penyimpanan data ke
persistent storage di aplikasi handheld dicapai oleh persistent objects dengan penerapan
pola rancangan memento. Masing-masing kelas implementasi RQML bertindak sebagai
originator yang akan menciptakan sebuah obyek memento untuk operasi load/save.
Obyek-obyek memento ini yang akan menyimpan atau memanggil kembali data
instance variables obyek originator-nya dari/ke persistent storage. Dengan ini semua
instance variables – baik yang memiliki accessor method maupun tidak – dapat diakses
secara implisit tanpa melanggar enkapsulasi.
Pada Gambar 7.16 terlihat bahwa penerapan memento pattern [Gamm95] pada data
model handheld juga merupakan suatu variasi dari bridge pattern. Ada hirarki paralel
antara kelas-kelas memento dengan originator-nya. Perbedaan dengan bridge biasa
yaitu kelas-kelas memento ini masing-masing adalah nested class dari kelas originatornya.
Sebagai member, kelas-kelas tersarang ini memiliki akses penuh terhadap
berbagai method maupun instance variable dari kelas yang melingkupinya – bahkan
yang protected atau private sekalipun.
CopierFacade RQMLSecondClass
ChildCopier RQMLFirstClass
Gambar 7.17 Subsistem Element Copiers.
7.5.4 Penyalin data RQML
Seperti telah disebutkan di subbab 7.2.3, ada sekelompok kelas Element Copiers yang
digunakan dalam proses import/export antara implementasi data model aplikasi
desktop dengan handheld. Kelas-kelas penyalin ini digunakan untuk mentransfer data
antara elemen-elemen RQML. Namun proses penyalinan hanya dapat mengandalkan
method-method yang diberikan oleh antarmuka-antarmuka RQML tanpa mengakses
kelas-kelas penerapannya. Batasan ini diberikan agar kelas-kelas penyalin ini dapat
digunakan untuk berbagai penerapan representasi data RQML dan tidak terbatas pada
implementasi kelas-kelas data model yang ada sekarang.
Masing-masing kelas Element Copiers berfungsi untuk menyalin satu jenis elemen
RQML saja – dengan kata lain, kelas penyalin x hanya dapat mengoperasikan obyek
yang mengimplementasikan interface RQML y. Karena suatu kelas penyalin juga harus
memiliki operasi-operasi untuk menyalin semua property dari semua superinterface
daripada interface yang diterimanya, maka kelas-kelas penyalin ini dibuat
dalam suatu hirarki kelas yang paralel dengan hirarki antarmuka RQML.
Banyaknya elemen-elemen RQML mengakibatkan banyaknya pula kelas-kelas
penyalinnya. Hal ini membuat proses penyalinan menjadi lebih sulit. Agar dapat
mentransfer data antara dua obyek RQML perlu didapatkan kelas copier yang sesuai
untuk menyalinnya. Untuk mempermudah penyalinan kelas-kelas implementasi dari
RQMLSecondClass ini maka dibuatlah suatu kelas facade yang akan memilih instance
penyalin yang sesuai dengan tipe RQML yang diberikan.
Penyederhanaan penggunaan subsistem Element Copiers oleh kelas CopierFacade
adalah satu penerapan dari facade pattern. Seperti ditampilkan di Gambar 7.17, kelas
ini memiliki obyek-obyek RQMLSecondClassCopy di mana masing-masing obyek
mempunyai kemampuan untuk menyalin suatu tipe elemen RQML tertentu. Kelas
CopierFacade sendiri juga menerapkan RQMLSecondClassCopy. Pada saat diminta
untuk menyalin satu elemen RQML ke elemen yang lainnya, facade ini akan memeriksa
tipe elemen RQML tersebut kemudian memilih instance kelas penyalin yang
sesuai. Sehingga kelas-kelas yang menggunakan subsistem ini hanya perlu
menggunakan CopierFacade tanpa perlu mengetahui keberadaan masing-masing kelas
penyalin. Selain itu facade ini juga berlaku dua arah: setiap kelas penyalin
menggunakan suatu instance ChildCopier untuk menyalin child elements dari suatu
elemen; yang tidak lain adalah obyek CopierFacade itu sendiri.
Dengan adanya hirarki paralel maka kelas-kelas Element Copiers juga menerapkan
bridge pattern. Namun karena hirarki penyalin ini tidak memiliki reference ke kelaskelas
antamuka RQML dan tidak pula menjadi kelas implementasinya, penjembatanan
yang dilakukan tidak nampak secara struktural. Garis-garis dependency pada
Gambar 7.17 yang menghubungkan suatu kelas penyalin dengan antarmuka RQML
yang dioperasikannya lebih menyatakan hubungan perilaku run-time.
7.5.5 Penerapan MVC di Handheld
Mengikuti paradigma MVC, aplikasi handheld dipecah menjadi tiga kelompok kelas:
Model, View, dan Controller. Kelas-kelas yang termasuk model adalah kelas-kelas yang
mengatur representasi data RQML di dalam device. Sedangkan view adalah kelaskelas
antarmuka pemakai dan controller adalah pengendali yang mengubah keadaankeadaan
dari suatu view.
Pada [Gamm95] disebutkan bahwa hubungan antara model dengan view menerapkan
observer pattern. Apabila data di dalam model berubah, maka masing-masing view
yang menampilkan datanya akan dipanggil agar tampilannya merefleksikan perubahan
data tersebut. Berhubung di dalam aplikasi handheld hanya ada satu view yang
aktif (sedang menampilkan data di layar) dan sebuah komputer genggam umumnya
single-user, pola rancangan observer dinilai tidak banyak berguna di situasi ini –
karena itu tidak diimplementasikan. Setelah melakukan perubahan data maka view
CommandWindow Document
ControllerBase DocumentImpl
com.arcle.rmt.superwaba.framework com.arcle.rmt.superwaba.model
Gambar 7.18 Sebagian hirarki MVC pada aplikasi handheld.
hanya akan me-refresh tampilannya untuk merefleksikan data yang baru diperbaharui.
Pada SuperWaba, komponen-komponen antarmuka pemakai adalah kelas-kelas turunan
(langsung ataupun tidak langsung) dari kelas Control (di dalam package
waba.ui). Input dari pengguna diterima dalam bentuk event yang diterima oleh
method-method tertentu di kelas ini. Kelas-kelas aplikasi harus meng-override berbagai
method ini untuk dapat menangani berbagai event yang ada. Sebuah event bisa
mewakili masukan yang low-level seperti stylus tap dan keystroke, tetapi juga dapat
mewakili input yang bersifat high-level seperti button click ataupun pemilihan sebuah
Misalkan pengguna mengetuk layar dengan stylus. SuperWaba VM akan mendeteksi
kejadian ini kemudian akan membuat sebuah obyek PenEvent yang juga memuat
koordinat layar tempat ketukan ini terjadi. Kemudian method onEvent() dari obyek
Control yang mendapat ketukan akan dipanggil dengan parameter obyek PenEvent
tersebut. Definisi method onEvent() pada kelas Control sendiri tidak melakukan apaapa;
method di-override oleh aplikasi untuk memproses event yang terjadi.
Pada arsitektur MVC yang asli sebagaimana diterapkan pada bahasa pemrograman
SmallTalk [Burb92], sebuah event tidak diberikan kepada view di mana event tersebut
terjadi. Melainkan sebuah obyek lain yang disebut controller akan menjadi penerima
obyek event itu. Obyek controller inilah yang akan melakukan tindakan-tindakan yang
akan mengubah keadaan dari view.
Mengingat perbedaan arsitektur ini, maka di dalam aplikasi handheld, berbagai
method penangan event seperti onEvent() akan memeriksa obyek Event yang diteriBAB
00141 public void onEvent(Event event) {
00142 DocumentWindowController ctrl = getController();
00143 switch(event.type) {
00144 case ControlEvent.PRESSED:
00145 if ( == btnNew) {
00146 doNewElement();
00147 event.consumed = true;
00148 } else if ( == btnClose) {
00149 ctrl.cmdCloseWindow();
00150 } else if ( == btnDelete) {
00151 ctrl.cmdDeleteDocument();
00152 }
00241 protected void doNewElement() {
00242 ElementListController ctrl = ((ElementList)getActivePanel())
00243 .getController();
00244 ctrl.cmdNewElement();
00245 }
Gambar 7.19 File, baris 141 – 152 dan 241 – 245.
manya kemudian mendelegasikan sebagian besar pemrosesan terhadap obyek
controller yang dimilikinya. Kelas-kelas antarmuka pemakai dari aplikasi handheld
adalah turunan tidak langsung dari Control – umumnya turunan dari kelas Container
atau Window (keduanya terletak di waba.ui). Masing-masing kelas antarmuka pemakai
ini mempunyai satu obyek dari kelas controller yang khusus dibuat untuknya.
Seperti dapat di lihat di Gambar 7.18, kelas antarmuka pemakai DocumentWindow
mempunyai kelas controller, DocumentWindowController yang obyeknya didapatkan dari
superclass-nya, AbstractDocumentWindow. Sedangkan kelas AbstractDocumentWindow
merupakan turunan dari CommandWindow, yang pada gilirannya diturunkan dari Window
(kelas tidak digambarkan). Karena controller DocumentWindowController mempunyai
reference ke obyek data model, Document, maka DocumentWindow juga dapat mengakses
obyek model ini melalui controller-nya.
Kelas DocumentWindow menerapkan tampilan layar Element List, yang menampilkan
daftar dari elemen-elemen RQML dengan tipe tertentu. Seperti telah disebutkan di
bagian 7.4.1, layar ini mempunyai beberapa sub-layar yang masing-masing digunakan
untuk menampilkan daftar elemen dengan tipe tersendiri. Hanya ada satu dari sublayar
ini yang aktif sehingga pada setiap saat hanya elemen-elemen RQML first-class
yang sejenis yang ditampilkan.
Pada cuplikan di Gambar 7.19 dapat dilihat bahwa method onEvent() dari Abstract-
DocumentWindow menerjemahkan event-event dari SuperWaba menjadi berbagai method
call untuk controller-nya. Pada baris 244 di dalam method doNewElement(), controller
19 Antarmuka pemakai seperti JSP atau bahkan antarmuka mesin seperti EJB dan
Web Services.
yang digunakan untuk menindaklanjuti event bukanlah miliknya sendiri, namun
controller dari salah satu panel yang dimilikinya. Obyek turunan dari ElementList
inilah yang menampilkan daftar elemen RQML first-class dengan tipe tertentu.
7.5.6 Penerapan Separable Model di Desktop
Di dalam separable model architecture yang diterapkan oleh Swing, masing-masing
komponen Swing mempunyai obyek model tersendiri [Fowl02]. Obyek-obyek model ini
adalah suatu kelas yang mengimplementasikan interface tertentu, tergantung dari
komponen Swing yang menggunakannya. Untuk setiap interface obyek model ini ada
kelas default yang menjadi implementasinya. Demikian halnya juga ada obyek data
model default yang dimiliki oleh masing-masing obyek Swing. Umumnya obyek default
ini dapat diganti lewat method setModel().
Karena mengikuti problem domain dari requirements engineering, maka data model
RQML tentulah berbeda dengan yang diinginkan oleh Swing. Berbagai antarmuka
RQML, beserta kelas-kelas pendukungnya dirancang tanpa menggunakan kelas
maupun interface Swing. Sebagian faktor yang mendorong keputusan rancangan ini
yaitu agar kelas-kelas representasi data bisa digunakan untuk jenis user interface lainnya19.
Selain itu juga agar mengikuti salah satu filsafat rancangan perangkat lunak:
data model yang user-interface agnostic.
Perbedaan representasi data ini membuat suatu kebutuhan bagi kelas-kelas adapter
untuk menyesuaikan representasi data RQML menjadi data model yang dibutuhkan
oleh Swing. Sebagai pustaka user interface, kelas-kelas yang menggunakan Swing
umumnya adalah kelas-kelas view – yang notabene juga memegang satu atau lebih
instance dari kelas representasi data RQML. Karena itu kelas-kelas adapter ini
umumnya diimplementasikan sebagai inner class [Sun03b] dari kelas view yang
bersangkutan. Karena satu view dapat mempunyai beberapa komponen Swing dengan
kebutuhan data model-nya masing-masing, maka kelas view tersebut dapat
mempunyai lebih dari satu inner class yang menjadi adapter representasi data untuk
komponen-komponen Swing yang dimilikinya. Adapter data model sebagai inner class
ini merupakan salah satu variasi lagi dari penerapan adapter pattern [Gamm95].
ElementList TreeModelAdapter
JTree TreeModel
Gambar 7.20 Penerapan separable model architecture pada aplikasi desktop.
Namun tidak semua kelas view mempunyai adapter untuk masing-masing komponen
Swing di dalamnya. Pada beberapa kasus lebih sederhana untuk menggunakan data
model default yang diberikan oleh Swing. Misalnya saja pada komponen text field yang
hanya memuat satu string. Implementasi kelas adapter untuk menterjemahkan satu
attribut RQML menjadi data model bagi text field ini tentulah lebih kompleks ketimbang
hanya menggunakan method-method setText() dan getText() yang diberikan
oleh sebuah text field untuk mengakses datanya. Karena itu kelas adapter hanya
dibuat untuk representasi data yang kompleks, seperti misalnya untuk komponen
Pada Gambar 7.20 dapat dilihat sebagian dari penerapan adapter representasi data
pada aplikasi desktop. Kelas ElementList menerapkan komponen Document Tree
beserta Active Elemen Description yang diletakkan di sebelah kiri jendela aplikasi
desktop (lihat subbab 7.4.2). Untuk komponen Document Tree digunakan sebuah
instance dari JTree (dari package javax.swing) yang menampilkan elemen-elemen
RQML beserta tipenya. Tampilan yang dihasilkan oleh JTree ini dihasilkan oleh kelas
representasi data TreeModelAdapter, yang merupakan inner class dari Abstract-
ElementList (Notasi 􀂠 untuk inner class diadaptasi dari [Syba02]). Sedangkan
AbstractElementList adalah superclass dari ElementList yang mewariskan komponen
tree yang dimilikinya. Lewat superclass-nya, kelas TreeModelAdapter mewarisi
ActionWrapper Action
com.arcle.rmt.j2se.swing.ui javax.swing
0..n java.awt
Gambar 7.21 Penerapan decorator pattern oleh kelas ExceptionSafeActionWrapper
interface TreeModel. Antarmuka inilah yang diharapkan oleh JTree dari implementasi
data model-nya.
7.5.7 Command Decorator
Beberapa komponen Swing seperti button dan menu menerapkan command pattern
[Gamm95] di dalam hubungannya dengan application code. Setiap obyek-obyek penerima
perintah ini memiliki suatu obyek Action di mana method actionPerformed()
yang dimilikinya akan dipanggil pada saat komponen yang bersangkutan di-trigger
oleh pengguna.
Perilaku default Swing pada saat sebuah exception terlempar keluar (unhandled
exception) dari event handler pada sebuah aplikasi – termasuk di dalam method
actionPerformed() – adalah menampilkan exception tersebut beserta stack trace-nya
pada standard output. Berhubung aplikasi Swing umumnya adalah program-program
GUI yang tidak mempunyai console, hal ini dapat menjadi masalah: tampilan exception
tidak nampak oleh pengguna dan seakan-akan perintah yang mengalami exception
akan berhenti secara misterius tanpa ada feedback pada tampilannya – tampilan yang
diberikan di console tidak terlihat pada user interface program GUI.
Masalah penampilan exception ini ditangani dengan penerapan decorator pattern
[Gamm95]. Kelas ExceptionSafeActionWrapper merupakan pembungkus untuk sebuah
00093 public void actionPerformed(ActionEvent e) {
00094 try {
00095 super.actionPerformed(e);
00096 } catch(Exception ex) {
00097 MoreSwingUtilities.showException(getOwnerComponent(), ex,
00098 "Unhandled exception caught in action: " + getValue(NAME));
00099 }
00100 }
Gambar 7.22 File, baris 93 – 100.
obyek Action yang menangani unhandled exception yang mungkin terjadi. Pada saat
sebuah obyek Exception terlempar ke luar dari method actionPerformed() dari obyek
yang dibungkus, method actionPerformed() dari obyek ExceptionSafeActionWrapper
yang membungkusnya akan menangani exception tersebut kemudian menampilkan
sebuah dialog box untuk menampilkan exception yang terjadi.
Kelas ExceptionSafeActionWrapper adalah subclass dari ComponentOwnedAction-
Wrapper. Superclass ini berfungsi untuk menyimpan obyek Component yang akan
menjadi parent dari dialog box yang akan ditampilkan oleh ExceptionSafeAction-
Pada gilirannya, ComponentOwnedActionWrapper adalah subclass dari ActionWrapper,
yang merupakan decorator umum untuk obyek-obyek yang menerapkan interface
Action. Kelas decorator ini tidak berfungsi apa-apa dengan sendirinya selain untuk
menjadi base class bagi kelas-kelas decorator lainnya.
Pada Gambar 7.22 dapat dilihat bahwa method actionPerformed() dari Exception-
SafeActionWrapper menangkap suatu exception yang mungkin terjadi pada saat
menjalankan suatu command. Di dalam blok try..catch, method ini hanya memanggil
method yang sama dari superclass-nya. Sebagai sebuah wrapper kosong, method
superclass kemudian hanya meneruskan method call ke obyek yang dibungkusnya.
Apabila sebuah exception terjadi maka exception tersebut beserta stack trace-nya akan
ditampilkan di sebuah kotak dialog.
Namun masalah penampilan exception tadi masih belum terpecahkan seluruhnya.
Mengingat tidak hanya subclass dari Exception yang dapat dilempar, namun kelas
ExceptionSafeActionWrapper tidak menangkap exception object selain tipe ini – misalkan
subclass dari Error. Sehingga sebuah unhandled exception dengan tipe ini tetap
akan mendapatkan perilaku default Swing: ditampilkan di console. Sayangnya,
dokumentasi JDK API mengatakan bahwa subclass dari Error tidak boleh ditangkap
RQMLFirstClass RQMLFirstClassImpl
javax.swing java.util
..j2se.framework ..rqml
..j2se.model .domimpl.rqml
Gambar 7.23 Observer pattern pada dialog penyunting RQML
oleh program aplikasi [Sun00a]. Larangan ini menjadi alasan bahwa hanya obyek
Exception yang ditangkap oleh ExceptionSafeActionWrapper. Apakah dalam kasus
khusus ini diperbolehkan untuk menangkap obyek Error masih menjadi pertanyaan.
7.5.8 Editor elemen-elemen first-class
Layar komputer desktop yang umumnya lebih luas memungkinkan aplikasinya untuk
secara wajar mengaktifkan beberapa view pada saat yang sama. Penampilan beberapa
view secara bersamaan ini menjadi alasan yang baik bagi penerapan observer pattern
[Gamm95]. Apalagi dengan adanya dukungan dari pustaka J2SE – pada package
java.util terdapat kelas Observable serta interface Observer yang telah
mengimplementasikan sebagian besar algoritma yang diperlukan bagi penerapan pola
rancangan ini.
Semua kelas view pada aplikasi desktop mengimplementasikan interface Observer.
Sedangkan kelas-kelas model diturunkan dari obyek Observable. Ketika sebuah view
sedang menampilkan data dari obyek model tertentu, view tersebut mendaftarkan diri
sebagai pengamat dari obyek model yang ditampilkan itu. Sehingga apabila data dari
model berubah – terutama akibat manipulasi dari komponen-komponen antarmuka
pemakai lainnya – view tersebut akan mendapat pemberitahuan tentang perubahan
itu sehingga dapat memperbaharui tampilannya.
Dapat dilihat dari Gambar 7.23 bahwa obyek Observable meliputi kelas-kelas penerapan
RQML – turunan dari ElementAdapter (subbab 7.5.2) – dan juga kelas
RQMLDocument yang mewakili dokumen RQML secara keseluruhan. Sebagaimana
sebuah dokumen RQML dengan elemen-elemennya, kelas RQMLDocument memiliki
obyek-obyek RQMLFirstClass yang mewakili elemen-elemen pada dokumen tersebut.
Sebagai sebuah editor RQML, rancangan aplikasi dipusatkan pada sekelompok dialog
yang berfungsi untuk meng-edit berbagai first-class RQML element yang ada (subbab
7.4.2). Apalagi dengan dukungan layar yang lebih besar yang memungkinkan
beberapa dialog penyunting ini untuk ditampilkan secara bersamaan. Penerapan
observer pattern memungkinkan hasil penyuntingan dari dialog yang satu untuk
ditampilkan pada dialog yang lain.
Pada Gambar 7.23 juga ditampilkan sebuah kelas view, yaitu ElementEdit yang
menjadi base class dari semua jendela editor RQML. Kelas ini menerapkan interface
Observer. Pada saat sebuah jendela editor sedang menyunting suatu elemen RQML,
ia akan mendaftarkan diri sebagai pengamat dari elemen yang sedang disuntingnya.
Sehingga pada saat suatu editor meng-commit perubahan pada elemen yang sama,
editor yang lain akan langsung menampilkan perubahan ini.
Semua dialog editor RQML ini diturunkan dari kelas ElementEdit. Untuk setiap jenis
elemen first-class terdapat satu kelas editor yang digunakan untuk menyunting
elemen-elemen dengan tipe tersebut. Misalkan untuk elemen Requirement ada kelas
RequirementEdit; sedangkan untuk elemen first-class dengan jenis Usecase, editor-nya
adalah UsecaseEdit. Baik RequirementEdit maupun UsecaseEdit diturunkan secara
tidak langsung dari ElementEdit (hirarki ini tidak ditampilkan untuk menghemat
tempat). Garis dependency antara ElementEdit dan RQMLFirstClass menunjukkan
hubungan antara suatu obyek penyunting RQML dengan elemen yang sedang di-edit
dilakukan di base class obyek penyunting tersebut, yaitu ElementEdit.
7.5.9 Class Map
Adanya hirarki paralel antara antarmuka-antarmuka RQML beserta kelas-kelas
aplikasi menciptakan suatu kebutuhan untuk menjalankan suatu method dari obyek
tertentu berdasarkan interface yang diimplementasikan oleh obyek lain. Dengan kata
lain, untuk suatu himpunan interface A = {a1, a2, …, an}, suatu himpunan obyek
B = {b1, b2, …, bn} yang semua obyek ini adalah dari kelas C atau kelas turunannya,
dan sebuah obyek X yang menerapkan salah satu interface ai 􀀓 A, seringkali
dibutuhkan untuk menjalankan suatu method m 􀀓 C terhadap obyek bj 􀀓 B di mana
i = j.
Karena kebutuhan ini, maka pada pertengahan pengembangan aplikasi desktop
banyak dijumpai penggalan kode yang berbentuk seperti berikut ini:
if (x instanceof A)
else if (x instanceof B)
else if (x instanceof C)

Suatu masalah yang tidak kecil timbul karena untaian if seperti di atas tidak hanya
melibatkan tiga atau empat obyek saja; terkadang malahan sampai tujuh atau lebih
pernyataan if yang terlibat. Belum lagi himpunan interface yang digunakan seringkali
sama di beberapa tempat yang berbeda. Hal ini tentu saja menjadi redundant code
dan menurunkan modularitas program.
Karena itu penggalan di atas kemudian di-refactor ke dalam kelas GenericClassMap.
Kelas ini digunakan untuk memetakan suatu himpunan kelas (ataupun interface)
kepada suatu himpunan obyek. Dengan demikian, kode di atas dapat dipersingkat
menjadi seperti ini:
GenericClassMap cm = new ThingMap();
y = cm.findFirstInstance(x);
Method findFirstInstance() dari GenericClassMap berfungsi untuk menemukan obyek
yang dipetakan oleh salah satu interface yang diimplementasikan oleh obyek x.
Apabila ditemukan, maka obyek terpetakan tersebut akan diberikan kepada
pemanggilnya – yang pada contoh di atas adalah obyek y. Ditemukannya obyek yang
dipetakan ini memungkinkan pemanggilan berbagai method yang dimilikinya.
Dalam operasinya, findFirstInstance() bergantung pada sebuah pemetaan antara
kelas dan obyek. Pemetaan ini diberikan oleh abstract factory method create-
Mappings() pada GenericClassMap yang diharuskan untuk menghasilkan sebuah
obyek Map yang terdiri dari pasangan-pasangan terurut (Class, Object). Karena
createMappings() tidak hanya diharapkan untuk menciptakan sebuah obyek namun
20 LoC: Lines of Code
juga untuk mengisinya (initialize), maka method ini dapat dikatakan juga menerapkan
strategy pattern [Gamm95].
Kelas-kelas turunan GenericClassMap mendefinisikan method ini untuk menciptakan
pemetaan yang diinginkan. Untuk masing-masing himpunan pasangan (Class,
Object) perlu diciptakan sebuah subclass dari kelas ini. Pada contoh di atas, kelas
turunan yang digunakan adalah ThingMap, yang mendefinisikan pemetaan seperti berikut
ini untuk menggantikan contoh untaian if yang pertama tadi:
public class ThingMap extends GenericClassMap {
protected Map createMappings() {
Map m = new Hashtable();
m.put(A.class, p);
m.put(B.class, q);
m.put(C.class, r);
return m;
Memang nampaknya panjang definisi method createMappings() akan hampir sama
dengan untaian if yang sebelumnya. Namun penghematan LoC20 akan dicapai apabila
perlu dibuat dua atau lebih untaian if yang keduanya memproses suatu obyek
terhadap sekelompok antarmuka/obyek yang sama. Selain itu ada tambahan keuntungan
di mana himpunan interface/object yang digunakan dapat di-configure pada
saat run-time – suatu hal yang sulit dilakukan dengan untaian if.
Kelas GenericClassMap digunakan di beberapa tempat, seperti:
• ElementEditFactoryFacade – Sebuah factory class, facade, dan juga singleton
yang digunakan untuk menciptakan instance first-class editor (subbab 7.5.8) yang
sesuai dengan obyek first-class element yang akan disunting.
• ElementTypeNodeFacade – Nested facade class dari AbstractElementList (subbab
7.5.6) yang perlu mendapatkan sebuah node yang dimiliki oleh sebuah JTree
berdasarkan tipe dari suatu first-class element.
7.5.10 First-Class Importer
Kelas data model yang mewakili data di aplikasi desktop berbeda dengan yang ada di
aplikasi handheld. Pada kelas RQMLDocument di desktop, semua elemen first-class dapat
diakses secara acak. Sedangkan pada kelas Document di aplikasi handheld, elemenelemen
first-class dikelompokkan menurut tipenya masing-masing dan akses acak
hanya dapat dilakukan terhadap suatu elemen dengan tipe tertentu.
Karena perbedaan ini, maka proses impor dari data handheld ke desktop dilakukan
oleh beberapa kelas, di mana setiap kelas pengimpor berfungsi untuk memindahkan
data dari salah satu jenis elemen first-class. Namun proses yang dilakukan oleh kelaskelas
ini umumnya sama. Untuk setiap jenis elemen first-class di handheld dilakukan
iterasi berikut pada semua elemen dengan tipe tersebut:
1. Ambil elemen dari instance Document.
2. Buat elemen dengan tipe yang sama di dalam instance RQMLDocument.
3. Salin isi dari elemen yang didapat pada langkah 1 ke dalam elemen yang
dibuat di langkah 2.
Walau pada dasarnya proses di atas sama bagi tiap jenis elemen first-class, namun
method-method yang dipanggil oleh setiap langkah tersebut berbeda. Misalkan untuk
elemen Requirement, langkah 1 memanggil method getRequirementAt() dan langkah 2
memanggil method createRequirement(). Sedangkan untuk elemen Usecase,
langkah 1 memanggil method getUsecaseAt() dan langkah 2 memanggil method
Kesamaan algoritma ini diterapkan menjadi suatu template method [Gamm95] pada
base class untuk kelas-kelas pengimpor. Template method ini menggunakan beberapa
strategy method yang abstrak untuk melakukan langkah-langkah spesifik yang
063 import com.arcle.rmt.superwaba.model.Document;
064 import com.arcle.rmt.j2se.model.RQMLDocument;
073 public abstract class FirstClassImport implements FirstClassImporter {
089 public boolean importFirstClass(Document srcDoc, RQMLDocument dstDoc) {
090 int numElems = getTotalElements(srcDoc);
091 boolean ok = true;
092 for (int i=0; i<numElems; i++) {
093 RQMLFirstClass srcElem = getElementAt(i, srcDoc);
094 RQMLFirstClass dstElem = createDestinationElement(dstDoc);
095 ok &= copyElement(srcElem, dstElem);
096 }
097 return ok;
098 }
116 protected boolean copyElement(RQMLFirstClass src, RQMLFirstClass dst) {
117 return CopierFacade.getInstance().copy(getSupportedClass(), src, dst);
118 }
132 protected abstract Class getSupportedClass();
141 protected abstract int getTotalElements(Document doc);
151 protected abstract RQMLFirstClass getElementAt(int index, Document srcDoc);
160 protected abstract RQMLFirstClass createDestinationElement(RQMLDocument doc);
161 }
Gambar 7.24 Cuplikan
074 public class RequirementImport extends FirstClassImport {
079 protected Class getSupportedClass() {
080 return Requirement.class;
081 }
087 protected int getTotalElements(Document doc) {
088 return doc.getRequirementCount();
089 }
097 protected RQMLFirstClass getElementAt(int index, Document doc) {
098 return doc.getRequirementAt(index);
099 }
106 protected RQMLFirstClass createDestinationElement(RQMLDocument doc) {
107 return doc.createRequirement();
108 }
109 }
Gambar 7.25 Cuplikan
Pada Gambar 7.24 dapat dilihat cuplikan base class dari kelas-kelas pengimpor, yaitu
FirstClassImport. Method importFirstClass() adalah template method yang
melakukan langkah-langkah umum pengimporan sebuah elemen first-class. Method
ini bergantung pada beberapa strategy method, getSupportedClass(),
getTotalElements(), getElementAt(), dan createDestinationElement().
Pada Gambar 7.25 dapat dilihat salah satu turunan dari FirstClassImport. Kelas
RequirementImport digunakan untuk mengimpor elemen-elemen dengan tipe
Requirement dari data model handheld ke desktop. Dari cuplikan kode ini terlihat
implementasi dari berbagai strategy method yang dibutuhkan oleh importFirst-
Class(). Method getSupportedClass() menyebutkan tipe elemen first-class yang
didukung oleh kelas pengimpor ini. Method getRequirementCount() memberikan
jumlah requirement yang ada. Method getElementAt() mendapatkan suatu elemen
requirement pada indeks tertentu. Sedangkan method createDestinationElement()
membuat suatu instance obyek Requirement pada data model aplikasi desktop.
7.6 Data Statistik
Pada bagian ini diberikan data source code metric yang dihasilkan dari Rambutan versi
terakhir tertanggal 19 Mei 2003. Hitungan ini dilakukan oleh perangkat lunak
JavaNCSS [Lee02]. JavaNCSS menggunakan besaran-besaran berikut dalam
menghasilkan source code metric:
• NCSS: Non-Commenting Source Statements – Jumlah statement di dalam
source code yang bukan komentar. Pernyataan yang dihitung bukan hanya
executable statements, namun juga deklarasi method, deklarasi class, dan
pernyataan import. Pada dasarnya, NCSS menghitung jumlah karakter ‘{’ dan
‘;’ pada source code.
• CCN: Cyclomatic Complexity Number – Juga dikenal sebagai McCabe metric,
merupakan jumlah percabangan yang ada di dalam suatu method. Untuk suatu
method, awalnya CCN bernilai satu. Kemudian nilai ini akan ditambahkan
untuk setiap statement percabangan seperti if, while, do, dan case. Terminasi
fungsi secara prematur (statement return di tengah-tengah method) juga akan
menambah nilai CCN – namun statement return di akhir method tidak dihitung.
• JVDC: JavaDoc Comments – Untuk setiap method nilai ini bernilai satu apabila
method tersebut didokumentasikan dengan JavaDoc dan bernilai nol apabila
tidak didokumentasikan.
Tabel 7.1 Ikhtisar hitungan NCSS untuk seluruh program
Packages Classes Functions NCSS Javadocs per
28.00 328.00 1354.00 7903.00 1002.00 Project
11.71 48.36 282.25 35.79 Package
4.13 24.09 3.05 Class
5.84 0.74 Function
Tabel 7.2 Ikhtisar hitungan NCSS per class
Average Object NCSS 19.24
Average Object Functions 4.13
Average Object Inner Classes 0.34
Average Object Javadoc Comments 3.05
Program NCSS 7,903.00
Tabel 7.3 Ikhtisar hitungan NCSS per method
Average Function NCSS 3.34
Average Function CCN 1.29
Average Function JVDC 0.38
Program NCSS 7,903.00
Tabel 7.4 Hitungan NCSS per package
Nr. Classes Functions NCSS Javadocs Package
1 2 11 73 11 com.arcle.rmt.j2se.bridge
2 3 8 85 12 com.arcle.rmt.j2se.bridge.copy
3 33 68 396 33 com.arcle.rmt.j2se.bridge.copy.rqml
4 2 6 36 7 com.arcle.rmt.j2se.bridge.swexport
5 10 23 108 33 com.arcle.rmt.j2se.bridge.swexport.rqml
6 2 6 41 8 com.arcle.rmt.j2se.bridge.swimport
7 10 43 158 53 com.arcle.rmt.j2se.bridge.swimport.rqml
8 2 9 24 7 com.arcle.rmt.j2se.framework
9 7 23 66 16 com.arcle.rmt.j2se.model
10 6 58 339 63 com.arcle.rmt.j2se.model.domimpl
11 34 86 561 74 com.arcle.rmt.j2se.model.domimpl.rqml
12 3 64 617 64 com.arcle.rmt.j2se.swing
13 14 79 360 68 com.arcle.rmt.j2se.swing.ui
14 6 64 633 93
15 24 100 951 52
16 8 31 141 35 com.arcle.rmt.j2se.util
17 38 46 180 68 com.arcle.rmt.rqml
18 2 4 27 3 com.arcle.rmt.superwaba
19 3 1 7 4 com.arcle.rmt.superwaba.framework
20 3 56 75 24 com.arcle.rmt.superwaba.model
21 5 86 435 49 com.arcle.rmt.superwaba.model.imp
22 33 116 892 44 com.arcle.rmt.superwaba.model.imp.rqml
23 6 48 228 44 com.arcle.rmt.superwaba.ui
24 1 19 63 2 com.arcle.rmt.superwaba.util
25 11 83 436 54
26 54 190 923 59
27 1 4 7 1 com.arcle.rmt.xplat.model
28 5 22 41 21 com.arcle.rmt.xplat.util
Total 328 1354 7903 1002
Jangka waktu pembuatan: 2 bulan (6 April 2003 – 19 Mei 2003).
Programmer: 1 orang.
Bab 8
Pada bab ini diberikan hasil-hasil pengujian terhadap Rambutan. Pengujian ini
dilakukan lewat tiga sudut pandang:
• Pemenuhan terhadap requirements dan constraints yang ada di bab 6 (halaman
• Kesesuaian terhadap standar RQML sebagaimana diusulkan di [Gudg00].
• Perbandingan dengan fitur-fitur yang umum dimiliki oleh berbagai alat bantu
8.1 Terhadap Spesifikasi Kebutuhan
Bagian ini membahas pemenuhan Rambutan terhadap berbagai requirement yang
dituliskan di subbab 6.2 (halaman 71). Seluruh requirement yang ada dituliskan kembali
diikuti dengan hasil pengujiannya.
8.1.1 Sistem membantu dalam pengumpulan informasi requirements
Aplikasi handheld membantu pengumpulan informasi requirements yang dilakukan di
luar kantor system analyst (pengguna Rambutan) di mana umumnya peralatan yang
dapat digunakan lebih terbatas. Sedangkan aplikasi desktop dapat digunakan untuk
operasi editing yang lebih intensif.
Pemenuhan: Penuh.
8.1.2 Sistem membantu dalam pengelolaan informasi requirements
Di dalam user story (subbab 6.1 di halaman 65), jenis informasi requirement yang dikelola
adalah proyek, stakeholder, requirement, istilah, masalah, dan batasan. Sedangkan
Rambutan mendukung elemen-elemen RQML Taxonomy, Requirement,
Stakeholder, Usecase, Project, Assumption, Context, Issue, dan Lexicon. Berhubung
constraint adalah salah satu jenis requirement [Grad92], maka jenis data yang
21 Sinkronisasi data antara komputer genggam dengan desktop-nya.
didukung oleh Rambutan adalah superset dari yang ada pada user story sehingga
kemampuannya melebihi dari kebutuhan awal. Sayangnya traceability belum
didukung oleh Rambutan sehingga requirement ini tidak seluruhnya terpenuhi.
Pemenuhan: Sebagian.
8.1.3 Sistem mempunyai sebuah modul untuk digunakan di komputer genggam
Adanya aplikasi handheld memenuhi requirement ini.
Pemenuhan: Penuh.
8.1.4 Sistem mempunyai sebuah modul untuk digunakan di komputer desktop
Adanya aplikasi desktop memenuhi requirement ini.
Pemenuhan: Penuh.
8.1.5 Informasi di aplikasi desktop dan handheld dapat dipertukarkan
Aplikasi desktop dapat membuka serta menyimpan data yang ditulis dalam format
untuk aplikasi handheld. Tetapi operasi ini harus dilakukan secara manual. Bila seorang
pengguna ingin meng-edit dokumen handheld di aplikasi desktop, ia harus
mem-backup data di aplikasi handheld, membuka dokumen handheld tersebut dengan
aplikasi desktop, melakukan modifikasi, menyimpannya, dan terakhir meng-install
kembali dokumen itu ke dalam komputer genggam. Idealnya mayoritas operasi ini
dilakukan secara transparan oleh sistem pada saat HotSync/ActiveSync21.
Pemenuhan: Sebagian.
8.2 Terhadap Batasan Rancangan
Bagian ini membahas pemenuhan Rambutan terhadap berbagai constraint yang dituliskan
di subbab 6.3 (halaman 73). Seluruh batasan yang ada dituliskan kembali diikuti
dengan hasil pengujiannya.
22 Seperti misalnya Apache Xindice.
23 Hitungan source code metrics ada pada subbab 7.6 di halaman 121.
8.2.1 Aplikasi harus dirancang untuk mempermudah pengembangan selanjut
nya (extensible)
Berbagai usaha telah dilakukan untuk mendukung ekstensibilitas Rambutan. Kedua
aplikasi telah dirancang secara modular dan mempergunakan design patterns. Implementasi
data model pada aplikasi desktop tidak tergantung pada Swing – yang menjadi
penerapan antarmukanya – sehingga memungkinkan penerapan jenis-jenis antarmuka
yang lain. Selain itu data model aplikasi desktop juga menggunakan API DOM
sehingga penyimpanan data berbasis file yang digunakan sekarang berpotensi untuk
ditingkatkan lewat integrasi dengan software DBMS berbasis XML22. Antarmukaantarmuka
RQML mengabstraksikan kode user interface kedua aplikasi agar konsisten
serta untuk memisahkan komponen-komponen user interface dari implementasi data
model kedua aplikasi tersebut. Kesemua itu ditambah dengan rasio JavaDoc per
fungsi23 yang mencapai nilai 0.74 – berarti untuk setiap empat method, maka tiga di
antaranya didokumentasikan.
Walaupun demikian, hasil nyata dari usaha-usaha ini belumlah nampak sampai ada
perkembangan lebih lanjut dari Rambutan dan digunakannya software ini di dalam
Pemenuhan: Belum Terbukti.
8.2.2 Menggunakan [Gamm95] design patterns
Sebagaimana telah dibahas mengenai penerapan design patterns pada kedua aplikasi
di subbab 7.5 (halaman 100) maka requirement ini terpenuhi.
Pemenuhan: Penuh.
8.2.3 Aplikasi handheld harus multi-platform
Aplikasi untuk komputer genggam diprogram untuk SuperWaba. Sedangkan Super-
Waba menyediakan berbagai runtime masing-masing untuk sistem-sistem operasi
PalmOS, Windows CE, dan PocketPC untuk berbagai jenis prosesor. Sebuah program
24 CVS: Concurrent Versions System –
SuperWaba setelah di-compile dapat dijalankan di semua sistem operasi yang
didukung oleh SuperWaba tanpa perlu kompilasi ulang.
Pemenuhan: Penuh.
8.2.4 Aplikasi desktop harus multi-platform.
Aplikasi untuk komputer desktop diprogram untuk platform J2SE, versi 1.3. Sedangkan
platform ini mendukung secara langsung setidak-tidaknya sistem-sistem operasi
Windows, Solaris, dan Linux. Selain itu ada pihak ketiga yang menyediakan platform
J2SE untuk MacOS X dan Novell Netware.
Pemenuhan: Penuh.
8.2.5 Terdapat kode program pada handheld dan desktop yang digunakan
Package-package com.arcle.rmt.rqml dan com.arcle.rmt.xplat tidak bergantung pada
API tertentu sehingga dapat digunakan untuk SuperWaba maupun J2SE. Package
com.arcle.rmt.rqml memuat berbagai interface yang mengabstraksikan sekaligus
menstandarisasi data model RQML bagi kedua aplikasi.
Pemenuhan: Penuh.
8.2.6 Aplikasi yang dibuat tidak tergantung pada metodologi RE tertentu
Karena Rambutan didasari pada RQML, yang pada gilirannya dibuat untuk mendukung
sekumpulan best practices pada RE, maka secara implisit Rambutan dapat digunakan
untuk beberapa metodologi RE.
Pemenuhan: Penuh.
8.2.7 Tidak ada pembayaran kontinu kepada pihak ketiga
Berbagai perangkat lunak yang menunjang pembuatan Rambutan, yaitu SuperWaba,
Java Development Kit (JDK) 1.3, Doxygen, Apache Ant, dan CVS24 dapat di-download
25 OSI: Open Source Initiative –
secara gratis. Semua software ini, kecuali JDK, adalah perangkat lunak open-source
dengan lisensi yang telah disetujui oleh OSI25.
Pemenuhan: Penuh.
8.3 Terhadap Standar RQML
Dari sebelas elemen first-class yang didefinisikan oleh RQML, dua diantaranya yaitu
dan tidak didukung oleh Rambutan. Pengabaian ini dilakukan karena
sulit untuk membuat user interface yang efisien di aplikasi handheld yang mendukung
kedua elemen ini. Faktor lain yang menjadi alasan adalah waktu yang
tersedia untuk proyek ini sangatlah singkat.
Elemen lain yang tidak didukung adalah elemen yang berfungsi untuk menandai
sekelompok teks dengan attribut-attribut tertentu. Kesulitan yang ditemui dalam
pengimplementasian elemen ini adalah karena SuperWaba tidak menyediakan user
interface control untuk hal ini – sebuah control yang memiliki kemampuan menandai
bagian-bagian teks dengan berbagai attribut dapat dikatakan memiliki fungsionalitas
sebuah word processor mini. Pembuatan sebuah custom control untuk melakukan hal
ini juga tidak dapat dilakukan mengingat waktu yang sangat terbatas.
Penyederhanaan lain adalah untuk setiap elemen hanya dapat memiliki satu instance
dari setiap jenis child element yang dapat dimilikinya. Hal ini telah dibahas di subbab
7.3 (halaman 92).
Berikut ini dijabarkan pemenuhan Rambutan terhadap berbagai requirement yang
aslinya dibebankan terhadap RQML. Untuk setiap requirement juga diberikan
pemenuhan RQML terhadap requirement tersebut sebagaimana evaluasi terhadap hal
ini dilakukan di [Gudg00]. Berbagai requirement ini telah dibahas di subbab 4.4
(halaman 37).
26 [Gudg00] tidak memberikan evaluasi untuk REQ5-6.
Tabel 8.1 Pemenuhan sistem terhadap requirement RQML
Requirement Pemenuhan Keterangan
RQML Rambutan
REQ1 Penuh Penuh Aplikasi desktop menyimpan data SRS
dalam bentuk file RQML.
REQ2 Sebagian Sebagian Kedayagunaan Rambutan perlu dievaluasi
kembali di dalam penggunaannya oleh
REQ3 Sebagian Sebagian Walau kemampuan Rambutan saat ini sangat
terbatas, arsitektur serta platform yang
digunakan sangat memungkinkan
pengembangan lebih lanjut.
REQ4 Sebagian Penuh Rambutan merupakan salah satu perangkat
lunak yang menggunakan RQML baik secara
konseptual maupun sebagai data format.
REQ5 Sebagian Sebagian Rambutan tidak memaksakan metodologi
RE tertentu.
REQ5-1 Penuh Penuh Dukungan atas elemen yang
digunakan untuk membuat daftar istilah.
REQ5-2 Penuh Tidak Elemen belum didukung.
REQ5-3 Penuh Tidak Karena elemen digunakan untuk
baselining; lihat REQ5-2.
REQ5-4 Penuh Penuh Semua obyek first-class mempunyai attribut
REQ5-5 Penuh Penuh Semua obyek first-class mempunyai attribut
REQ5-6 T/T26 Sebagian Semua obyek first-class mempunyai attribut
difficulty yang dapat digunakan untuk
memperkirakan kesulitan yang ditemui –
atau antisipasi akan effort yang diperlukan.
REQ5-7 Penuh Penuh Dukungan atas obyek first-class project
yang memiliki attribut-attribut scope dan
Tabel 8.1 Pemenuhan sistem terhadap requirement RQML
Requirement Pemenuhan Keterangan
RQML Rambutan
REQ5-8 Penuh Sebagian Walaupun obyek-obyek taxonomy dan
stakeholder didukung, obyek trace yang
seharusnya menghubungkan dua obyek
tersebut belum didukung.
REQ5-9 Penuh Sebagian Sama seperti REQ5-8.
REQ5-10 Penuh Tidak Elemen belum didukung.
REQ5-11 Penuh Sebagian Walaupun obyek-obyek taxonomy dan requirement
didukung, obyek trace yang
seharusnya menghubungkan dua obyek
tersebut belum didukung.
REQ5-12 Sebagian Sebagian Operasi copy-paste dapat dilakukan terhadap
teks di dalam requirement, walaupun
belum dapat dilakukan terhadap obyek firstclass
secara keseluruhan. Reuse juga
terbatas karena traceability belum didukung.
REQ5-13 Penuh Penuh Semua obyek first-class memiliki attribut
REQ5-14 Penuh Penuh Memang hanya requirement dalam bahasa
alami yang didukung.
REQ5-15 Penuh Tidak Sama seperti REQ5-2.
REQ5-16 Penuh Penuh Setiap obyek first-class memiliki attribut ID
yang di-generate secara default dan dapat
diubah kemudian oleh pengguna.
REQ5-17 Penuh Sebagian Sama seperti REQ5-11.
REQ5-18 T/B Tidak Sama seperti REQ5-2.
REQ6 Penuh Penuh Obyek taxonomy didukung.
REQ7 Penuh Sebagian Sama seperti REQ5-2.
REQ8 Penuh Tidak Elemen belum didukung.
REQ9 Penuh Penuh Semua obyek first-class memiliki attributattribut
name, description, dan rationale.
Tabel 8.1 Pemenuhan sistem terhadap requirement RQML
Requirement Pemenuhan Keterangan
RQML Rambutan
REQ10 Penuh Penuh Obyek stakeholder didukung.
REQ10-1 Penuh Penuh Obyek assumption didukung.
REQ10-2 Penuh Penuh Obyek issue didukung.
T/B: tidak terbukti.
T/T: tidak diketahui.
8.4 Terhadap Fitur dari Alat Bantu Sejenis
Bagian ini membandingkan fitur-fitur yang umum terdapat pada alat-alat bantu
manajemen requirement dengan kemampuan yang dimiliki oleh Rambutan. Berbagai
fitur yang digunakan sebagai perbandingan yaitu sebagaimana ditulis di [Koto98] dan
telah dibahas di subbab 2.5 (halaman 17). Tujuan perbandingan ini adalah untuk
mendapatkan gambaran posisi Rambutan di antara berbagai alat bantu sejenis yang
telah ada di pasaran.
8.4.1 Requirements Browser
Pada dasarnya tampilan Document Tree (subbab 7.4.2, halaman 98) adalah sebuah
requirements browser yang menampilkan obyek-obyek first-class yang ada di dalam
suatu dokumen RQML. Dengan menggunakan tampilan tree, obyek-obyek first-class
ini dikelompokkan sesuai dengan jenisnya masing-masing. Pengguna dapat memakai
tampilan ini untuk mencari serta menguibah berbagai requirement yang ada di dalam
suatu dokumen.
Pemenuhan: Penuh.
8.4.2 Query System
Pada tahap ini belum ada fasilitas search untuk mencari suatu requirement tertentu
di dalam dokumen; walaupun dengan arsitektur yang ada, fungsi ini bisa ditambahkan
Pemenuhan: Tidak.
27 Contoh program-program pengolah kata yang mendukung XML adalah OpenOffice
dan Corel WordPerfectTM.
28 Salah satu perangkat lunak version control untuk XML adalah DeltaXML –

8.4.3 Requirement Converter
Karena aplikasi desktop menggunakan format file XML sebagai penyimpan data,
sebuah XML stylesheet dapat dibuat untuk mengubah file XML yang dihasilkan oleh
suatu program pengolah kata27 menjadi file RQML. Dengan adanya transformasi antar
file XML ini, maka stylesheet tersebut dapat disebut sebagai sebuah requirement
converter. Walaupun demikian, cara-cara untuk memelihara hubungan antara
dokumen XML sumber dengan dokumen RQML hasil transformasi masih menjadi
Pemenuhan: Sebagian.
8.4.4 Change Control System
Rambutan tidak memiliki sistem kendali versi di dalamnya. Tetapi karena format file
yang digunakan adalah file XML – yang notabene adalah file teks – maka dapat
digunakan sistem version control yang umum digunakan untuk source code, seperti
misalnya CVS. Alternatif lain daripada membuat dukungan sistem kendali versi
sendiri adalah dengan menggunakan sistem version control yang ditujukan untuk filefile
Pemenuhan: Sebagian.
Bab 9
9.1 Rangkuman
Laporan proyek tugas akhir ini terdiri dari dua bagian besar yaitu landasan teori dan
pembahasan. Bab-bab yang tergabung dalam landasan teori memperkenalkan berbagai
teori yang digunakan dalam pembuatan program, yaitu Requirements Management,
XML, Design Patterns, dan Requirements Markup Language. Sedangkan
pembahasan terdiri dari laporan-laporan yang berkaitan dengan program yang dibuat
yaitu Analisis dan Peracangan, Implementasi, dan Pengujian.
Bab Requirements Engineering (RE) membahas definisi requirements, proses RE,
traceability, requirements patterns, serta alat bantu RE. Untuk memotivasi pembaca,
pembahasan diawali dengan suatu dongeng yang mengilustrasikan perlunya suatu
disiplin ilmu yang menangani requirements.
Bab XML (Extensible Markup Language) membahas sejarah singkat XML, berbagai
terminologi seputar XML, XML stylesheet (XSL), Document Type Definition (DTD),
pengurai XML, serta namespaces dan Xlink.
Bab Requirements Markup Language (RQML) memberikan langkah-langkah yang diambil
dalam perancangan RQML dan diakhiri dengan pembahasan RQML DTD. Halhal
yang mempengaruhi rancangan RQML adalah fakta-fakta dari studi literatur RE,
best practices yang digariskan oleh Wiegers [Wieg99] serta suatu himpunan requirement
yang dibuat atas kedua dasar ini. Selain itu juga ada tiga quality attributes yang
diinginkan ada di dalam RQML yaitu integratibility, extensibility, dan portability.
Bab Design Patterns membahas sebuah subset dari berbagai pattern yang dimuat di
[Gamm95] dan diikuti dengan pembahasan dua arsitektur perangkat lunak. Pembahasan
pattern dilakukan dengan cara mendaftarkan nama dan niatan (intent) dari
masing-masing pattern di dalam bentuk tabel. Sedangkan dua arsitektur yang dibahas
adalah Model-View-Controller yang berasal dari SmallTalk dan Separable Model
Architecture yang diterapkan di Swing.
Bab Analisis dan Perancangan memberikan uraian analisa yang dilakukan serta rancangan
awal dari Rambutan, nama alat bantu yang dibuat. Analisa dilakukan terhadap
user story yang menghasilkan sekelompok requirement untuk pedoman pembuatan
perangkat lunak. Berbagai pertimbangan lain menghasilkan beberapa constraints yang
dibebankan pada Rambutan. Bab ini diakhiri dengan rancangan umum program dan
rancangan antarmuka pemakai.
Bab Implementasi membahas teknologi yang digunakan, arsitektur, implementasi
RQML, design patterns yang diterapkan, serta memberikan beberapa data statistik.
Berbagai teknologi yang dipakai dalam implementasi Rambutan adalah Java 2 Standard
Edition, SuperWaba, Apache Ant, dan Doxygen. Pembahasan arsitektur meliputi
tinjauan-tinjauan secara garis besar dari aplikasi desktop, aplikasi handheld, dan
subsistem yang menghubungkan keduanya. Implementasi RQML membahas cara
yang diambil untuk memetakan RQML DTD ke dalam hirarki kelas. Pembahasan
design patterns mengambil beberapa komponen program yang cukup menarik serta
membahas berbagai pattern yang diterapkannya. Sedangkan data statistik yang
diberikan adalah source code metrics yang meliputi hitungan jumlah statement, jumlah
percabangan, dan jumlah JavaDoc comments.
Bab Pengujian mengukur Rambutan dari tiga sudut pandang. Sudut pandang pertama
adalah himpunan requirements dan constraints yang sebelumnya dibahas di dalam bab
Analisis dan Perancangan. Sudut pandang kedua adalah compliance Rambutan
terhadap standar RQML (dengan mengandaikan RQML sebagai sebuah standar).
Sudut pandang ketiga adalah perbandingan fitur-fitur Rambutan dengan berbagai
fitur yang umum dimiliki oleh alat bantu sejenis, sebagaimana digariskan di dalam
9.2 Kesimpulan
Selama pembuatan Rambutan dan penulisan laporan tugas akhir ini dicapai beberapa
kesimpulan, yaitu:
• Penerapan arsitektur MVC di aplikasi handheld bisa dikatakan kurang memuaskan.
Hal ini disebabkan terutama karena, tidak seperti SmallTalk yang
merupakan cikal-bakal MVC [Burb92], pustaka antarmuka pemakai SuperWaba
tidak secara spesifik dirancang untuk mengakomodasi arsitektur MVC. Harga
yang dibayar oleh pemisahan kelas view dengan controller tidak terimpaskan
dengan layering serta enkapsulasi yang lebih baik. Langkah-langkah yang
diambil untuk penerapan MVC pada aplikasi handheld dapat dilihat di subbab
7.5.5 (halaman 108).
• RQML mendefinisikan banyak tipe (jenis elemen) namun hanya sedikit dari
elemen-elemen ini yang mendefinisikan informasi yang unik. Setelah dipetakan
menjadi hirarki interface hal ini menghasilkan berbagai interface kosong
(interface yang tidak mendeklarasikan method baru) yang tidak sedikit. Akibat
lebih lanjut yaitu kelas-kelas penerapan interface ini menjadi kosong juga.
Ledakan jumlah kelas ini menjadi masalah cukup serius di aplikasi handheld di
mana ruang penyimpanan data lebih terbatas. Contoh interface kosong yang
terdapat dalam data model RQML ada di subbab 7.3 (halaman 95).
• Banyaknya kelas yang diakibatkan oleh penerapan MVC, penerapan data model
RQML (lengkap dengan berbagai interface kosongnya), serta kemampuan multiplatform
harus dibayar dengan ukuran pada aplikasi handheld yang mencapai
192KB. Ukuran yang belum termasuk SuperWaba VM ini dirasa cukup besar
bagi bagi sebuah program PalmOS – program-program native PalmOS umumnya
berukuran di bawah seratus kilobyte.
• Aplikasi desktop yang lebih canggih serta adanya subsistem penghubung ke aplikasi
handheld (subsistem Bridge Facade dengan berbagai pendukungnya)
memungkinkan lebih banyak design patterns yang dapat diterapkan di aplikasi
desktop ketimbang rekannya di handheld. Pembahasan arsitektur aplikasi
desktop ada pada sub-sub bab 7.2.2, 7.2.3, 7.5.2, 7.5.4, 7.5.6, 7.5.7, 7.5.8,
7.5.9, dan 7.5.10 (halaman 89 – 118).
• Semua orang dapat membuat kesalahan. Penyusunan [Gudg00] yang sangat
rapi dan lengkap dengan informasi traceability dari landasan teori ke perancangan
dan terus ke evaluasi tetap tidak lolos dari beberapa ketidakkonsistenan.
Contoh salah satu ketidakkonsistenan ini diberikan di subbab (halaman
• Usulan standar RQML yang dimuat di dalam [Gudg00] terbukti cukup feasible
sebagai salah satu dasar pembuatan alat bantu requirements management.
Namun masih ada beberapa hal yang perlu diselesaikan sebelum [Gudg00]
dijadikan bakuan, terutama masalah konsistensi.
• Untuk beberapa fitur seperti traceability dan grouping, perumusan sebuah antarmuka
pemakai yang praktis pada aplikasi handheld ternyata cukup sulit
karena ukuran layar komputer genggam yang relatif kecil. Belum lagi pustaka
user interface controls yang lebih terbatas akan memberikan tantangan yang
cukup besar dalam implementasi fitur-fitur ini.
• Rambutan telah menjawab tantangan market opportunity adanya sebuah alat
bantu requirements management berbasis komputer genggam. Namun, seperti
telah dirinci pada subbab 8.4 (halaman 131), fitur-fitur yang dimiliki perangkat
lunak ini masih jauh ketimbang pesaing-pesaing lainnya yang telah lebih dulu
matang. Masih jauh perjalanan Rambutan sebelum layak dipasarkan sebagai
perangkat lunak siap pakai.
9.3 Saran
Berikut ini adalah beberapa saran yang dapat dilakukan untuk penelitian lebih lanjut
yang bertolak dari tugas akhir ini:
• Mengimplementasikan dukungan terhadap elemen-elemen dan
sehingga Rambutan dapat mengakomodasikan traceability, focus group, serta
pengkategorisasian requirements yang lebih ekstensif.
• Mengimplementasikan fungsi reporting agar dokumen SRS yang dikelola oleh
Rambutan dapat dicetak hard copy. Fungsi ini dapat dilakukan dengan cara
menggunakan XML stylesheet untuk mengubah dokumen RQML menjadi HTML
ataupun PDF untuk kemudian di-print. Lebih jauh lagi, fungsi reporting dapat
dirancang untuk hanya mencetak sebuah subset dari keseluruhan requirement
yang ada sesuai dengan pilihan pemakai.
• Melakukan refactoring untuk menurunkan jumlah baris kode program serta
meningkatkan modularitas dan maintainability.
• Melakukan analisis cross-cutting concerns [Kicz97] terhadap kode program untuk
penerapan Aspect-Oriented Programming (AOP). Berhubung gabungan kedua
aplikasi telah melampaui batas lima ribu baris yang menjadi tolok ukur program
besar, maka AOP diharapkan dapat membawa pengaruh positif terhadap modularitas
Rambutan [Shah02]. Adalah suatu hal yang menarik untuk melihat apakah
AspectJ – sebuah compiler AOP untuk Java – dapat diterapkan di aplikasi
SuperWaba, yang notabene tidak menggunakan API standar Java.
• Diadakannya usability research untuk menguji Rambutan dan RQML di dalam
situasi nyata. Hal ini perlu untuk mematangkan Rambutan agar dapat menjadi
software siap pakai.
• Ekspansi cakupan Rambutan ke sistem informasi requirements management yang
multi-user, mungkin dengan dukungan basis data hybrid yang berbasis XML dan
relasional. Pada tahap ini aplikasi handheld dapat diberikan kemampuan untuk
mengirim dan menerima dokumen SRS lewat jaringan nirkabel.
• Ekspansi Rambutan untuk mendukung mobile devices yang lain; mungkin
dengan bantuan media web, WAP, mungkin bahkan di-port ke J2ME (bila
platform ini ternyata feasible – mengingat fitur dan performa J2ME lebih terbatas
ketimbang SuperWaba).
• Pengevolusian Rambutan berbarengan dengan RQML – alangkah baiknya jika
RQML dapat dijadikan suatu bakuan yang diterima oleh berbagai pihak dengan
Rambutan sebagai reference implementation dari standar tersebut.
[Achr03] Achrafi, Rabi. Requirements Tools. Volere Requirements Resources;
Atlantic Systems Guild, Inc. ;

[Adib02] Adibowo, Sasmito. Developing Handhelds: Targeting Personal Digital
Assistant Platforms. Arcle Technologies Publications. 6 June 2002.
[Alex77] Alexander, Christopher, Ishikawa, Sara, et. al., A Pattern Language.
Oxford University Press, New York. 1977.
[Ambl00] Ambler, Scott. Requirements Engineering Patterns. SD Magazine, CMP
Media, LLC. 2000.

[Apac00a] Ant Specification: Version 0.5. The Apache Software Foundation.
20 April 2000
[Apac02a] Apache Ant – Frequently Asked Questions. The Apache Software Foundation.
[Burb92] Burbeck, Steve. Applications Programming in Smalltalk-80TM: How to use
Model-View-Controller (MVC). ParcPlace Systems, Inc. 1987, 1992.
[Booc99] Booch, Grady, James Rumbaugh, Ivar Jacobson. The Unified Modeling
Language User Guide. Addison-Wesley, 1999.
[Benn00] Bennett, Simon, Steve McRobb, Ray Farmer. Object-Oriented Systems
Analysis and Design using UML. McGraw-Hill International Editions.
[Borl93] et. al. Borland. Borland ObjectWindows Programmer’s Guide. Borland
International. 1993.
[Chun00] Chung, L, Nixon, B, Yu, E. & Mylopoulos, J. Non-Functional Requirements
in Software Engineering. Boston: Kluwer Academic Publishers.
[Coop98] Cooper, James W. The Design Patterns Java Companion. Addison-
Wesley Design Pattern Series. 1998.
[Cons] World-Wide Web Consortium. World Wide Web Consortium (W3C).
[Cons00a] World-Wide Web Consortium. Simple Object Access Protocol (SOAP) 1.1.
W3C Website. May 2000.
[Cree99] Creel, Christopher. Requirements by Pattern. SD Magazine, CMP Media,
LLC. 1999.

[Davi92] Davis, A. Operational Prototyping: A New Development Approach.
Software, 9(5): 70–78. 1992
[Dick02] Dickerson, Peter. Jump2 User’s Manual. 5 December 2002.

[Dhar02] Dharmawan, Zulfikar S. Alat Bantu Requirements Management Berbasis
Web Dengan Memanfaatkan Dokumen Extensible Markup Language.
University of Indonesia Research Paper. 2002.
[Dary00] Daryl, Eamon Guiney; Kulak and Eric Lavkulich. Use case: Requirements
in Practice. Addison-Wesley. 2000.
[Dorf90] Dorfman, Merlin, and Richard H Thayer. Standards, Guidelines, and
Examples of System and Software Requirements Engineering. Los
Alamitos, CA: IEEE Computer Society Press. 1990.
[Duve02] Duveau, Laurent. Bench2. aldweb Site. 12 December 2002.

[Ecks99] Eckstein, Robert. XML Pocket Reference. O’Reilly. 1999.
[Fari03] Farine, Arnaud. SuperWaba: Java Language for PDA. SuperWaba
France. 2003.
[Fede] Federal Information Processing Standards Publications. Integration
Definition for Function Modeling (IDEF0).
[Fowl02] Fowler, Amy. A Swing Architecture Overview: The Inside Story on JFC
Component Design. Sun Microsystems Technical Document. 2002.

[Gamm95] Gamma, Erich, Richard Helm, Ralph Johnson, and John Vlissides.
Design Patterns: Elements of Reusable Object-Oriented Software.
Addison-Wesley Publishing Company. 1995.
[Gogu94] Goguen, J. & Jirotka, M. Requirements Engineering: Social and Technical
Issues. London: Academic Press. 1994.
[Grad92] Grady, R. Practical Software Metrics for Project Management and Process
Improvement. Englewood Cliffs, NJ: Prentice-Hall. 1992.
[Gudg00] Gudgeirsson, Gardar. Requirements Engineering and XML. University of
York Research Paper. 2000.
[Grah99] Graham, Ian S, Liam Quinn. XML Specification Guide. Wiley. 1999.
[Gust99] Gustavsson, Andreas, & Mattias Ersson. Formalizing the Intent of Design
Patterns: An Approach Towards a Solution to The Indexing Problem.
Uppsala Universitet, Computing Science Department, Institute of
Technology. 1999.
[Haza03] Hazan, Guilherme C, Ed Crandell. SuperWaba FAQ. February 14,
[IBM] et. al., IBM. OpenDoc.
[Inco02] INCOSE RM Tools Working Group. Tools Survey: Requirements Management
(RM) Tools. International Council on Systems Engineering. December
29, 2002.
[Jark98] Jarke, Matthias. Requirements Tracing: Communications of the ACM.
1998. 41(12):32-36.
[Jone95] Jones, David A., Donald M. York, John F. Nallon, Joseph Simpson.
Factors Influencing Requirements Management Toolset Selection. INCOSE
Requirements Working Group. 1995.

[Kicz97] Kiczales, Gregor, et. al. Aspect-Oriented Programming. ECOOP 1997.

[Koto98] Kotonya, Gerald, Ian Sommerville. Requirements Engineering – Processes
and Techniques. Wiley. 1998.
[Lee02] Lee, Chr Clemens. JavaNCSS – A Source Measurement Suite for Java.
[Lams98] van Lamsweerde, A. Darimont, R. & Letier, E. Managing Conflicts in
Goal-Driven Requirements Engineering. IEEE Transactions on Software
Engineering, 24(11): 908-926. 1998
[Leff00] Leffingwell, Dean & Don Widrig. Managing Software Requirements: A
Unified Approach. Addison-Wesley. 2000.
[Maid96] Maiden, N. CREWS-SAVRE: Scenarios for Acquiring and Validating
Requirements. Automated Software Engineering. 5(4): 419-446. 1996
[Marc99] Marchal, Benoiˆt. XML By Example. Que. 1999.
[McDe94] McDermid, John. Software Engineer’s Reference Book. Butterworth
Heinmann. 1994.
[Micr] et. al. Microsoft. BizTalk.
[Nuse00] Nuseibeh, Bashar, & Steve Easterbrook. Requirements Engineering: A
Roadmap. Department of Computing, Imperial College, London, UK and
Department of Computer Science, University of Toronto, Ontario,
Canada (respectively). 2000.
[Oxfo90] Oxford Dictionary of Computing. Oxford University Press. 1990
[Palm] et. al. Palm. Zen of Palm. Palm, Inc.
[Palm02] Palm OS® 5 Development Overview. PalmSource, Inc. 2002.

[Pres01] Pressman, Roger S. Software Engineering: A Practitioner’s Approach.
McGraw-Hill Higher Education. 2001.
[Robb01] Robbins, Stephen P. Organizational Behavior 9th ed. Prentice-Hall
International, Inc. 2001.
[Saut03] Sauter, Vicky. The King’s Companion. 2003.
[Shaw96] Shaw, M & Gaines B. Requirements Acquisition. Software Engineering
Journal, 11(3): 149-165. 1996
[Shah02] Shahab, Quonita M. Aspect-Oriented Programming (AOP) untuk Menangani
Masalah pada Software Modularity. University of Indonesia Research
Paper. 2002.
[Stan97] The Java Dependency Mechanism and the MVC Approach. Stanford
Genome. 1997.

[Sun00a] Java™ 2 SDK, Standard Edition Documentation, version 1.3. Sun Microsystems.
[Sun00b] Java™ 2 Micro Edition (J2ME) Technology for Creating Mobile Devices.
Sun Microsystems. May 19, 2000.
[Sun01a] J2EE Design Patterns. Sun Microsystems. 2001.
[Sun02a] What is JavaTM Technology? Sun Microsystems. 24 June 2002.

[Sun03a] The Java Tutorial: Creating a GUI with JFC/Swing. Sun Microsystems,
Inc. 1995-2003.
[Sun03b] The Java Tutorial: Learning the Java Language. Sun Microsystems, Inc.
[Syba02] PowerDesigner OOM User’s Guide. Sybase PowerDesigner Help Files,
version 9.5.1. December 2002.
[Wall00] Wallace, Nathan. Design Patterns in Web Programming. E-gineer article.
March 8th, 2000.
[Whit99] Whitten, Bentley, et. Al. System Analysis and Design Methods.
McGraw-Hill. 1999.
[Wieg99] Wiegers, Karl E. Software Requirements. Microsoft Press. 1999.
[Wieg00] Wiegers, Karl E. When Telepathy Won’t Do: Requirements Engineering
Key Practices. Cutter IT Journal. May 2000.
[Wild99] Wild, Rick. Happy Fingers. WabaSoft. 1999.

[Vill99] Viller, S & Sommerville, I. Social Analysis in the Requirements Engineering
Process: from ethnography to method. 4th International Symposium
on Requirements Engineering (RE ‘99), Limerick, Ireland, 7-11th June
[Zave97] Zave, P. Classification of Research Efforts in Requirements Engineering.
ACM Computing Surveys, 29(4): 315-321. 1997.

•Self-service, contohnya mesin ATM.
•Antar sistem, contohnya transaksi antar
Dari definisi di atas, maka sebuah servis
yang diciptakan dengan prinsip SOA dan
didukung oleh sistem TI harus mendukung
secara langsung servis yang diberikan
perusahaan kepada customer, client, partner,
masyarakat dan organisasi lain.
SOA dan Web Service
Web Service adalah
sebuah standar yang
sebenarnya telah
ada sebelum SOA
dikenal. Web service
pada dasarnya
adalah sebuah
abstraksi dalam
p e n g emb a n g a n
software yang memungkinkan
dalam sebuah
aplikasi saling berinteraksi
tanpa ada
batasan bahasa
pemrograman yang
digunakan atau host
dimana servis itu dieksekusi.
Gabungan SOA dan Web Service merupakan
hubungan yang saling menguntungkan
keduanya. Web Service semakin
diterima dengan luas karena manfaat yang
diberikan oleh SOA, sedangkan SOA
mendapatkan keuntungan karena sifat Web
Service yang merupakan standar terbuka.
Jadi SOA yang diimplementasikan dengan
web service akan dapat berinteraksi dengan
A Service-Oriented Architecture (SOA) is
a style of design that guides all aspects of
creating and using business services
throughout their lifecycle (from conception to
retirement), as well as defining and provisioning
the IT infrastructure that allows
different applications to exchange data and
participate in business processes regardless
of the operating systems or programming
languages underlying those applications. [1]
Dewasa ini dunia bisnis berkembang
dengan sangat pesat. Banyak perusahaan
baru muncul dan tenggelam dalam waktu
yang singkat. Semua ini merupakan
tantangan dan menimbulkan pertanyaan.
Bagaimana dunia bisnis yang kita geluti bisa
tetap bertahan? Mengapa ada perusahaan
yang begitu digdaya tetap menjadi unggul
walaupun diserang oleh berbagai kompetitornya?
Mengapa pula ada perusahaan
yang memiliki visi dan sumber daya bagus
tetapi tidak dapat bertahan lama? Kuncinya
adalah servis. Semua perusahaan (komersil
maupun pemerintah) pada dasarnya memberikan
servis kepada konsumen. Satu hal
yang sering dilupakan adalah bahwa customer
tidak peduli dengan teknologi, tetapi
peduli pada servis dan pengiriman yang
efektif [2]. Mungkin saja, dengan teknologi
yang mutakhir konsumen akan tertarik
dengan produk yang ditawarkan. Kendalanya
adalah, dalam dunia yang mana
informasi dapat dengan mudah diperoleh,
masalah teknologi menjadi sesuatu yang
tidak bisa menjadi andalan satu-satunya.
Cepat atau lambat kompetitor kita akan
menguasai teknologi itu atau bahkan melebihinya.
Satu-satunya yang membuat
customer tetap setia adalah pelayanan yang
Untuk dapat bertahan dalam iklim yang
serba cepat ini, perusahaan memerlukan
flexibilitas dan efisiensi yang tinggi. Flexibel
terhadap perubahan dalam bisnis akan
membuat perusahaan mudah beradaptasi
terhadap perubahan. Efisiensi dalam memanfaatkan
resource yang ada akan memaksimalkan
aset dan menambah keuntungan
Apakah SOA itu?
Semua perusahaan dan organisasi pemerintah
pada dasarnya memberikan
servis, contohnya:
•Bank: tabungan, kartu kredit, box penyimpanan,
•Asuransi: asuransi mobil, rumah, kesehatan,
•Kepolisian: penegakan hukum, pendidikan
Servis dapat berupa:
•Lewat manusia, contohnya teller pada
Mengapa SOA?
Mengapa kita meminta tolong orang lain
untuk mengerjakan sesuatu? Karena
mereka adalah ahlinya. Mengkonsumsi
suatu servis untuk menyelesaikan suatu
permasalahan biasanya lebih murah dan
lebih efektif daripada jika harus dikerjakan
sendiri sementara kita bukan ahlinya dalam
permasalahan itu. Dapatkah dibayangkan
jika kita harus melakukan segala hal yang
kita perlukan sendirian? Pada saat ini
kehidupan kita sedikit banyak telah
berorientasi kepada servis misalnya servis
transportasi, telekomunikasi, ritel, kesehatan,
dan finansial.
Analogi yang sama dapat kita gunakan
untuk menjawab
a n y a a n
“Mengapa kita memerlukan SOA (Service-
Oriented Architecture)?”
Sebenarnya SOA sama saja dengan proses
lain yang bertujuan untuk memodularisasi
perangkat lunak. Proses ini telah berlangsung
sekian lama dalam industri TI. Perbedaannya
adalah bahwa SOA memberi
kesempatan kepada perusahaan untuk
mengidentifikasikan core competency
mereka dan untuk menentukan apakah core
competency tersebut akan disediakan
sebagai servis kepada industri dan partner
bisnis. Dan sebaliknya, apakah suatu
perusahaan memutuskan bahwa apa yang
semula dianggap sebagai core competency
sebenarnya bukan core competency sehingga
mereka memutuskan untuk membeli
saja servis yang disediakan oleh pihak lain.
Diharapkan dengan memakai SOA, respon
bisnis terhadap perubahan kondisi pasar
akan lebih cepat dan lebih sedikit memakan
biaya karena alih-alih harus membuat dari
awal aplikasi yang diperlukan, dimungkinkan
untuk melakukan penggunaan
kembali aset TI yang sudah ada, tak peduli
apakah itu milik sendiri maupun harus
memakai dari pihak lain.
Loose Coupling
Syarat agar tujuan SOA tercapai pastinya
tidak mudah. Servis yang tersedia harus
memiliki penawaran yang jelas, mudah
diakses, dan mudah digunakan. Servis juga
Service types
Service-Oriented Architecture: Selayang Pandang
SOA: Selayang
dan Produk
Aplikasi Baru
di Portal
Tips & Tricks 4
Immune OR
eBdesk in a
SOA, SOAP, dan Produk eBdesk
Maret – April 2006
• (Web) Services
• Produk eBdesk
• SOA dalam aksi
(portal channel)
• Immune OR
eBdesk Technology Jl. Raden Patah No. 21 Bandung Indonesia 40132 Tlp. 022-2502423 Fax. 022-2533792
ke hal. 2 …
ke hal. 3 …
Sri Ariyani, Head of Product Engineering-ET
Subroto, Head of Product Maintenance-ET
P A G E 2
Service-Oriented Architecture: Selayang Pandang…
Menambahkan Aplikasi Baru di Portal eBdesk
“Semudah meletakkan kertas di atas meja
kemudian menulis di atasnya…!”
Membangun aplikasi baru di atas portal eBdesk
terdengar seperti sesuatu yang sulit. Hal ini
mungkin disebabkan orang lebih terbiasa
dengan mindset membangun program di atas
sistem operasi dan bahasa tertentu. Sebenarnya,
desain portal ini telah dirancang untuk
tujuan pembangunan berbagai aplikasi baru
yang akan berjalan diatasnya (add-on application)
dengan sangat mudah, melalui berbagai
bahasa pemrograman yang bervariasi. Anda
tinggal memilih bahasa yang Anda sukai dan
kemudian mengintegrasikannya ke portal
eBdesk. Semudah Anda meletakkan kertas di
atas meja dan kemudian menulis di atasnya.
Sekedar contoh, Anda dapat dengan mudah
membangun aplikasi baru yang menggunakan
web service. Anda juga dapat me-reuse web
service, misalnya membuat dua client yang
memakai satu service menggunakan PHP.
Agar memperoleh gambaran nyata tentang
pembangunan aplikasi baru di portal eBdesk,
marilah kita buat sebuah channel kecil bernama
“Dictionary” di Frontpage, yaitu sebuah aplikasi
kamus online.
Kembali ke cerita awal, semudah meletakkan
kertas. Ibaratkan aplikasi yang Anda bangun
adalah sebuah kertas, maka mejanya adalah
database eBdesk.
“Tapi di
d a t a b a s e
eBdesk ada
lebih dari 300
tabel! ”
J a n g a n
k h a w a t i r ,
meja seluas
300 cm2 tentu
tidak akan
t e r p a k a i
semua untuk
m e n a r u h
benda seluas
4 cm2 bukan?
Begitulah… kita hanya butuh empat buah tabel
saja untuk meletakkan aplikasi baru kita di
portal. Keempat tabel itu adalah:
1)EB_CHANNELS: Mendaftarkan atribut
channel yang dibuat, khususnya nama
channel, yaitu Dictionary beserta ID channelnya
2)EB_HANDLES: Mendaftarkan aplikasi sebagai
pengisi channel. Program yang akan
mengisi channel Dictionary adalah misc-fpdict.
pemetaan channel dengan handle-nya
posisi channel, dalam hal ini channel Dictionary
berada di bawah channel Frontpage-
Home karena channel Dictionary akan dimunculkan
di channel Frontpage-Home
Apakah Anda melihat template query diatas
begitu rimbun seperti hutan perawan? Jika iya,
Anda cukup berkonsentrasi ke bagian yang
dicetak tebal saja karena bagian lainya
cenderung tetap dan dapat di jadikan template
untuk pembuatan aplikasi di atas portal
eBdesk. Jadi, jika ingin membangun channel
baru, Anda cukup meng-edit template query
masing-masing perusahaan itu menggunakan
aplikasi yang tidak bisa saling berkomunikasi
sehingga cara yang mungkin dilakukan
hanyalah cara manual yang sudah pasti
akan memakan waktu lama. Jika semua
aplikasi yang dipakai sudah menerapkan
SOA, masing-masing dapat saling berkomunikasi
sehingga diperoleh hasil/respon realtime.
Bayangkan juga sebuah agen perjalanan
yang menyediakan jasa wisata liburan.
Perusahaan ini harus bekerjasama dengan
hotel dan jasa angkutan yang ada di lokasi
wisata. Solusi yang umum dilakukan adalah
membuat sistem integrasi untuk aplikasi
yang ada. Itu berarti untuk setiap pembukaan
lokasi wisata baru atau penambahan
hotel baru, sistemnya harus di-setup agar
dapat menyesuaikan. Proses setup ini jelas
memakan waktu dan biaya yang tidak
sedikit jika tidak menggunakan prinsip SOA.
SOA dan Akses Multi-channel
Sekarang ini hampir semua bank sudah
memungkinkan nasabahnya mengakses
layanan dari berbagai sumber, mulai dari
cara konvensional melalui teler, cara layanan
mandiri melalui ATM, lewat internet atau
handphone, dan layanan hotline phone
banking. Semua ini bertujuan makin memudahkan
nasabah untuk mendapatkan layanan.
Tetapi jika semua access-point itu tidak
terintegrasi dengan baik, bukan kepuasan
yang akan didapatkan nasabah.
Sebuah Permulaan dari Perjalanan
Penerapan SOA pada perusahaan jelas
merupakan investasi yang mahal dan berjangka
panjang. Perusahaan tidak akan
mendapatkan manfaatnya secara langsung
hanya dengan mengganti semua aplikasi
yang dipakai mendukung SOA. Hanya ketika
perusahaan dapat membuat proses bisnis
baru, dan membuat aplikasi hanya dengan
menggunakan servis yang telah ada baik
sebagian maupun keseluruhan, barulah
perusahaan itu memperoleh manfaat SOA.
Ketika perusahaan itu merger dengan perusahaan
lain dan diperlukan sebuah sistem
pelaporan baru yang mengintegrasikan
sistem yang ada, dapat dibuat dengan lebih
cepat, barulah manfaat SOA dapat dirasakan.
Penerapan SOA adalah sebuah awal dari
perjalanan untuk mendapatkan fleksibilitas
aplikasi yang digunakan untuk mendukung
proses bisnis. SOA akan memisahkan mana
yang menjadi keahlian orang TI dan orang
bisnis. Tugas orang TI adalah merancang
servis, sedangkan tugas orang bisnis adalah
mengkombinasikan servis-servis yang ada
untuk menghasilkan sebuah nilai baru, yang
pada akhirnya menjadi sebuah keuntungan
baru perusahaan.
[1] Understanding SOA with Web Services, Eric
Newcomer & Greg Lomow, Addison Wesley Prefosesional,
[2] Service Blueprint: Roadmap for Execution, Ravi
Kalakota & Marcia Robinson, Addison Wesley, 2003
produk lain yang sama-sama menggunakan
web service tidak peduli vendor pembuatnya.
SOA dan Integrasi
Peranan SOA dalam integrasi proses bisnis,
bisa dalam internal perusahaan maupun antar
perusahaan. Dalam internal perusahaan,
penerapan SOA memungkinan unit-unit bisnis
bekerja secara sinergi, dari pabrikasi hingga
distribusi dapat lebih sinkron.
Kerjasama antar perusahaan bukan hal yang
mustahil lagi pada masa ini. Sebuah perusahaan
yang membuka layanan pembelian online
harus dapat mengirimkan produknya kepada
c u s -
t o m e r .
Untuk itu,
ia harus
s a m a
a g e n
pengi r i -
m a n ,
y a n g
a k a n
s a m a
l a g i
j a s a
p e n e r -
k a r g o .
in Banking
eBdesk Technology Jl. Raden Patah No. 21 Bandung Indonesia 40132 Tlp. 022-2502423 Fax. 022-2533792
A Service-Oriented
Architecture (SOA) is
a style of design that
guides all aspects of
creating and using
business services
throughout their lifecycle
(from conception to
retirement), as well as
defining and provisioning
the IT infrastructure
that allows different
applications to exchange
data and participate in
business processes
regardless of the
operating systems or
programming languages
u n d e r l y i ng those
Agus Pratondo, Head of QA/QC-ET
ke hal. 3 …
Channel Dictionary
berbahasa Inggris dan
insert into EB_CHANNELS
) values (51401888,3,’Dictionary’,’eBdesk Online Dictionary’,’

insert into EB_HANDLES
_HDBPASSWORD,EB_HTIME_OUT) values (51401888,’localhost:80′,’/ebhtml/other-sites/misc/misc-fpdict.
insert into EB_CHANNEL_HANDLES (EB_CID,EB_HID) values (51401888,51401888)
insert into EB_CHANNEL_HIERARCHY (EB_CID,EB_CHPARENT) values (51401888,51401000)
Template query
TIPS: Pemrograman
C Programming
Swap tanpa variabel sementara
Kita dapat menggunakan operasi bit untuk
melakukan swap nilai variabel tanpa menggunakan
variabel sementara. Berikut ini contoh
fungsi yang akan melakukan swap variabel
bernilai integer:
void swap(int& __restrict a, int&
__restrict b)
assert(&a != &b);
a ^= b;
b ^= a;
a ^= b;
Integer to String
Memanfaatkan fungsi snprintf untuk membuat
fungsi untuk mengubah integer ke string. Berikut
ini adalah contoh fungsi yang akan mengubah
integer dari parameter masukan menjadi string:
char* itoa(int num)
int size = log10(num) + 1;
char *x = malloc(size);
snprintf(x, size, “%d”, num);
HTML Programming
Menambah text pada dokumen HTML secara
langsung pada saat runtime (javascript).
Fungsi berikut ini akan menambahkan elemen

yang berisi text “Hello World” pada akhir
dokumen HTML.
function addHeading()
heading_node = document.createElement
heading_text = document.createTextNode
(“Hello World”);
Mengubah style dokumen HTML pada saat
runtime (javascript).
Fungsi berikut ini akan mengubah ukuran font
pada body HTML menjadi ukuran 14:
function changeSize()
body_tag = document.body; = “14pt”;
Agus Hilman, Head of Product Support-ET
SOA, SOAP, dan Produk eBdesk…
E D I S I : 1 P A G E 3
biasanya selalu tersedia namun bersifat idle hingga saat
muncul permintaan, serta tidak tergantung pada konteks
dari konsumen. Implementasi dari servis bisa berubah
namun perubahannya sebisa mungkin tidak merusak
pelayanan yang sedang diberikan kepada konsumen.
Secara teknologi, servis dapat disediakan oleh web service
yang bersifat loose coupling, sesuai yang diungkapkan
oleh Hao He di dalam sebuah artikelnya [1]:
SOA is an architectural style whose goal is to achieve
loose coupling among interacting software agents.
Berikut deskripsi dari loose coupling [3]:
The friction-free linking enabled by web services (or any
SOA). Loosely coupled services, even if they use incompatible
system technologies, can be joined together on
demand to create composite services, or disassembled just
as easily into their functional components. Participants
must establish a shared semantic framework to ensure
messages retain a consistent meaning across participating
Agar loose coupling tercapai, ada batasan arsitektural yang
harus dianut:
1) Menggunakan antarmuka yang sederhana yang hanya
menerima semantik umum dan tersedia secara universal.
2) Menggunakan message deskriptif yang menganut suatu
extensible schema. Schema membatasi struktur dan
vocabulary dari message. Extensible schema memungkinkan
kemunculan versi baru dari servis tanpa merusak
servis yang sudah ada.
Ada dua teknologi utama yang mendukung SOA yaitu
SOAP (Simple Object Access Protocol) dan REST
(Representational State Transfer). Yang akan kita bahas
berikutnya adalah yang pertama.
SOAP Version 1.2 (SOAP) is a lightweight protocol intended
for exchanging structured information in a decentralized,
distributed environment. It uses XML technologies
to define an extensible messaging framework providing a
message construct that can be exchanged over a variety of
underlying protocols. The framework has been designed to
be independent of any particular programming model and
other implementation specific semantics. [4]
Dua batasan arsitektural dari SOA difasilitasi oleh SOAP
yang merupakan protokol ringan untuk keperluan tukarmenukar
informasi terstruktur dengan menggunakan
teknologi XML yang bersifat extensible dan dapat dipertukarkan
melalui berbagai macam protokol.
eBdesk Product dan SOAP
Produk eBdesk menyediakan beberapa service yang
memakai teknologi SOAP antara lain:
- eBdesk Platform Services
- eBdesk Knowledge Services
- eBdesk eXpedition Workflow Engines
- eBdesk Calendar Services
Keempat jenis service tersebut merupakan back-engine dari
aplikasi-aplikasi web yang merupakan platform dan add-on
eBdesk eXpander yaitu aplikasi eBdesk eNcyclo Document
Management, eBdesk eXpedition Workflow, dan eBdesk
Seperti yang telah disampaikan pada bagian pertama, salah
satu latar belakang dari SOA adalah identifikasi core competency
atau spesialisasi. Keempat jenis servis yang dimiliki
Produk eBdesk memiliki spesialisasi masing-masing.
eBdesk Platform Services
Utamanya adalah mengelola entitas (user, group, organization),
sumber daya, serta hak aksesnya termasuk otentikasi
dan lisensi.
eBdesk Knowledge Services
Spesialisasinya adalah pada taxonomy, content management,
dan search. Terdiri atas beberapa web services yaitu:
- Taxonomy Server. Merupakan bagian dari eBdesk Knowledge
Services yang menangani pengelolaan taxonomy,
content submission, mengumpulkan content dari sumbersumber
yang telah ditentukan, menyediakan metadata dari
content yang tersimpan, serta mengelola content dengan
segala aktivitas yang berkaitan dengannya.
- Content Manager Engine. Merupakan bagian dari eBdesk
Knowledge Services yang berfungsi menyimpan dan mengirim
content dalam format asli, membuat indeks dari content yang
tersimpan, dan menyediakan version tracking dari content.
- Search Server. Merupakan bagian dari eBdesk Knowledge
Services yang menangani pencarian terhadap semua content
yang tersimpan.
eBdesk eXpedition Workflow Services
Spesialisasinya adalah pada pembuatan, eksekusi, dan
pengelolaan process definition. Terdiri atas beberapa web
services yaitu:
- Core Engine. Berfungsi untuk menangani inisiasi transaksi
dari suatu workflow, perutean, form submission, delegasi,
decision, tracking transaksi, serta pembatalan transaksi.
- Design Service. Berfungsi untuk membuat dan mengelola
form, membuat dan mengelola process definition, serta
menyediakan akses terhadap error log pada eksekusi database
query serta eksekusi script.
- Admin Service. Berfungsi untuk mengelola role, hak akses
dan data kontak user, custom database, serta melakukan
penghapusan transaksi.
- Moderator Engine. Berfungsi untuk mengambil data transaksi
yang sedang ditangani oleh Core Engine, membuat
statistiknya, serta menghasilkan report dengan pilihan-pilihan
Dengan mengatur tampilan di channel Personalization
> Page > Content yang di sebelah kirinya terdapat channel
Channels dan dilanjutkan meng-expand eBdesk > My
Desk > Frontpage > Home, serta men-cek Dictionary,
maka selesailah sudah proses registrasi channel ke portal.
Anda seperti baru saja meletakkan sebuah kertas di atas
meja, sangat mudah! Dan jangan lupa untuk mengeset
access-right user untuk aplikasi ini!
Anda sudah bisa melihat hasilnya di frontpage sebagai
“Loh, kok yang muncul pesan error ?!”
Pesan ini muncul karena memang tidak ada aplikasi yang
akan mengisi channel Dictionary. Kita baru saja meletakkan
‘sebuah kertas’ dan sama sekali belum ‘menulisnya’.
Untuk dapat menampilkan sesuatu, kita harus menuliskan
‘sesuatu’ di channel yang bersangkutan.
Pengisi channel Dictionary ini telah dideklarasikan di table
EB_HANDLES; di /ebhtml/other-sites/misc/misc-fpdict.
php (ebhtml adalah alias tempat file index portal).
Jika dibuat file program sederhana misc-fp-dict.php
seperti ini (sekedar menuliskan “hello…”) maka channel
sudah mampu menampilkan sebuah
pesan sederhana yang diinginkan.
Menambahkan Aplikasi Baru di Portal eBdesk…
De m i k i a n l a h ,
proses menulis
s e de r -
h a n a
baru di
portal eBdesk.
Untuk selanjutnya pemrograman dapat diperluas menjadi
program yang lebih menarik dan menggunakan teknologi yang
telah ada. Aplikasi Dictionary, merupakan contoh sederhana
pengembangan program di atas.
Aplikasi Dictionary ini menggunakan sebuah service sederhana
yang dibuat dengan PHP untuk menangani pencarian
terjemahan Bahasa Indonesia – Inggris, dan menambahkan
perbendaharaan kata dalam databasenya.
File misc-fp-dict.php bersama dengan file ebtag.h yang
berfungsi untuk pengintegrasian dengan
theme portal, akan membangkitkan dokumen
yang di dalamnya terdapat fungsi-fungsi
Javascript. Fungsi ini akan melakukan request
ke svc-dict.php. File terakhir ini berperan
sebagai service untuk melayani permintaan
operasi Dictionary yang berupa mencari
terjemahan dari Bahasa Inggris ke Indonesia
dan sebaliknya serta menambah perbendawww.
eBdesk Technology Jl. Raden Patah No. 21 Bandung Indonesia 40132 Tlp. 022-2502423 Fax. 022-2533792
haraan kata tanpa melakukan request sebuah page utuh
di portal eBdesk. Fungsi Javascript diletakkan di file
terpisah di rq-dict.js dan AjaxRequest.js (merupakan
file third party, Author: Matt Kruse). Operasi detil dari
service Dictionary diletakkan di get-word.php yang akan
memanfaatkan file global.php untuk urusan koneksi ke
Untuk sempurnanya aplikasi Dictionary ini maka perlu file
xml untuk keperluan mendukung multi-bahasa yaitu :
eb51401888-en.xml untuk bahasa Inggris dan
eb51401888-id.xml untuk bahasa Indonesia. File image
untuk button juga perlu ditambahkan yaitu search.gif dan
Hasilnya dapat dilihat di hal. 2.
Untuk implementasi detil aplikasi Dictionary ini, Anda
dapat mendownload source code-nya di:

Mudah bukan? Coba dan buktikan sendiri!
[eBdesk eXpander SDK] Beginner’s Guide PHP Programmers.pdf

Tulisan “Hello …” di channel
yang telah ditentukan.
- Archive Audit Engine. Melakukan audit trail terhadap
transaksi-transaksi yang pernah dieksekusi oleh Core
Engine serta menampilkan data transaksi yang pernah
eBdesk Calendar Service
Terdiri atas satu service yang menangani pengelolaan
event, termasuk delegasi, sharing, recurrence, serta
undangan rapat.
Merujuk kepada cita-cita yang diinginkan oleh adanya
SOA yaitu terciptanya nilai baru dari penggunaan kembali
servis-servis yang sudah tersedia, muncul pertanyaan:
bisakah servis-servis yang disediakan oleh Produk
eBdeskl dipakai untuk mencapai hal itu? Akankah servisservis
tersebut hanya akan berperan sebagai backengine
dari web client application yang sudah ada
Secara teknik, karena dibangun menggunakan teknologi
SOAP, servis-servis yang sudah ada dapat dipakai
dalam SOA dengan pembenahan terus-menerus. Pembenahan
adalah sesuatu yang wajar dalam SOA karena
sebuah sistem perangkat lunak yang dibangun dengan
SOA dibangun untuk siap diubah, bukan agar tetap
selamanya. Pembangunannya juga cenderung bersifat
Akan tetapi, SOA bukan melulu soal teknologi. SOA
semestinya membawa bisnis dan TI untuk dipadukan. Ini
menjadi pekerjaan rumah dari sisi bisnis. Pada penerapan
yang paling sederhana, servis-servis tersebut dapat:
- Reusable untuk membuat client aplications baru yang
berbeda dengan yang ada sekarang, tidak hanya berbentuk
web client, tidak menawarkan end-user feature
yang sama, tidak menggunakan tampilan yang sama
- Reusable untuk membuat solusi-solusi permasalahan
yang muncul
- Combine satu sama lain untuk membentuk servis baru
Apa lagi yang dapat dilakukan dari servis yang
disediakan Produk eBdesk bersama servis disediakan
pihak lain, menjadi sebuah tantangan kreativitas dalam
hal bisnis.
[1] What is Service-Oriented Architecture? by Hao He September
30, 2003,
[2] Constructing Software For Service Oriented Architecture, by
Jean-Jacques Dubray, Ph.D. Lecture, 03/26/2004, The Pennsylvania
State University, The Smeal College of Business Administration,

[5] Insight and outlook, Part 1: Why and when should you choose
Aplikasi Populer
Merupakan web browser yang sedang
“naik daun” dan tampil makin matang serta
bersaing melawan dominasi MSIE.
•Tekan tombol Ctrl+K untuk mengakses
langsung Search Box yang terletak pada
bagian kanan atas.
•Dengan posisi kursor pada Search Box,
anda dapat mengubah Search Engine
yang akan digunakan dengan menekan
Ctrl+Up atau Ctrl+Down.
•Ctrl+Shift+Del untuk menghapus datadata
privat, seperti history, form, password,
cookies, cache.
Merupakan salah satu jabber-client (opensource)
yang berjalan di atas sistem
operasi windows dan dibuat menggunakan
Borland Delphi. Aplikasi ini juga merupakan
basis dari eBdesk Messenger.
•Ctrl+E untuk menampilkan emoticon yang
bisa digunakan untuk percakapan.
•Ctr+P untuk mengubah dan menampilkan
Custom Status.
Produk eBdesk
•Calendar. Anda dapat melihat langsung
daily events pada hari tertentu aplikasi
Calendar dengan mengklik tanggal tertentu
pada channel Calendar yang terletak
pada frontpage.
•Mail. Anda dapat mem-filter mail dengan
menggunakan Filtering Rules yang dapat
diakses melalui Mail > Settings > Filters
> Content. Filter dapat dilakukan terhadap
mail yang datang berdasarkan
header From, To/Cc, Subject, dan Body
yang mengandung kata-kata tertentu
untuk ditempatkan pada folder tertentu
sehingga lebih teratur.
•Mail. Jika anda sedang cuti, maka anda
dapat mengaktifkan fungsi Vacation
Response yang akan menjawab setiap
email yang masuk dengan jawaban yang
telah ditentukan sebelumnya, misalnya
dengan memberitahukan bahwa anda
sedang liburan dan akan kembali dalam
beberapa hari lagi. Fungsi ini dapat diakses
melalui menu Mail > Settings >
Vacation Response.
•Polling. Anda dapat mengubah tipe chart
pada polling dengan meng-klik chart pada
channel polling dan pilih salah satu tipe
yang disediakan (3D View, Line/Area/Bar/
Rubrik ini khusus untuk membahas permasalahan-
permasalahan seputar deployment Produk-
Produk eBdesk, pemrograman aplikasi untuk
portal eBdesk, dan hal umum serta FAQ
teknologi yang sedang berkembang (technology
Dua hal yang akan dibahas, yaitu:
•Immune. Merupakan tindakan-tindakan
pencegahan yang seyogyanya dilakukan untuk
meminimasi terjadinya hal-hal yang menyimpang
dari perencanaan awal baik dalam memrogram
atau men-deploy sebuah aplikasi di portal
•Cure. Merupakan tindakan-tindakan
“pengobatan” atau yang lebih dikenal dengan
troubleshooting jika terjadi kesalahan.
Bagi Anda yang memiliki pertanyaan-pertanyaan
atau permasalahan seputar Produk eBdesk, dapat
me n y amp a i k a n n y a v i a e -ma i l k e yang selanjutnya akan
dimuat dan dibahas di rubrik ini.
eBdesk berdiri tahun 1998, awal dari dimulainya bisnis Internet. Bermula dengan pengembangan produk
corporate portal, saat ini eBdesk berkembang menjadi perusahaan business enabler dengan produkproduk,
solusi-solusi dan layanan-layanannya. Merosotnya bisnis global dan jatuhnya bisnis dotcom dalam
tahun pertama berdiri memang merupakan pukulan telak dan sangat berat, tetapi eBdesk tidak hanya
mampu bertahan namun juga makin melejit dari hari ke hari.
Organisasi eBdesk terdiri atas eBdesk Ltd sebagai holding company, terbagi menjadi Product &
Technology, International Operation, and Solutions & Services. Organisasi tersebut mencerminkan visi,
misi, dan strategi kami untuk membangun produk, menyediakan solusi dan layanan untuk pasar
internasional. Mei 2005, jumlah konsumen telah mencapai lebih dari 100 di penjuru dunia, kebanyakan
adalah perusahaan besar dengan lebih dari 10.000 karyawan.
eBdesk bekerja sama dengan mitra dalam bidang marketing, implementasi, pembangunan solusi, sebagai
bagian dari program kemitraan internasional. Hal ini juga mencakup persetujuan distribusi, bundle produk,
pengembangan bersama, atau joint venture untuk membentuk sebuah perusahaan baru.
eBdesk Technology Jl. Raden Patah No. 21 Bandung Indonesia 40132 Tlp. 022-2502423 Fax. 022-2533792
Agus Hilman, Head of Product Support-ET
Ada 4 tipe paket utama produk eBdesk, antara lain:
• eBdesk eXpander Corporate Portal
Paket aplikasi ini terdiri atas dua bagian besar:
- Platform. Basis dasar dari aplikasi-aplikasi add-on yang
berjalan di atasnya.
- Collaboration. Aplikasi-aplikasi add-on untuk kolaborasi
seperti mail, calendar, forum, news, dsb.
• eBdesk eXpedition Workflow
User dapat mendesain, mensimulasikan, menerapkan,
memantau, dan mengelola workflow banyak proses bisnis
• eBdesk eNcyclo Document Management
Mengorganisir semua tipe dokumen, mulai dari pembuatan,
persetujuan, pengarsipan, sampai distribusi.
• eBdesk eXpert Knowledge Management
Memelihara siklus data, informasi, pengetahuan. Memiliki
taksonomi, spider, ahli, dan pembentukan komunitas.
Immune OR Cure?
Slamet Puji Santuso, Product VP-ET
Update Produk eBdesk
eBdesk eXpander Corporate Portal
• News: Paging, Related Articles
• Forum: plain view, grouping category
• Mail: user search, user list paging
• Organization: open/closed mailing-list
eBdesk eXpedition Workflow
• Mass Processing
• Load on Demand
• AutoSubmitter
• Blog
• Bookmark (Frontpage channel)
• Dictionary (dimuat di edisi ini)

pemrograman .net

Common Programming Error 5.5
When using the optional Case Else statement in a Select Case structure, failure to
place the Case Else as the last Case is a syntax error. 5.5
Testing and Debugging Tip 5.3
Provide a Case Else in Select Case structures. Cases not handled in a Select Case
structure are ignored unless a Case Else is provided. The inclusion of a Case Else statement
facilitates the processing of exceptional conditions. In some situations, no Case Else
processing is needed. 5.3
Case statements also can use relational operators to determine whether the controlling
expression satisfies a condition. For example
Case Is < 0
uses keyword Is along with the relational operator, <, to test for values less than 0.
Figure 5.11 flowcharts the Select Case structure.
Fig. 5.11 Select Case multiple-selection structure flowchart.
Case a Case a action(s)
Case b action(s)
Case z
Case Else action(s)
Case b
Case z action(s)
Chapter 5 Control Structures: Part 2 159
Again, note that (besides small circles and flowlines) the flowchart contains only rectangle
and diamond symbols. Imagine, as we did in the previous chapter, that the programmer
has access to a deep bin of empty structures. This time, the bin contains Select
Case structures, and the programmer can stack and nest as many as are necessary with
other control structures to form a structured implementation of an algorithm’s flow of control.
The programmer fills the rectangles and diamonds with actions and decisions appropriate
to the algorithm. Although nested control structures are common, it is rare to find
nested Select Case structures in a program.
In Chapter 10, Object-Oriented Programming: Part 2, we present a more elegant
method of implementing multiple selection logic. We use a technique called polymorphism
to create programs that are often clearer, more manageable, and easier to extend than programs
that use Select Case logic.
5.6 Do/Loop While Repetition Structure
The Do/Loop While repetition structure is similar to the While structure and Do
While/Loop structure. In the While and Do While/Loop structures, the loop-continuation
condition is tested at the beginning of the loop, before the body of the loop is performed.
The Do/Loop While structure tests the loop-continuation condition after the loop
body is performed. Therefore, in a Do/Loop While structure, the loop body is always executed
at least once. When a Do/Loop While structure terminates, execution continues
with the statement after the Loop While clause. The program in Fig. 5.12 uses a Do/Loop
While structure to output the values 1–5.
Testing and Debugging Tip 5.4
Infinite loops occur when the loop-continuation condition in a While, Do While/Loop or
Do/Loop While structure never becomes false. 5.4
1 ' Fig. 5.12: DoWhile.vb
2 ' Demonstrating the Do/Loop While repetition structure.
Module modDoWhile
Pemrograman Web/TI/ AK045216/2 sks
Contoh script ASP- 1
•VBScript adalah bahasa scripting standar untuk membuat halaman ASP.
Pada contoh-contoh script berikut digunakan VBScript:
•Contoh 1 :
– Langkah pembuatan :
• Masukkan text ‘Hello World’ pada variabel FirstVar
• Buat tag awal HTML
• Gunakan untuk menampilkan isi variabel FirstVar
• Akhiri tag HTML
– Script lengkap :

• Example 1


Sub Main()
7 Dim counter As Integer = 1
‘ print values 1 to 5
10 Do
11 Console.Write(counter & ” “)
12 counter += 1
13 Loop While counter 5
15 End Sub ‘ Main
17 End Module ‘ modLoopUntil
1 2 3 4 5
Fig. 5.14 Do/Loop Until repetition structure (part 2 of 2).
Fig. 5.15 Do/Loop Until repetition structure flowchart.
162 Control Structures: Part 2 Chapter 5
Testing and Debugging Tip 5.6
In a counter-controlled loop, make sure the control variable is incremented (or decremented)
appropriately in the body of the loop. 5.6
Testing and Debugging Tip 5.7
In a sentinel-controlled loop, make sure the sentinel value is eventually input. 5.7
Testing and Debugging Tip 5.8
Including a final value in the condition of a repetition structure (and choosing the appropriate
relational operator) can reduce the risk of off-by-one errors. For example, in a While
loop used to print the values 1–10, the loop-continuation condition should be counter <=
10, rather than counter < 10 (which is an off-by-one error) or counter 10
26 ‘ skip remaining code in loop only if counter = 5
27 If counter = 5 Then
28 Exit Do
29 End If
31 counter += 1
32 Loop
34 output &= “counter = ” & counter & _
35 ” after exiting Do Until/Loop structure” & vbCrLf
37 While counter <= 10
39 ' skip remaining code in loop only if counter = 7
40 If counter = 7 Then
41 Exit While
42 End If
44 counter += 1
45 End While
47 output &= "counter = " & counter & _
48 " after exiting While structure"
50 MessageBox.Show(output, "Exit Test", _
51 MessageBoxButtons.OK, MessageBoxIcon.Information)
52 End Sub ' Main
54 End Module ' modExitTest
Fig. 5.16 Exit keyword in repetition structures (part 2 of 2).
164 Control Structures: Part 2 Chapter 5
body of the If/Then structure (lines 27–29) does not execute, and counter is incremented
(line 31). However, when counter is 5, the Exit Do statement (line 28) executes,
terminating the loop. The assignment statement (lines 34–35) appends the value of
counter to output. Note that the program does not increment counter (line 31) after
the Exit Do statement executes.
The While structure (lines 37–45) behaves similarly to the Do While/Loop. In this
case, the value of counter is 5 when the loop begins executing. When counter is 7,
the Exit While statement (line 41) executes, terminating execution of the While structure.
Lines 47–48 append the final value of counter to String variable output, which
is displayed in a message dialog (lines 50–51).
Software Engineering Observation 5.1
Some programmers feel that Exit Do, Exit While and Exit For violate the principles
of structured programming. The effects of these statements can be achieved by structured
programming techniques that we discuss soon. 5.1
Software Engineering Observation 5.2
Debates abound regarding the relative importance of quality software engineering and program
performance. Often, one of these goals is accomplished at the expense of the other. For
all but the most performance-intensive situations, apply the following guidelines: First, make
your code simple and correct; then make it fast and small, but only if necessary. 5.2
5.9 Logical Operators
So far, we have studied only simple conditions, such as count 1000
and number sentinelValue. Each selection and repetition structure evaluated
only one condition with one of the operators >, =, <=, = and . To make a decision
that relied on the evaluation of multiple conditions, we performed these tests in separate
statements or in nested If/Then or If/Then/Else structures.
To handle multiple conditions more efficiently, Visual Basic provides logical operators
that can be used to form complex conditions by combining simple ones. The logical
operators are AndAlso, And, OrElse, Or, Xor and Not. We consider examples that use
each of these operators.
Suppose we wish to ensure that two conditions are both true in a program before a certain
path of execution is chosen. In such case, we can use the logical AndAlso operator as follows:
If gender = “F” AndAlso age >= 65 Then
seniorFemales += 1
End If
This If/Then statement contains two simple conditions. The condition gender = “F”
determines whether a person is female and the condition age >= 65 determines whether a
person is a senior citizen. The two simple conditions are evaluated first, because the precedences
of = and >= are both higher than the precedence of AndAlso. The If/Then statement
then considers the combined condition
gender = “F” AndAlso age >= 65
Chapter 5 Control Structures: Part 2 165
This condition evaluates to true if and only if both of the simple conditions are true. When this
combined condition is true, the count of seniorFemales is incremented by 1. However,
if either or both of the simple conditions are false, the program skips the increment and proceeds
to the statement following the If/Then structure. The readability of the preceding
combined condition can be improved by adding redundant (i.e., unnecessary) parentheses:
(gender = “F”) AndAlso (age >= 65)
Figure 5.17 illustrates the effect of using the AndAlso operator with two expressions.
The table lists all four possible combinations of true and false values for expression1 and
expression2. Such tables often are called truth tables. Visual Basic evaluates to true or false
expressions that include relational operators, equality operators and logical operators.
Now let us consider the OrElse operator. Suppose we wish to ensure that either or
both of two conditions are true before we choose a certain path of execution. We use the
OrElse operator in the following program segment:
If (semesterAverage >= 90 OrElse finalExam >= 90) Then
Console.WriteLine(“Student grade is A”)
End If
This statement also contains two simple conditions. The condition semesterAverage
>= 90 is evaluated to determine whether the student deserves an “A” in the course because
of an outstanding performance throughout the semester. The condition finalExam >=
90 is evaluated to determine if the student deserves an “A” in the course because of an outstanding
performance on the final exam. The If/Then statement then considers the combined
(semesterAverage >= 90 OrElse finalExam >= 90)
and awards the student an “A” if either or both of the conditions are true. Note that the text
“Student grade is A” is always printed, unless both of the conditions are false.
Figure 5.18 provides a truth table for the OrElse operator.
The AndAlso operator has a higher precedence than the OrElse operator. An
expression containing AndAlso or OrElse operators is evaluated only until truth or falsity
is known. For example, evaluation of the expression
(gender = “F” AndAlso age >= 65)
expression1 expression2 expression1 AndAlso expression2
False False False
False True False
True False False
True True True
Fig. 5.17 Truth table for the AndAlso operator.
166 Control Structures: Part 2 Chapter 5
stops immediately if gender is not equal to “F” (i.e., the entire expression is false); the
evaluation of the second expression is irrelevant because the first condition is false. Evaluation
of the second condition occurs if and only if gender is equal to “F” (i.e., the entire
expression could still be true if the condition age >= 65 is true). This performance feature
for the evaluation of AndAlso and OrElse expressions is called short-circuit evaluation.
Performance Tip 5.2
In expressions using operator AndAlso, if the separate conditions are independent of one
another, place the condition most likely to be false as the leftmost condition. In expressions
using operator OrElse, make the condition most likely to be true the leftmost condition.
Each of these suggestions can reduce a program’s execution time. 5.2
The logical AND operator without short-circuit evaluation (And) and the logical
inclusive OR operator without short-circuit evaluation (Or) are similar to the AndAlso
and OrElse operators, with one exception—the And and Or logical operators always
evaluate both of their operands. No short-circuit evaluation occurs when And and Or are
employed. For example, the expression
(gender = “F” And age >= 65)
evaluates age >= 65, even if gender is not equal to “F”.
Normally, there is no compelling reason to use the And and Or operators instead of
AndAlso and OrElse. However, some programmers make use of them when the right
operand of a condition produces a side effect (such as a modification of a variable’s value) or
if the right operand includes a required method call, as in the following program segment:
Console.WriteLine(“How old are you?”)
If (gender = “F” And Console.ReadLine() >= 65) Then
Console.WriteLine(“You are a female senior citizen.”)
End If
Here, the And operator guarantees that the condition Console.ReadLine() >= 65 is
evaluated, so ReadLine is called regardless of whether the overall expression is true or
false. It would be better to write this code as two separate statements—the first would store
the result of Console.ReadLine() in a variable, then the second would use that variable
with the AndAlso operator in the condition.
Testing and Debugging Tip 5.9
Avoid expressions with side effects in conditions; these side effects often cause subtle errors.5.9
expression1 expression2 expression1 OrElse expression2
False False False
False True True
True False True
True True True
Fig. 5.18 Truth table for the OrElse operator.
Chapter 5 Control Structures: Part 2 167
A condition containing the logical exclusive OR (Xor) operator is true if and only if
one of its operands results in a true value and the other results in a false value. If both operands
are true or both are false, the entire condition is false. Figure 5.19 presents a truth table
for the logical exclusive OR operator (Xor). This operator always evaluates both of its
operands (i.e., there is no short-circuit evaluation).
Visual Basic’s Not (logical negation) operator enables a programmer to “reverse” the
meaning of a condition. Unlike the logical operators AndAlso, And, OrElse, Or and
Xor, that each combine two conditions (i.e., these are all binary operators), the logical
negation operator is a unary operator, requiring only one operand. The logical negation
operator is placed before a condition to choose a path of execution if the original condition
(without the logical negation operator) is false. The logical negation operator is demonstrated
by the following program segment:
If Not (grade = sentinelValue) Then
Console.WriteLine(“The next grade is ” & grade)
End If
The parentheses around the condition grade = sentinelValue are necessary,
because the logical negation operator (Not) has a higher precedence than the equality operator.
Figure 5.20 provides a truth table for the logical negation operator.
In most cases, the programmer can avoid using logical negation by expressing the condition
differently with relational or equality operators. For example, the preceding statement
can be written as follows:
If grade sentinelValue Then
Console.WriteLine(“The next grade is ” & grade)
End If
This flexibility aids programmers in expressing conditions more naturally.
expression1 expression2 expression1 Xor expression2
False False False
False True True
True False True
True True False
Fig. 5.19 Truth table for the logical exclusive OR (Xor) operator.
expression Not expression
False True
True False
Fig. 5.20 Truth table for operator Not (logical NOT).
168 Control Structures: Part 2 Chapter 5
The Windows application in Fig. 5.21 demonstrates the use of the logical operators by
displaying their truth tables in six labels.
1 ‘ Fig. 5.21: LogicalOperator.vb
2 ‘ Using logical operators.
Public Class FrmLogicalOperator
5 Inherits System.Windows.Forms.Form
‘ Visual Studio .NET generated code
Private Sub FrmLogicalOperator_Load( _
10 ByVal sender As System.Object, _
11 ByVal e As System.EventArgs) Handles MyBase.Load
13 lblAndAlso.Text = “AndAlso” & vbCrLf & vbCrLf & _
14 “False AndAlso False: ” & (False AndAlso False) & _
15 vbCrLf & “False AndAlso True: ” & _
16 (False AndAlso True) & vbCrLf & _
17 “True AndAlso False: ” & (True AndAlso False) & _
18 vbCrLf & “True AndAlso True: ” & (True AndAlso True)
20 lblOrElse.Text = “OrElse” & vbCrLf & vbCrLf & _
21 “False OrElse False: ” & (False OrElse False) & _
22 vbCrLf & “False OrElse True: ” & (False OrElse True) & _
23 vbCrLf & “True OrElse False: ” & (True OrElse False) & _
24 vbCrLf & “True OrElse True: ” & (True OrElse True)
26 lblAnd.Text = “And” & vbCrLf & vbCrLf & _
27 “False And False: ” & (False And False) & vbCrLf & _
28 “False And True: ” & (False And True) & vbCrLf & _
29 “True And False: ” & (True And False) & vbCrLf & _
30 “True And True: ” & (True And True)
32 lblOr.Text = “Or” & vbCrLf & _
33 vbCrLf & “False Or False: ” & (False Or False) & _
34 vbCrLf & “False Or True: ” & (False Or True) & _
35 vbCrLf & “True Or False: ” & (True Or False) & _
36 vbCrLf & “True Or True: ” & (True Or True)
38 lblXor.Text = “Xor” & vbCrLf & _
39 vbCrLf & “False Xor False: ” & (False Xor False) & _
40 vbCrLf & “False Xor True: ” & (False Xor True) & _
41 vbCrLf & “True Xor False: ” & (True Xor False) & _
42 vbCrLf & “True Xor True: ” & (True Xor True)
44 lblNot.Text = “Not” & vbCrLf & vbCrLf & _
45 “Not False: ” & (Not False) & vbCrLf & “Not True: ” & _
46 (Not True)
48 End Sub ‘ FrmLogicalOperator_Load
50 End Class ‘ FrmLogicalOperator
Fig. 5.21 Logical operator truth tables (part 1 of 2).
Chapter 5 Control Structures: Part 2 169
Line 4 begins class FrmLogicalOperator. Recall from our discussion in Chapter
4 that Visual Studio creates the initial code for a Windows application. Programmers then
enhance this code to create their own applications. Because the code created by Visual
Studio uses many concepts that have not been presented yet, we replace the Visual Studio
generated code with the comment in line 7. In Chapter 12, we carefully explain the Visual
Studio generated code line-by-line. Line 9 begins the definition of procedure
FrmLogicalOperator_Load. An empty procedure definition for a Windows application
can be obtained by double-clicking the form in the Design view. Procedures created
this way are executed when the program loads. In this case, the procedure creates Strings
representing the truth tables of the logical operators and displays them on six labels using
the Text property. Lines 13–18 demonstrate operator AndAlso; lines 20–24 demonstrate
operator OrElse. The remainder of procedure FrmLogicalOperator_Load demonstrates
the And, Or, Xor and Not operators. We use keywords True and False in the
program to specify values of the Boolean data type. Notice that when a Boolean value
is concatenated to a String, Visual Basic concatenates the string “False” or “True”
on the basis of the Boolean’s value.
The chart in Fig. 5.22 displays the precedence of the Visual Basic operators introduced
so far. The operators are shown from top to bottom in decreasing order of precedence.
Operators Type
() parentheses
^ exponentiation
+ – unary plus and minus
* / multiplicative
\ integer division
Mod modulus
Fig. 5.22 Precedence and associativity of the operators discussed so far
(part 1 of 2).
Fig. 5.21 Logical operator truth tables (part 2 of 2).
170 Control Structures: Part 2 Chapter 5
5.10 Structured Programming Summary
Just as architects design buildings by employing the collective wisdom of their profession,
so should programmers design programs. Our field is younger than architecture is, and our
collective wisdom is considerably sparser. We have learned that structured programming
produces programs that are easier to understand, test, debug, modify and prove correct in a
mathematical sense than unstructured programs. Visual Basic’s control structures are summarized
in Fig. 5.23 and Fig. 5.24.
+ – additive
& concatenation
< >= = relational and equality
Not logical NOT
And AndAlso logical AND
Or OrElse logical inclusive OR
Xor logical exclusive OR
Fig. 5.23 Visual Basic’s single-entry/single-exit sequence and selection structures.
Operators Type
Fig. 5.22 Precedence and associativity of the operators discussed so far
(part 2 of 2).
If/Then structure
(single selection)
If/Then/Else structure
(double selection)
Select Case structure
(multiple selection)


Chapter 5 Control Structures: Part 2 171
Small circles in the figures indicate the single entry point and the single exit point of
each structure. Connecting individual flowchart symbols arbitrarily can lead to unstructured
programs. Therefore, the programming profession has chosen to employ only a limited
set of control structures and to build structured programs by combining control
structures in only two simple ways.
Fig. 5.24 Visual Basic’s single-entry/single-exit repetition structures.
Do/Loop Until structure
While structure For/Next structure
Do/Loop While structure
Do While/Loop structure Do Until/Loop structure
For Each/Next structure (introduced in Chapter 7)
172 Control Structures: Part 2 Chapter 5
For the sake of simplicity, only single-entry/single-exit control structures are used—
there is only one way to enter and only one way to exit each control structure. To connect
control structures in sequence to form structured programs, the exit point of one control
structure is connected to the entry point of the next control structure (i.e., the control structures
simply are placed one after another in a program). We call this process control structure
stacking. The rules for the formation of structured programs also allow control
structures to be nested, i.e., placed one inside the other. Figure 5.25 contains the rules for
the formation of properly structured programs. The rules assume that the rectangle flowchart
symbol can indicate any action, including input/output.
Applying the rules of Fig. 5.25 always results in a structured flowchart with a neat,
building-block appearance. For example, repeatedly applying rule 2 to the simplest flowchart
(Fig. 5.26) results in a structured flowchart that contains many rectangles in sequence
(Fig. 5.27). Notice that rule 2 generates a stack of control structures; therefore, we call rule
2 the stacking rule.
Rule 3 is the nesting rule. Repeatedly applying rule 3 to the simplest flowchart results
in a flowchart with neatly nested control structures. For example, in Fig. 5.28, the rectangle
in the simplest flowchart (in the top-left portion of the figure) is first replaced with a
double-selection (If/Then/Else) structure. Then, rule 3 is applied again to both rectangles
in the double-selection structure, replacing each of these rectangles with a doubleselection
structure. The dashed boxes around each of the double-selection structures represent
the rectangles that were replaced with these structures.
Good Programming Practice 5.4
Excessive levels of nesting can make a program difficult to understand. As a general rule, try
to avoid using more than three levels of nesting. 5.4
Rule 4 generates larger, more involved and deeply-nested structures. The flowcharts
that emerge from applying the rules in Fig. 5.25 constitute the set of all possible structured
flowcharts and the set of all possible structured programs.The structured approach has the
advantage of using only eleven simple single-entry/single-exit pieces and allowing us to
combine them in only two simple ways. Figure 5.29 depicts the kinds of correctly stacked
building blocks that emerge from applying rule 2 and the kinds of correctly nested building
blocks that emerge from applying rule 3. The figure also shows the kind of overlapped
building blocks that cannot appear in structured flowcharts.
Rules for Forming Structured Programs
1) Begin with the “simplest flowchart” (Fig. 5.26).
2) Any rectangle (action) can be replaced by two rectangles (actions) in sequence.
3) Any rectangle (action) can be replaced by any control structure (sequence, If/Then, If/
Then/Else, Select Case, While, Do/Loop While, Do While/Loop, Do Until/
Loop, Do/Loop Until, For/Next or the For Each/Next structure introduced in
Chapter 7, Arrays).
4) Rules 2 and 3 may be applied as often as you like and in any order.
Fig. 5.25 Structured programming rules.
Chapter 5 Control Structures: Part 2 173
If the rules in Fig. 5.25 are followed, an unstructured flowchart (such as that in
Fig. 5.30) cannot be created. If you are uncertain about whether a particular flowchart is
structured, apply the rules in Fig. 5.25 in reverse to try to reduce the flowchart to the simplest
flowchart. If the flowchart can be reduced to the simplest flowchart, the original flowchart
is structured; otherwise, it is not.
Structured programming promotes simplicity. Bohm and Jacopini have demonstrated
that only three forms of control are necessary:
• sequence
• selection
• repetition
Sequence is trivial. Selection is implemented in one of three ways:
• If/Then structure (single selection)
• If/Then/Else structure (double selection)
• Select Case structure (multiple selection)
It can be proven straightforwardly that the If/Then structure is sufficient to provide any
form of selection. Everything done with the If/Then/Else structure and the Select
Case structure can be implemented by combining multiple If/Then structures (although
perhaps not as elegantly).
Fig. 5.26 Simplest flowchart.
Fig. 5.27 Repeatedly applying rule 2 of Fig. 5.25 to the simplest flowchart.

Rule 2 Rule 2 Rule 2
174 Control Structures: Part 2 Chapter 5
Repetition is implemented in one of seven ways:
• While structure
• Do While/Loop structure
• Do/Loop While structure
• Do Until/Loop structure
• Do/Loop Until structure
• For/Next structure
• For Each/Next structure (introduced in Chapter 7)
It can be proven straightforwardly that the While structure is sufficient to provide any
form of repetition. Everything that can be done with the Do While/Loop, Do/Loop
While, Do Until/Loop, Do/Loop Until, For/Next and For Each/Next structures
can be done with the While structure (although perhaps not as elegantly).
Fig. 5.28 Applying rule 3 of Fig. 5.25 to the simplest flowchart.
Rule 3
Rule 3 Rule 3
Chapter 5 Control Structures: Part 2 175
The combination of these results illustrates that any form of control ever needed in a
Visual Basic program can be expressed in terms of:
• sequence
• If/Then structure (selection)
• While structure (repetition)
These control structures can be combined in only two ways—stacking and nesting. Indeed,
structured programming promotes simplicity.
In this chapter, we discussed the composition of programs from control structures that
contain actions and decisions. In Chapter 6, Procedures, we introduce another program
structuring unit called the procedure. We show how to construct large programs by combining
procedures that are composed of control structures. We also discuss the ways in
which procedures promote software reusability. In Chapter 8, Object-Based Programming,
we offer a detailed introduction to another Visual Basic program structuring unit, called the
class. We then create objects from classes (that are composed of procedures) and proceed
with our treatment of object-oriented programming—the key focus of this book.
Fig. 5.29 Stacked, nested and overlapped building blocks.
Fig. 5.30 Unstructured flowchart.
Overlapping building blocks
(Illegal in structured programs)
Stacked building blocks Nested building blocks
176 Control Structures: Part 2 Chapter 5
• Counter-controlled repetition requires the name of a control variable (or loop counter), the initial
value of the control variable, the increment (or decrement) by which the control variable is modified
during each iteration of the loop and the condition that tests for the final value of the control
variable (i.e., whether looping should continue).
• Declarations that include initialization are executable statements.
• The For/Next repetition structure handles the details of counter-controlled repetition. The required
To keyword specifies the initial value and the final value of the control variable. The optional
Step keyword specifies the increment.
• Counting loops should not be controlled with floating-point variables. Floating-point values are
represented only approximately in the computer’s memory, often resulting in imprecise counter
values and inaccurate tests for termination.
• When supplying four arguments to method MessageBox.Show, the first two arguments are
strings displayed in the dialog and the dialog’s title bar. The third and fourth arguments are constants
representing buttons and icons, respectively.
• Method String.Format inserts values into a String using Visual Basic’s format codes.
• Visual Basic provides the Decimal data type, which is designed specifically for monetary calculations.
It is inappropriate to use Single or Double for dollar amounts.
• Visual Basic provides the Select Case multiple-selection structure to test a variable or expression
separately for each value that the variable or expression might assume. The Select Case
structure consists of a series of Case labels and an optional Case Else. Each Case contains
statements to be executed if that Case is selected.
• Each Case in a Select Case structure can test for a specific value, a range of values (using
keyword To) or a condition (using keyword Is and a relational operator). The comma can be used
to specify a list of values, ranges and conditions that satisfy a Case statement.
• The Do/Loop While and Do/Loop Until structures test the loop-continuation condition after
the loop body is performed; therefore, the loop body is always executed at least once.
• The Exit Do, Exit While and Exit For statements alter the flow of control by causing immediate
exit from a repetition structure.
• The logical operators are AndAlso (logical AND with short-circuit evaluation), And (logical
AND without short-circuit evaluation), OrElse (logical inclusive OR with short-circuit evaluation),
Or (logical inclusive OR without short-circuit evaluation), Xor (logical exclusive OR) and
Not (logical NOT, also called logical negation).
• The AndAlso operator can be used to ensure that two conditions are both true.
• The OrElse operator can be used to ensure that at least one of two conditions is true.
• The And and Or operators are similar to the AndAlso and OrElse operators, except that they
always evaluate both of their operands.
• A condition containing the logical exclusive OR (Xor) operator is true if and only if exactly one
of its operands is true.
• A condition that begins with the logical NOT (Not) operator is true if and only if the condition to
the right of the logical NOT operator is false.
• In flowcharts, small circles indicate the single entry point and exit point of each structure.
• Connecting individual flowchart symbols arbitrarily can lead to unstructured programs. Therefore,
the programming profession has chosen to employ only a limited set of control structures and to
build structured programs by combining control structures in only two simple ways.
Chapter 5 Control Structures: Part 2 177
• To connect control structures in sequence to form structured programs, the exit point of one control
structure is connected to the entry point of the next control structure (i.e., the control structures simply
are placed one after another in a program). We call this process “control structure stacking.”
• The rules for forming structured programs also allow control structures to be nested.
• Structured programming promotes simplicity.
• Bohm and Jacopini have demonstrated that only three forms of control are necessary—sequence,
selection and repetition.
• Selection is implemented with one of three structures—If/Then, If/Then/Else and
Select Case.
• Repetition is implemented with one of seven structures—While, Do While/Loop, Do/Loop
While, Do Until/Loop, Do/Loop Until, For/Next, and For Each/Next (introduced in
Chapter 7, Arrays).
• The If/Then structure is sufficient to provide any form of selection.
• The While structure is sufficient to provide any form of repetition.
• Control structures can be combined in only two ways—stacking and nesting.
AbortRetryIgnore constant iteration of a loop
body of a loop levels of nesting
Boolean values logical AND with short-circuit
buttons for a message dialog evaluation (AndAlso)
Case keyword logical AND without short-circuit
Case Else statement valuation (And)
control structure logical exclusive OR (Xor)
control-structure nesting logical inclusive OR with short-circuit
control-structure stacking evaluation (OrElse)
controlling expression logical inclusive OR without short-circuit
counter-controlled repetition evaluation (Or)
Decimal data type logical NOT (Not)
decrement of loop logical operator
diamond symbol loop body
Do/Loop Until structure loop counter
Do/Loop While structure loop-continuation condition
double-selection structure message dialog button
End Select statement message dialog icon
entry point of a control structure MessageBoxButtons.
Exit Do statement AbortRetryIgnore constant
Exit For statement MessageBoxButtons.OK constant
Exit While statement MessageBoxButtons.OKCancel constant
For Each/Next structure MessageBoxButtons.RetryCancel
For/Next structure constant
For/Next header MessageBoxButtons.YesNo constant
hexadecimal (base16) number system MessageBoxButtons.YesNoCancel
icon for a message dialog constant
If/Then structure MessageBoxButtons class
If/Then/Else structure MessageBoxIcon class
increment of control variable MessageBoxIcon.Error constant
Is keyword MessageBoxIcon.Exclamation constant
178 Control Structures: Part 2 Chapter 5
5.1 State whether each of the following is true or false. If false, explain why.
a) The Case Else is required in the Select Case selection structure.
b) The expression x > y AndAlso a y is true or a < b is true.
c) An expression containing the OrElse operator is true if either or both of its operands is
d) The expression x 4 is true if x is less than or equal to y and y is greater
than 4.
e) Logical operator Or performs short-circuit evaluation.
f) A While structure with the header
While (x > 10 AndAlso x < 100)
iterates while 10 < x operator
with the keyword.
d) In a For/Next structure, incrementing occurs the body of the structure is
e) Placing expressions whose values do not change inside structures can lead
to poor performance.
f) The four types of MessageBox icons are exclamation, information, error and
g) The expression following the keywords Select Case is called the .
5.3 Write a Visual Basic statement or a set of Visual Basic statements to accomplish each of the
MessageBoxIcon.Information constant sequence
MessageBoxIcon.Question constant short-circuit evaluation
multiple-selection structure Show method of class MessageBox
nested building block simplest flowchart
nested control structure single selection
nesting single-entry/single-exit sequence, selection and
nesting rule repetition structures
Next keyword stacking rule
overlapped building block Step keyword in a For/Next structure
program construction principle String formatting code
rectangle symbol structured programming
repetition To keyword in a For/Next structure
Select Case structure unary operator
selection unstructured flowchart
Chapter 5 Control Structures: Part 2 179
a) Sum the odd integers between 1 and 99 using a For/Next structure. Assume that the
integer variables sum and count have been declared.
b) Write a statement that exits a While loop.
c) Print the integers from 1 to 20, using a Do/Loop While loop and the counter variable x.
Assume that the variable x has been declared, but not initialized. Print only five integers
per line. [Hint: Use the calculation x Mod 5. When the value of this is 0, print a newline
character; otherwise, print a tab character. Call Console.WriteLine to output the
newline character and call Console.Write(vbTab) to output the tab character.]
d) Repeat part c, using a For/Next structure.
5.1 a) False. The Case Else is optional. b) False. Both of the relational expressions must be
true for the entire expression to be true. c) True. d) True. 4. e) False. Logical operator Or always evaluates
both of its operands. f) True. g) True. h) False. There is often a trade-off between good software
engineering and high performance. i) False. The AndAlso operator has higher precedence than the
OrElse operator.
5.2 a) Step. b) Decimal. c) Is. d) after. e) repetition. f) question mark. g) controlling expression.
5.3 a) sum = 0
For count = 1 To 99 Step 2
sum += count
b) Exit While
c) x = 1
If x Mod 5 = 0 Then
End If
x += 1
Loop While x <= 20
x = 1
If x Mod 5 = 0 Then
Console.Write(x & vbTab)
End If
180 Control Structures: Part 2 Chapter 5
x += 1
Loop While x <= 20
d) For x = 1 To 20
If x Mod 5 = 0 Then
End If
For x = 1 To 20
If x Mod 5 = 0 Then
Console.Write(x & vbTab)
End If
5.4 The factorial method is used frequently in probability problems. The factorial of a positive
integer n (written n! and pronounced “n factorial”) is equal to the product of the positive integers from
1 to n. Even for relatively small values of n, the factorial method yields extremely large numbers. For
instance, when n is 13, n! is 6227020800—a number too large to be represented with data type Integer
(a 32-bit integer value). To calculate the factorials of large values of n, data type Long (a 64-
bit integer value) must be used. Write a program that evaluates the factorials of the integers from 1 to
20 using data type Long. Display the results in a two column output table. [Hint: create a Windows
application, use Labels as the columns and the vbCrLf constant to line up the rows.] The first column
should display the n values (1–20). The second column should display n!.
5.5 Write two programs that each print a table of the binary, octal, and hexadecimal equivalents
of the decimal numbers in the range 1–256. If you are not familiar with these number systems, read
Appendix B, Number Systems, first.
a) For the first program, print the results to the console without using any String formats.
b) For the second program, print the results to the console using both the decimal and hexadecimal
String formats (there are no formats for binary and octal in Visual Basic).
5.6 (Pythagorean Triples) Some right triangles have sides that are all integers. A set of three integer
values for the sides of a right triangle is called a Pythagorean triple. These three sides must satisfy
the relationship that the sum of the squares of the two sides is equal to the square of the
hypotenuse. Write a program to find all Pythagorean triples for side1, side2 and hypotenuse,
none larger than 30. Use a triple-nested For/Next loop that tries all possibilities. This is an example
of “brute force” computing. You will learn in more advanced computer science courses that there are
some problems for which there is no known algorithmic approach other than using sheer brute force.
Chapter 5 Control Structures: Part 2 181
5.7 Write a program that displays the following patterns separately, one below the other. Use
For/Next loops to generate the patterns. All asterisks (*) should be printed by a single statement of
the form Console.Write("*") (this causes the asterisks to print side by side). A statement of
the form Console.WriteLine() can be used to position to the next line and a statement of the
form Console.WriteLine(" ") can be used to display spaces for the last two patterns. There
should be no other output statements in the program. [Hint: The last two patterns require that each
line begin with an appropriate number of blanks.] Maximize your use of repetition (with nested For/
Next structures) and minimize the number of output statements.
5.8 Modify Exercise 5.7 to combine your code from the four separate triangles of asterisks into
a single program that prints all four patterns side by side, making clever use of nested For/Next
5.9 Write a program that prints the following diamond shape. You may use output statements that
print a single asterisk (*), a single space or a single newline character. Maximize your use of repetition
(with nested For/Next structures) and minimize the number of output statements.
5.10 Modify the program you wrote in Exercise 5.9 to read an odd number in the range from 1 to
19 to specify the number of rows in the diamond. Your program should then display a diamond of the
appropriate size. Use a Do/Loop Until to validate user input.
(A) (B) (C) (D)
* ********** ********** *
** ********* ********* **
*** ******** ******** ***
**** ******* ******* ****
***** ****** ****** *****
****** ***** ***** ******
******* **** **** *******
******** *** *** ********
********* ** ** *********
********** * * **********
• To construct programs modularly from pieces called
• To introduce the common Math methods available in
the Framework Class Library.
• To create new procedures.
• To understand the mechanisms used to pass
information between procedures.
• To introduce simulation techniques that employ
random-number generation.
• To understand how the visibility of identifiers is
limited to specific regions of programs.
• To understand how to write and use recursive
procedures (procedures that call themselves).
Form ever follows function.
Louis Henri Sullivan
E pluribus unum.
(One composed of many.)
O! call back yesterday, bid time return.
William Shakespeare, Richard II
Call me Ishmael.
Herman Melville, Moby Dick
When you call me that, smile.
Owen Wister
Chapter 6 Procedures 183
6.1 Introduction
Most computer programs that solve real-world problems are much larger than the programs
presented in the first few chapters of this text. Experience has shown that the best way to
develop and maintain a large program is to construct it from small, manageable pieces. This
technique is known as divide and conquer. In this chapter, we describe many key features
of the Visual Basic language that facilitate the design, implementation, operation and maintenance
of large programs.
6.2 Modules, Classes and Procedures
Visual Basic programs consist of many pieces, including modules and classes. The programmer
combines new modules and classes with “prepackaged” classes available in the .NET
Framework Class Library (FCL). These modules and classes are composed of smaller pieces
called procedures. When procedures are contained in a class, we refer to them as methods.
The FCL provides a rich collection of classes and methods for performing common
mathematical calculations, string manipulations, character manipulations, input/output
6.1 Introduction
6.2 Modules, Classes and Procedures
6.3 Sub Procedures
6.4 Function Procedures
6.5 Methods
6.6 Argument Promotion
6.7 Option Strict and Data-Type Conversions
6.8 Value Types and Reference Types
6.9 Passing Arguments: Pass-by-Value vs. Pass-by-Reference
6.10 Duration of Identifiers
6.11 Scope Rules
6.12 Random-Number Generation
6.13 Example: Game of Chance
6.14 Recursion
6.15 Example Using Recursion: Fibonacci Series
6.16 Recursion vs. Iteration
6.17 Procedure Overloading and Optional Arguments
6.17.1 Procedure Overloading
6.17.2 Optional Arguments
6.18 Modules

Pemrograman Web/TI/ AK045216/2 sks
Contoh script ASP- 1
•VBScript adalah bahasa scripting standar untuk membuat halaman ASP.
Pada contoh-contoh script berikut digunakan VBScript:
•Contoh 1 :
– Langkah pembuatan :
• Masukkan text ‘Hello World’ pada variabel FirstVar
• Buat tag awal HTML
• Gunakan untuk menampilkan isi variabel FirstVar
• Akhiri tag HTML
– Script lengkap :

• Example 1

Summary • Terminology • Self-Review Exercises • Answers to Self-Review Exercises • Exercises
184 Procedures Chapter 6
operations, error checking and many other useful operations. This framework makes the
programmer’s job easier, because the methods provide many of the capabilities programmers
need. In earlier chapters, we introduced some FCL classes, such as Console, which
provides methods for inputting and outputting data.
Software Engineering Observation 6.1
Familiarize yourself with the rich collection of classes and methods in the Framework Class
Library. 6.1
Software Engineering Observation 6.2
When possible, use .NET Framework classes and methods instead of writing new classes and
methods. This reduces program development time and avoids introducing new errors. 6.2
Performance Tip 6.1
.NET Framework Class Library methods are written to perform efficiently. 6.1
Although the FCL provides methods that perform many common tasks, it cannot provide
every conceivable feature that a programmer could want, so Visual Basic allows programmers
to create their own programmer-defined procedures to meet the unique
requirements of a particular problem. Three types of procedures exist: Sub procedures,
Function procedures and event procedures. Throughout this chapter, the term “procedure”
refers to both Sub procedures and Function procedures unless otherwise noted.
Programmers write procedures to define specific tasks that a program may use many
times during its execution. Although the same programmer-defined procedure can be executed
at multiple points in a program, the actual statements that define the procedure are
written only once.
A procedure is invoked (i.e., made to perform its designated task) by a procedure call.
The procedure call specifies the procedure name and provides information (as arguments)
that the callee (i.e, the procedure being called) requires to do its job. When the procedure
completes its task, it returns control to the caller (i.e., the calling procedure). In some cases,
the procedure also returns a result to the caller. A common analogy for this is the hierarchical
form of management. A boss (the caller) asks a worker (the callee) to perform a task
and return (i.e., report on) the results when the task is done. The boss does not need to know
how the worker performs the designated task. For example, the worker might call other
workers—the boss would be unaware of this. Soon, we show how this hiding of implementation
details promotes good software engineering. Figure 6.1 depicts a Boss procedure
communicating with worker procedures Worker1, Worker2 and Worker3 in a hierarchical
manner. Note that Worker1 acts as a “boss” procedure to Worker4 and Worker5
in this particular example.
There are several motivations for the division of code into procedures. First, the divideand-
conquer approach makes program development more manageable. Another motivation
is software reusability—the ability to use existing procedures as building blocks for new
programs. When proper naming and definition conventions are applied, programs can be
created from standardized pieces that accomplish specific tasks, to minimize the need for
customized code. A third motivation involves avoiding the repetition of code in a program.
When code is packaged as a procedure, the code can be executed from several locations in
a program simply by calling, or invoking, the procedure.
Chapter 6 Procedures 185
Good Programming Practice 6.1
Use modularity to increase the clarity and organization of a program. This not only helps others
understand the program, but also aids in program development, testing and debugging. 6.1
Software Engineering Observation 6.3
To promote reusability, the capabilities of each procedure should be limited to the performance
of a single, well-defined task, and the name of the procedure should express that task
effectively. 6.3
Software Engineering Observation 6.4
If you cannot choose a concise name that expresses the task performed by a procedure, the
procedure could be attempting to perform too many diverse tasks. It is usually best to divide
such a procedure into several smaller procedures. 6.4
6.3 Sub Procedures
The programs presented earlier in the book each contained at least one procedure definition
(e.g., Main) that called FCL methods (such as Console.WriteLine) to accomplish
the program’s tasks. We now consider how to write customized procedures.
Consider the console application in Fig. 6.2, which uses a Sub procedure (invoked
from the application’s Main procedure) to print a worker’s payment information.
Fig. 6.1 Hierarchical boss-procedure/worker-procedure relationship.
Worker1 Worker2 Worker3
Worker4 Worker5
1 ‘ Fig. 6.2: Payment.vb
2 ‘ Sub procedure that prints payment information.
Module modPayment
Sub Main()
‘ call Sub procedure PrintPay 4 times
9 PrintPay(40, 10.5)
10 PrintPay(38, 21.75)
Fig. 6.2 Sub procedure for printing payment information (part 1 of 2).
186 Procedures Chapter 6
The program contains two procedure definitions. Lines 6–14 define Sub procedure
Main, which executes when the console application is loaded. Lines 17–21 define Sub
procedure PrintPay, which executes when it is invoked, or called, from another procedure,
in this case Main.
Main makes four calls (lines 9–12) to Sub procedure PrintPay, causing
PrintPay to execute four times. Although the procedure arguments in this example are
constants, arguments can also be variables or expressions. For example, the statement
PrintPay(employeeOneExtraHours, employeeOneWage * 1.5)
could be used to display payment information for an employee who is being paid time-anda-
half for working overtime.
When Main calls PrintPay, the program makes a copy of the value of each argument
(e.g., 40 and 10.5 on line 9), and program control transfers to the first line of procedure
PrintPay. Procedure PrintPay receives the copied values and stores them in
the parameter variables hours and wage. Then, PrintPay calculates hours * wage
and displays the result, using the currency format (line 20). When the End Sub statement
on line 21 is encountered, control is returned to the calling procedure, Main.
The first line of procedure PrintPay (line 17) shows (inside the parentheses) that
PrintPay declares a Double variable hours and a Decimal variable wage. These
parameters hold the values passed to PrintPay within the definition of this procedure.
Notice that the entire procedure definition of PrintPay appears within the body of
module modPayment. All procedures must be defined inside a module or a class.
The format of a procedure definition is
Sub procedure-name(parameter-list)
declarations and statements
End Sub
11 PrintPay(20, 13)
12 PrintPay(50, 14)
14 End Sub ‘ Main
16 ‘ print dollar amount earned in command window
17 Sub PrintPay(ByVal hours As Double, ByVal wage As Decimal)
19 ‘ pay = hours * wage
20 Console.WriteLine(“The payment is {0:C}”, hours * wage)
21 End Sub ‘ PrintPay
23 End Module ‘ modPayment
The payment is $420.00
The payment is $826.50
The payment is $260.00
The payment is $700.00
Fig. 6.2 Sub procedure for printing payment information (part 2 of 2).
Chapter 6 Procedures 187
Good Programming Practice 6.2
Place a blank line between procedure definitions to separate the procedures and enhance
program readability. 6.2
Common Programming Error 6.1
Defining a procedure outside of a class or module definition is a syntax error. 6.1
The first line is sometimes known as the procedure header. The procedure-name, which
directly follows the Sub keyword in the procedure header, can be any valid identifier and
is used to call this Sub procedure within the program.
The parameter-list is a comma-separated list in which the Sub procedure declares
each parameter variable’s type and name. There must be one argument in the procedure call
for each parameter in the procedure header (we will see an exception to this rule in
Section 6.17). The arguments also must be compatible with the parameter’s type (i.e.,
Visual Basic must be able to assign the value of the argument to the parameter). For
example, a parameter of type Double could receive the value of 7.35, 22 or –.03546, but
not “hello”, because a Double value cannot contain a String. In Section 6.6 we discuss
this issue in detail. If a procedure does not receive any values, the parameter list is
empty (i.e., the procedure name is followed by an empty set of parentheses).
Notice that the parameter declarations in the procedure header for PrintPay (line
17) look similar to variable declarations, but use keyword ByVal instead of Dim. ByVal
specifies that the calling program should pass a copy of the value of the argument in the
procedure call to the parameter, which can be used in the Sub procedure body. Section 6.9
discusses argument passing in detail.
Common Programming Error 6.2
Declaring a variable in the procedure’s body with the same name as a parameter variable
in the procedure header is a syntax error. 6.2
Testing and Debugging Tip 6.1
Although it is allowable, an argument passed to a procedure should not have the same name
as the corresponding parameter in the procedure definition. This distinction prevents ambiguity
that could lead to logic errors. 6.1
The declarations and statements in the procedure definition form the procedure body.
The procedure body contains Visual Basic code that performs actions, generally by manipulating
or interacting with the parameters. The procedure body must be terminated with
keywords End Sub, which define the end of the procedure. The procedure body is also
referred to as a block. A block is a sequence of statements and declarations grouped
together as the body of some structure and terminated with an End, Next, Else or Loop
statement, depending on the type of structure. Variables can be declared in any block, and
blocks can be nested.
Common Programming Error 6.3
Defining a procedure inside another procedure is a syntax error—procedures cannot be
nested. 6.3
Control returns to the caller when execution reaches the End Sub statement (i.e., the
end of the procedure body). Alternatively, keywords Return and Exit Sub can be used
188 Procedures Chapter 6
anywhere in a procedure to return control to the point at which a Sub procedure was
invoked. We discuss Return and Exit Sub in detail, momentarily.
Good Programming Practice 6.3
The selection of meaningful procedure names and parameter names makes programs more
readable and reduces the need for excessive comments. 6.3
Software Engineering Observation 6.5
Procedure names tend to be verbs because procedures typically perform operations on data.
By convention, programmer-defined procedure names begin with an uppercase first letter.
For example, a procedure that sends an e-mail message might be named SendMail. 6.5
Software Engineering Observation 6.6
A procedure that requires a large number of parameters might be performing too many tasks.
Consider dividing the procedure into smaller procedures that perform separate tasks. As a
“rule of thumb,” the procedure header should fit on one line (if possible). 6.6
Software Engineering Observation 6.7
As a “rule of thumb,” a procedure should be limited to one printed page. Better yet, a procedure
should be no longer than half a printed page. Regardless of how long a procedure is,
it should perform one task well. 6.7
Testing and Debugging Tip 6.2
Small procedures are easier to test, debug and understand than large procedures. 6.2
Performance Tip 6.2
When a programmer divides a procedure into several procedures that communicate with one
another, this communication takes time and sometimes leads to poor execution performance. 6.2
Software Engineering Observation 6.8
The procedure header and procedure calls all must agree with regard to the number, type
and order of parameters. We discuss exceptions to this in Section 6.17. 6.8
6.4 Function Procedures
Function procedures are similar to Sub procedures, with one important difference:
Function procedures return a value (i.e., send a value) to the caller, whereas Sub procedures
do not. The console application in Fig. 6.3 uses Function procedure Square to
calculate the squares of the Integers from 1–10.
1 ‘ Fig. 6.3: SquareInteger.vb
2 ‘ Function procedure to square a number.
Module modSquareInteger
Sub Main()
7 Dim i As Integer ‘ counter
Fig. 6.3 Function procedure for squaring an integer (part 1 of 2).
Chapter 6 Procedures 189
The For structure (lines 12–14) displays the results of squaring the Integers from 1–
10. Each iteration of the loop calculates the square of control variable i and displays it in the
command window.
Function procedure Square is invoked (line 13) with the expression Square(i).
When program control reaches this expression, the program calls Function Square (lines
20–22). At this point, the program makes a copy of the value of i (the argument), and program
control transfers to the first line of Function Square. Square receives the copy
of i’s value and stores it in the parameter y. Line 21 is a Return statement, which terminates
execution of the procedure and returns the result of y ^ 2 to the calling program. The
result is returned to the point on line 13 where Square was invoked. Line 13 displays the
value of i and the value returned by Square in the command window. This process is
repeated 10 times.
The format of a Function procedure definition is
Function procedure-name(parameter-list) As return-type
declarations and statements
End Function
The procedure-name, parameter-list, and the declarations and statements in a Function
procedure definition behave like the corresponding elements in a Sub procedure definition.
9 Console.WriteLine(“Number” & vbTab & “Square” & vbCrLf)
11 ‘ square numbers from 1 to 10
12 For i = 1 To 10
13 Console.WriteLine(i & vbTab & Square(i))
14 Next
16 End Sub ‘ Main
18 ‘ Function Square is executed
19 ‘ only when the function is explicitly called.
20 Function Square(ByVal y As Integer) As Integer
21 Return y ^ 2
22 End Function ‘ Square
24 End Module ‘ modSquareInteger
Number Square
1 1
2 4
3 9
4 16
5 25
6 36
7 49
8 64
9 81
10 100
Fig. 6.3 Function procedure for squaring an integer (part 2 of 2).
190 Procedures Chapter 6
In the Function header, the return-type indicates the data type of the result returned from
the Function to its caller. The statement
Return expression
can occur anywhere in a Function procedure body and returns the value of expression
to the caller. If necessary, Visual Basic attempts to convert the expression to the Function
procedure’s return-type. Functions Return exactly one value. When a Return
statement is executed, control returns immediately to the point at which that
procedure was invoked.
Common Programming Error 6.4
If the expression in a Return statement cannot be converted to the Function procedure’s
return-type, a runtime error is generated. 6.4
Common Programming Error 6.5
Failure to return a value from a Function procedure (e.g., by forgetting to provide a Return
statement) causes the procedure to return the default value for the return-type, often
producing incorrect output. 6.5
6.5 Methods
A method is any procedure that is contained within a class. We have already presented several
FCL methods (i.e., methods contained in classes that are part of the FCL). Programmers
also can define custom methods in programmer-defined classes, such as a class used
to define a Windows application. The Windows application in Fig. 6.4 uses two methods
to calculate the largest of three Doubles.
1 ‘ Fig. 6.4: Maximum.vb
2 ‘ Program finds the maximum of three numbers input.
Public Class FrmMaximum
5 Inherits System.Windows.Forms.Form
‘ prompts for three inputs
8 Friend WithEvents lblOne As System.Windows.Forms.Label
9 Friend WithEvents lblTwo As System.Windows.Forms.Label
10 Friend WithEvents lblThree As System.Windows.Forms.Label
12 ‘ displays result
13 Friend WithEvents lblMaximum As System.Windows.Forms.Label
15 ‘ read three numbers
16 Friend WithEvents txtFirst As System.Windows.Forms.TextBox
17 Friend WithEvents txtSecond As System.Windows.Forms.TextBox
18 Friend WithEvents txtThird As System.Windows.Forms.TextBox
20 ‘ reads inputs and calculate results
21 Friend WithEvents cmdMaximum As System.Windows.Forms.Button
Fig. 6.4 Method that determines the largest of three numbers (part 1 of 2).
Chapter 6 Procedures 191
Until now, many of our applications have facilitated user interaction via either the
command window (in which the user can type an input value into the program) or a message
dialog (which displays a message to the user and allows the user to click OK to dismiss
the dialog). In Chapter 4, Control Structures: Part 1, we introduced Windows applications
by creating a program that displays information in a label on a form.
Although the command window and message dialogs are valid ways to receive input
from a user and display output, they are limited in their capabilities—the command
window can obtain only one line of input at a time from the user, and a message dialog
can display only one message. It is common to receive multiple inputs at the same time
(such as the three values in this example), or to display many pieces of data at once. To
introduce more sophisticated user interface programming, the program in Fig. 6.4 uses
GUI event handling (i.e., the ability to respond to a state change in the GUI, such as when
the user clicks a button).
23 ‘ Visual Studio .NET generated code
25 ‘ obtain values in each text box, call procedure Maximum
26 Private Sub cmdMaximum_Click(ByVal sender As System.Object, _
27 ByVal e As System.EventArgs) Handles cmdMaximum.Click
29 Dim value1, value2, value3 As Double
31 value1 = txtFirst.Text
32 value2 = txtSecond.Text
33 value3 = txtThird.Text
35 lblMaximum.Text = Maximum(value1, value2, value3)
36 End Sub ‘ cmdMaximum_Click
38 ‘ find maximum of three parameter values
39 Function Maximum(ByVal valueOne As Double, _
40 ByVal valueTwo As Double, ByVal valueThree As Double)
42 Return Math.Max(Math.Max(valueOne, valueTwo), valueThree)
43 End Function ‘ Maximum
45 End Class ‘ FrmMaximum
Fig. 6.4 Method that determines the largest of three numbers (part 2 of 2).
192 Procedures Chapter 6
Class FrmMaximum uses a GUI consisting of three TextBoxes (txtFirst, txt-
Second and txtThird) for user input, a Button (cmdMaximum) to invoke the calculation
and four Labels, including lblMaximum, which displays the results. We create
these components visually, using the Toolbox, and change their properties in the Properties
window. Lines 7–21 are declarations indicating the name of each component.
Although these lines of code are actually part of the Visual Studio .NET generated code,
we display them to indicate the objects that are part of the form (as always, the complete
code for this program is on the CD-ROM that accompanies this book and at
Line 5 indicates that class FrmMaximum Inherits from System.Windows.
Forms.Form. Remember that all forms inherit from class System.Windows.
Forms.Form. A class can inherit attributes and behaviors (data and methods)
from another class if that class is specified to the right of the Inherits keyword. We discuss
inheritance in detail in Chapter 9, Object-Oriented Programming: Inheritance.
FrmMaximum contains two programmer-defined methods. Method Maximum (lines
39–43) takes three Double parameters and returns the value of the largest parameter. Note
that this method definition looks just like the definition of a Function procedure in a
module. The program also includes method cmdMaximum_Click (lines 26–36). When
the user double-clicks a component, such as a Button, in Design mode, the IDE generates
a method that Handles an event (i.e., an event handler). An event represents a user
action, such as clicking a Button or altering a value. An event handler is a method that is
executed (called) when a certain event is raised (occurs). In this case, method
cmdMaximum_Click handles the event in which Button cmdMaximum is clicked.
Programmers write code to perform certain tasks when such events occur. By employing
both events and objects, programmers can create applications that enable more sophisticated
user interactions than those we have seen previously. Event-handler names created
by the IDE begin with the object’s name, followed by an underscore and the name of the
event. We explain how to create our own event handlers, which can be given any name, in
Chapter 12, Graphical User Interface Concepts: Part 1.
When the user clicks cmdMaximum, procedure cmdMaximum_Click (lines 26–36)
executes. Lines 31–33 retrieve the values in the three TextBoxes, using the Text property.
The values are converted implicitly to type Double and stored in variables value1,
value2 and value3.
Line 35 calls method Maximum (lines 39–43) with the arguments value1, value2
and value3. The values of these arguments are then stored in parameters valueOne,
valueTwo and valueThree in method Maximum. Maximum returns the result of the
expression on line 42, which makes two calls to method Max of the Math class. Method
Max returns the largest of its two Double arguments, meaning the computation in line 42
first compares valueOne and valueTwo, then compares the value returned by the first
method call to valueThree. Calls to methods, such as Math.Max, that are defined in a
class in the FCL must include the class name and the dot (.) operator (also called the
member access operator). However, calls to methods defined in the class that contains the
method call need only specify the method name.
When control returns to method cmdMaximum_Click, line 35 assigns the value
returned by method Maximum to lblMaximum’s Text property, causing it to be displayed
for the user.
Chapter 6 Procedures 193
The reader may notice that typing the opening parenthesis after a method or procedure
name causes Visual Studio to display a window containing the procedure’s argument
names and types. This is the Parameter Info feature (Fig. 6.5) of the IDE. Parameter Info
greatly simplifies coding by identifying accessible procedures and their arguments. The
Parameter Info feature displays information for programmer-defined procedures and all
methods contained in the FCL.
Good Programming Practice 6.4
Selecting descriptive parameter names makes the information provided by the Parameter Info
feature more meaningful. 6.4
Visual Basic also provides the IntelliSense feature, which displays all the members in
a class. For instance, when the programmer types the dot (.) operator (also called the
member access operator) after the class name, Math, in Fig. 6.6, IntelliSense provides a
list of all the available methods in class Math. The Math class contains numerous methods
that allow the programmer to perform a variety of common mathematical calculations.
Fig. 6.5 Parameter Info feature of the Visual Studio .NET IDE.
Fig. 6.6 IntelliSense feature of the Visual Studio .NET IDE.
Parameter Info window
194 Procedures Chapter 6
As an example of the variety of FCL methods, some Math class methods are summarized
in Fig. 6.7. Throughout the table, the variables x and y are of type Double; however,
many of the methods also provide versions that take values of other data types as arguments.
In addition, the Math class also defines two mathematical constants: Math.PI and
Math.E. The constant Math.PI (3.14159265358979323846) of class Math is the
ratio of a circle’s circumference to its diameter (i.e., twice the radius). The constant
Math.E (2.7182818284590452354) is the base value for natural logarithms (calculated
with the Math.Log method).
Common Programming Error 6.6
Failure to invoke a Math class method by preceding the method name with the class name
Math and a dot operator (.) is a syntax error. 6.6
Method Description Example
Abs(x) returns the absolute value of x Abs(23.7) is 23.7
Abs(0) is 0
Abs(-23.7) is 23.7
Ceiling(x) rounds x to the smallest integer
not less than x
Ceiling(9.2) is 10.0
Ceiling(-9.8) is -9.0
Cos(x) returns the trigonometric cosine
of x (x in radians)
Cos(0.0) is 1.0
Exp(x) returns the exponential ex Exp(1.0) is approximately
Exp(2.0) is approximately
Floor(x) rounds x to the largest integer
not greater than x
Floor(9.2) is 9.0
Floor(-9.8) is -10.0
Log(x) returns the natural logarithm of
x (base e)
is approximately 1.0
is approximately 2.0
Max(x, y) returns the larger value of x and
y (also has versions for
Single, Integer and Long
Max(2.3, 12.7) is 12.7
Max(-2.3, -12.7) is -2.3
Min(x, y) returns the smaller value of x
and y (also has versions for
Single, Integer and Long
Min(2.3, 12.7) is 2.3
Min(-2.3, -12.7) is -12.7
Pow(x, y) calculates x raised to power y
Pow(2.0, 7.0) is 128.0
Pow(9.0, .5) is 3.0
Sin(x) returns the trigonometric sine of
x (x in radians)
Sin(0.0) is 0.0
Fig. 6.7 Math class methods (part 1 of 2).
Chapter 6 Procedures 195
Software Engineering Observation 6.9
It is not necessary to add an assembly reference to use the Math class methods in a program,
because class Math is located in namespace System, which is implicitly added to all console
applications. 6.9
6.6 Argument Promotion
An important feature of procedure definitions is the coercion of arguments (i.e., the forcing
of arguments to the appropriate data type so that they can be passed to a procedure). Visual
Basic supports both widening and narrowing conversions. Widening conversion occurs
when a type is converted to another type (usually one that can hold more data) without losing
data, whereas a narrowing conversion occurs when there is potential for data loss during
the conversion (usually to a type that holds a smaller amount of data). Figure 6.8 lists
the widening conversions supported by Visual Basic.
For example, the Math class method Sqrt can be called with an Integer argument,
even though the method is defined in the Math class to receive a Double argument. The
correctly evaluates Math.Sqrt(4) and prints the value 2. Visual Basic promotes (i.e.,
converts) the Integer value 4 to the Double value 4.0 before the value is passed to
Math.Sqrt. In this case, the argument value does not correspond precisely to the parameter
type in the method definition, so an implicit widening conversion changes the value to
the proper type before the method is called. Visual Basic also performs narrowing conversions
on arguments passed to procedures. For example, if String variable number contains
the value “4″, the method call Math.Sqrt(number) correctly evaluates to 2.
However, some implicit narrowing conversions can fail, resulting in runtime errors and
logic errors. For example, if number contains the value “hello”, passing it as an argument
to method Math.Sqrt causes a runtime error. In the next section, we discuss some
measures the programmer can take to help avoid such issues.
Common Programming Error 6.7
When performing a narrowing conversion (e.g., Double to Integer), conversion of a
primitive-data-type value to another primitive data type might change the value. Also, the
conversion of any integral value to a floating-point value and back to an integral value could
introduce rounding errors into the result. 6.7
Sqrt(x) returns the square root of x Sqrt(9.0) is 3.0
Sqrt(2.0) is 1.4142135623731
Tan(x) returns the trigonometric
tangent of x (x in radians)
Tan(0.0) is 0.0
Method Description Example
Fig. 6.7 Math class methods (part 2 of 2).
196 Procedures Chapter 6
Argument promotion applies not only to primitive data-type values passed as arguments
to methods, but also to expressions containing values of two or more data types. Such expressions
are referred to as mixed-type expressions. In a mixed-type expression, each value is promoted
to the “highest” data type in the expression (i.e., widening conversions are made until
the values are of the same type). For example, if singleNumber is of type Single and
integerNumber is of type Integer, when Visual Basic evaluates the expression
singleNumber + integerNumber
the value of integerNumber is converted to type Single, then added to single-
Number, producing a Single result. Although the values’ original data types are maintained,
a temporary version of each value is created for use in the expression, and the data
types of the temporary versions are modified appropriately.
6.7 Option Strict and Data-Type Conversions
Visual Basic provides several options for controlling the way the compiler handles data
types. These options can help programmers eliminate such errors as those caused by narrowing
conversions, making code more reliable and secure. The first option is Option
Explicit, which is set to On by default, meaning it was enabled in the Visual Basic programs
created in Chapters 2–5. Option Explicit forces the programmer to declare explicitly
all variables before they are used in a program. Forcing explicit declarations
eliminates spelling errors and other subtle errors that may occur if Option Explicit is
turned off. For example, when Option Explicit is set to Off, the compiler interprets
misspelled variable names as new variable declarations, which create subtle errors that can
be difficult to debug.
A second option, which is by default set to Off, is Option Strict. Visual Basic provides
Option Strict as a means to increase program clarity and reduce debugging time.
Type Conversion Types
Boolean Object
Byte Short, Integer, Long, Decimal, Single, Double or Object
Char String or Object
Date Object
Decimal Single, Double or Object
Double Object
Integer Long, Decimal, Single, Double or Object
Long Decimal, Single, Double or Object
Object none
Short Integer, Long, Decimal, Single, Double or Object
Single Double or Object
String Object
Fig. 6.8 Widening conversions.
Chapter 6 Procedures 197
When set to On, Option Strict causes the compiler to check all conversions and
requires the programmer to perform an explicit conversion for all narrowing conversions
that could cause data loss (e.g., conversion from Double to Integer) or program termination
(e.g., conversion of a String, such as “hello”, to type Integer).
The methods in class Convert change data types explicitly. The name of each conversion
method is the word To, followed by the name of the data type to which the method
converts its argument. For instance, to store a String input by the user in variable
number of type Integer (represented in Visual Basic .NET as type Int32, a 32-bit
integer) with Option Strict set to On, we use the statement
number = Convert.ToInt32(Console.ReadLine())
When Option Strict is set to Off, Visual Basic performs such type conversions
implicitly, meaning the programmer might not realize that a narrowing conversion is being
performed. If the data being converted is incompatible with the new data type, a runtime
error occurs. Option Strict draws the programmer’s attention to narrowing conversions
so that they can be eliminated or handled properly. In Chapter 11, Exception Handling,
we discuss how to handle the errors caused by failed narrowing conversions.
Software Engineering Observation 6.10
Performing explicit conversions allows programs to execute more efficiently by eliminating the
need to determine the data type of the value being changed before the conversion executes. 6.10
From this point forward, all code examples have Option Strict set to On.
Option Strict can be activated through the IDE by right-clicking the project name in
the Solution Explorer. From the resulting menu, select Properties to open the Property
Pages dialog Fig. 6.9. From the directory tree on the left side of the dialog, select
Build from the Common Properties list. In the middle of the dialog is a drop-down box
labeled Option Strict:. By default, the option is set to Off. Choose On from the dropdown
box and press Apply.
Fig. 6.9 Property Pages dialog with Option Strict set to On.
198 Procedures Chapter 6
Setting Option Strict to On in the Property Pages applies the change globally,
to the entire project. The programmer also can enable Option Strict within an individual
code file by typing Option Strict On at the start of the file above any declarations
or Imports statements.
6.8 Value Types and Reference Types
In the next section, we discuss passing arguments to procedures by value and by reference.
To understand this, we first need to make a distinction between data types in Visual Basic.
All Visual Basic data types can be categorized as either value types or reference types. A
variable of a value type contains data of that type. Normally, value types are used for a single
piece of data, such as an Integer or a Double value. By contrast, a variable of a
reference type (sometimes called a reference) contains a location in memory where data is
stored. The location in memory can contain many individual pieces of data. Collectively,
reference types are known as objects and are discussed in detail in Chapters 8, 9 and 10,
Object-Based Programming, Object-Oriented Programming: Inheritance, and Object-Oriented
Programming: Polymorphism.
Both value types and reference types include built-in types and types that the programmer
can create. The built-in value types include the integral types (Byte, Short,
Integer and Long), the floating-point types (Single and Double) and types
Boolean, Date, Decimal and Char. The built-in reference types include Object and
String (although type String often behaves more like a value type, as we discuss in
the next section). The value types that can be constructed by the programmer include
Structures and Enumerations. The reference types that can be created by the programmer
include classes, interfaces and delegates. Programmer-defined types are discussed
in greater detail in Chapter 8, Object-Based Programming, Chapter 9, Object-
Oriented Programming: Inheritance and Chapter 15, Strings, Characters and Regular
The table in Fig. 6.10 lists the primitive data types, which form the building blocks for
more complicated types, such as classes. If Option Explicit is set to On, all variables
must have a type before they can be used in a program. This requirement is referred to as
strong typing.
in bits Values Standard
Boolean 16 True or False
Char 16 One Unicode character (Unicode character set)
Byte 8 0 to 255
Date 64 1 January 0001 to 31 December 9999
0:00:00 to 23:59:59
Decimal 128 1.0E-28 to 7.9E+28
Short 16 –32,768 to 32,767
Fig. 6.10 Visual Basic primitive data types (part 1 of 2).
Chapter 6 Procedures 199
Each value type in the table is accompanied by its size in bits (there are 8 bits to a byte)
and its range of values. To promote portability, Microsoft chose to use internationally recognized
standards for both character formats (Unicode) and floating-point numbers (IEEE
754). We discuss the Unicode character formats in Appendix F, Unicode.
Values typed directly in program code are called literals. Each literal corresponds to
one of the primitive data types. We already have seen literals for commonly-used types,
such as String, Integer and Double. However, some of Visual Basic’s data types use
special notations for creating literals. For instance, to create a literal of type Char, follow
a single-character String with the type character c. The statement
Dim character As Char = “Z”c
declares Char variable character and initializes it to the “Z” character.
Similarly, literals of specific integral data types can be created by following an integer
with the type character S (for Short), I (for Integer) or L (for Long). To create
floating-point literals, follow a floating-point number with type character F (for Single)
or R (for Double). Type character D can be used to create Decimal literals.
Visual Basic also allows programmers to type floating-point literals in scientific notation,
by following a floating-point number by the character E and a positive or negative
exponent of 10. For example, 1.909E-5 corresponds to the value 0.00001909. This
notation is useful for specifying floating-point values that are too large or too small to be
written in fixed-point notation.
Figure 6.11 displays Visual Basic’s type characters and examples of literals for each
data type. All literals must be within the range for the literal’s type, as specified in Fig. 6.10.
Integer 32 –2,147,483,648 to
Long 64 –9,223,372,036,854,775,808
to 9,223,372,036,854,775,807
Single 32 ±1.5E-45 to ±3.4E+38 (IEEE 754 floating point)
Double 64 ±5.0E–324 to ±1.7E+308 (IEEE 754 floating point)
Object 32 Data of any type
String 0 to ~2000000000 Unicode characters (Unicode character set)
in bits Values Standard
Fig. 6.10 Visual Basic primitive data types (part 2 of 2).
Type Type character Example
Char c “u”c
Single F 9.802E+31F
Fig. 6.11 Literals with type characters (part 1 of 2).
200 Procedures Chapter 6
6.9 Passing Arguments: Pass-by-Value vs. Pass-by-Reference
Arguments are passed in one of two ways: Pass-by-value and pass-by-reference (also
called call-by-value and call-by-reference). When an argument is passed by value, the program
makes a copy of the argument’s value and passes that copy to the called procedure.
With pass-by-value, changes to the called procedure’s copy do not affect the original variable’s
value. In contrast, when an argument is passed by reference, the caller gives the
called procedure the ability to access and modify the caller’s original data directly.
Figure 6.12 demonstrates passing value-type arguments by value and by reference.1
The program passes three value-type variables, number1, number2 and number3, in
different ways to procedures SquareByValue (lines 39–45) and SquareByReference
(lines 48–54). Keyword ByVal in the procedure header of SquareByValue (line 39) indicates
that value-type arguments should be passed by value. When number1 is passed to
SquareByValue (line 13), a copy of the value stored in number1 (i.e., 2) is passed to the
procedure. Therefore, the value of number1 in the calling procedure, Main, is not modified
when parameter number is squared in procedure SquareByValue (line 42).
Procedure SquareByReference uses keyword ByRef (line 48) to receive its
value-type parameter by reference. When Main calls SquareByReference (line 23),
a reference to the value stored in number2 is passed, which gives SquareByReference
direct access to the value stored in the original variable. Thus, the value stored in
number2 after SquareByReference finishes executing is the same as the final value
of parameter number.
When arguments are enclosed in parentheses, (), a copy of the value of the argument
is passed to the procedure, even if the procedure header includes keyword ByRef. Thus,
the value of number3 does not change after it is passed to SquareByReference (line
33) via parentheses.
Passing value-type arguments with keyword ByRef is useful when procedures need
to alter argument values directly. However, passing by reference can weaken security,
because the called procedure can modify the caller’s data.
Reference-type variables passed with keyword ByVal are effectively passed by reference,
as the value that is copied is the reference for the object. Although Visual Basic
allows programmers to use keyword ByRef with reference-type parameters, it is usually
Double R 6.04E-187R
Decimal D 128309.76D
Short S 3420S
Integer I -867I
Long L 19235827493259374L
1. In Chapter 7 we discuss passing reference-type arguments by value and by reference.
Type Type character Example
Fig. 6.11 Literals with type characters (part 2 of 2).
Chapter 6 Procedures 201
not necessary to do so except with type String. Although they technically are reference
types, String arguments cannot be modified directly when passed with keyword ByVal,
due to some subtle details of the String data type, which we discuss in Chapter 15,
Strings, Characters and Regular Expressions.
1 ‘ Fig. 6.12: ByRefTest.vb
2 ‘ Demonstrates passing by reference.
Module modByRefTest
‘ squares three values ByVal and ByRef, displays results
7 Sub Main()
8 Dim number1 As Integer = 2
10 Console.WriteLine(“Passing a value-type argument by value:”)
11 Console.WriteLine(“Before calling SquareByValue, ” & _
12 “number1 is {0}”, number1)
13 SquareByValue(number1) ‘ passes number1 by value
14 Console.WriteLine(“After returning from SquareByValue, ” & _
15 “number1 is {0}” & vbCrLf, number1)
17 Dim number2 As Integer = 2
19 Console.WriteLine(“Passing a value-type argument” & _
20 ” by reference:”)
21 Console.WriteLine(“Before calling SquareByReference, ” & _
22 “number2 is {0}”, number2)
23 SquareByReference(number2) ‘ passes number2 by reference
24 Console.WriteLine(“After returning from ” & _
25 “SquareByReference, number2 is {0}” & vbCrLf, number2)
27 Dim number3 As Integer = 2
29 Console.WriteLine(“Passing a value-type argument” & _
30 ” by reference, but in parentheses:”)
31 Console.WriteLine(“Before calling SquareByReference ” & _
32 “using parentheses, number3 is {0}”, number3)
33 SquareByReference((number3)) ‘ passes number3 by value
34 Console.WriteLine(“After returning from ” & _
35 “SquareByReference, number3 is {0}”, number3)
37 End Sub ‘ Main
39 ‘ squares number by value (note ByVal keyword)
40 Sub SquareByValue(ByVal number As Integer)
41 Console.WriteLine(“After entering SquareByValue, ” & _
42 “number is {0}”, number)
43 number *= number
44 Console.WriteLine(“Before exiting SquareByValue, ” & _
45 “number is {0}”, number)
46 End Sub ‘ SquareByValue
Fig. 6.12 ByVal and ByRef used to pass value-type arguments (part 1 of 2).
202 Procedures Chapter 6
Testing and Debugging Tip 6.3
When passing arguments by value, changes to the called procedure’s copy do not affect the
original variable’s value. This prevents possible side effects that could hinder the development
of correct and reliable software systems. Always pass value-type arguments by value
unless you explicitly intend for the called procedure to modify the caller’s data. 6.3
Software Engineering Observation 6.11
Although keywords ByVal and ByRef may be used to pass reference-type variables by value
or by reference, the called procedure can manipulate the caller’s reference-type variable
directly in both cases. Therefore, it is rarely appropriate to use ByRef with reference-type
variables. We discuss this subtle issue in detail in Chapter 7, Arrays. 6.11
6.10 Duration of Identifiers
Throughout the earlier chapters of this book, we have used identifiers for various purposes,
including as variable names and as the names of user-defined procedures, modules and
classes. Every identifier has certain attributes, including duration and scope.
An identifier’s duration (also called its lifetime) is the period during which the identifier
exists in memory. Some identifiers exist briefly, some are created and destroyed repeatedly,
yet others are maintained through the entire execution of a program.
48 ‘ squares number by reference (note ByRef keyword)
49 Sub SquareByReference(ByRef number As Integer)
50 Console.WriteLine(“After entering SquareByReference” & _
51 “, number is {0}”, number)
52 number *= number
53 Console.WriteLine(“Before exiting SquareByReference” & _
54 “, number is {0}”, number)
55 End Sub ‘ SquareByReference
57 End Module ‘ modByRefTest
Passing a value-type argument by value:
Before calling SquareByValue, number1 is 2
After entering SquareByValue, number is 2
Before exiting SquareByValue, number is 4
After returning from SquareByValue, number1 is 2
Passing a value-type argument by reference:
Before calling SquareByReference, number2 is 2
After entering SquareByReference, number is 2
Before exiting SquareByReference, number is 4
After returning from SquareByReference, number2 is 4
Passing a value-type argument by reference, but in parentheses:
Before calling SquareByReference using parentheses, number3 is 2
After entering SquareByReference, number is 2
Before exiting SquareByReference, number is 4
After returning from SquareByReference, number3 is 2
Fig. 6.12 ByVal and ByRef used to pass value-type arguments (part 2 of 2).
Chapter 6 Procedures 203
Software Engineering Observation 6.12
When returning information from a Function procedure via a Return statement, valuetype
variables always are returned by value (i.e., a copy is returned), whereas reference-type
variables always are returned by reference (i.e., a reference to an object is returned). 6.12
The scope of an identifier is the portion of a program in which the variable’s identifier
can be referenced. Some identifiers can be referenced throughout a program; others can be
referenced only from limited portions of a program (such as within a single procedure). This
section discusses the duration of identifiers. Section 6.11 discusses the scope of identifiers.
Identifiers that represent local variables in a procedure (i.e., parameters and variables
declared in the procedure body) have automatic duration. Automatic-duration variables are
created when program control enters the procedure in which they are declared, exist while
the procedure is active and are destroyed when the procedure is exited.2 For the remainder
of the text, we refer to variables of automatic duration simply as automatic variables, or
local variables.
Variables declared inside a module or class, but outside any procedure definition, exist
as long as their containing class or module is loaded in memory. Variables declared in a
module exist throughout a program’s execution. By default, a variable declared in a class,
such as a Form class for a Windows application, is an instance variable. In the case of a
Form, this means that the variable is created when the Form loads and exists until the
Form is closed. We discuss instance variables in detail in Chapter 8, Object-Based Programming.
Software Engineering Observation 6.13
Automatic duration is an example of the principle of least privilege. This principle states that
each component of a system should have only the rights and privileges it needs to accomplish
its designated task. This helps prevent accidental and/or malicious errors from occurring in
systems. Why have variables stored in memory and accessible when they are not needed? 6.13
6.11 Scope Rules
The scope (sometimes called declaration space) of a variable, reference or procedure identifier
is the portion of the program in which the identifier can be accessed. The possible
scopes for an identifier are class scope, module scope, namespace scope and block scope.
Members of a class have class scope, which means that they are visible in what is
known as the declaration space of a class. Class scope begins at the class identifier after
keyword Class and terminates at the End Class statement. This scope enables a method
of that class to invoke directly all members defined in that class and to access members
inherited into that class.3 In a sense, members of a class are global to the methods of the
class in which they are defined. This means that the methods can modify instance variables
of the class (i.e., variables declared in the class definition, but outside any method definition)
directly and invoke other methods of the class.
2. Variables in a procedure can also be declared using keyword Static, in which case the variable
is created and initialized during the first execution of the procedure then maintains its value between
subsequent calls to the procedure.
3. In Chapter 8, Object-Based Programming, we see that Shared members are an exception to this
204 Procedures Chapter 6
In Visual Basic .NET, identifiers declared inside a block, such as the body of a procedure
definition or the body of an If/Then selection structure, have block scope (local-variable
declaration space). Block scope begins at the identifier’s declaration and ends at the block’s
End statement (or equivalent, e.g., Next). Local variables of a procedure have block scope.
Procedure parameters also have block scope, because they are considered local variables of
the procedure. Any block can contain variable declarations. When blocks are nested in a body
of a procedure, an error is generated if an identifier declared in an outer block has the same
name as an identifier declared in an inner block. However, if a local variable in a called procedure
shares its name with a variable with class scope, such as an instance variable, the classscope
variable is “hidden” until the called procedure terminates execution.
Variables declared in a module have module scope, which is similar to class scope.
Variables declared in a module are accessible to all procedures defined in the module.
Module scope and class scope are sometimes referred to collectively as module scope. Like
class-scope variables, module-scope variables are hidden when they have the same identifier
as a local variable.
By default, procedures defined in a module have namespace scope, which generally
means that they may be accessed throughout a project. Namespace scope is useful in
projects that contain multiple pieces (i.e., modules and classes). If a project contains a
module and a class, methods in the class can access the procedures of the module. Although
variables declared in a module have module scope, they can be given namespace scope by
replacing keyword Dim with keyword Public in the declaration. We discuss how to add
modules to projects in Section 6.18.
Good Programming Practice 6.5
Avoid local-variable names that hide class-variable or module-variable names. 6.5
The program in Fig. 6.13 demonstrates scoping issues with instance variables and local
variables. Instance variable value is declared and initialized to 1 in line 12. As explained
previously, this variable is hidden in any procedure that declares a variable named value.
The FrmScoping_Load method declares a local variable value (line 19) and initializes
it to 5. This variable is displayed on lblOutput (note the declaration on line 7, which is
actually part of the Visual Studio .NET generated code) to illustrate that the instance variable
value is hidden in FrmScoping_Load.
1 ‘ Fig. 6.13: Scoping.vb
2 ‘ Demonstrates scope rules and instance variables.
Public Class FrmScoping
5 Inherits System.Windows.Forms.Form
Friend WithEvents lblOutput As System.Windows.Forms.Label
‘ Visual Studio .NET generated code
11 ‘ instance variable can be used anywhere in class
12 Dim value As Integer = 1
Fig. 6.13 Scoping rules in a class (part 1 of 2).
Chapter 6 Procedures 205
14 ‘ demonstrates class scope and block scope
15 Private Sub FrmScoping_Load(ByVal sender As System.Object, _
16 ByVal e As System.EventArgs) Handles MyBase.Load
18 ‘ variable local to FrmScoping_Load hides instance variable
19 Dim value As Integer = 5
21 lblOutput.Text = “local variable value in” & _
22 ” FrmScoping_Load is ” & value
24 MethodA() ‘ MethodA has automatic local value
25 MethodB() ‘ MethodB uses instance variable value
26 MethodA() ‘ MethodA creates new automatic local value
27 MethodB() ‘ instance variable value retains its value
29 lblOutput.Text &= vbCrLf & vbCrLf & “local variable ” & _
30 “value in FrmScoping_Load is ” & value
31 End Sub ‘ FrmScoping_Load
33 ‘ automatic local variable value hides instance variable
34 Sub MethodA()
35 Dim value As Integer = 25 ‘ initialized after each call
37 lblOutput.Text &= vbCrLf & vbCrLf & “local variable ” & _
38 “value in MethodA is ” & value & ” after entering MethodA”
39 value += 1
40 lblOutput.Text &= vbCrLf & “local variable ” & _
41 “value in MethodA is ” & value & ” before exiting MethodA”
42 End Sub ‘ MethodA
44 ‘ uses instance variable value
45 Sub MethodB()
46 lblOutput.Text &= vbCrLf & vbCrLf & “instance variable” & _
47 ” value is ” & value & ” after entering MethodB”
48 value *= 10
49 lblOutput.Text &= vbCrLf & “instance variable ” & _
50 “value is ” & value & ” before exiting MethodB”
51 End Sub ‘ MethodB
53 End Class ‘ FrmScoping
Fig. 6.13 Scoping rules in a class (part 2 of 2).
206 Procedures Chapter 6
The program defines two other methods—MethodA and MethodB—which take no
arguments and return nothing. Each method is called twice from FrmScoping_Load.
MethodA defines local variable value (line 35) and initializes it to 25. When MethodA is
called, the variable is displayed in the label lblOutput, incremented and displayed again
before exiting the method. Automatic variable value is destroyed when MethodA terminates.
Thus, each time this method is called, value must be recreated and reinitialized to 25.
MethodB does not declare any variables. Therefore, when this procedure refers to variable
value, the instance variable value (line 12) is used. When MethodB is called, the
instance variable is displayed, multiplied by 10 and displayed again before exiting the
method. The next time method MethodB is called, the instance variable retains its modified
value, 10 and line 48 causes value (line 12) to become 100. Finally, the program again displays
the local variable value in method FrmScoping_Load to show that none of the
method calls modified this variable value—both methods refer to variables in other scopes.
6.12 Random-Number Generation
We now take a brief and hopefully entertaining diversion into a popular programming application—
simulation and game playing. In this section and the next, we develop a structured
game-playing program that includes multiple methods. The program employs many
of the control structures that we have studied to this point, in addition to introducing several
new concepts.
There is something in the air of a gambling casino that invigorates a wide variety of
people, ranging from the high rollers at the plush mahogany-and-felt craps tables to the
quarter-poppers at the one-armed bandits. Many of these individuals are drawn by the element
of chance—the possibility that luck will convert a pocketful of money into a mountain
of wealth. The element of chance can be introduced into computer applications through
class Random (located in namespace System).
Consider the following statements:
Dim randomObject As Random = New Random()
Dim randomNumber As Integer = randomObject.Next()
The first statement declares randomObject as a reference to an object of type Random.
The value of randomObject is initialized using keyword New, which creates a new instance
of class Random (i.e., a Random object). In Visual Basic, keyword New creates an
object of a specified type and returns the object’s location in memory.
The second statement declares Integer variable randomNumber and assigns it the
value returned by calling Random method Next. We access method Next by following
the reference name, randomObject, by the dot (.) operator and the method name.
Method Next generates a positive Integer value between zero and the constant
Int32.MaxValue (2,147,483,647). If Next produces values at random, every value in
this range has an equal chance (or probability) of being chosen when Next is called. The
values returned by Next are actually pseudo-random numbers, or a sequence of values
produced by a complex mathematical calculation. This mathematical calculation requires a
seed value, which, if different each time the program is run, causes the series of mathematical
calculations to be different as well (so that the numbers generated are indeed random).
When we create a Random object, the current time of day becomes the seed value for the
calculation. Alternatively, we can pass a seed value as an argument in the parentheses after
Chapter 6 Procedures 207
New Random. Passing in the same seed twice results in the same series of random numbers.
Using the current time of day as the seed value is effective, because the time is likely
to change for each Random object we create.
The generation of random numbers often is necessary in a program. However, the
range of values produced by Next (i.e., values between 0–2,147,483,647) often is different
from that needed in a particular application. For example, a program that simulates cointossing
might require only 0 for “heads” and 1 for “tails.” A program that simulates the
rolling of a six-sided die would require random Integers from 1–6. Similarly, a program
that randomly predicts the next type of spaceship (out of four possibilities) that flies across
the horizon in a video game might require random Integers from 1–4.
By passing an argument to method Next as follows
value = 1 + randomObject.Next(6)
we can produce integers in the range 1–6. When a single argument is passed to Next, the
values returned by Next will be in the range from 0 to (but not including) the value of that
argument. This is called scaling. The number 6 is the scaling factor. We shift the range of
numbers produced by adding 1 to our previous result, so that the return values are between
1 and 6, rather than 0 and 5. The values produced by Next are always in the range
x ≤x + randomObject.Next(y) y
Visual Basic simplifies this process by allowing the programmer to pass two arguments
to Next. For example, the above statement also could be written as
value = randomObject.Next(1, 7)
Note that we must use 7 as the second argument to method Next to produce integers
in the range from 1–6. The first argument indicates the minimum value in our desired range,
whereas the second is equal to 1 + the maximum value desired. Thus, the values produced
by this version of Next will always be in the range
x ≤randomObject.Next(x, y) y
In this case, x is the shifting value, and y-x is the scaling factor. Figure 6.14 demonstrates
the use of class Random and method Next by simulating 20 rolls of a six-sided die and
showing the value of each roll in a MessageBox. Note that all the values are in the range
from 1–6, inclusive.
The program in Fig. 6.15 uses class Random to simulate rolling four six-sided dice. We
then use some of the functionality from this program in another example (Fig. 6.16) to demonstrate
that the numbers generated by Next occur with approximately equal likelihood.
In Fig. 6.15, we use event-handling method cmdRoll_Click, which executes whenever
the user clicks cmdRoll, resulting in method DisplayDie being called four times,
once for each Label on the Form. Calling DisplayDie (lines 35–44) causes four dice to
appear as if they are being rolled each time cmdRoll is clicked. Note that, when this program
runs, the dice images do not appear until the user clicks cmdRoll for the first time.
Method DisplayDie specifies the correct image for the face value calculated by
method Next (line 38). Notice that we declare randomObject as an instance variable of
FrmRollDice (line 21). This allows the same Random object to be used each time Disvbhtp2_
208 Procedures Chapter 6
playDie executes. We use the Image property (line 41) to display an image on a label. We
set the property’s value with an assignment statement (lines 41–43). Notice that we specify
the image to display through procedure FromFile in class Image (contained in the
System.Drawing namespace). Method Directory.GetCurrentDirectory
(contained in the System.IO namespace) returns the location of the folder in which the current
project is located, including bin, the directory containing the compiled project files. The
die images must be placed in this folder for the solutions in Fig. 6.15 and Fig. 6.16 to operate
properly. The graphics used in this example and several other examples in this chapter were
created with Adobe® Photoshop™ Elements and are located in the project directory available
on the CD-ROM that accompanies this book and at
Notice that we must include an Imports directive (line 4) to use classes in
System.IO, but not to use classes in System.Drawing. By default, Windows applications
import several namespaces, including Microsoft.VisualBasic, System,
System.Drawing, System.Windows.Forms and System.Collections. The
se namespaces are imported for the entire project, eliminating the need for Imports directives
in individual project files. Other namespaces can be imported into a project via the
Property Pages dialog (opened by selecting Project > Properties from the menu bar)
in the Imports listing under Common Properties. Some of the namespaces imported
by default are not used in this example. For instance, we do not yet use namespace
System.Collections, which allows programmers to create collections of objects (see
Chapter 24, Data Structures and Collections).
The Windows application in Fig. 6.16 rolls 12 dice to show that the numbers generated
by class Random occur with approximately equal frequencies. The program displays the
cumulative frequencies of each face in a TextBox.
1 ‘ Fig. 6.14: RandomInteger.vb
2 ‘ Generating random integers.
Imports System.Windows.Forms
Module modRandomInteger
Sub Main()
9 Dim randomObject As Random = New Random()
10 Dim randomNumber As Integer
11 Dim output As String = “”
12 Dim i As Integer
14 For i = 1 To 20
15 randomNumber = randomObject.Next(1, 7)
16 output &= randomNumber & ” “
18 If i Mod 5 = 0 Then ‘ is i a multiple of 5?
19 output &= vbCrLf
20 End If
22 Next
Fig. 6.14 Random integers created by calling method Next of class Random
(part 1 of 2).
Chapter 6 Procedures 209
24 MessageBox.Show(output, “20 Random Numbers from 1 to 6″, _
25 MessageBoxButtons.OK, MessageBoxIcon.Information)
26 End Sub ‘ Main
28 End Module ‘ modRandomInteger
1 ‘ Fig. 6.15: RollDice.vb
2 ‘ Rolling four dice.
Imports System.IO
Public Class FrmRollDice
7 Inherits System.Windows.Forms.Form
‘ button for rolling dice
10 Friend WithEvents cmdRoll As System.Windows.Forms.Button
12 ‘ labels to display die images
13 Friend WithEvents lblDie1 As System.Windows.Forms.Label
14 Friend WithEvents lblDie2 As System.Windows.Forms.Label
15 Friend WithEvents lblDie3 As System.Windows.Forms.Label
16 Friend WithEvents lblDie4 As System.Windows.Forms.Label
18 ‘ Visual Studio .NET generated code
20 ‘ declare Random object reference
21 Dim randomNumber As Random = New Random()
23 ‘ display results of four rolls
24 Private Sub cmdRoll_Click(ByVal sender As System.Object, _
25 ByVal e As System.EventArgs) Handles cmdRoll.Click
27 ‘ method randomly assigns a face to each die
28 DisplayDie(lblDie1)
29 DisplayDie(lblDie2)
30 DisplayDie(lblDie3)
31 DisplayDie(lblDie4)
32 End Sub ‘ cmdRoll_Click
Fig. 6.15 Demonstrates 4 die rolls (part 1 of 2).
Fig. 6.14 Random integers created by calling method Next of class Random
(part 2 of 2).
210 Procedures Chapter 6
Figure 6.16 contains two screenshots: One on the left that shows the program when the
program initially executes and one on the right that shows the program after the user has
clicked Roll over 200 times. If the values produced by method Next are indeed random,
the frequencies of the face values (1–6) should be approximately the same (as the left
screenshot illustrates).
To show that the die rolls occur with approximately equal likelihood, the program in
Fig. 6.16 has been modified to keep some simple statistics. We declare counters for each of
the possible rolls in line 31. Notice that the counters are instance variables, i.e., variables
with class scope. Lines 60–76 display the frequency of each roll as percentages using the
“P” format code.
As the program output demonstrates, we have utilized function Next to simulate the
rolling of a six-sided die. Over the course of many die rolls, each of the possible faces from
1–6 appears with equal likelihood, or approximately one-sixth of the time. Note that no
Case Else is provided in the Select structure (lines 91–111), because we know that the
values generated are in the range 1–6. In Chapter 7, Arrays, we explain how to replace the
entire Select structure in this program with a single-line statement.
Run the program several times and observe the results. Notice that a different sequence
of random numbers is obtained each time the program is executed, causing the resulting frequencies
to vary.
34 ‘ get a random die image
35 Sub DisplayDie(ByVal dieLabel As Label)
37 ‘ generate random integer in range 1 to 6
38 Dim face As Integer = randomNumber.Next(1, 7)
40 ‘ load corresponding image
41 dieLabel.Image = Image.FromFile( _
42 Directory.GetCurrentDirectory & “\Images\die” & _
43 face & “.png”)
44 End Sub ‘ DisplayDie
46 End Class ‘ FrmRollDice
Fig. 6.15 Demonstrates 4 die rolls (part 2 of 2).
Chapter 6 Procedures 211
1 ‘ Fig. 6.16: RollTwelveDice.vb
2 ‘ Rolling 12 dice with frequency chart.
Imports System.IO
Public Class FrmRollTwelveDice
7 Inherits System.Windows.Forms.Form
‘ labels to display die images
10 Friend WithEvents lblDie1 As System.Windows.Forms.Label
11 Friend WithEvents lblDie2 As System.Windows.Forms.Label
12 Friend WithEvents lblDie3 As System.Windows.Forms.Label
13 Friend WithEvents lblDie4 As System.Windows.Forms.Label
14 Friend WithEvents lblDie5 As System.Windows.Forms.Label
15 Friend WithEvents lblDie6 As System.Windows.Forms.Label
16 Friend WithEvents lblDie7 As System.Windows.Forms.Label
17 Friend WithEvents lblDie8 As System.Windows.Forms.Label
18 Friend WithEvents lblDie9 As System.Windows.Forms.Label
19 Friend WithEvents lblDie10 As System.Windows.Forms.Label
20 Friend WithEvents lblDie11 As System.Windows.Forms.Label
21 Friend WithEvents lblDie12 As System.Windows.Forms.Label
23 ‘ displays roll frequencies
24 Friend WithEvents displayTextBox As _
25 System.Windows.Forms.TextBox
27 ‘ Visual Studio .NET generated code
29 ‘ declarations
30 Dim randomObject As Random = New Random()
31 Dim ones, twos, threes, fours, fives, sixes As Integer
33 Private Sub cmdRoll_Click _
34 (ByVal sender As System.Object, _
35 ByVal e As System.EventArgs) Handles cmdRoll.Click
37 ‘ assign random faces to 12 dice using DisplayDie
38 DisplayDie(lblDie1)
39 DisplayDie(lblDie2)
40 DisplayDie(lblDie3)
41 DisplayDie(lblDie4)
42 DisplayDie(lblDie5)
43 DisplayDie(lblDie6)
44 DisplayDie(lblDie7)
45 DisplayDie(lblDie8)
46 DisplayDie(lblDie9)
47 DisplayDie(lblDie10)
48 DisplayDie(lblDie11)
49 DisplayDie(lblDie12)
51 Dim total As Integer = ones + twos + threes + fours + _
52 fives + sixes
Fig. 6.16 Random class used to simulate rolling 12 six-sided dice (part 1 of 3).
212 Procedures Chapter 6
54 Dim output As String
56 ‘ display frequencies of faces
57 output = “Face” & vbTab & vbTab & _
58 “Frequency” & vbTab & “Percent”
60 output &= vbCrLf & “1″ & vbTab & vbTab & ones & _
61 vbTab & vbTab & String.Format(“{0:P}”, ones / total)
63 output &= vbCrLf & “2″ & vbTab & vbTab & twos & vbTab & _
64 vbTab & String.Format(“{0:P}”, twos / total)
66 output &= vbCrLf & “3″ & vbTab & vbTab & threes & vbTab & _
67 vbTab & String.Format(“{0:P}”, threes / total)
69 output &= vbCrLf & “4″ & vbTab & vbTab & fours & vbTab & _
70 vbTab & String.Format(“{0:P}”, fours / total)
72 output &= vbCrLf & “5″ & vbTab & vbTab & fives & vbTab & _
73 vbTab & String.Format(“{0:P}”, fives / total)
75 output &= vbCrLf & “6″ & vbTab & vbTab & sixes & vbTab & _
76 vbTab & String.Format(“{0:P}”, sixes / total) & vbCrLf
78 displayTextBox.Text = output
79 End Sub ‘ cmdRoll_Click
81 ‘ display a single die image
82 Sub DisplayDie(ByVal dieLabel As Label)
84 Dim face As Integer = randomObject.Next(1, 7)
86 dieLabel.Image = _
87 Image.FromFile(Directory.GetCurrentDirectory & _
88 “\Images\die” & face & “.png”)
90 ‘ maintain count of die faces
91 Select Case face
93 Case 1
94 ones += 1
96 Case 2
97 twos += 1
99 Case 3
100 threes += 1
102 Case 4
103 fours += 1
105 Case 5
106 fives += 1
Fig. 6.16 Random class used to simulate rolling 12 six-sided dice (part 2 of 3).
Chapter 6 Procedures 213
6.13 Example: Game of Chance
One of the most popular games of chance is a dice game known as “craps,” played in casinos
and back alleys throughout the world. The rules of the game are straightforward:
A player rolls two dice. Each die has six faces. Each face contains 1, 2, 3, 4, 5 or 6 spots.
After the dice have come to rest, the sum of the spots on the two upward faces is calculated.
If the sum is 7 or 11 on the first throw, the player wins. If the sum is 2, 3 or 12 on the first
throw (called “craps”), the player loses (i.e., the “house” wins). If the sum is 4, 5, 6, 8, 9 or
10 on the first throw, that sum becomes the player’s “point.” To win, players must continue
rolling the dice until they “make their point” (i.e., roll their point value). The player loses by
rolling a 7 before making the point.
The application in Fig. 6.17 simulates the game of craps.
108 Case 6
109 sixes += 1
111 End Select
113 End Sub ‘ DisplayDie
End Class ‘ FrmRollTwelveDice
Fig. 6.16 Random class used to simulate rolling 12 six-sided dice (part 3 of 3).
214 Procedures Chapter 6
Notice that the player must roll two dice on the first and all subsequent rolls. When
executing the application, click the Play button to play the game. The form displays the
results of each roll. The screen captures depict the execution of two games.
Lines 9–21 indicate that this program uses classes PictureBox, Label, Button
and GroupBox from namespace System.Windows.Forms. Although the Windows
Form Designer uses the full name for these classes (e.g., System.Windows.
Forms.PictureBox), we show only the class names for simplicity. Class names
are sufficient in this case, because System.Windows.Forms is imported by default for
Windows applications.
This program introduces several new GUI components. The first, called a GroupBox,
displays the user’s point. A GroupBox is a container used to group related components.
Within the GroupBox pointDiceGroup, we add two PictureBoxes, which are
components that display images. Components are added to a GroupBox by dragging and
dropping a component onto the GroupBox.
Before introducing any method definitions, the program includes several declarations,
including our first Enumeration on lines 26–32 and our first Constant identifiers on lines
35–36. Constant identifiers and Enumerations enhance program readability by providing
descriptive identifiers for numbers or Strings that have special meaning. Constant
identifiers and Enumerations help programmers ensure that values are consistent
throughout a program. Keyword Const creates a single constant identifier; Enumerations
are used to define groups of related constants. In this case, we create Constant identifiers
for the file names that are used throughout the program and create an Enumeration of
descriptive names for the various dice combinations in Craps (i.e., SNAKE_EYES, TREY,
CRAPS, YO_LEVEN and BOX_CARS). Constant identifiers must be assigned constant
values and cannot be modified after they are declared.
1 ‘ Fig 6.17: CrapsGame.vb
2 ‘ Playing a craps game.
Imports System.IO
Public Class FrmCrapsGame
7 Inherits System.Windows.Forms.Form
Friend WithEvents cmdRoll As Button ‘ rolls dice
10 Friend WithEvents cmdPlay As Button ‘ starts new game
12 ‘ dice displayed after each roll
13 Friend WithEvents picDie1 As PictureBox
14 Friend WithEvents picDie2 As PictureBox
16 ‘ pointDiceGroup groups dice representing player’s point
17 Friend WithEvents pointDiceGroup As GroupBox
18 Friend WithEvents picPointDie1 As PictureBox
19 Friend WithEvents picPointDie2 As PictureBox
21 Friend WithEvents lblStatus As Label
Fig. 6.17 Craps game using class Random (part 1 of 4).
Chapter 6 Procedures 215
23 ‘ Visual Studio .NET generated code
25 ‘ die-roll constants
26 Enum DiceNames
28 TREY = 3
29 CRAPS = 7
30 YO_LEVEN = 11
31 BOX_CARS = 12
32 End Enum
34 ‘ file-name and directory constants
35 Const FILE_PREFIX As String = “/images/die”
36 Const FILE_SUFFIX As String = “.png”
38 Dim myPoint As Integer
39 Dim myDie1 As Integer
40 Dim myDie2 As Integer
41 Dim randomObject As Random = New Random()
43 ‘ begins new game and determines point
44 Private Sub cmdPlay_Click(ByVal sender As System.Object, _
45 ByVal e As System.EventArgs) Handles cmdPlay.Click
47 ‘ initialize variables for new game
48 myPoint = 0
49 pointDiceGroup.Text = “Point”
50 lblStatus.Text = “”
52 ‘ remove point-die images
53 picPointDie1.Image = Nothing
54 picPointDie2.Image = Nothing
56 Dim sum As Integer = RollDice()
58 ‘ check die roll
59 Select Case sum
61 Case DiceNames.CRAPS, DiceNames.YO_LEVEN
63 ‘ disable roll button
64 cmdRoll.Enabled = False
65 lblStatus.Text = “You Win!!!”
67 Case DiceNames.SNAKE_EYES, _
68 DiceNames.TREY, DiceNames.BOX_CARS
70 cmdRoll.Enabled = False
71 lblStatus.Text = “Sorry. You Lose.”
73 Case Else
74 myPoint = sum
75 pointDiceGroup.Text = “Point is ” & sum
Fig. 6.17 Craps game using class Random (part 2 of 4).
216 Procedures Chapter 6
76 lblStatus.Text = “Roll Again!”
77 DisplayDie(picPointDie1, myDie1)
78 DisplayDie(picPointDie2, myDie2)
79 cmdPlay.Enabled = False
80 cmdRoll.Enabled = True
82 End Select
84 End Sub ‘ cmdPlay_Click
86 ‘ determines outcome of next roll
87 Private Sub cmdRoll_Click(ByVal sender As System.Object, _
88 ByVal e As System.EventArgs) Handles cmdRoll.Click
90 Dim sum As Integer = RollDice()
92 ‘ check outcome of roll
93 If sum = myPoint Then
94 lblStatus.Text = “You Win!!!”
95 cmdRoll.Enabled = False
96 cmdPlay.Enabled = True
97 ElseIf sum = DiceNames.CRAPS Then
98 lblStatus.Text = “Sorry. You Lose.”
99 cmdRoll.Enabled = False
100 cmdPlay.Enabled = True
101 End If
103 End Sub ‘ cmdRoll_Click
105 ‘ display die image
106 Sub DisplayDie(ByVal picDie As PictureBox, _
107 ByVal face As Integer)
109 ‘ assign die image to picture box
110 picDie.Image = _
111 Image.FromFile(Directory.GetCurrentDirectory & _
113 End Sub ‘ DisplayDie
115 ‘ generate random die rolls
116 Function RollDice() As Integer
117 Dim die1, die2 As Integer
119 ‘ determine random integer
120 die1 = randomObject.Next(1, 7)
121 die2 = randomObject.Next(1, 7)
123 ‘ display rolls
124 DisplayDie(picDie1, die1)
125 DisplayDie(picDie2, die2)
Fig. 6.17 Craps game using class Random (part 3 of 4).
Chapter 6 Procedures 217
After the constant-identifier declarations and the declarations for several instance variables
(lines 38–41), method cmdPlay_Click is defined (lines 44–84). Method
cmdPlay_Click is the event handler for the event cmdPlay.Click (created by
double-clicking cmdPlay in Design mode). In this example, the method’s task is to process
a user’s interaction with Button cmdPlay (which displays the text Play on the user
When the user clicks the Play button, method cmdPlay_Click sets up a new game
by initializing several values (lines 48–50). Setting the Image property of
picPointDie1 and picPointDie2 to Nothing (lines 53–54) causes the PictureBoxes
to appear blank. Keyword Nothing can be used with reference-type variables
to specify that no object is associated with the variable.
Method cmdPlay_Click executes the game’s opening roll by calling RollDice
(line 56). Internally, RollDice (lines 116–132) generates two random numbers and calls
method DisplayDie (lines 106–113), which loads an appropriate die image on the PictureBox
passed to it.
127 ‘ set values
128 myDie1 = die1
129 myDie2 = die2
131 Return die1 + die2
132 End Function ‘ RollDice
134 End Class ‘ FrmCrapsGame
Fig. 6.17 Craps game using class Random (part 4 of 4).
GroupBox PictureBoxes (displaying images)
218 Procedures Chapter 6
When RollDice returns, the Select structure (lines 59–82) analyzes the roll
returned by RollDice to determine how play should continue (i.e., by terminating the
game with a win or loss, or by enabling subsequent rolls). Depending on the value of the
roll, the buttons cmdRoll and cmdPlay become either enabled or disabled. Disabling a
Button causes no action to be performed when the Button is clicked. Buttons can be
enabled and disabled by setting the Enabled property to True or False.
If Button cmdRoll is enabled, clicking it invokes method cmdRoll_Click
(lines 87–103), which executes an additional roll of the dice. Method cmdRoll_Click
then analyzes the roll, letting users know whether they won or lost.
6.14 Recursion
In most of the programs we have discussed so far, procedures have called one another in a
disciplined, hierarchical manner. However, in some instances, it is useful to enable procedures
to call themselves. A recursive procedure is a procedure that calls itself either directly
or indirectly (i.e., through another procedure). Recursion is an important topic that is
discussed at length in upper-level computer science courses. In this section and the next,
we present simple examples of recursion.
Prior to examining actual programs containing recursive procedures, we first consider
recursion conceptually. Recursive problem-solving approaches have a number of elements
in common. A recursive procedure is called to solve a problem. The procedure actually
knows how to solve only the simplest case(s), or base case(s). If the procedure is called
with a base case, the procedure returns a result. If the procedure is called with a more complex
problem, the procedure divides the problem into two conceptual pieces; a piece that
the procedure knows how to perform (base case), and a piece that the procedure does not
know how to perform. To make recursion feasible, the latter piece must resemble the original
problem, but be a slightly simpler or smaller version of it. The procedure invokes
(calls) a fresh copy of itself to work on the smaller problem—this is referred to as a recursive
call, or a recursion step. The recursion step also normally includes the keyword
Return, because its result will be combined with the portion of the problem that the procedure
knew how to solve. Such a combination will form a result that will be passed back
to the original caller.
The recursion step executes while the original call to the procedure is still “open” (i.e.,
has not finished executing). The recursion step can result in many more recursive calls, as
the procedure divides each new subproblem into two conceptual pieces. As the procedure
continues to call itself with slightly simpler versions of the original problem, the sequence
of smaller and smaller problems must converge on the base case, so that the recursion can
eventually terminate. At that point, the procedure recognizes the base case and returns a
result to the previous copy of the procedure. A sequence of returns ensues up the line until
the original procedure call returns the final result to the caller. As an example of these concepts,
let us write a recursive program that performs a popular mathematical calculation.
The factorial of a nonnegative integer n, written n! (and read “n factorial”), is the product
n • ( n – 1 ) • ( n – 2 ) • … • 1
with 1! equal to 1, and 0! defined as 1. For example, 5! is the product 5 • 4 • 3 • 2 • 1, which
is equal to 120.
Chapter 6 Procedures 219
The factorial of an integer number greater than or equal to 0 can be calculated iteratively
(nonrecursively) using a For repetition structure, as follows:
Dim counter, factorial As Integer = 1
For counter = number To 1 Step -1
factorial *= counter
We arrive at a recursive definition of the factorial procedure with the following relationship:
n! = n • ( n – 1 )!
For example, 5! is clearly equal to 5 • 4!, as is shown by the following:
5! = 5 • 4 • 3 • 2 • 1
5! = 5 • ( 4 • 3 • 2 • 1 )
5! = 5 • ( 4! )
A recursive evaluation of 5! would proceed as in Fig. 6.18. Figure 6.18a shows how
the succession of recursive calls proceeds until 1! is evaluated to be 1, which terminates the
recursion. Figure 6.18b depicts the values that are returned from each recursive call to its
caller until the final value is calculated and returned.
The program of Fig. 6.19 recursively calculates and prints factorials. (The choice of
the data type Long will be explained soon). The recursive method Factorial (lines 33–
41) first tests (line 35) to determine whether its terminating condition is true (i.e., number
is less than or equal to 1). If number is less than or equal to 1, Factorial returns 1, no
further recursion is necessary, and the method returns. If number is greater than 1, line 38
expresses the problem as the product of number and a recursive call to Factorial, evaluating
the factorial of number – 1. Note that Factorial(number – 1) is a slightly
simpler problem than the original calculation, Factorial(number).
Fig. 6.18 Recursive evaluation of 5!.
5 * 4!
4 * 3!
3 * 2!
2 * 1!
(a) Procession of recursive calls (b) Values returned from each recursive call
5 * 4!
4 * 3!
3 * 2!
2 * 1!
Final value = 120
5! = 5 * 24 = 120 is returned
4! = 4 * 6 = 24 is returned
3! = 3 * 2 = 6 is returned
2! = 2 * 1 = 2 is returned
1 returned
220 Procedures Chapter 6
Function Factorial (line 33) receives a parameter of type Long and returns a
result of type Long. As is seen in the output window of Fig. 6.19, factorial values escalate
quickly. We choose data type Long to enable the program to calculate factorials greater than
12!. Unfortunately, the values produced by the Factorial method increase at such a rate
that the range of even the Long type is quickly exceeded. This points to a weakness in most
programming languages: They are not easily extended to handle the unique requirements of
various applications, such as the evaluation of large factorials. As we will see in our treatment
of object-oriented programming beginning in Chapter 8, Visual Basic is an extensible language—
programmers with unique requirements can extend the language with new data types
(called classes). For example, a programmer could create a HugeInteger class that would
enable a program to calculate the factorials of arbitrarily large numbers.
1 ‘ Fig. 6.19: Factorial.vb
2 ‘ Calculating factorials using recursion.
Public Class FrmFactorial
5 Inherits System.Windows.Forms.Form
Friend WithEvents lblEnter As Label ‘ prompts for Integer
8 Friend WithEvents lblFactorial As Label ‘ indicates output
10 Friend WithEvents txtInput As TextBox ‘ reads an Integer
11 Friend WithEvents txtDisplay As TextBox ‘ displays output
13 Friend WithEvents cmdCalculate As Button ‘ generates output
15 ‘ Visual Studio .NET generated code
17 Private Sub cmdCalculate_Click(ByVal sender As System.Object, _
18 ByVal e As System.EventArgs) Handles cmdCalculate.Click
20 Dim value As Integer = Convert.ToInt32(txtInput.Text)
21 Dim i As Integer
22 Dim output As String
24 txtDisplay.Text = “”
26 For i = 0 To value
27 txtDisplay.Text &= i & “! = ” & Factorial(i) & vbCrLf
28 Next
30 End Sub ‘ cmdCalculate_Click
32 ‘ recursively generates factorial of number
33 Function Factorial(ByVal number As Long) As Long
35 If number Add Module.]
FrmDiceModuleTest in Fig. 6.26 demonstrates using the modDice procedures to
respond to button clicks. Procedure cmdRollDie1_Click (lines 23–27) rolls a die and
obtains the default image. We call procedures contained in modDice by following the
module name with the dot (.) operator and the procedure name. Using the functionality
provided by modDice, the body of this procedure requires only one statement (line 26).
Thus, we easily can create a similar Button, cmdRollDie2. In this case, procedure
cmdRollDie2_Click (lines 29–34) uses the Optional argument to prefix the image
name and select a different image. Procedure cmdRollTen_Click (lines 36–40) sets the
Text property of lblSum to the result of 10 rolls.
1 ‘ Fig. 6.25: DiceModule.vb
2 ‘ A collection of common dice procedures.
Imports System.IO
Module modDice
Dim randomObject As Random = New Random()
10 ‘ rolls single die
11 Function RollDie() As Integer
12 Return randomObject.Next(1, 7)
13 End Function ‘ RollDie
15 ‘ die summation procedure
16 Function RollAndSum(ByVal diceNumber As Integer) _
17 As Integer
19 Dim i As Integer
20 Dim sum As Integer = 0
Fig. 6.25 Module used to define a group of related procedures (part 1 of 2).
232 Procedures Chapter 6
For the program in Fig. 6.26, we add DiceModule.vb to the project to provide access
to the procedures defined in modDice. To include a module in a project, select
File > Add Existing Item…. In the dialog that is displayed, select the module file name
and click Open. By default, a copy the file is added to the project directory unless you specify
to open the module file as a linked file. Once a module has been added to a project, the procedures
contained in the module have namespace scope. By default, procedures with
namespace scope are accessible to all other parts of a project, such as methods in classes and
procedures in other modules. Although it is not necessary, the programmer may place the file
containing the module’s code in the same directory as the other files for the project.
22 For i = 1 To diceNumber
23 sum += RollDie()
24 Next
26 Return sum
27 End Function ‘ RollAndSum
29 ‘ returns die image
30 Function GetDieImage(ByVal dieValue As Integer, _
31 Optional ByVal baseImageName As String = “die”) _
32 As System.Drawing.Image
34 Return Image.FromFile( _
35 Directory.GetCurrentDirectory & _
36 “\Images\” & baseImageName & dieValue & “.png”)
37 End Function ‘ GetDieImage
39 End Module ‘ modDice
1 ‘ Fig. 6.26: DiceModuleTest.vb
2 ‘ Demonstrates modDiceModule procedures
Imports System.Drawing
Public Class FrmDiceModuleTest
7 Inherits System.Windows.Forms.Form
Friend WithEvents lblSum As Label ‘ displays 10-roll sum
11 Friend WithEvents diceGroup As GroupBox
13 ‘ dice images
14 Friend WithEvents picDie1 As PictureBox
15 Friend WithEvents picDie2 As PictureBox
17 Friend WithEvents cmdRollDie1 As Button ‘ rolls blue die
18 Friend WithEvents cmdRollTen As Button ‘ simulates 10 rolls
19 Friend WithEvents cmdRollDie2 As Button ‘ rolls red die
Fig. 6.26 Testing the modDice procedures (part 1 of 2).
Fig. 6.25 Module used to define a group of related procedures (part 2 of 2).
Chapter 6 Procedures 233
• Experience has shown that the best way to develop and maintain a large program is to construct it
from small, manageable pieces. This technique is known as divide and conquer.
• Visual Basic programs consist of many pieces, including modules and classes.
• Modules and classes are composed of smaller pieces called procedures. When procedures are contained
in a class, we refer to them as methods.
• Visual Basic provides many classes and methods in the .NET Framework Class Library (FCL).
This rich collection of features allows programmers to develop robust applications quickly.
• Three types of procedures exist: Sub procedures, Function procedures and event procedures.
• Procedures promote software reusability—the ability to use existing procedures as building blocks
for new programs.
• The first statement of a procedure definition is the procedure header.
21 ‘ Visual Studio .NET generated code
23 Private Sub cmdRollDie1_Click(ByVal sender As System.Object, _
24 ByVal e As System.EventArgs) Handles cmdRollDie1.Click
26 picDie1.Image = modDice.GetDieImage(modDice.RollDie())
27 End Sub ‘ cmdRollDie1_Click
29 Private Sub cmdRollDie2_Click(ByVal sender As System.Object, _
30 ByVal e As System.EventArgs) Handles cmdRollDie2.Click
32 picDie2.Image = modDice.GetDieImage(modDice.RollDie(), _
33 “redDie”)
34 End Sub ‘ cmdRollDie2_Click
36 Private Sub cmdRollTen_Click(ByVal sender As System.Object, _
37 ByVal e As System.EventArgs) Handles cmdRollTen.Click
39 lblSum.Text = Convert.ToString(modDice.RollAndSum(10))
40 End Sub ‘ cmdRollTen_Click
42 End Class ‘ FrmDiceModuleTest
Fig. 6.26 Testing the modDice procedures (part 2 of 2).
234 Procedures Chapter 6
• The declarations and statements in the procedure definition form the procedure body.
• The procedure header and procedure call must agree with regard to the number, type and order of
• The characteristics of Function procedures are similar to those of Sub procedures. However,
Function procedures return a value (i.e., send back a value) to the caller.
• In a Function header, the return type indicates the data type of the result returned from the
Function to its caller.
• Keyword Return, followed by an expression, returns a value from a Function procedure.
• If a Function procedure body does not specify a Return statement, program control returns to
the point at which a procedure was invoked when the End Function keywords are encountered.
• An event represents a user action, such as the clicking of a button or the alteration of a value.
• Calls to methods, such as Math.Max, that are defined in a separate class must include the class
name and the dot (.) operator (also called the member access operator). However, calls to methods
defined in the class that contains the method call need only specify the method name.
• The Parameter Info feature of the IDE identifies accessible procedures and their arguments. Parameter
Info greatly simplifies coding. The Parameter Info feature provides information not only
about programmer-defined procedures, but about all methods contained in the FCL.
• The IntelliSense feature displays all the members in a class.
• Widening conversion occurs when a type is converted to another type (usually one that can hold
more data) without losing data.
• Narrowing conversion occurs when there is potential for data loss during a conversion (usually to
a type that holds a smaller amount of data). Some narrowing conversions can fail, resulting in runtime
errors and logic errors.
• Visual Basic supports both widening and narrowing conversions.
• Option Explicit, which is set to On by default, forces the programmer to declare all variables
explicitly before they are used in a program. Forcing explicit declarations eliminates spelling errors
and other subtle errors that may occur if Option Explicit is turned Off.
• Option Strict, which is set to Off by default, increases program clarity and reduces debugging
time. When set to On, Option Strict requires the programmer to perform all narrowing
conversions explicitly.
• The methods in class Convert changes data types explicitly. The name of each conversion method
is the word To, followed by the name of the data type to which the method converts its argument.
• All data types can be categorized as either value types or reference types. A variable of a value
type contains data of that type. A variable of a reference type contains the location in memory
where the data is stored.
• Both value and reference types include built-in types and types that programmers can create.
• Values typed directly in program code are called literals. Each literal corresponds to one of the
primitive data types. Some of Visual Basic’s data types use special notations, such as type characters,
for creating literals.
• Arguments are passed in one of two ways: Pass-by-value and pass-by-reference (also called callby-
value and call-by-reference).
• When an argument is passed by value, the program makes a copy of the argument’s value and passes
that copy to the called procedure. Changes to the called procedure’s copy do not affect the original
variable’s value.
Chapter 6 Procedures 235
• When an argument is passed by reference, the caller gives the procedure the ability to access and
modify the caller’s original data directly. Pass-by-reference can improve performance, because it
eliminates the need to copy large data items, such as large objects; however, pass-by-reference can
weaken security, because the called procedure can modify the caller’s data.
• By default, the code editor includes keyword ByVal in parameter declarations to indicate that the
parameter is passed by value. In the case of value-type variables, this means that the value stored
in the variable is copied and passed to the procedure, preventing the procedure from accessing the
original value in the variable.
• Value-type arguments enclosed in parentheses, (), are passed by value even if the procedure
header declares the parameter with keyword ByRef.
• An identifier’s duration (also called its lifetime) is the period during which the identifier exists in
• Identifiers that represent local variables in a procedure (i.e., parameters and variables declared in
the procedure body) have automatic duration. Automatic-duration variables are created when program
control enters the procedure in which they are declared, exist while the procedure is active
and are destroyed when the procedure is exited.
• Variables declared with keyword Static inside a procedure definition have static duration,
meaning they have the same duration as the Class or Module that contains the procedure.
• The scope (sometimes called declaration space) of a variable, reference or procedure identifier is
the portion of the program in which the identifier can be accessed. The possible scopes for an identifier
are class scope, module scope, namespace scope and block scope.
• In Visual Basic .NET, identifiers declared inside a block, such as the body of a procedure definition
or the body of an If selection structure, have block scope. Block scope begins at the identifier’s
declaration and ends at the block’s End statement.
• Procedures in a module have namespace scope, which means that they may be accessed throughout
a project.
• It is possible to create variables with namespace scope by replacing keyword Dim with keyword
Public in the declaration of a variable in a module.
• Constant identifiers and Enumerations enhance program readability by providing descriptive
identifiers for numbers or Strings that have special meaning.
• A recursive procedure is a procedure that calls itself, either indirectly (i.e., through another procedure)
or directly.
• Any problem that can be solved recursively also can be solved iteratively (nonrecursively).
• The element of chance can be introduced into computer applications through class Random (located
in namespace System). Method Next returns a random number.
• Overloading allows the programmer to define several procedures with the same name, as long as
these procedures have different sets of parameters (number of parameters, types of the parameters
and order of the parameters). This allows the programmer to reduce the complexity of the program
and create a more flexible application.
• Overloaded procedures are distinguished by their signatures, which are a combination of the procedure’s
name and parameter types. The compiler uses a logical process known as overload resolution
to determine which procedure should be called.
• Procedure calls cannot be distinguished by return type. A syntax error is generated when two procedures
have the same signature and different return types. However, overloaded procedures with
different signatures can have different return types.
236 Procedures Chapter 6
• Programmers use modules to group related procedures so that they can be reused in other projects.
Modules are similar in many ways to classes; they allow programmers to build reusable components
without a full knowledge of object-oriented programming.
• Once a module has been added to a project, the procedures contained in the module have
namespace scope. By default, procedures with namespace scope are accessible to all other parts of
a project, such as methods in classes and procedures in other modules.
• Visual Basic allows programmers to create procedures that take one or more optional arguments.
When a parameter is declared as optional, the caller has the option of passing that particular argument.
Optional arguments are specified in the procedure header with keyword Optional.
. (dot operator) infinite recursion
argument to a procedure call inheritance
automatic duration instance variables of a class
automatic initialization of a variable interface
base case invoke
block scope iteration
Button class lifetime of an identifier
ByRef keyword local variable
ByVal keyword Math class method
call-by-reference method
call-by-value method body
calling procedure method call
class method overloading
class scope mixed-type expression
Click event Module
coercion of arguments modularizing a program with procedures
comma-separated list of arguments named constant
complexity theory narrowing conversion
Const keyword nested block
constant identifier nested control structure
control structures in iteration Next method
control structures in recursion optional argument
convergence Optional keyword
declaration overloaded procedure
default argument parameter list
divide-and-conquer approach parentheses
duration of an identifier pass-by-reference
Enum keyword pass-by-value
enumeration precedence
event handling principle of least privilege
exhausting memory procedure
exponential “explosion” of calls procedure body
Factorial method procedure call
Fibonacci series, defined recursively procedure overloading
Function procedure programmer-defined procedure
golden ratio promotions for primitive data types
hierarchical structure Public keyword
infinite loop Random class
Chapter 6 Procedures 237
6.1 Fill in the blanks in each of the following statements:
a) Procedures in Visual Basic can be defined in and .
b) A procedure is invoked with a .
c) A variable known only within the procedure in which it is defined is called a .
d) The statement in a called Function procedure can be used to pass the value
of an expression back to the calling procedure.
e) A procedure defined with keyword does not return a value.
f) The of an identifier is the portion of the program in which the identifier can
be used.
g) The three ways to return control from a called Sub procedure to a caller are ,
and .
h) The method in class Random produces random numbers.
i) Variables declared in a block or in a procedure’s parameter list are of duration.
j) A procedure that calls itself either directly or indirectly is a procedure.
k) A recursive procedure typically has two components: One that provides a means for the
recursion to terminate by testing for a case, and one that expresses the problem
as a recursive call for a problem slightly simpler than the original call.
l) In Visual Basic, it is possible to have various procedures with the same name that operate
on different types or numbers of arguments. This is called procedure .
m) Local variables declared at the beginning of a procedure have scope, as do
procedure parameters, which are considered local variables of the procedure.
n) Iteration uses a structure.
o) Recursion uses a structure.
p) Recursion achieves repetition through repeated calls.
q) It is possible to define procedures with the same , but different parameter
r) Recursion terminates when the is reached.
s) The is a comma-separated list containing the declarations of the parameters
received by the called procedure.
t) The is the data type of the result returned from a called Function procedure.
u) An is a signal that is sent when some action takes place, such as a button being
6.2 State whether each of the following is true or false. If false, explain why.
a) Math method Abs rounds its parameter to the smallest integer.
recursive evaluation signature
recursive method simulation
reference type software reusability
Return keyword Static duration
return-value type Sub procedure
scaling factor termination test
scientific notation type character
scope of an identifier user-interface event
sequence of random numbers value type
shifting value widening conversion
side effect
238 Procedures Chapter 6
b) Math method Exp is the exponential method that calculates ex.
c) A recursive procedure is one that calls itself.
d) Conversion from type Single to type Double requires a widening conversion.
e) Variable type Char cannot be converted to type Integer.
f) When a procedure recursively calls itself, it is known as the base case.
g) Forgetting to return a value from a recursive procedure when one is needed results in a
logic error.
h) Infinite recursion occurs when a procedure converges on the base case.
i) Visual Basic supports Optional arguments.
j) Any problem that can be solved recursively also can be solved iteratively.
6.3 For the program in Fig. 6.27, state the scope (either class scope or block scope) of each of the
following elements:
a) The variable i.
b) The variable base.
c) The method Cube.
d) The method FrmCubeTest_Load.
e) The variable output.
6.4 Write an application that tests whether the examples of the Math class method calls shown
in Fig. 6.7 actually produce the indicated results.
6.5 Give the procedure header for each of the following:
a) Procedure Hypotenuse, which takes two double-precision, floating-point arguments,
side1 and side2, and returns a double-precision, floating-point result.
b) Procedure Smallest, which takes three integers, x, y and z, and returns an integer.
c) Procedure Instructions, which does not take any arguments and does not return a
d) Procedure IntegerToSingle, which takes an integer argument, number, and returns
a floating-point result.
6.6 Find the error in each of the following program segments and explain how the error can be
1 ‘ Fig. 6.27: CubeTest.vb
2 ‘ Printing the cubes of 1-10.
Public Class FrmCubeTest
5 Inherits System.Windows.Forms.Form
Friend WithEvents lblOutput As Label
‘ Visual Studio .NET generated code
11 Dim i As Integer
13 Private Sub FrmCubeTest_Load(ByVal sender As System.Object, _
14 ByVal e As System.EventArgs) Handles MyBase.Load
16 Dim output As String = “”
Fig. 6.27 Printing the results of cubing 10 numbers (part 1 of 2).
Chapter 6 Procedures 239
a) Sub General1()
Console.WriteLine(“Inside procedure General1″)
Sub General2()
Console.WriteLine(“Inside procedure General2″)
End Sub ‘ General2
End Sub ‘ General1
b) Function Sum(ByVal x As Integer, ByVal y As Integer) _
As Integer
Dim result As Integer
result = x + y
End Function ‘ Sum
c) Sub Printer1(ByVal value As Single)
Dim value As Single
End Sub ‘ Printer1
d) Sub Product()
Dim a As Integer = 6
Dim b As Integer = 5
Dim result As Integer = a * b
Console.WriteLine(“Result is ” & result)
Return result
End Sub ‘ Product
e) Function Sum(ByVal value As Integer) As Integer
If value = 0 Then
Return 0
value += Sum(value – 1)
End If
End Function ‘ Sum
18 For i = 1 To 10
19 output &= Cube(i) & vbCrLf
20 Next
22 lblOutput.Text = output
23 End Sub ‘ FrmCubeTest_Load
25 Function Cube(ByVal base As Integer) As Integer
26 Return Convert.ToInt32(base ^ 3)
27 End Function ‘ Cube
29 End Class ‘ FrmCubeTest
Fig. 6.27 Printing the results of cubing 10 numbers (part 2 of 2).
240 Procedures Chapter 6
6.1 a) classes, modules. b) procedure call. c) local variable. d) Return. e) Sub. f) scope.
g) Return, Exit Sub, encountering the End Sub statement. h) Next. i) automatic. j) recursive.
k) base. l) overloading. m) block. n) repetition. o) selection. p) procedure. q) name. r) base case. s)
parameter list. t) return-value type. u) event.
6.2 a) False. Math method Abs returns the absolute value of a number. b) True. c) True. d) True.
e) False. Type Char can be converted to type Integer with a narrowing conversion. f) False. A
procedure’s recursively calling itself is known as the recursive call or recursion step. g) True. h) False.
Infinite recursion occurs when a recursive procedure does not converge on the base case. i) True.
j) True.
6.3 a) Class scope. b) Block scope. c) Class scope. d) Class scope. e) Block scope.
6.4 The following code demonstrates the use of some Math library method calls:
1 ‘ Ex. 6.4: MathTest.vb
2 ‘ Testing the Math class methods
Module modMathTest
Sub Main()
7 Console.WriteLine(“Math.Abs(23.7) = ” & _
8 Convert.ToString(Math.Abs(23.7)))
9 Console.WriteLine(“Math.Abs(0.0) = ” & _
10 Convert.ToString(Math.Abs(0)))
11 Console.WriteLine(“Math.Abs(-23.7) = ” & _
12 Convert.ToString(Math.Abs(-23.7)))
13 Console.WriteLine(“Math.Ceiling(9.2) = ” & _
14 Convert.ToString(Math.Ceiling(9.2)))
15 Console.WriteLine(“Math.Ceiling(-9.8) = ” & _
16 Convert.ToString(Math.Ceiling(-9.8)))
17 Console.WriteLine(“Math.Cos(0.0) = ” & _
18 Convert.ToString(Math.Cos(0)))
19 Console.WriteLine(“Math.Exp(1.0) = ” & _
20 Convert.ToString(Math.Exp(1)))
21 Console.WriteLine(“Math.Exp(2.0) = ” & _
22 Convert.ToString(Math.Exp(2)))
23 Console.WriteLine(“Math.Floor(9.2) = ” & _
24 Convert.ToString(Math.Floor(9.2)))
25 Console.WriteLine(“Math.Floor(-9.8) = ” & _
26 Convert.ToString(Math.Floor(-9.8)))
27 Console.WriteLine(“Math.Log(2.718282) = ” & _
28 Convert.ToString(Math.Log(2.718282)))
29 Console.WriteLine(“Math.Log(7.389056) = ” & _
30 Convert.ToString(Math.Log(7.389056)))
31 Console.WriteLine(“Math.Max(2.3, 12.7) = ” & _
32 Convert.ToString(Math.Max(2.3, 12.7)))
33 Console.WriteLine(“Math.Max(-2.3, -12.7) = ” & _
34 Convert.ToString(Math.Max(-2.3, -12.7)))
35 Console.WriteLine(“Math.Min(2.3, 12.7) = ” & _
36 Convert.ToString(Math.Min(2.3, 12.7)))
37 Console.WriteLine(“Math.Min(-2.3, -12.7) = ” & _
38 Convert.ToString(Math.Min(-2.3, -12.7)))
Chapter 6 Procedures 241
6.5 a) Function Hypotenuse(ByVal side1 As Double, _
ByVal side2 As Double) As Double
b) Function Smallest(ByVal x As Integer, _
ByVal y As Integer, ByVal z As Integer) As Integer
c) Sub Instructions()
d) Function IntegerToSingle(ByVal number As Integer) As Single
6.6 a) Error: Procedure General2 is defined in procedure General1.
Correction: Move the definition of General2 out of the definition of General1.
b) Error: The procedure is supposed to return an Integer, but does not.
Correction: Delete the statement result = x + y and place the following statement in
the method:
39 Console.WriteLine(“Math.Pow(2, 7) = ” & _
40 Convert.ToString(Math.Pow(2, 7)))
41 Console.WriteLine(“Math.Pow(9, .5) = ” & _
42 Convert.ToString(Math.Pow(9, 0.5)))
43 Console.WriteLine(“Math.Sin(0.0) = ” & _
44 Convert.ToString(Math.Sin(0)))
45 Console.WriteLine(“Math.Sqrt(9.0) = ” & _
46 Convert.ToString(Math.Sqrt(9)))
47 Console.WriteLine(“Math.Sqrt(2.0) = ” & _
48 Convert.ToString(Math.Sqrt(2)))
49 Console.WriteLine(“Math.Tan(0.0) = ” & _
50 Convert.ToString(Math.Tan(0)))
52 End Sub ‘ Main
54 End Module ‘ modMathTest
Math.Abs(23.7) = 23.7
Math.Abs(0.0) = 0
Math.Abs(-23.7) = 23.7
Math.Ceiling(9.2) = 10
Math.Ceiling(-9.8) = -9
Math.Cos(0.0) = 1
Math.Exp(1.0) = 2.71828182845905
Math.Exp(2.0) = 7.38905609893065
Math.Floor(9.2) = 9
Math.Floor(-9.8) = -10
Math.Log(2.718282) = 1.00000006310639
Math.Log(7.389056) = 1.99999998661119
Math.Max(2.3, 12.7) = 12.7
Math.Max(-2.3, -12.7) = -2.3
Math.Min(2.3, 12.7) = 2.3
Math.Min(-2.3, -12.7) = -12.7
Math.Pow(2, 7) = 128
Math.Pow(9, .5) = 3
Math.Sin(0.0) = 0
Math.Sqrt(9.0) = 3
Math.Sqrt(2.0) = 1.4142135623731
Math.Tan(0.0) = 0
242 Procedures Chapter 6
Return x + y
or add the following statement at the end of the method body:
Return result
c) Error: Parameter value is redefined in the procedure definition.
Correction: Delete the declaration Dim value As Single.
d) Error: The procedure returns a value, but is defined as a Sub procedure.
Correction: Change the procedure to a Function procedure with return type Integer.
e) Error: The result of value += Sum(value – 1) is not returned by this recursive method,
resulting in a logic error.
Correction: Rewrite the statement in the Else clause as
Return value + sum(value – 1)
6.7 What is the value of x after each of the following statements is performed?
a) x = Math.Abs(7.5)
b) x = Math.Floor(7.5)
c) x = Math.Abs(0.0)
d) x = Math.Ceiling(0.0)
e) x = Math.Abs(-6.4)
f) x = Math.Ceiling(-6.4)
g) x = Math.Ceiling(-Math.Abs(-8 + Math.Floor(-5.5)))
6.8 A parking garage charges a $2.00 minimum fee to park for up to three hours. The garage
charges an additional $0.50 per hour for each hour or part thereof in excess of three hours. The maximum
charge for any given 24-hour period is $10.00. Assume that no car parks for longer than 24
hours at a time. Write a program that calculates and displays the parking charges for each customer
who parked a car in this garage yesterday. You should enter in a TextBox the hours parked for each
customer. The program should display the charge for the current customer. The program should use
the method CalculateCharges to determine the charge for each customer. Use the techniques
described in the chapter to read the Double value from a TextBox.
6.9 Write a method IntegerPower(base, exponent) that returns the value of
For example, IntegerPower(3, 4) = 3 * 3 * 3 * 3. Assume that exponent is a positive integer
and that base is an integer. Method IntegerPower should use a For/Next loop or While loop to
control the calculation. Do not use any Math library methods or the exponentiation operator, ^. Incorporate
this method into a Windows application that reads integer values from TextBoxes for base
and exponent from the user and performs the calculation by calling method IntegerPower.
6.10 Define a method Hypotenuse that calculates the length of the hypotenuse of a right triangle
when the other two sides are given. The method should take two arguments of type Double and
return the hypotenuse as a Double. Incorporate this method into a Windows application that reads
integer values for side1 and side2 from TextBoxes and performs the calculation with the Hypotenuse
method. Determine the length of the hypotenuse for each of the following triangles:
Chapter 6 Procedures 243
6.11 Write a method SquareOfAsterisks that displays a solid square of asterisks whose side
is specified in integer parameter side. For example, if side is 4, the method displays
Incorporate this method into a Windows application that reads an integer value for side from the
user and performs the drawing with the SquareOfAsterisks method. This method should
gather data from Textboxes and should print to a Label.
6.12 Modify the method created in Exercise 6.11 to form the square out of whatever character is
contained in parameter fillCharacter. Thus, if side is 5 and fillCharacter is “#”, this
method should print
6.13 Write a Windows application that simulates coin tossing. Let the program toss the coin each
time the user presses the Toss button. Count the number of times each side of the coin appears. Display
the results. The program should call a separate method Flip, which takes no arguments and returns
False for tails and True for heads. [Note: If the program simulates the coin
tossing realistically, each side of the coin should appear approximately half the time.]
6.14 Computers are playing an increasing role in education. Write a program that will help an elementary
school student learn multiplication. Use the Next method from an object of type Random
to produce two positive one-digit integers. It should display a question, such as
How much is 6 times 7?
The student should then type the answer into a TextBox. Your program should check the student’s
answer. If it is correct, display “Very good!” in a Label, then ask another multiplication question.
If the answer is incorrect, display “No. Please try again.” in the same Label, then let
the student try the same question again until the student finally gets it right. A separate method
should be used to generate each new question. This method should be called once when the program
begins execution and then each time the user answers a question correctly.
6.15 (Towers of Hanoi) Every budding computer scientist must grapple with certain classic problems;
the Towers of Hanoi (Fig. 6.28) is one of the most famous. Legend has it that, in a temple in
the Far East, priests are attempting to move a stack of disks from one peg to another. The initial stack
had 64 disks threaded onto one peg and arranged from bottom to top by decreasing size. The priests
are attempting to move the stack from this peg to a second peg, under the constraints that exactly one
disk is moved at a time and that at no time may a larger disk be placed above a smaller disk. A third
peg is available for temporarily holding disks. Supposedly, the world will end when the priests complete
their task, so there is little incentive for us to facilitate their efforts.
Triangle Side 1 Side 2
1 3.0 4.0
2 5.0 12.0
3 8.0 15.0
244 Procedures Chapter 6
Let us assume that the priests are attempting to move the disks from peg 1 to peg 3. We wish to
develop an algorithm that prints the precise sequence of peg-to-peg disk transfers.
If we were to approach this problem with conventional techniques, we would find ourselves
hopelessly knotted up in managing the disks. However, if we approach the problem with recursion in
mind, it becomes tractable. Moving n disks can be viewed in terms of moving only n – 1 disks (and
hence, the recursion) as follows:
a) Move n – 1 disks from peg 1 to peg 2, using peg 3 as a temporary holding area.
b) Move the last disk (the largest) from peg 1 to peg 3.
c) Move the n – 1 disks from peg 2 to peg 3, using peg 1 as a temporary holding area.
The process ends when the last task involves moving n = 1 disk (i.e., the base case). This is
accomplished by moving the disk without the need for a temporary holding area.
Write a program to solve the Towers of Hanoi problem. Allow the user to enter the number of
disks in a TextBox. Use a recursive Tower method with four parameters:
a) The number of disks to be moved
b) The peg on which these disks are threaded initially
c) The peg to which this stack of disks is to be moved
d) The peg to be used as a temporary holding area
Your program should display in a TextBox with scrolling functionality the precise instructions
for moving the disks from the starting peg to the destination peg. For example, to move a stack
of three disks from peg 1 to peg 3, your program should print the following series of moves:
1 →3 (This means move one disk from peg 1 to peg 3.)
1 →2
3 →2
1 →3
2 →1
2 →3
1 →3
Fig. 6.28 Towers of Hanoi for the case with four disks.
• To introduce the array data structure.
• To understand how arrays store, sort and search lists
and tables of values.
• To understand how to declare an array, initialize an
array and refer to individual elements of an array.
• To be able to pass arrays to methods.
• To understand basic sorting techniques.
• To be able to declare and manipulate
multi-dimensional arrays.
With sobs and tears he sorted out
Those of the largest size …
Lewis Carroll
Attempt the end, and never stand to doubt;
Nothing’s so hard, but search will find it out.
Robert Herrick
Now go, write it before them in a table,
and note it in a book.
Isaiah 30:8
‘Tis in my memory lock’d,
And you yourself shall keep the key of it.
William Shakespeare
246 Arrays Chapter 7
William Shakespeare
7.1 Introduction
This chapter introduces basic concepts and features of data structures. Arrays are data structures
consisting of data items of the same type. Arrays are “static” entities, in that they remain
the same size once they are created, although an array reference may be reassigned to
a new array of a different size. We begin by discussing constructing and accessing arrays;
we build on this knowledge to conduct more complex manipulations of arrays, including
powerful searching and sorting techniques. We then demonstrate the creation of more sophisticated
arrays that have multiple dimensions. Chapter 24, Data Structures and Collections,
introduces dynamic data structures, such as lists, queues, stacks and trees, which can
grow and shrink as programs execute. This later chapter also presents Visual Basic’s predefined
data structures that enable the programmer to use existing data structures for lists,
queues, stacks and trees, rather than “reinventing the wheel.”
7.2 Arrays
An array is a group of contiguous memory locations that have the same name and the same
type. Array names follow the same conventions that apply to other variable names, as was
discussed in Chapter 3, Introduction to Visual Basic Programming. To refer to a particular
7.1 Introduction
7.2 Arrays
7.3 Declaring and Allocating Arrays
7.4 Examples Using Arrays
7.4.1 Allocating an Array
7.4.2 Initializing the Values in an Array
7.4.3 Summing the Elements of an Array
7.4.4 Using Arrays to Analyze Survey Results
7.4.5 Using Histograms to Display Array Data Graphically
7.5 Passing Arrays to Procedures
7.6 Passing Arrays: ByVal vs. ByRef
7.7 Sorting Arrays
7.8 Searching Arrays: Linear Search and Binary Search
7.8.1 Searching an Array with Linear Search
7.8.2 Searching a Sorted Array with Binary Search
7.9 Multidimensional Rectangular and Jagged Arrays
7.10 Variable-Length Parameter Lists
7.11 For Each/Next Repetition Structure
Summary • Terminology • Self-Review Exercises • Answers to Self-Review Exercises • Exercises•
Special Section: Recursion Exercises
Chapter 7 Arrays 247
location or element in an array, we specify the name of the array and the position number
of the element to which we refer. Position numbers are values that indicate specific locations
within arrays.
Figure 7.1 depicts an integer array named numberArray. This array contains 12 elements,
any one of which can be referred to by giving the name of the array followed by the
position number of the element in parentheses (). The first element in every array is the
zeroth element. Thus, the first element of array numberArray is referred to as number-
Array(0), the second element of array numberArray is referred to as number-
Array(1), the seventh element of array numberArray is referred to as
numberArray(6) and so on. The ith element of array numberArray is referred to as
numberArray(i – 1).
The position number in parentheses more formally is called an index (or a subscript).
An index must be an integer or an integer expression. If a program uses an expression as an
index, the expression is evaluated first to determine the index. For example, if variable
value1 is equal to 5, and variable value2 is equal to 6, then the statement
numberArray(value1 + value2) += 2
adds 2 to array element numberArray(11). Note that an indexed array name (i.e., the
array name followed by an index enclosed in parentheses) is an lvalue—it can be used on
the left side of an assignment statement to place a new value into an array element.
Fig. 7.1 Array consisting of 12 elements.
Name of array (note
that all elements of this
array have the same
name, numberArray)
Position number (index or
subscript) of the element
within array numberArray
248 Arrays Chapter 7
Let us examine array numberArray in Fig. 7.1 more closely. The name of the array
is numberArray. The 12 elements of the array are referred to as numberArray(0)
through numberArray(11). The value of numberArray(0) is -45, the value of
numberArray(1) is 6, the value of numberArray(2) is 0, the value of number-
Array(7) is 62 and the value of numberArray(11) is 78. Values stored in arrays can
be employed in various calculations and applications. For example, to determine the sum
of the values contained in the first three elements of array numberArray and then store
the result in variable sum, we would write
sum = numberArray(0) + numberArray(1) + numberArray(2)
To divide the value of the seventh element of array numberArray by 2 and assign the
result to the variable result, we would write
result = numberArray(6) \ 2
Common Programming Error 7.1
It is important to note the difference between the “seventh element of the array” and “array
element seven.” Array indices begin at 0, which means that the “seventh element of the array”
has the index 6, whereas “array element seven” has the index 7 and is actually the
eighth element of the array. This confusion is a common source of “off-by-one” errors. 7.1
Every array in Visual Basic “knows” its own length. The length of the array (i.e., 12
in this case) is determined by the following expression:
All arrays have access to the methods and properties of class System.Array, including
the Length property. For instance, method GetUpperBound returns the index of the
last element in the array. Method GetUpperBound takes one argument indicating a dimension
of the array. We discuss arrays with multiple dimensions in Section 7.9. For onedimensional
arrays, such as numberArray, the argument passed to GetUpperBound
is 0. For example, expression
returns 11. Notice that the value returned by method GetUpperBound is one less than
the value of the array’s Length property. Classes, objects and class methods are discussed
in detail in Chapter 8, Object-Based Programming.
7.3 Declaring and Allocating Arrays
Arrays occupy space in memory. The amount of memory required by an array depends on
the length of the array and the size of the data type of the elements in the array. The declaration
of an array creates a variable that can store a reference to an array but does not create
the array in memory. To declare an array, the programmer provides the array’s name and
data type. The following statement declares the array in Fig. 7.1:
Dim numberArray As Integer()
Chapter 7 Arrays 249
The parentheses that follow the data type indicate that numberArray is an array.
Arrays can be declared to contain any data type. In an array of primitive data types, every
element of the array contains one value of the declared data type. For example, every element
of an Integer array contains an Integer value.
Before the array can be used, the programmer must specify the size of the array and
allocate memory for the array, using keyword New. Recall from Chapter 6 that keyword
New creates an object. Arrays are represented as objects in Visual Basic, so they too, must
be allocated using keyword New. The value stored in the array variable is actually a reference
to the location in the computer’s memory where the array object is created. All nonprimitive-
type variables are reference variables (normally called references). To allocate
memory for the array numberArray after it has been declared, the statement
numberArray = New Integer(11) {}
is used. In our example, the number 11 defines the upper bound for the array. Array bounds
determine what indices can be used to access an element in the array. Here, the array
bounds are 0 (which is implicit in the preceding statement) and 11, meaning that an index
outside these bounds cannot be used to access elements in the array. Notice that the actual
size of the array is one larger than the upper bound specified in the allocation.
The required braces ({ and }) are called an initializer list and specify the initial values
of the elements in the array. When the initializer list is empty, the elements in the array are
initialized to the default value for the data type of the elements of the array. The default
value is 0 for numeric primitive data-type variables, False for Boolean variables and
Nothing for references. Keyword Nothing denotes an empty reference (i.e., a value
indicating that a reference variable has not been assigned an address in the computer’s
memory). The initializer list also can contain a comma-separated list specifying the initial
values of the elements in the array. For instance,
Dim numbers As Integer()
numbers = New Integer() {1, 2, 3, 6}
declares and allocates an array containing four Integer values. Visual Basic can determine
the array bounds from the number of elements in the initializer list. Thus, it is not necessary
to specify the size of the array when a non-empty initializer list is present.
The allocation of an array can be combined into the declaration, as in the statement
Dim numberArray As Integer() = New Integer(11) {}
Separating the declaration and allocation statements is useful, however, when the size of an
array depends on user input or on values calculated at runtime.
Programmers can declare arrays via several alternative methods, which we discuss
throughout this chapter. For example, several arrays can be declared with a single statement;
the following statement declares two array variables of type Double():
Dim array1, array2 As Double()
7.4 Examples Using Arrays
This section presents several examples that demonstrate the declaration, allocation and initialization
of arrays, as well as various manipulations of array elements. For simplicity, the
250 Arrays Chapter 7
examples in this section use arrays that contain elements of type Integer. Please remember
that a program can declare an array to have elements of any data type.
7.4.1 Allocating an Array
The program of Fig. 7.2 uses keyword New to allocate an array of 10 Integer elements,
which are initially zero (the default value in an array of type Integer). The program displays
the array elements in tabular format in a dialog.
1 ‘ Fig. 7.2: CreateArray.vb
2 ‘ Declaring and allocating an array.
Imports System.Windows.Forms
Module modCreateArray
Sub Main()
9 Dim output As String
10 Dim i As Integer
12 Dim array As Integer() ‘ declare array variable
13 array = New Integer(9) {} ‘ allocate memory for array
15 output &= “Subscript ” & vbTab & “Value” & vbCrLf
17 ‘ display values in array
18 For i = 0 To array.GetUpperBound(0)
19 output &= i & vbTab & array(i) & vbCrLf
20 Next
22 output &= vbCrLf & “The array contains ” & _
23 array.Length & ” elements.”
25 MessageBox.Show(output, “Array of Integer Values”, _
26 MessageBoxButtons.OK, MessageBoxIcon.Information)
27 End Sub ‘ Main
29 End Module ‘ modCreateArray
Fig. 7.2 Creating an array.
Chapter 7 Arrays 251
Line 12 declares array—a variable capable of storing a reference to an array of
Integer elements. Line 13 allocates an array of 10 elements using New and assigns it to
array. The program builds its output in String output. Line 15 appends to output
the headings for the columns displayed by the program. The columns represent the index
for each array element and the value of each array element, respectively.
Lines 18–20 use a For structure to append the index number (represented by i) and
value of each array element (array(i)) to output. Note the use of zero-based counting
(remember, indices start at 0), so that the loop accesses every array element. Also notice,
in the header of the For structure, the expression array.GetUpperBound(0), used
to retrieve the upper bound of the array. The Length property (lines 22–23) returns the
number of elements in the array.
7.4.2 Initializing the Values in an Array
The program of Fig. 7.3 creates two integer arrays of 10 elements each and sets the values
of the elements, using an initializer list and a For structure. The arrays are displayed in tabular
format in a message dialog.
Line 12 uses one statement to declare array1 and array2 as variables that are
capable of referring to arrays of integers. Lines 16–17 allocate the 10 elements of array1
with New and initialize the values in the array, using an initializer list. Line 20 allocates
array2, whose size is determined by the expression array1.GetUpperBound(0),
meaning array1 and array2, in this particular program, have the same upper bound.
1 ‘ Fig. 7.3: InitArray.vb
2 ‘ Initializing arrays.
Imports System.Windows.Forms
Module modInitArray
Sub Main()
9 Dim output As String
10 Dim i As Integer
12 Dim array1, array2 As Integer() ‘ declare two arrays
14 ‘ initializer list specifies number of elements
15 ‘ and value of each element
16 array1 = New Integer() {32, 27, 64, 18, 95, _
17 14, 90, 70, 60, 37}
19 ‘ allocate array2 based on length of array1
20 array2 = New Integer(array1.GetUpperBound(0)) {}
22 ‘ set values in array2 by a calculation
23 For i = 0 To array2.GetUpperBound(0)
24 array2(i) = 2 + 2 * i
25 Next
Fig. 7.3 Initializing array elements two different ways (part 1 of 2).
252 Arrays Chapter 7
The For structure in lines 23–25 initializes each element in array2. The elements in
array2 are initialized (line 24) to the even integers 2, 4, 6, …, 20. These numbers are
generated by multiplying each successive value of the loop counter by 2 and adding 2 to
the product. The For structure in lines 31–34 uses the values in the arrays to build String
output, which is displayed in a MessageBox (lines 36–37).
7.4.3 Summing the Elements of an Array
Often, the elements of an array represent a series of values that are employed in a calculation.
For example, if the elements of an array represent a group of students’ exam grades, the instructor
might wish to total the elements of the array, then calculate the class average for the
exam. The program in Fig. 7.4 sums the values contained in a 10-element integer array.
27 output &= “Subscript ” & vbTab & “Array1″ & vbTab & _
28 “Array2″ & vbCrLf
30 ‘ display values for both arrays
31 For i = 0 To array1.GetUpperBound(0)
32 output &= i & vbTab & array1(i) & vbTab & array2(i) & _
33 vbCrLf
34 Next
36 MessageBox.Show(output, “Array of Integer Values”, _
37 MessageBoxButtons.OK, MessageBoxIcon.Information)
38 End Sub ‘ Main
40 End Module ‘ modInitArray
1 ‘ Fig. 7.4: SumArray.vb
2 ‘ Computing sum of elements in array.
Imports System.Windows.Forms
Module modSumArray
Fig. 7.4 Computing the sum of the elements in an array (part 1 of 2).
Fig. 7.3 Initializing array elements two different ways (part 2 of 2).
Chapter 7 Arrays 253
Lines 9–10 declare, allocate and initialize the 10-element array array. Line 16, in the
body of the For structure, performs the addition. Alternatively, the values supplied as initializers
for array could have been read into the program. For example, the user could
enter the values through a TextBox, or the values could be read from a file on disk. Additional
information about reading values into a program can be found in Chapter 17, Files
and Streams.
7.4.4 Using Arrays to Analyze Survey Results
Our next example uses arrays to summarize data collected in a survey. Consider the following
problem statement:
Forty students were asked to rate on a scale of 1 to 10 the quality of the food in the student
cafeteria, with 1 being “awful” and 10 being “excellent”. Place the 40 responses in an integer
array and determine the frequency of each rating.
This exercise represents a typical array-processing application (Fig. 7.5). We wish to
summarize the number of responses of each type (i.e., 1–10). Array responses (lines
14–16) is a 40-element integer array containing the students’ responses to the survey. Using
an 11-element array frequency, we can count the number of occurrences of each
response. We ignore the first element, frequency(0), because it is more logical to have
a survey response of 1 result in frequency(1) being incremented rather than incrementing
frequency(0). We can use each response directly as an index on the frequency
array. Each element of the array is used as a counter for one of the possible types
8 Sub Main()
9 Dim array As Integer() = New Integer() _
10 {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
12 Dim total As Integer = 0, i As Integer = 0
14 ‘ sum array element values
15 For i = 0 To array.GetUpperBound(0)
16 total += array(i)
17 Next
19 MessageBox.Show(“Total of array elements: ” & total, _
20 “Sum the elements of an Array”, MessageBoxButtons.OK, _
21 MessageBoxIcon.Information)
22 End Sub ‘ Main
24 End Module ‘ modSumArray
Fig. 7.4 Computing the sum of the elements in an array (part 2 of 2).
254 Arrays Chapter 7
of survey responses—frequency(1) counts the number of students who rated the food
as 1, frequency(7) counts the number of students who rated the food 7 and so on.
1 ‘ Fig. 7.5: StudentPoll.vb
2 ‘ Using arrays to display poll results.
Imports System.Windows.Forms
Module modStudentPoll
Sub Main()
9 Dim answer, rating As Integer
10 Dim output As String
12 ‘ student response array (typically input at run time)
13 Dim responses As Integer()
14 responses = New Integer() {1, 2, 6, 4, 8, 5, 9, 7, _
15 8, 10, 1, 6, 3, 8, 6, 10, 3, 8, 2, 7, 6, 5, 7, 6, _
16 8, 6, 7, 5, 6, 6, 5, 6, 7, 5, 6, 4, 8, 6, 8, 10}
18 ‘ response frequency array (indices 0 through 10)
19 Dim frequency As Integer() = New Integer(10) {}
21 ‘ count frequencies
22 For answer = 0 To responses.GetUpperBound(0)
23 frequency(responses(answer)) += 1
24 Next
26 output &= “Rating ” & vbTab & “Frequency ” & vbCrLf
28 For rating = 1 To frequency.GetUpperBound(0)
29 output &= rating & vbTab & frequency(rating) & vbCrLf
30 Next
32 MessageBox.Show(output, “Student Poll Program”, _
33 MessageBoxButtons.OK, MessageBoxIcon.Information)
34 End Sub ‘ Main
36 End Module ‘ modStudentPoll
Fig. 7.5 Simple student-poll analysis program.
Chapter 7 Arrays 255
Good Programming Practice 7.1
Strive for program clarity. Sometimes, it is worthwhile to forgo the most efficient use of memory
or processor time if the trade-off results in a clearer program. 7.1
Performance Tip 7.1
Sometimes, performance considerations outweigh clarity considerations. 7.1
The For structure (lines 22–24) reads the responses from the array responses one
at a time and increments one of the 10 counters in the frequency array (frequency(
1) to frequency(10)). The key statement in the loop appears in line 23. This
statement increments the appropriate frequency counter as determined by the value of
Let us consider several iterations of the For structure. When counter answer is 0,
responses(answer) is the value of responses(0) (i.e., 1—see line 14). Therefore,
frequency(responses(answer)) actually is interpreted as frequency(
1), meaning the first counter in array frequency is incremented by one. In
evaluating the expression frequency(responses(answer)), Visual Basic starts
with the value in the innermost set of parentheses (answer, currently 0). The value of
answer is plugged into the expression, and Visual Basic evaluates the next set of parentheses
(responses(answer)). That value is used as the index for the frequency
array to determine which counter to increment (in this case, the 1 counter).
When answer is 1, responses(answer) is the value of responses(1) (i.e.,
2—see line 14). As a result, frequency(responses(answer)) actually is interpreted
as frequency(2), causing array element 2 (the third element of the array) to be
When answer is 2, responses(answer) is the value of responses(2) (i.e.,
6—see line 14), so frequency(responses(answer)) is interpreted as frequency(
6), causing array element 6 (the seventh element of the array) to be incremented
and so on. Note that, regardless of the number of responses processed in the survey, only
an 11-element array (in which we ignore element zero) is required to summarize the results,
because all the response values are between 1 and 10, and the index values for an 11-element
array are 0–10. Note that, in the output in Fig. 7.5, the numbers in the frequency
column correctly add to 40 (the elements of the frequency array were initialized to zero
when the array was allocated with New).
If the data contained out-of-range values, such as 13, the program would attempt to add
1 to frequency(13). This is outside the bounds of the array. In other languages like C
and C++ programming languages, such a reference would be allowed by the compiler and
at execution time. The program would “walk” past the end of the array to where it thought
element number 13 was located and would add 1 to whatever happened to be stored at that
memory location. This could modify another variable in the program, possibly causing
incorrect results or even premature program termination. Visual Basic provides mechanisms
that prevent accessing elements outside the bounds of arrays.
Common Programming Error 7.2
Referencing an element outside the array bounds is a runtime error. 7.2
256 Arrays Chapter 7
Testing and Debugging Tip 7.1
When a program is executed, array element indices are checked for validity (i.e., all indices
must be greater than or equal to 0 and less than the length of the array). If an attempt is made
to use an invalid index to access an element, Visual Basic generates an IndexOutOfRangeException
exception. Exceptions are discussed in greater detail in Chapter 11, Exception
Handling. 7.1
Testing and Debugging Tip 7.2
When looping through an array, the array index should remain between 0 and the upper
bound of the array (i.e., the value returned by method GetUpperBound). The initial and
final values used in the repetition structure should prevent accessing elements outside this
range. 7.2
Testing and Debugging Tip 7.3
Programs should confirm the validity of all input values to prevent erroneous information
from affecting calculations. 7.3
7.4.5 Using Histograms to Display Array Data Graphically
Many programs present data to users in a visual or graphical format. For example, numeric
values are often displayed as bars in a bar chart, in which longer bars represent larger numeric
values. Figure 7.6 displays numeric data graphically by creating a histogram that depicts
each numeric value as a bar of asterisks (*).
1 ‘ Fig. 7.6: Histogram.vb
2 ‘ Using data to create histograms.
Imports System.Windows.Forms
Module modHistogram
Sub Main()
9 Dim output As String ‘ output string
10 Dim i, j As Integer ‘ counters
12 ‘ create data array
13 Dim array1 As Integer() = New Integer() _
14 {19, 3, 15, 7, 11, 9, 13, 5, 17, 1}
16 output &= “Element ” & vbTab & “Value ” & vbTab & _
17 “Histogram”
19 For i = 0 To array1.GetUpperBound(0)
20 output &= vbCrLf & i & vbTab & array1(i) & vbTab
22 For j = 1 To array1(i)
23 output &= “*” ‘ add one asterisk
24 Next
26 Next
Fig. 7.6 Program that prints histograms (part 1 of 2).
Chapter 7 Arrays 257
The program reads numbers from an array and graphs the information in the form of a
bar chart, or histogram. Each number is printed, and a bar consisting of a corresponding
number of asterisks is displayed beside the number. The nested For loops (lines 19–26)
append the bars to the String that is displayed in the MessageBox. Note the end value
(array1(i)) of the inner For structure on line 22. Each time the inner For structure is
reached (line 22), it counts from 1 to array1(i), using a value in array1 to determine
the final value of the control variable j—the number of asterisks to display.
Sometimes programs use a series of counter variables to summarize data, such as the
results of a survey. In Chapter 6, Procedures, we used a series of counters in our die-rolling
program to track the number of occurrences of each side on a six-sided die as the program
rolled the die 12 times. We indicated that there is a more elegant way of doing what we did
in Fig. 6.11 for writing the dice-rolling program. An array version of this application is
shown in Fig. 7.7.
28, “Histogram Printing Program”, _
29 MessageBoxButtons.OK, MessageBoxIcon.Information)
30 End Sub ‘ Main
32 End Module ‘ modHistogram
1 ‘ Fig. 7.7: RollDie.vb
2 ‘ Rolling 12 dice with frequency chart.
‘ Note: Directory.GetCurrentDirectory returns the directory of
5 ‘ the folder where the current project is plus
6 ‘ “bin/”. This is where the images must be placed
7 ‘ for the example to work properly.
Imports System.IO
10 Imports System.Windows.Forms
12 Public Class FrmRollDie
13 Inherits System.Windows.Forms.Form
Fig. 7.7 Using arrays to eliminate a Select Case structure (part 1 of 4).
Fig. 7.6 Program that prints histograms (part 2 of 2).
258 Arrays Chapter 7
15 Dim randomNumber As Random = New Random()
16 Dim frequency As Integer() = New Integer(6) {}
18 ‘ labels
19 Friend WithEvents lblDie1 As Label
20 Friend WithEvents lblDie2 As Label
21 Friend WithEvents lblDie3 As Label
22 Friend WithEvents lblDie4 As Label
23 Friend WithEvents lblDie5 As Label
24 Friend WithEvents lblDie6 As Label
25 Friend WithEvents lblDie7 As Label
26 Friend WithEvents lblDie8 As Label
27 Friend WithEvents lblDie9 As Label
28 Friend WithEvents lblDie11 As Label
29 Friend WithEvents lblDie10 As Label
30 Friend WithEvents lblDie12 As Label
32 ‘ text box
33 Friend WithEvents txtDisplay As TextBox
35 ‘ button
36 Friend WithEvents cmdRoll As Button
38 ‘ Visual Studio .NET generated code
40 ‘ event handler for cmdRoll button
41 Private Sub cmdRoll_Click(ByVal sender As System.Object, _
42 ByVal e As System.EventArgs) Handles cmdRoll.Click
44 ‘ pass labels to a method that
45 ‘ randomly assigns a face to each die
46 DisplayDie(lblDie1)
47 DisplayDie(lblDie2)
48 DisplayDie(lblDie3)
49 DisplayDie(lblDie4)
50 DisplayDie(lblDie5)
51 DisplayDie(lblDie6)
52 DisplayDie(lblDie7)
53 DisplayDie(lblDie8)
54 DisplayDie(lblDie9)
55 DisplayDie(lblDie10)
56 DisplayDie(lblDie11)
57 DisplayDie(lblDie12)
59 Dim total As Double = 0
60 Dim i As Integer
62 For i = 1 To frequency.GetUpperBound(0)
63 total += frequency(i)
64 Next
66 txtDisplay.Text = “Face” & vbTab & vbTab & “Frequency” & _
67 vbTab & vbTab & “Percent” & vbCrLf
Fig. 7.7 Using arrays to eliminate a Select Case structure (part 2 of 4).
Chapter 7 Arrays 259
69 ‘ output frequency values
70 For i = 1 To frequency.GetUpperBound(0)
71 txtDisplay.Text &= i & vbTab & vbTab & frequency(i) & _
72 vbTab & vbTab & vbTab & String.Format(“{0:N}”, _
73 frequency(i) / total * 100) & “%” & vbCrLf
74 Next
76 End Sub ‘ cmdRoll_Click
78 ‘ simulate roll, display proper
79 ‘ image and increment frequency
80 Sub DisplayDie(ByVal lblDie As Label)
81 Dim face As Integer = 1 + randomNumber.Next(6)
83 lblDie.Image = _
84 Image.FromFile(Directory.GetCurrentDirectory & _
85 “\Images\die” & face & “.png”)
87 frequency(face) += 1
88 End Sub ‘ DisplayDie
90 End Class ‘ FrmRollDie
Fig. 7.7 Using arrays to eliminate a Select Case structure (part 3 of 4).
260 Arrays Chapter 7
Lines 91–111 of Fig. 6.16 are replaced by line 87, which uses face’s value as the
index for array frequency to determine which element should be incremented during
each iteration of the loop. The random number calculation on line 81 produces numbers
from 1–6 (the values for a six-sided die); thus, the frequency array must have seven elements
to allow the index values 1–6. In this program, we ignore element 0 of array frequency.
Lines 66–74 replace lines 57–78 from Fig. 6.16. We can loop through array
frequency; therefore, we do not have to enumerate each line of text to display in the
Label, as we did in Fig. 6.16.
7.5 Passing Arrays to Procedures
To pass an array argument to a procedure, specify the name of the array without using parentheses.
For example, if array hourlyTemperatures has been declared as
Dim hourlyTemperatures As Integer() = New Integer(24) {}
the procedure call
passes array hourlyTemperatures to procedure DayData.
Fig. 7.7 Using arrays to eliminate a Select Case structure (part 4 of 4).
Chapter 7 Arrays 261
Every array object “knows” its own upper bound (i.e., the value returned by the method
GetUpperBound), so, when we pass an array object to a procedure, we do not need to
pass the upper bound of the array as a separate argument.
For a procedure to receive an array through a procedure call, the procedure’s parameter
list must specify that an array will be received. For example, the procedure header for Day-
Data might be written as
Sub DayData(ByVal temperatureData As Integer())
indicating that DayData expects to receive an Integer array in parameter temperatureData.
In Visual Basic, arrays always are passed by reference, yet it is normally inappropriate
to use keyword ByRef in the procedure definition header. We discuss this subtle
(and somewhat complex) issue in more detail in Section 7.6.
Although entire arrays are always passed by reference, individual array elements can be
passed in the same manner as simple variables of that type. For instance, array element values
of primitive data types, such as Integer, can be passed by value or by reference, depending
on the procedure definition. To pass an array element to a procedure, use the indexed name
of the array element as an argument in the call to the procedure. The program in Fig. 7.8 demonstrates
the difference between passing an entire array and passing an array element.
1 ‘ Fig. 7.8: PassArray.vb
2 ‘ Passing arrays and individual array elements to procedures.
Imports System.Windows.Forms
Module modPassArray
7 Dim output As String
Sub Main()
10 Dim array1 As Integer() = New Integer() {1, 2, 3, 4, 5}
11 Dim i As Integer
14 “BY REFERENCE:” & vbCrLf & vbCrLf & _
15 “The values of the original array are:” & vbCrLf
17 ‘ display original elements of array1
18 For i = 0 To array1.GetUpperBound(0)
19 output &= ” ” & array1(i)
20 Next
22 ModifyArray(array1) ‘ array is passed by reference
24 output &= vbCrLf & _
25 “The values of the modified array are:” & vbCrLf
27 ‘ display modified elements of array1
28 For i = 0 To array1.GetUpperBound(0)
29 output &= ” ” & array1(i)
30 Next
Fig. 7.8 Passing arrays and individual array elements to procedures (part 1 of 3).
262 Arrays Chapter 7
32 output &= vbCrLf & vbCrLf & _
34 “BY VALUE:” & vbCrLf & vbCrLf & “array1(3) ” & _
35 “before ModifyElementByVal: ” & array1(3)
37 ‘ array element passed by value
38 ModifyElementByVal(array1(3))
40 output &= vbCrLf & “array1(3) after ” & _
41 “ModifyElementByVal: ” & array1(3)
43 output &= vbCrLf & vbCrLf & “EFFECTS OF PASSING ” & _
44 “ARRAY ELEMENT BY REFERENCE: ” & vbCrLf & vbCrLf & _
45 “array1(3) before ModifyElementByRef: ” & array1(3)
47 ‘ array element passed by reference
48 ModifyElementByRef(array1(3))
50 output &= vbCrLf & “array1(3) after ” & _
51 “ModifyElementByRef: ” & array1(3)
53 MessageBox.Show(output, “Passing Arrays”, _
54 MessageBoxButtons.OK, MessageBoxIcon.Information)
55 End Sub ‘ Main
57 ‘ procedure modifies array it receives (note ByVal)
58 Sub ModifyArray(ByVal arrayParameter As Integer())
59 Dim j As Integer
61 For j = 0 To arrayParameter.GetUpperBound(0)
62 arrayParameter(j) *= 2
63 Next
65 End Sub ‘ ModifyArray
67 ‘ procedure modifies integer passed to it
68 ‘ original is not be modified (note ByVal)
69 Sub ModifyElementByVal(ByVal element As Integer)
71 output &= vbCrLf & “Value received in ” & _
72 “ModifyElementByVal: ” & element
73 element *= 2
74 output &= vbCrLf & “Value calculated in ” & _
75 “ModifyElementByVal: ” & element
76 End Sub ‘ ModifyElementByVal
78 ‘ procedure modifies integer passed to it
79 ‘ original is be modified (note ByRef)
80 Sub ModifyElementByRef(ByRef element As Integer)
82 output &= vbCrLf & “Value received in ” & _
83 “ModifyElementByRef: ” & element
Fig. 7.8 Passing arrays and individual array elements to procedures (part 2 of 3).
Chapter 7 Arrays 263
The For/Next structure on lines 18–20 appends the five elements of integer array
array1 (line 10) to String output. Line 22 passes array1 to procedure ModifyArray
(line 58), which then multiplies each element by 2 (line 62). To illustrate that
array1’s elements were modified in the called procedure (i.e., as enabled by passing by
reference), the For/Next structure in lines 28–30 appends the five elements of array1
to output. As the screen capture indicates, the elements of array1 are indeed modified
by ModifyArray.
To show the value of array1(3) before the call to ModifyElementByVal, lines
32–35 append the value of array1(3) to String output. Line 38 invokes procedure
ModifyElementByVal and passes array1(3). When array1(3) is passed by
value, the Integer value in the fourth position of array array1 (now an 8) is copied
and is passed to procedure ModifyElementByVal, where it becomes the value of argument
element. Procedure ModifyElementByVal then multiplies element by 2
(line 73). The parameter of ModifyElementByVal is a local variable that is destroyed
when the procedure terminates. Thus, when control is returned to Main, the unmodified
value of array1(3) is appended to the string variable output (lines 40–41).
Lines 43–51 demonstrate the effects of procedure ModifyElementByRef (lines
80–87). This procedure performs the same calculation as ModifyElementByVal, multiplying
element by 2. In this case, array1(3) is passed by reference, meaning the
value of array1(3) appended to output (lines 50–51) is the same as the value calculated
in the procedure.
Common Programming Error 7.3
In the passing of an array to a procedure, including an empty pair of parentheses after the
array name is a syntax error. 7.3
84 element *= 2
85 output &= vbCrLf & “Value calculated in ” & _
86 “ModifyElementByRef: ” & element
87 End Sub ‘ ModifyElementByRef
89 End Module ‘ modPassArray
Fig. 7.8 Passing arrays and individual array elements to procedures (part 3 of 3).
264 Arrays Chapter 7
7.6 Passing Arrays: ByVal vs. ByRef
In Visual Basic .NET, a variable that “stores” an object, such as an array, does not actually
store the object itself. Instead, such a variable stores a reference to the object (i.e., the location
in the computer’s memory where the object is already stored). The distinction between
reference variables and primitive data type variables raises some subtle issues that programmers
must understand to create secure, stable programs.
When used to declare a value-type parameter, keyword ByVal causes the value of the
argument to be copied to a local variable in the procedure. Changes to the local variable are
reflected in the local copy of that variable, but not in the original variable in the calling program.
However, if the argument passed using keyword ByVal is of a reference type, the
value copied is also a reference to the original object in the computer’s memory. Thus, reference
types (like arrays and other objects) passed via keyword ByVal are actually passed
by reference, meaning changes to the objects in called procedures affect the original objects
in the callers.
Performance Tip 7.2
Passing arrays and other objects by reference makes sense for performance reasons. If arrays
were passed by value, a copy of each element would be passed. For large, frequently
passed arrays, this would waste time and would consume considerable storage for the copies
of the arrays—both of these problems cause poor performance. 7.2
Visual Basic also allows procedures to pass references with keyword ByRef. This is
a subtle capability, which, if misused, can lead to problems. For instance, when a referencetype
object like an array is passed with ByRef, the called procedure actually gains control
over the passed reference itself, allowing the called procedure to replace the original reference
in the caller with a different object or even with Nothing. Such behavior can lead to
unpredictable effects, which can be disastrous in mission-critical applications. The program
in Fig. 7.9 demonstrates the subtle difference between passing a reference ByVal vs.
passing a reference ByRef.
Lines 11–12 declare two integer array variables, firstArray and firstArray-
Copy (we make the copy so we can determine whether reference firstArray gets overwritten).
Line 15 allocates an array containing Integer values 1, 2 and 3 and stores the
array reference in variable firstArray. The assignment statement on line 16 copies reference
firstArray to variable firstArrayCopy, causing these variables to reference the
same array object. The For/Next structure in lines 24–26 prints the contents of firstArray
before it is passed to procedure FirstDouble on line 29 so we can verify that this
array is passed by reference (i.e., the called method indeed changes the array’s contents).
The For/Next structure in procedure FirstDouble (lines 94–96) multiplies the
values of all the elements in the array by 2. Line 99 allocates a new array containing the
values 11, 12 and 13; the reference for this array then is assigned to parameter array (in
an attempt to overwrite reference firstArray in Main—this, of course, will not
happen, because the reference was passed ByVal). After procedure FirstDouble executes,
the For/Next structure on lines 35–37 prints the contents of firstArray, demonstrating
that the values of the elements have been changed by the procedure (and
confirming that in Visual Basic, .NET arrays are always passed by reference). The If
structure on lines 40–46 uses the Is operator to compare references firstArray (which
we just attempted to overwrite) and firstArrayCopy. Visual Basic provides operator
Chapter 7 Arrays 265
Is for comparing references to determine whether they are referencing the same object.
The expression on line 40 is true if the operands to binary operator Is indeed reference the
same object. In this case, the object represented is the array allocated in line 15—not the
array allocated in procedure FirstDouble (line 99).
1 ‘ Fig. 7.9: ArrayReferenceTest.vb
2 ‘ Testing the effects of passing array references using
3 ‘ ByVal and ByRef.
Module modArrayReferenceTest
Sub Main()
8 Dim i As Integer
10 ‘ declare array references
11 Dim firstArray As Integer()
12 Dim firstArrayCopy As Integer()
14 ‘ allocate firstArray and copy its reference
15 firstArray = New Integer() {1, 2, 3}
16 firstArrayCopy = firstArray
18 Console.WriteLine(“Test passing array reference ” & _
19 “using ByVal.”)
20 Console.Write(“Contents of firstArray before ” & _
21 “calling FirstDouble: “)
23 ‘ print contents of firstArray
24 For i = 0 To firstArray.GetUpperBound(0)
25 Console.Write(firstArray(i) & ” “)
26 Next
28 ‘ pass firstArray using ByVal
29 FirstDouble(firstArray)
31 Console.Write(vbCrLf & “Contents of firstArray after ” & _
32 “calling FirstDouble: “)
34 ‘ print contents of firstArray
35 For i = 0 To firstArray.GetUpperBound(0)
36 Console.Write(firstArray(i) & ” “)
37 Next
39 ‘ test whether reference was changed by FirstDouble
40 If firstArray Is firstArrayCopy Then
41 Console.WriteLine(vbCrLf & “The references are ” & _
42 “equal.”)
43 Else
44 Console.WriteLine(vbCrLf & “The references are ” & _
45 “not equal.”)
46 End If
Fig. 7.9 Passing an array reference with ByVal and ByRef (part 1 of 3).
266 Arrays Chapter 7
48 ‘ declare array references
49 Dim secondArray As Integer()
50 Dim secondArrayCopy As Integer()
52 ‘ allocate secondArray and copy its reference
53 secondArray = New Integer() {1, 2, 3}
54 secondArrayCopy = secondArray
56 Console.WriteLine(vbCrLf & “Test passing array ” & _
57 “reference using ByRef.”)
58 Console.Write(“Contents of secondArray before ” & _
59 “calling SecondDouble: “)
61 ‘ print contents of secondArray before procedure call
62 For i = 0 To secondArray.GetUpperBound(0)
63 Console.Write(secondArray(i) & ” “)
64 Next
66 ‘ pass secondArray using ByRef
67 SecondDouble(secondArray)
69 Console.Write(vbCrLf & “Contents of secondArray ” & _
70 “after calling SecondDouble: “)
72 ‘ print contents of secondArray after procedure call
73 For i = 0 To secondArray.GetUpperBound(0)
74 Console.Write(secondArray(i) & ” “)
75 Next
77 ‘ test whether the reference was changed by SecondDouble
78 If secondArray Is secondArrayCopy Then
79 Console.WriteLine(vbCrLf & “The references are ” & _
80 “equal.”)
81 Else
82 Console.WriteLine(vbCrLf & “The references are ” & _
83 “not equal.”)
84 End If
86 End Sub ‘ Main
88 ‘ procedure modifies elements of array and assigns
89 ‘ new reference (note ByVal)
90 Sub FirstDouble(ByVal array As Integer())
91 Dim i As Integer
93 ‘ double each element value
94 For i = 0 To array.GetUpperBound(0)
95 array(i) *= 2
96 Next
98 ‘ create new reference and assign it to array
99 array = New Integer() {11, 12, 13}
100 End Sub ‘ FirstDouble
Fig. 7.9 Passing an array reference with ByVal and ByRef (part 2 of 3).
Chapter 7 Arrays 267
Lines 48–84 in procedure Main perform similar tests, using array variables second-
Array and secondArrayCopy and procedure SecondDouble (lines 104–114). Procedure
SecondDouble performs the same operations as FirstDouble, but receives its
array argument with ByRef. In this case, the reference stored in secondArray after the
procedure call is a reference to the array allocated on line 113 of SecondDouble, demonstrating
that a reference passed with ByRef can be modified by the called procedure so
that the reference actually points to a different object, in this case an array allocated in procedure
SecondDouble. The If structure in lines 78–84 demonstrates that second-
Array and secondArrayCopy no longer represent the same array.
Software Engineering Observation 7.1
Using ByVal to receive a reference-type object parameter does not cause the object to pass
by value—the object still passes by reference. Rather, ByVal causes the object’s reference
to pass by value. This prevents a called procedure from overwriting a reference in the caller.
In the vast majority of cases, protecting the caller’s reference from modification is the desired
behavior. If you encounter a situation where you truly want the called procedure to
modify the caller’s reference, pass the reference-type object ByRef—but, again, such situations
are rare. 7.1
Software Engineering Observation 7.2
In Visual Basic .NET, reference-type objects (including arrays) always pass by reference. So,
a called procedure receiving a reference to an object in a caller can change the caller’s object.7.2
102 ‘ procedure modifies elements of array and assigns
103 ‘ new reference (note ByRef)
104 Sub SecondDouble(ByRef array As Integer())
105 Dim i As Integer
107 ‘ double contents of array
108 For i = 0 To array.GetUpperBound(0)
109 array(i) *= 2
110 Next
112 ‘ create new reference and assign it to array
113 array = New Integer() {11, 12, 13}
114 End Sub ‘ SecondDouble
116 End Module ‘ modPassArray
Test passing array reference using ByVal.
Contents of firstArray before calling FirstDouble: 1 2 3
Contents of firstArray after calling FirstDouble: 2 4 6
The references are equal.
Test passing array reference using ByRef.
Contents of secondArray before calling SecondDouble: 1 2 3
Contents of secondArray after calling SecondDouble: 11 12 13
The references are not equal.
Fig. 7.9 Passing an array reference with ByVal and ByRef (part 3 of 3).
268 Arrays Chapter 7
7.7 Sorting Arrays
Sorting data (i.e., arranging the data into some particular order, such as ascending or descending
order) is one of the most popular computing applications. For example, a bank
sorts all checks by account number, so that it can prepare individual bank statements at the
end of each month. Telephone companies sort their lists of accounts by last name and, within
last-name listings, by first name, to make it easy to find phone numbers. Virtually every
organization must sort some data and, often, massive amounts of it. Sorting is an intriguing
problem that has attracted some of the most intense research efforts in the computer-science
field. This section discusses one of the simplest sorting schemes. In the exercises at the end
of this chapter, we investigate a more sophisticated sorting algorithm.
Performance Tip 7.3
Sometimes, the simplest algorithms perform poorly. Their virtue is that they are easy to write,
test and debug. Complex algorithms may be needed for a program to achieve maximum performance.
The module shown in Fig. 7.10 contains procedures for sorting the values of an integer
array into ascending order. The technique we use is called the bubble sort, or the sinking
sort, because in an ascending sort smaller values gradually “bubble” their way to the top of
the array (i.e., toward the first element) like air bubbles rising in water, while larger values
sink to the bottom (i.e., toward the end) of the array. The technique uses nested loops to
make several passes through the array. Each pass compares successive pairs of elements. If
a pair is in increasing order (or the values are equal), the bubble sort leaves the values as
they are. If a pair is in decreasing order, the bubble sort swaps their values in the array.
1 ‘ Fig. 7.10: BubbleSort.vb
2 ‘ Procedures for sorting an integer array.
Module modBubbleSort
‘ sort array using bubble sort algorithm
7 Sub BubbleSort(ByVal sortArray As Integer())
8 Dim pass, i As Integer
10 For pass = 1 To sortArray.GetUpperBound(0)
12 For i = 0 To sortArray.GetUpperBound(0) – 1
14 If sortArray(i) > sortArray(i + 1) Then
15 Swap(sortArray, i)
16 End If
18 Next
20 Next
22 End Sub ‘ BubbleSort
Fig. 7.10 BubbleSort procedure in modBubbleSort (part 1 of 2).
Chapter 7 Arrays 269
The module contains procedures BubbleSort and Swap. Procedure BubbleSort
(lines 7–22) sorts the elements of its parameter, sortArray. Procedure BubbleSort
calls procedure Swap (lines 25–33) as necessary to transpose two of the array elements.
The Windows application in Fig. 7.11 demonstrates procedure BubbleSort (Fig. 7.10)
by sorting an array of 10 randomly-generated elements (which may contain duplicates).
24 ‘ swap two array elements
25 Sub Swap(ByVal swapArray As Integer(), _
26 ByVal first As Integer)
28 Dim hold As Integer
30 hold = swapArray(first)
31 swapArray(first) = swapArray(first + 1)
32 swapArray(first + 1) = hold
33 End Sub ‘ Swap
35 End Module ‘ modBubbleSort
1 ‘ Fig. 7.11: BubbleSortTest.vb
2 ‘ Program creates random numbers and sorts them.
Imports System.Windows.Forms
Public Class FrmBubbleSort
7 Inherits System.Windows.Forms.Form
‘ buttons
10 Friend WithEvents cmdCreate As Button
11 Friend WithEvents cmdSort As Button
13 ‘ labels
14 Friend WithEvents lblOriginal As Label
15 Friend WithEvents lblSorted As Label
17 ‘ textboxes
18 Friend WithEvents txtOriginal As TextBox
19 Friend WithEvents txtSorted As TextBox
21 ‘ Visual Studio .NET generated code
23 Dim array As Integer() = New Integer(9) {}
25 ‘ creates random generated numbers
26 Private Sub cmdCreate_Click(ByVal sender As System.Object, _
27 ByVal e As System.EventArgs) Handles cmdCreate.Click
Fig. 7.11 Sorting an array with bubble sort (part 1 of 3).
Fig. 7.10 BubbleSort procedure in modBubbleSort (part 2 of 2).
270 Arrays Chapter 7
29 Dim output As String
30 Dim randomNumber As Random = New Random()
31 Dim i As Integer
33 txtSorted.Text = “”
35 ‘ create 10 random numbers and append to output
36 For i = 0 To array.GetUpperBound(0)
37 array(i) = randomNumber.Next(100)
38 output &= array(i) & vbCrLf
39 Next
41 txtOriginal.Text = output ‘ display numbers
42 cmdSort.Enabled = True ‘ enables cmdSort button
43 End Sub ‘ cmdCreate_Click
45 ‘ sorts randomly generated numbers
46 Private Sub cmdSort_Click(ByVal sender As System.Object, _
47 ByVal e As System.EventArgs) Handles cmdSort.Click
49 Dim output As String
50 Dim i As Integer
52 ‘ sort array
53 modBubbleSort.BubbleSort(array)
55 ‘ creates string with sorted numbers
56 For i = 0 To array.GetUpperBound(0)
57 output &= array(i) & vbCrLf
58 Next
60 txtSorted.Text = output ‘ display numbers
61 cmdSort.Enabled = False
62 End Sub ‘ cmdSort_Click
64 End Class ‘ FrmBubbleSort
Fig. 7.11 Sorting an array with bubble sort (part 2 of 3).
Chapter 7 Arrays 271
The program contains methods cmdCreate_Click and cmdSort_Click.
Method cmdCreate_Click (lines 26–43) assigns 10 random values to the elements of
array and displays the contents of the array in txtOriginal. Method
cmdSort_Click (lines 46–62) sorts array by calling procedure BubbleSort from
Procedure BubbleSort receives the array as parameter sortArray. The nested
For/Next structures in lines 10–20 of Fig. 7.10 performs the sort. The outer loop controls
the number of passes of the array. The inner loop (lines 12–18) controls the comparisons
and swapping (if necessary) of the elements during each pass.
Procedure BubbleSort first compares sortArray(0) to sortArray(1), then
sortArray(1) to sortArray(2), and so on until it completes the pass by comparing
sortArray(8) to sortArray(9). Although there are 10 elements, the comparison
loop performs only nine comparisons (because the comparisons each involve a pair of numbers).
The comparisons performed in a bubble sort could cause a large value to move down
the array (sink) many positions on a single pass. However, a small value cannot move up
(bubble) more than one position per pass. On the first pass, the largest value is guaranteed
to sink to the bottom element of the array, sortArray(9). On the second pass, the
second-largest value is guaranteed to sink to sortArray(8). On the ninth pass, the ninth
largest value sinks to sortArray(1), leaving the smallest value in sortArray(0).
Thus, only nine passes are required to sort a 10-element array (and, in general, only n-1
passes are needed to sort an n-element array).
If a comparison reveals that the two elements are in descending order, BubbleSort
calls procedure Swap to exchange the two elements, placing them in ascending order in the
array. Procedure Swap receives the array (which it calls swapArray) and the index of the
first element of the array to transpose (with the subsequent element). The exchange is performed
by three assignments
hold = swapArray(first)
swapArray(first) = swapArray(first + 1)
swapArray(first + 1) = hold
Fig. 7.11 Sorting an array with bubble sort (part 3 of 3).
272 Arrays Chapter 7
where the extra variable hold temporarily stores one of the two values being swapped. The
swap cannot be performed with only the two assignments
swapArray(first) = swapArray(first + 1)
swapArray(first + 1) = swapArray(first)
If swapArray(first) is 7 and swapArray(first + 1) is 5, after the first assignment
both array elements contains 5, and the value 7 is lost—hence, the need for the extra
variable hold.
The advantage of the bubble sort is that it is easy to program. However, the bubble sort
runs slowly, as becomes apparent when sorting large arrays. In the exercises, we develop
efficient versions of the bubble sort and investigate a more efficient and more complex sort,
quicksort. More advanced courses (often titled “Data Structures” or “Algorithms” or
“Computational Complexity”) investigate sorting and searching in greater depth.
7.8 Searching Arrays: Linear Search and Binary Search
Often, programmers work with large amounts of data stored in arrays. It might be necessary
in this case to determine whether an array contains a value that matches a certain key value.
The process of locating a particular element value in an array is called searching. In this section,
we discuss two searching techniques—the simple linear search technique and the more
efficient (but more complex) binary search technique. Exercises 7.8 and 7.9 at the end of this
chapter ask you to implement recursive versions of the linear and binary searches.
7.8.1 Searching an Array with Linear Search
Module modLinearSearch in Fig. 7.12 contains a procedure for performing a linear
search. Procedure LinearSearch (lines 7–22) uses a For/Next structure containing an
If structure (lines 15–17) to compare each element of an array with a search key. If the
search key is found, the procedure returns the index value for the element, indicating the
position of the search key in the array. If the search key is not found, the procedure returns
–1. (The value –1 is a good choice because it is not a valid index number.) If the elements
of the array being searched are unordered, it is just as likely that the value will be found in
the first element as in the last, so the procedure will have to compare the search key with
half the elements of the array, on average.
1 ‘ Fig. 7.12: LinearSearch.vb
2 ‘ Linear search of an array.
Module modLinearSearch
‘ iterates through array
7 Function LinearSearch(ByVal key As Integer, _
8 ByVal numbers As Integer()) As Integer
10 Dim n As Integer

Fig. 7.12 Procedures for performing a linear search (part 1 of 2).
Chapter 7 Arrays 273
The program in Fig. 7.13 uses module modLinearSearch to search a 20-element
array filled with random values created when the user clicks cmdCreate. The user then
types a search key in a TextBox (named txtInput) and clicks cmdSearch to start
the search.
12 ‘ structure iterates linearly through array
13 For n = 0 To numbers.GetUpperBound(0)
15 If numbers(n) = key Then
16 Return n
17 End If
19 Next
21 Return -1
22 End Function ‘ LinearSearch
24 End Module ‘ modLinearSearch
1 ‘ Fig. 7.13: LinearSearchTest.vb
2 ‘ Linear search of an array.
Imports System.Windows.Forms
Public Class FrmLinearSearchTest
7 Inherits System.Windows.Forms.Form
‘ buttons
10 Friend WithEvents cmdSearch As Button
11 Friend WithEvents cmdCreate As Button
13 ‘ text boxes
14 Friend WithEvents txtInput As TextBox
15 Friend WithEvents txtData As TextBox
17 ‘ labels
18 Friend WithEvents lblEnter As Label
19 Friend WithEvents lblResult As Label
21 ‘ Visual Studio .NET generated code
23 Dim array1 As Integer() = New Integer(19) {}
25 ‘ creates random data
26 Private Sub cmdCreate_Click(ByVal sender As System.Object, _
27 ByVal e As System.EventArgs) Handles cmdCreate.Click
29 Dim output As String
30 Dim randomNumber As Random = New Random()
31 Dim i As Integer
Fig. 7.13 Linear search of an array (part 1 of 3).
Fig. 7.12 Procedures for performing a linear search (part 2 of 2).
274 Arrays Chapter 7
33 output = “Index” & vbTab & “Value” & vbCrLf
35 ‘ creates string containing 11 random numbers
36 For i = 0 To array1.GetUpperBound(0)
37 array1(i) = randomNumber.Next(1000)
38 output &= i & vbTab & array1(i) & vbCrLf
39 Next
41 txtData.Text = output ‘ displays numbers
42 txtInput.Text = “” ‘ clear search key text box
43 cmdSearch.Enabled = True ‘ enable search button
44 End Sub ‘ cmdCreate_Click
46 ‘ searches key of element
47 Private Sub cmdSearch_Click(ByVal sender As System.Object, _
48 ByVal e As System.EventArgs) Handles cmdSearch.Click
50 ‘ if search key text box is empty, display
51 ‘ message and exit procedure
52 If txtInput.Text = “” Then
53 MessageBox.Show(“You must enter a search key.”)
54 Exit Sub
55 End If
57 Dim searchKey As Integer = Convert.ToInt32(txtInput.Text)
58 Dim element As Integer = LinearSearch(searchKey, array1)
60 If element -1 Then
61 lblResult.Text = “Found Value in index ” & element
62 Else
63 lblResult.Text = “Value Not Found”
64 End If
66 End Sub ‘ cmdSearch_Click
68 End Class ‘ FrmLinearSearch
Fig. 7.13 Linear search of an array (part 2 of 3).
Chapter 7 Arrays 275
7.8.2 Searching a Sorted Array with Binary Search
The linear search method works well for small or unsorted arrays. However, for large arrays,
linear searching is inefficient. If the array is sorted, the high-speed binary search technique
can be used.
After each comparison, the binary search algorithm eliminates from consideration half
the elements in the array that is being searched. The algorithm locates the middle array element
and compares it with the search key. If they are equal, the search key has been found,
and the index of that element is returned. Otherwise, the problem is reduced to searching
half of the array. If the search key is less than the middle array element, the second half of
the array is eliminated from consideration, and searching continues with only the first half
of the array; otherwise, the second half of the array is searched. If the search key is not the
middle element in the specified subarray (a piece of the original array), the algorithm is
repeated in one quarter of the original array. The search continues until the search key is
equal to the middle element of a subarray, or until the subarray consists of one element that
is not equal to the search key (i.e., the search key is not found).
In a worst-case scenario, searching a sorted array of 1024 elements via binary search
requires only 10 comparisons. Repeatedly dividing 1024 by 2 (after each comparison, we
eliminate from consideration half the array) yields the successive values 512, 256, 128, 64,
32, 16, 8, 4, 2 and 1. The number 1024 (210) is divided by 2 only ten times to get the value
1, and division by 2 is equivalent to one comparison in the binary search algorithm. A
sorted array of 1,048,576 (220) elements takes a maximum of 20 comparisons to find the
key! Similarly, a key can be found in a sorted array of one billion elements in a maximum
of 30 comparisons! This is a tremendous increase in performance over the linear search,
which required comparing the search key with an average of half the elements in the array.
For a one-billion-element array, the difference is between an average of 500 million comparisons
and a maximum of 30 comparisons! The maximum number of comparisons
needed to complete a binary search of any sorted array is indicated by the exponent of the
first power of 2 that is greater than or equal to the number of elements in the array.
Figure 7.14 presents the iterative version of method BinarySearch (lines 60–86).
The method receives two arguments—integer array array1 (the array to search), and
integer searchKey (the search key). The array is passed to BinarySearch, even
Fig. 7.13 Linear search of an array (part 3 of 3).
276 Arrays Chapter 7
though the array is an instance variable of the class. Once again, this is done because an
array normally is passed to a procedure of another class for searching.
1 ‘ Fig. 7.14: BinarySearchTest.vb
2 ‘ Demonstrating binary search of an array.
Imports System.Windows.Forms
Public Class FrmBinarySearch
7 Inherits System.Windows.Forms.Form
‘ labels
10 Friend WithEvents lblEnterKey As Label
11 Friend WithEvents lblResult As Label
12 Friend WithEvents lblResultOutput As Label
13 Friend WithEvents lblDisplay As Label
14 Friend WithEvents lblIndex As Label
15 Friend WithEvents lblIndexes As Label
17 ‘ button
18 Friend WithEvents cmdFindKey As Button
20 ‘ text box
21 Friend WithEvents txtInput As TextBox
23 ‘ Visual Studio .NET generated code
25 Dim array1 As Integer() = New Integer(14) {}
27 ‘ FrmBinarySearch initializes array1 to ascending values
28 ‘ 0, 2, 4, 6, …, 28 when first loaded
29 Private Sub FrmBinarySearch_Load(ByVal sender As System.Object, _
30 ByVal e As System.EventArgs) Handles MyBase.Load
32 Dim i As Integer
34 For i = 0 To array1.GetUpperBound(0)
35 array1(i) = 2 * i
36 Next
38 End Sub ‘ FrmBinarySearch_Load
40 ‘ event handler for cmdFindKey button
41 Private Sub cmdFindKey_Click(ByVal sender As System.Object, _
42 ByVal e As System.EventArgs) Handles cmdFindKey.Click
44 Dim searchKey As Integer = Convert.ToInt32(txtInput.Text)
46 lblDisplay.Text = “”
48 ‘ perform binary search
49 Dim element As Integer = BinarySearch(array1, searchKey)
Fig. 7.14 Binary search of a sorted array (part 1 of 3).
Chapter 7 Arrays 277
51 If element -1 Then
52 lblResultOutput.Text = “Found value in element ” & element
53 Else
54 lblResultOutput.Text = “Value not found”
55 End If
57 End Sub ‘ cmdFindKey_Click
59 ‘ performs binary search
60 Function BinarySearch(ByVal array As Integer(), _
61 ByVal key As Integer) As Integer
63 Dim low As Integer = 0 ‘ low index
64 Dim high As Integer = array.GetUpperBound(0) ‘ high index
65 Dim middle As Integer ‘ middle index
67 While low <= high
68 middle = (low + high) \ 2
70 ' the following line displays part
71 ' of the array being manipulated during
72 ' each iteration of loop
73 BuildOutput(low, middle, high)
75 If key = array(middle) Then ' match
76 Return middle
77 ElseIf key < array(middle) Then ' search low end
78 high = middle – 1 ' of array
79 Else
80 low = middle + 1
81 End If
83 End While
85 Return -1 ' search key not found
86 End Function ' BinarySearch
88 Sub BuildOutput(ByVal low As Integer, _
89 ByVal middle As Integer, ByVal high As Integer)
91 Dim i As Integer
93 For i = 0 To array1.GetUpperBound(0)
95 If i high Then
96 lblDisplay.Text &= ” “
97 ElseIf i = middle Then ‘ mark middle element in output
98 lblDisplay.Text &= String.Format(“{0:D2}”, _
99 array1(i)) & “* “
100 Else
101 lblDisplay.Text &= String.Format(“{0:D2}”, _
102 array1(i)) & ” “
103 End If
Fig. 7.14 Binary search of a sorted array (part 2 of 3).
278 Arrays Chapter 7
105 Next i
107 lblDisplay.Text &= vbCrLf
108 End Sub ‘ BuildOutput
110 End Class ‘ FrmBinarySearch
Fig. 7.14 Binary search of a sorted array (part 3 of 3).
Chapter 7 Arrays 279
Line 68 calculates the middle element of the array being searched by determining the
number of elements in the array and then dividing this value by 2. Recall that using the \
operator causes the remainder to be discarded. What happens, then, when there is an even
number of elements in the array? In this case there is no “middle” element, and the middle
of our array is actually between the two middle elements. When this occurs, the calculation
on line 68 returns the smaller of the two middle values.
The If/Else structure on lines 75–81 compares the middle element of the array to key.
If key matches the middle element of a subarray (line 75), middle (the index of the current
element) is returned, indicating that the value was found and the search is complete.
If key does not match the middle element of a subarray, the low index or high
index (both declared in the method) is adjusted so that a smaller subarray can be searched.
If key is less than the middle element (line 77), the high index is set to middle – 1, and
the search is continued on the elements from low to middle – 1. If key is greater than
the middle element (line 79), the low index is set to middle + 1, and the search is continued
on the elements from middle + 1 to high.
The program uses a 15-element array. The first power of 2 greater than or equal to the
number of array elements is 16 (24), so at most four comparisons are required to find the
key. To illustrate this concept, method BinarySearch calls method BuildOutput
(line 88) to output each subarray during the binary search process. The middle element in
each subarray is marked with an asterisk (*) to indicate the element with which the key is
compared. The format string “{0:D2}” on lines 98 and 101 causes the values to be formatted
as integers with at least two digits. Each search in this example results in a maximum
of four lines of output—one per comparison.
7.9 Multidimensional Rectangular and Jagged Arrays
So far, we have studied one-dimensional (or single-subscripted) arrays—i.e., those that
contain one row of values. In this section, we introduce multidimensional (often called multiple-
subscripted) arrays, which require two or more indices to identify particular elements.
We concentrate on two-dimensional (often called double-subscripted) arrays, or arrays that
contain multiple rows of values. There are two types of multidimensional arrays—rectangular
and jagged. Rectangular arrays with two indices often represent tables of values consisting
of information arranged in rows and columns. Each row is the same size, and each
column is the same size (hence, the term “rectangular”). To identify a particular table element,
we must specify the two indices—by convention, the first identifies the element’s
row, the second the element’s column. Figure 7.15 illustrates a two-dimensional rectangular
array, a, containing three rows and four columns. A rectangular two-dimensional array
with m rows and n columns is called an m-by-n array; the array in Fig. 7.15 is referred to
as a 3-by-4 array.
Every element in array a is identified in Fig. 7.15 by an element name of the form
a(i, j), where a is the name of the array and i and j are the indices that uniquely identify
the row and column of each element in array a. Notice that, because array indices are
determined through zero-based counting, the names of the elements in the first row have a
first index of 0; the names of the elements in the fourth column have a second index of 3.
Multidimensional arrays are initialized in declarations using the same process and notations
employed for one-dimensional arrays. For example, a two-dimensional rectangular
array numbers with two rows and two columns could be declared and initialized with
280 Arrays Chapter 7
Dim numbers As Integer(,) = New Integer(1,1) {}
numbers(0, 0) = 1
numbers(0, 1) = 2
numbers(1, 0) = 3
numbers(1, 1) = 4
Alternatively, the initialization can be written on one line, as shown below:
Dim numbers As Integer(,) = New Integer(,) {{1, 2}, {3, 4}}
The values are grouped by row in braces, with 1 and 2 initializing numbers(0,0) and
numbers(0,1), and 3 and 4 initializing numbers(1,0) and numbers(1,1). The
compiler determines the number of rows by counting the number of subinitializer lists (represented
by sets of braces) in the main initializer list. Then, the compiler determines the
number of columns in each row by counting the number of initializer values in the subinitializer
list for that row. In rectangular arrays, each row has the same number of values.
Jagged arrays are maintained as arrays of arrays. Unlike rectangular arrays, rows in
jagged arrays can be of different lengths. The statements
Dim array2 As Integer()() ‘ declare jagged array
array2 = New Integer(1)() {} ‘ allocate two rows
‘ allocate columns for row 0
array2(0) = New Integer() {1, 2}
‘ allocate columns for 1
array2(1) = New Integer() {3, 4, 5}
create Integer array array2 with row 0 (which is an array itself) containing two elements
(1 and 2), and row 1 containing three elements (3, 4 and 5). Notice that the array
name, followed by a single index (e.g., array2(0)), behaves exactly like a normal onedimensional
array variable. A one-dimensional array can be created and assigned to that
Fig. 7.15 Two-dimensional array with three rows and four columns.
Row 0
Row 1
Row 2
Column 0 Column 1 Column 2 Column 3
Column index (or subscript)
Row index (or subscript)
Array name
a(1, 0) a(1, 1) a(1, 2) a(1, 3)
a(0, 0) a(0, 1) a(0, 2) a(0, 3)
a(2, 0) a(2, 1) a(2, 2) a(2, 3)
Chapter 7 Arrays 281
The program in Fig. 7.16 demonstrates the initialization of a rectangular array
(array1) and a jagged array (array2) in declarations and the use of nested For/Next
loops to traverse the arrays (i.e., to manipulate every array element).
The program declares two arrays in method Main. The allocation of array1 (line 14)
provides six initializers in two sublists. The first sublist initializes the first row (row 0) of the
array to the values 1, 2 and 3; the second sublist initializes the second row (row 1) of the array
to the values 4, 5 and 6. The declaration and allocation of array2 (line 17) create a jagged
array of 3 arrays (specified by the 2 in the first set of parentheses after keyword Integer).
Lines 18–20 initialize each subarray so that the first subarray contains the values 1 and 2, the
second contains the value 3 and the last contains the values 4, 5 and 6.
The nested For/Next structures in lines 24–31 append the elements of array1 to
string output. The nested For/Next structures traverse the arrays in two dimensions.
The outer For/Next structure traverses the rows; the inner For/Next structure traverses
the columns within a row. Each For/Next structure calls method GetUpperBound to
obtain the upper bound of the dimension it traverses. Notice that the dimensions are zerobased,
meaning the rows are dimension 0 and the columns are dimension 1.
1 ‘ Fig. 7.16: MultidimensionalArrays.vb
2 ‘ Initializing multi-dimensional arrays.
Imports System.Windows.Forms
Module modMultidimensionalArrays
Sub Main()
9 Dim output As String
10 Dim i, j As Integer
12 ‘ create rectangular two-dimensional array
13 Dim array1 As Integer(,)
14 array1 = New Integer(,) {{1, 2, 3}, {4, 5, 6}}
16 ‘ create jagged two-dimensional array
17 Dim array2 As Integer()() = New Integer(2)() {}
19 array2(0) = New Integer() {1, 2}
20 array2(1) = New Integer() {3}
21 array2(2) = New Integer() {4, 5, 6}
23 output = “Values in array1 by row are ” & vbCrLf
25 For i = 0 To array1.GetUpperBound(0)
27 For j = 0 To array1.GetUpperBound(1)
28 output &= array1(i, j) & ” “
29 Next
31 output &= vbCrLf
32 Next
Fig. 7.16 Initializing multidimensional arrays (part 1 of 2).
282 Arrays Chapter 7
The nested For/Next structures in lines 36–43 behave similarly for array2. However,
in a jagged two-dimensional array, the second dimension is actually the first dimension
of a separate array. In the example, the inner For/Next structure determines the
number of columns in each row of the array by passing argument 0 to method GetUpper-
Bound, called on the array returned by accessing a single row of the jagged array. Arrays
of dimensions higher than two can be traversed using one nested For/Next structure for
each dimension.
Many common array manipulations use For/Next repetition structures. Imagine a
jagged array jaggedArray, which contains 3 rows, or arrays. The following For/Next
structure sets all the elements in the third row of array jaggedArray to zero:
For column = 0 To jaggedArray(2).GetUpperBound(0)
jaggedArray(2)(column) = 0
We specified the third row; therefore, we know that the first index is always 2 (0 is the first
row and 1 is the second row). The For/Next loop varies only the second index (i.e., the
column index). Notice the use of jaggedArray(2).GetUpperBound(0) as the end
value of the For/Next structure. In this expression, we call the GetUpperBound method
on the array contained in the third row of jaggedArray. This statement demonstrates
that each row of jaggedArray is itself an array, and therefore methods called on this val-
34 output &= vbCrLf & “Values in array2 by row are ” & _
35 vbCrLf
37 For i = 0 To array2.GetUpperBound(0)
39 For j = 0 To array2(i).GetUpperBound(0)
40 output &= array2(i)(j) & ” “
41 Next
43 output &= vbCrLf
44 Next
46 MessageBox.Show(output, _
47 “Initializing Multi-Dimensional Arrays”, _
48 MessageBoxButtons.OK, MessageBoxIcon.Information)
49 End Sub ‘ Main
51 End Module ‘ modMultidimensionalArrays
Fig. 7.16 Initializing multidimensional arrays (part 2 of 2).
Chapter 7 Arrays 283
ue behave as they would for a typical array. The preceding For/Next structure is equivalent
to the assignment statements
jaggedArray(2)(0) = 0
jaggedArray(2)(1) = 0
jaggedArray(2)(2) = 0
jaggedArray(2)(3) = 0
The following nested For/Next structure determines the total of all the elements in array
jaggedArray. We use method GetUpperBound in the headers of the For/Next
structures to determine the number of rows in jaggedArray and the number of columns
in each row.
Dim total, row, column As Integer
For row = 0 To jaggedArray.GetUpperBound(0)
For column = 0 To jaggedArray(row).GetUpperBound(0)
total += jaggedArray(row)(column)
The nested For/Next structure totals the elements of the array one row at a time. The outer
For/Next structure begins by setting the row index to 0, so the elements of the first row
can be totaled by the inner For/Next structure. The outer For/Next structure then increments
row to 1, so the second row can be totaled. The outer For/Next structure increments
row to 2, so the third row can be totaled. The result can be displayed when the outer
For/Next structure terminates.
The program in Fig. 7.17 performs several other array manipulations on a 3-by-4 array
grades. Each row of the array represents a student, and each column represents a grade
on one of the four exams that the student took during the semester. The array manipulations
are performed by four procedures: Procedure Minimum (line 44) determines the lowest
grade of any student for the semester. Procedure Maximum (line 66) determines the highest
grade of any student for the semester. Procedure Average (line 89) determines a particular
student’s semester average. Procedure BuildString (line 103) appends the twodimensional
array to string output in tabular format.
1 ‘ Fig 7.17: JaggedArray.vb
2 ‘ Jagged two-dimensional array example.
Imports System.Windows.Forms
Module modJaggedArray
7 Dim lastStudent, lastExam As Integer
8 Dim output As String
10 Sub Main()
11 Dim i As Integer
Fig. 7.17 Using jagged two-dimensional arrays (part 1 of 4).
284 Arrays Chapter 7
13 ‘ jagged array with 3 rows of exam scores
14 Dim gradeArray As Integer()() = New Integer(2)() {}
16 ‘ allocate each row with 4 student grades
17 gradeArray(0) = New Integer() {77, 68, 86, 73}
18 gradeArray(1) = New Integer() {98, 87, 89, 81}
19 gradeArray(2) = New Integer() {70, 90, 86, 81}
21 ‘ upper bounds for array manipulations
22 lastStudent = gradeArray.GetUpperBound(0)
23 lastExam = gradeArray(0).GetUpperBound(0)
25 output = “Students \ Exams” & vbCrLf
27 ‘ build output string
28 BuildString(gradeArray)
29 output &= vbCrLf & vbCrLf & “Lowest grade: ” & _
30 Minimum(gradeArray) & vbCrLf & “Highest grade: ” & _
31 Maximum(gradeArray) & vbCrLf
33 ‘ calculate each student’s average
34 For i = 0 To lastStudent
35 output &= vbCrLf & “Average for student ” & _
36 i & ” is ” & Average(gradeArray(i))
37 Next
39 MessageBox.Show(output, “Jagged two-dimensional array”, _
40 MessageBoxButtons.OK, MessageBoxIcon.Information)
41 End Sub ‘ Main
43 ‘ find minimum grade
44 Function Minimum(ByVal grades As Integer()()) _
45 As Integer
47 Dim lowGrade As Integer = 100
48 Dim i, j As Integer
50 For i = 0 To lastStudent
52 For j = 0 To lastExam
54 If grades(i)(j) highGrade Then
77 highGrade = grades(i)(j)
78 End If
80 Next
82 Next
84 Return highGrade
85 End Function ‘ Maximum
87 ‘ determine the average grade for student
88 ‘ (or set of grades)
89 Function Average(ByVal setOfGrades As Integer()) _
90 As Double
92 Dim i As Integer, total As Integer = 0
94 ‘ find sum of student’s grades
95 For i = 0 To lastExam
96 total += setOfGrades(i)
97 Next
99 Return total / setOfGrades.Length
100 End Function ‘ Average
102 ‘ creates String displaying array
103 Sub BuildString(ByVal grades As Integer()())
104 Dim i, j As Integer
106 ‘ align column heads
107 output &= ” “
109 For i = 0 To lastExam
110 output &= “(” & i & “) “
111 Next
113 For i = 0 To lastStudent
114 output &= vbCrLf & ” (” & i & “) “
Fig. 7.17 Using jagged two-dimensional arrays (part 3 of 4).
286 Arrays Chapter 7
Procedures Minimum, Maximum and BuildString use array grades and the
variables lastStudent (upper bound for rows in the array) and lastExam (upper
bound for columns in the array). Each procedure uses nested For/Next structures to
iterate through array grades. Consider the nested For/Next structures in procedure
Minimum (lines 50–60). The outer For/Next structure sets i (i.e., the row index) to 0 so
the elements of the first row can be compared with variable lowGrade in the inner For/
Next structure (line 54). The inner For/Next structure loops through the four grades of
a particular row and compares each grade with lowGrade. If a grade is less than low-
Grade, then lowGrade is assigned that grade. The outer For/Next structure then increments
the row index by 1. The elements of the second row are compared with variable
lowGrade. The outer For/Next structure then increments the row index to 2. The elements
of the third row are compared with variable lowGrade. When execution of the
nested structures is complete (line 62), lowGrade contains the smallest grade in the twodimensional
array. Procedure Maximum behaves similarly to procedure Minimum.
Procedure Average takes one argument—a one-dimensional array of test results for
a particular student. Average is called (line 36) with argument gradeArray(i), which
is row i of the jagged two-dimensional array grades. For example, the argument
grades(1) represents the four grades for student 1 (i.e., a one-dimensional array of
grades). Remember that a jagged two-dimensional array is an array with elements that are
one-dimensional arrays. Procedure Average calculates the sum of the array elements,
divides the total by the number of test results (obtained using the Length property) and
then returns the floating-point result as a Double value (line 89).
116 For j = 0 To lastExam
117 output &= grades(i)(j) & ” “
118 Next
120 Next
122 End Sub ‘ BuildString
124 End Module ‘ modJaggedArray
Fig. 7.17 Using jagged two-dimensional arrays (part 4 of 4).
Chapter 7 Arrays 287
7.10 Variable-Length Parameter Lists
It is possible to create procedures that receive a variable number of arguments, using keyword
ParamArray. The program in Fig. 7.18 calls programmer-defined procedure
AnyNumberArguments three times, passing a different number of values each time.
The values passed into procedure AnyNumberArguments are stored in one-dimensional
Integer array array1, which is declared using ParamArray.
Common Programming Error 7.4
Attempting to declare a parameter variable to the right of the ParamArray array variable
is a syntax error. 7.4
Common Programming Error 7.5
Attempting to use ParamArray with a multidimensional array is a syntax error. 7.5
1 ‘ Fig. 7.18: ParamArrayTest.vb
2 ‘ Using ParamArray to create variable-length parameter lists.
Module modParamArrayTest
Sub Main()
7 AnyNumberArguments()
8 AnyNumberArguments(2, 3)
9 AnyNumberArguments(7, 8, 9, 10, 11, 12)
11 End Sub ‘ Main
13 ‘ receives any number of arguments in array
14 Sub AnyNumberArguments(ByVal ParamArray array1 _
15 As Integer())
17 Dim i, total As Integer
18 total = 0
20 If array1.Length = 0 Then
21 Console.WriteLine(“Procedure AnyNumberArguments” & _
22 ” received 0 arguments.”)
23 Else
24 Console.Write(“The total of “)
26 For i = 0 To array1.GetUpperBound(0)
27 Console.Write(array1(i) & ” “)
28 total += array1(i)
29 Next
31 Console.WriteLine(“is {0}.”, total)
32 End If
34 End Sub ‘ AnyNumberArguments
36 End Module ‘ modParamArrayTest
Fig. 7.18 Creating variable-length parameter lists (part 1 of 2).
288 Arrays Chapter 7
Common Programming Error 7.6
Using ByRef with ParamArray is a syntax error. 7.6
We call procedure AnyNumberArguments in lines 7–9, passing a different number
of arguments each time. This procedure is defined on lines 14–34 and applies keyword
ParamArray to array1 in line 14. The If structure on lines 20–32 determines whether
the number of arguments passed to the procedure is zero. If not, lines 24–31 display
array1’s elements and their sum. All arguments passed to the ParamArray array must
be of the same type as the array, otherwise a syntax error occurs. Though we used an
Integer array in this example, any type of array can be used.
In the last chapter, we discussed procedure overloading. Often, programmers prefer to
use procedure overloading rather than writing procedures with variable-length parameter
Good Programming Practice 7.2
To increase a program’s readability and performance, the programmer should use procedure
overloading in favor of procedures with variable-length parameter lists. 7.2
7.11 For Each/Next Repetition Structure
Visual Basic provides the For Each/Next repetition structure for iterating through the
values in a data structure, such as an array. When used with one-dimensional arrays, For
Each/Next behaves like a For/Next structure that iterates through the range of indices
from 0 to the value returned by GetUpperBound(0). Instead of a counter, For Each/
Next uses a variable to represent the value of each element. The program in Fig. 7.19 uses
the For Each/Next structure to determine the minimum value in a two-dimensional array
of grades.
Procedure AnyNumberArguments received 0 arguments.
The total of 2 3 is 5.
The total of 7 8 9 10 11 12 is 57.
Fig. 7.18 Creating variable-length parameter lists (part 2 of 2).
1 ‘ Fig. 7.19: ForEach.vb
2 ‘ Program uses For Each/Next to find a minimum grade.
Module modForEach
Sub Main()
7 Dim gradeArray As Integer(,) = New Integer(,) _
8 {{77, 68, 86, 73}, {98, 87, 89, 81}, {70, 90, 86, 81}}
10 Dim grade As Integer
11 Dim lowGrade As Integer = 100
Fig. 7.19 Using For Each/Next with an array (part 1 of 2).
Chapter 7 Arrays 289
The program behaves similarly to procedure Minimum of Fig. 7.17, but consolidates
the nested For structures into one For Each structure. The header of the For Each repetition
structure (line 13) specifies a variable, grade, and an array, gradeArray. The
For Each/Next structure iterates through all the elements in gradeArray, sequentially
assigning each value to variable grade. The values are compared to variable lowGrade
(line 15), which stores the lowest grade in the array.
For rectangular arrays, the repetition of the For Each/Next structure begins with the
element whose indices are all zero, then iterates through all possible combinations of
indices, incrementing the rightmost index first. When the rightmost index reaches its upper
bound, it is reset to zero, and the index to the left of it is incremented by 1. In this case,
grade takes the values as they are ordered in the initializer list in line 8. When all the
grades have been processed, lowGrade is displayed.
Although many array calculations are handled best with a counter, For Each is useful
when the indices of the elements are not important. For Each/Next particularly is useful
for looping through arrays of objects, as we discuss in Chapter 10, Object-Oriented Programming:
In this chapter, we showed how to program with arrays. We mentioned that Visual
Basic .NET arrays are objects. In Chapter 8, Object-Based Programming, we show how to
create classes, which are essentially the “blueprints” from which objects are instantiated
(i.e., created).
• An array is a group of contiguous memory locations that have the same name and are of the same
• The first element in every array is the zeroth element (i.e., element 0).
• The position number in parentheses more formally is called the index (or the subscript). An index
must be an integer or an integer expression.
• All arrays have access to the methods and properties of class System.Array, including the
GetUpperBound method and the Length property.
• To reference the ith element of an array, use i – 1 as the index.
13 For Each grade In gradeArray
15 If grade Add Class. Enter the class name in the Name text field and
click the Open button. Note that the class name (ending with the .vb file extension)
appears in the Solution Explorer below the project name.
The following application consists of class CTime (Fig. 8.1) and module modTime-
Test (Fig. 8.2). Class CTime contains the information needed to represent a specific time;
module modTimeTest contains method Main, which uses an instance of class CTime to
run the application.
In Fig. 8.1, lines 4–5 begin the CTime class definition, indicating that class CTime
inherits from class Object (of namespace System). Visual Basic programmers use
inheritance to create classes from existing classes. The Inherits keyword (line 5) followed
by class name Object indicates that class CTime inherits existing pieces of class
Object. If the programmer does not include line 5, the Visual Basic compiler includes it
implicitly. Because this is the first chapter that exposes classes, we include these declarations
for the classes in this chapter; however, we remove them in Chapter 9. A complete
understanding of inheritance is not necessary to the understanding of the concepts and programs
in this chapter. We explore inheritance in detail in Chapter 9.
1 ‘ Fig. 8.1: CTime.vb
2 ‘ Represents time in 24-hour format.
Class CTime
5 Inherits Object
‘ declare Integer instance values for hour, minute and second
8 Private mHour As Integer ‘ 0 – 23
9 Private mMinute As Integer ‘ 0 – 59
10 Private mSecond As Integer ‘ 0 – 59
12 ‘ Method New is the CTime constructor method, which initializes
13 ‘ instance variables to zero
14 Public Sub New()
15 SetTime(0, 0, 0)
16 End Sub ‘ New
18 ‘ set new time value using universal time;
19 ‘ perform validity checks on data;
20 ‘ set invalid values to zero
21 Public Sub SetTime(ByVal hourValue As Integer, _
22 ByVal minuteValue As Integer, ByVal secondValue As Integer)
24 ‘ check if hour is between 0 and 23, then set hour
25 If (hourValue >= 0 AndAlso hourValue = 0 AndAlso minuteValue = 0 AndAlso secondValue < 60) Then
40 mSecond = secondValue
41 Else
42 mSecond = 0
43 End If
45 End Sub ' SetTime
47 ' convert String to universal-time format
48 Public Function ToUniversalString() As String
49 Return String.Format("{0}:{1:D2}:{2:D2}", _
50 mHour, mMinute, mSecond)
51 End Function ' ToUniversalString
53 ' convert to String in standard-time format
54 Public Function ToStandardString() As String
55 Dim suffix As String = " PM"
56 Dim format As String = "{0}:{1:D2}:{2:D2}"
57 Dim standardHour As Integer
59 ' determine whether time is AM or PM
60 If mHour = 0 AndAlso hourValue = 0 AndAlso minuteValue = 0 AndAlso secondValue < 60) Then
67 mSecond = secondValue
68 Else
69 mSecond = 0
70 End If
72 End Sub ' SetTime
74 ' convert String to universal-time format
75 Public Function ToUniversalString() As String
76 Return String.Format("{0}:{1:D2}:{2:D2}", _
77 mHour, mMinute, mSecond)
78 End Function ' ToUniversalString
80 ' convert to String in standard-time format
81 Public Function ToStandardString() As String
82 Dim suffix As String = " PM"
83 Dim format As String = "{0}:{1:D2}:{2:D2}"
84 Dim standardHour As Integer
86 ' determine whether time is AM or PM
87 If mHour = 0 AndAlso value = 0 AndAlso value = 0 AndAlso value < 60) Then
109 mSecond = value
110 Else
111 mSecond = 0
112 End If
114 End Set
116 End Property ' Second
118 ' convert String to universal-time format
119 Public Function ToUniversalString() As String
120 Return String.Format("{0}:{1:D2}:{2:D2}", _
121 mHour, mMinute, mSecond)
122 End Function ' ToUniversalString
124 ' convert to String in standard-time format
125 Public Function ToStandardString() As String
126 Dim suffix As String = " PM"
127 Dim format As String = "{0}:{1:D2}:{2:D2}"
128 Dim standardHour As Integer
130 ' determine whether time is AM or PM
131 If mHour 0 AndAlso monthValue 0 AndAlso _
45 testDayValue <= daysPerMonth(mMonth)) Then
47 Return testDayValue
48 End If
50 ' check for leap year in February
51 If (mMonth = 2 AndAlso testDayValue = 29 AndAlso _
52 mYear Mod 400 = 0 OrElse mYear Mod 4 = 0 AndAlso _
53 mYear Mod 100 0) Then
55 Return testDayValue
56 Else
58 ‘ inform user of error
59 Dim errorMessage As String = _
60 “day ” & testDayValue & “invalid. Set to day 1. “
62 MessageBox.Show(errorMessage, “”, _
63 MessageBoxButtons.OK, MessageBoxIcon.Error)
65 Return 1 ‘ leave object in consistent state
66 End If
68 End Function ‘ CheckDay
70 ‘ create string containing month/day/year format
71 Public Function ToStandardString() As String
72 Return mMonth & “/” & mDay & “/” & mYear
73 End Function ‘ ToStandardString
75 End Class ‘ CDay
Fig. 8.8 CDay class encapsulates day, month and year information (part 2 of 2).
Chapter 8 Object-Based Programming 323
Class CEmployee (Fig. 8.9) holds information relating to an employee’s birthday
and hire date (lines 7–10) using instance variables mFirstName, mLastName,
mBirthDate and mHireDate. Members mBirthDate and mHireDate are references
to CDay objects, each of which contains instance variables mMonth, mDay and
mYear. In this example, class CEmployee is composed of two references of class CDay.
The CEmployee constructor (lines 13–32) takes eight arguments (firstNameValue,
lastNameValue, birthMonthValue, birthDayValue, birthYearValue,
hireMonthValue, hireDayValue and hireYearValue). Lines 26–27 pass arguments
birthMonthValue, birthDayValue and birthYearValue to the CDay
constructor to create the mBirthDate object. Similarly, lines 30–31 pass arguments
hireMonthValue, hireDayValue and hireYearValue to the CDay constructor
to create the mHireDate object.
Module modCompositionTest (Fig. 8.10) runs the application with method
Main. Lines 9–10 instantiate a CEmployee object (“Bob Jones” with birthday 7/
24/1949 and hire date 3/12/1988), and lines 12–13 display the information to the
user in a MessageBox.
1 ‘ Fig. 8.9: CEmployee.vb
2 ‘ Represent employee name, birthday and hire date.
Class CEmployee
5 Inherits Object
Private mFirstName As String
8 Private mLastName As String
9 Private mBirthDate As CDay ‘ member object reference
10 Private mHireDate As CDay ‘ member object reference
12 ‘ CEmployee constructor
13 Public Sub New(ByVal firstNameValue As String, _
14 ByVal lastNameValue As String, _
15 ByVal birthMonthValue As Integer, _
16 ByVal birthDayValue As Integer, _
17 ByVal birthYearValue As Integer, _
18 ByVal hireMonthValue As Integer, _
19 ByVal hireDayValue As Integer, _
20 ByVal hireYearValue As Integer)
22 mFirstName = firstNameValue
23 mLastName = lastNameValue
25 ‘ create CDay instance for employee birthday
26 mBirthDate = New CDay(birthMonthValue, birthDayValue, _
27 birthYearValue)
29 ‘ create CDay instance for employee hire date
30 mHireDate = New CDay(hireMonthValue, hireDayValue, _
31 hireYearValue)
32 End Sub ‘ New
Fig. 8.9 CEmployee class encapsulates employee name, birthday and hire date
(part 1 of 2).
324 Object-Based Programming Chapter 8
8.9 Using the Me Reference
Every object can access a reference to itself via the Me reference. The Me reference is used
implicitly refer to instance variables, properties and methods of an object. We begin with
an example of using reference Me explicitly and implicitly to display the Private data of
an object.
Class CTime4 (Fig. 8.11) defines three Private instance variables—mHour, mMinute
and mSecond (line 5). The constructor (lines 8–14) receives three Integer arguments
to initialize a CTime4 object. Note that for this example, we have made the
constructor’s parameter names (lines 8–9) identical to the class’s instance variable names
(line 5). A method’s local variable that has the same name as a class’s instance variable hides
the instance variable in that method’s scope. However, the method can use reference Me to
refer to these instance variables explicitly. Lines 11–13 of Fig. 8.11 demonstrate this feature.
34 ‘ return employee information as standard-format String
35 Public Function ToStandardString() As String
36 Return mLastName & “, ” & mFirstName & ” Hired: ” _
37 & mHireDate.ToStandardString() & ” Birthday: ” & _
38 mBirthDate.ToStandardString()
39 End Function ‘ ToStandardString
41 End Class ‘ CEmployee
1 ‘ Fig. 8.10: CompositionTest.vb
2 ‘ Demonstrate an object with member object reference.
Imports System.Windows.Forms
Module modCompositionTest
Sub Main()
9 Dim employee As New CEmployee( _
10 “Bob”, “Jones”, 7, 24, 1949, 3, 12, 1988)
12 MessageBox.Show(employee.ToStandardString(), _
13 “Testing Class Employee”)
14 End Sub ‘ Main
16 End Module ‘ modCompositionTest
Fig. 8.10 Composition demonstration.
Fig. 8.9 CEmployee class encapsulates employee name, birthday and hire date
(part 2 of 2).
Chapter 8 Object-Based Programming 325
Method BuildString (lines 17–20) returns a String created by a statement that
uses the Me reference explicitly and implicitly. Line 18 uses the Me reference explicitly to
call method ToUniversalString, whereas line 19 uses the Me reference implicitly to
call method ToUniversalString. Note that both lines perform the same task (i.e., generate
identical output). Because of this, programmers usually do not use the Me reference
explicitly to reference methods.
Common Programming Error 8.6
For a method in which a parameter has the same name as an instance variable, use reference
Me to access the instance variable explicitly; otherwise, the method parameter is referenced. 8.6
Testing and Debugging Tip 8.3
Avoidance of method-parameter names that conflict with instance variable names helps prevent
certain subtle, hard-to-trace bugs. 8.3
Good Programming Practice 8.7
The explicit use of the Me reference can increase program clarity where Me is optional. 8.7
Module modMeTest (Fig. 8.12) runs the application that demonstrates the use of the
Me reference. Line 9 instantiates an instance of class CTime4. Lines 11–12 invoke method
BuildString, then display the results to the user in a MessageBox.
1 ‘ Fig. 8.11: CTime4.vb
2 ‘ Encapsulate time using Me reference.
Class CTime4
5 Private mHour, mMinute, mSecond As Integer
‘ CTime4 constructor
8 Public Sub New(ByVal mHour As Integer, _
9 ByVal mMinute As Integer, ByVal mSecond As Integer)
11 Me.mHour = mHour
12 Me.mMinute = mMinute
13 Me.mSecond = mSecond
14 End Sub ‘ New
16 ‘ create String using Me and implicit references
17 Public Function BuildString() As String
18 Return “Me.ToUniversalString(): ” & Me.ToUniversalString() _
19 & vbCrLf & “ToUniversalString(): ” & ToUniversalString()
20 End Function ‘ BuildString
22 ‘ convert to String in standard-time format
23 Public Function ToUniversalString() As String
24 Return String.Format(“{0:D2}:{1:D2}:{2:D2}”, _
25 mHour, mMinute, mSecond)
26 End Function ‘ ToUniversalString
28 End Class ‘ CTime4
Fig. 8.11 Class using Me reference.
326 Object-Based Programming Chapter 8
8.10 Garbage Collection
In previous examples, we have seen how a constructor method initializes data in an object
of a class after the object is created. Keyword New allocates memory for the object, then
calls that object’s constructor. The constructor might acquire other system resources, such
as network connections and database connections. Objects must have a disciplined way to
return memory and release resources when the program no longer uses those objects. Failure
to release such resources causes resource leaks.
Unlike C and C++, in which programmers must manage memory explicitly, Visual
Basic performs memory management internally. The .NET Framework performs garbage
collection of memory to return memory that is no longer needed back to the system. When
the garbage collector executes, it locates objects for which the application has no references.
Such objects can be collected at that time or in a subsequent execution of the garbage
collector. Therefore, the memory leaks that are common in such languages as C and C++,
where memory is not reclaimed automatically, are rare in Visual Basic.
Dependence on Visual Basic’s automatic garbage collection, however, might not be the
best way to manage resources. Certain resources, such as network connections, database connections
and file streams, are better handled explicitly by the programmer. One technique
employed to handle these resources (in conjunction with the garbage collector) is to define a
finalizer method that returns resources to the system. The garbage collector calls an object’s
finalizer method to perform termination housekeeping on that object just before the garbage
collector reclaims the object’s memory (this process is called finalization).
Class Object defines method Finalize, which is the finalizer method for all
Visual Basic objects. Because all Visual Basic classes inherit from class Object, they
1 ‘ Fig. 8.12: MeTest.vb
2 ‘ Demonstrates Me reference.
Imports System.Windows.Forms
Module modMeTest
Sub Main()


Bagian Pertama

Program S-1 Pemerintahan Integratif (PIN)
Fakultas Ilmu Sosial dan Ilmu Politik Universitas Mulawarman
Homepage:, Email:
Skripsi, paper/makalah, laporan penelitian, dan lain sebagainya, memiliki
format penulisan tertentu untuk bisa disebut sebagai sebuah karya ilmiah.
Uraian di bawah ini membahas format penulisan karya ilmiah berupa skripsi
pada Program S-1 Pemerintahan Integratif. Namun beberapa poin penting dalam
format penulisan dimaksud bisa dipakai sebagai acuan dalam penulisan karya
ilmiah selain skripsi, seperti paper/makalah, artikel dalam jurnal ilmiah, dan lain
A. Bahan dan Ukuran Kertas
Bahan dan ukuran kertas yang dipakai dalam sebuah karya ilmiah adalah
sebagai berikut:
1. Ukuran kertas: A4 (21 x 29,7 cm).
2. Jenis kertas: HVS 80 gram.
3. Kertas doorslag berwarna (sesuai dengan warna yang telah ditentukan)
dengan lambang Universitas Mulawarman sebagai pembatas.1
B. Pengetikan
Ketentuan-ketentuan dalam pengetikan sebuah karya ilmiah dirinci
sebagai berikut:
1. Menggunakan software pengolah kata dengan flatform Windows, seperti
MS Word, Excel, dan lain-lain.2
2. Jenis huruf yang digunakan adalah Times New Roman dengan
ukuran 12 kecuali untuk:
a. Halaman judul sampul/luar (hard cover) dan halaman judul dalam
(soft cover), yang menggunakan huruf tegak (kecuali istilah asing)
dan dicetak tebal (bold) dengan ukuran font mulai 12 sampai 16
(disesuaikan dengan panjang judul, lihat Lampiran).
b. Catatan kaki (footnotes), yang menggunakan font ukuran 10.
3. Huruf tebal (bold) digunakan untuk judul dan sub-judul (sub-bab, sub
sub-bab), memberi penekanan, pembedaan, dan sejenisnya.
4. Huruf miring (italic) digunakan untuk istilah dalam bahasa asing atau
bahasa daerah, memberi penekanan, pembedaan (termasuk pembedaan
sub-judul yang hirarkhinya tidak setingkat), dan sejenisnya. Judul sub
1 Khusus untuk Skripsi. Percetakan umumnya sudah menyediakan kertas pembatas ini.
2 Penggunaan software Open Source pengolah kata dengan flatform Linux, seperti Open
Office, diperbolehkan asalkan dalam penyerahan file dalam cakram digital (khusus untuk
skripsi), file tersebut sudah dikonversi ke PDF dan bisa dibaca dengan Windows.
Pedoman Penulisan Karya Ilmiah dan Penyusunan Skripsi, PIN, 2008.
sub-sub-bab dibuat dengan mengkombinasikan huruf miring dan huruf
tebal (italic-bold atau bold-italic). Judul sub sub-sub-sub-bab dan
seterusnya dibuat dengan huruf miring biasa (italic).
5. Batas tepi (margin):
a. Tepi atas : 4 cm
b. Tepi bawah : 3 cm
c. Tepi kiri : 4 cm
d. Tepi kanan : 3 cm
6. Sela ketukan (ind3e nsi) selebar 1 cm. Indensi Tab dipakai pada baris
pertama alinea baru. Indensi gantung digunakan untuk daftar pustaka.
7. Spasi bagian awal, bagian isi, dan bagian akhir:
a. Bagian awal dari karya ilmiah termasuk di dalamnya adalah
halaman judul, halaman pengesahan, halaman pernyataan, abstrak,
riwayat hidup, kata pengantar, daftar isi, daftar tabel, daftar gambar
dan daftar lampiran. Spasi yang digunakan adalah:
1) Pernyataan ditulis dengan spasi tunggal (lihat Lampiran).
2) Riwayat Hidup dan Kata Pengantar ditulis dengan spasi ganda.
3) Abstrak, antara 150-250 kata (dalam satu halaman) ditulis
dengan menggunakan spasi tunggal (lihat Lampiran).
4) Daftar Isi, Daftar Tabel, Daftar Gambar, Daftar Lampiran
disusun dengan menggunakan spasi tunggal (lihat Lampiran).
5) Lainnya, lihat Lampiran.
b. Bagian isi karya ilmiah meliputi Bab I sampai BAB V, disusun
dengan menggunakan spasi ganda.
c. Bagian akhir karya ilmiah terdiri dari Daftar Pustaka, yang daftar
referensinya memakai spasi tunggal dan indensi gantung (jarak antar
referensi dengan spasi ganda), dan Lampiran yang ditulis dengan
spasi tunggal atau disesuaikan dengan bentuk/jenis lampiran.
6. Judul karya ilmiah, bab, sub bab, dan lain sebagainya:
a. Judul karya ilmiah dan bab, diketik dengan huruf besar/kapital,
dicetak tebal, tanpa singkatan (kecuali yang berlaku umum seperti
PT., CV.), posisinya di tengah halaman, dan tanpa diakhiri tanda
titik. Perkecualiannya adalah judul pada halaman Persetujuan
Seminar dan Pengesahan Skripsi (dengan huruf biasa, dicetak tebal).
b. Judul sub-bab diketik sejajar dengan batas tepi (margin) sebelah
kiri dengan menggunakan huruf A, B, C, dan seterusnya. Huruf
pertama setiap kata dimulai dengan huruf besar (Title Case)
kecuali kata penghubung dan kata depan, tanpa diakhiri titik. Judul
sub-bab dicetak dengan huruf tebal (bold).
c. Judul sub sub-bab dimulai dengan angka 1, 2, 3 dan seterusnya.
Huruf pertama setiap kata dimulai dengan huruf besar (Title Case)
kecuali kata penghubung dan kata depan, tanpa diakhiri titik.
Bagian Pertama: Pedoman Penulisan Karya Ilmiah.
Judul sub sub-bab dicetak dengan huruf tebal (bold).
d. Judul sub sub-sub-bab dimulai dengan huruf a, b, c dan
seterusnya. Huruf pertama setiap kata dimulai dengan huruf besar
(Title Case) kecuali kata penghubung dan kata depan, tanpa
diakhiri titik. Judul sub sub-sub-bab dicetak dengan huruf tebalmiring
e. Judul sub sub-sub-sub bab dimulai dengan angka 1), 2), 3) dst.
(tanpa titik), dan judul sub sub-sub-sub-sub bab dimulai dengan
huruf a), b), c) dst. (tanpa titik). Huruf pertama setiap kata dimulai
dengan huruf besar (Title Case) kecuali kata penghubung dan kata
depan, tanpa diakhiri titik. Judul sub sub-sub-sub-bab dan sub subsub-
sub-sub-bab dicetak dengan huruf miring (italic).
f. Judul sub-bab, sub sub-bab, dan sub sub-sub-bab, dan seterusnya
(headings hierarchy) perlu dibedakan dengan rincian poin-poin atau
item-item (points/items hierarchy). Penulisan headings hierarchy
dimulai dari A, B, C, lalu 1, 2, 3, kemudian a, b, c, dan seterusnya
(lihat Box) dibuat sejajar dengan batas tepi kiri pengetikan (batas
margin kiri). Isi atau teksnya (alinea, kalimat) juga dibuat sejajar
dengan batas tepi kiri pengetikan dan awal kalimat dalam alinea baru
dibuat dengan indensi 1 cm). Sementara penulisan points/items
hierarchy tidak sejajar dengan batas tepi kiri pengetikan (batas
margin kiri), melainkan mengikuti poin-poin/item-item dimaksud
atau posisinya disesuaikan dengan memperhatikan estetika.
Penggunaan angka atau huruf awal untuk poin-poin atau item-item
juga disesuaikan (bisa dimulai dari 1,2,3 atau a, b, c).
Penulisan headings hierarchy (sub-judul) – sejajar batas tepi kiri:
Batas tepi kiri pengetikan
A. Judul Sub-Bab (bold)
1. Judul Sub Sub-Bab (bold)
a. Judul Sub Sub-Sub-Bab (bold-italic)
1) Judul Sub Sub-Sub-Sub-Bab (italic)
2) Judul Sub Sub-Sub-Sub-Bab (italic)
b. Judul Sub Sub-Sub-Bab (bold-italic)
1) Judul Sub Sub-Sub-Sub-Bab (italic)
2) Judul Sub Sub-Sub-Sub-Bab (italic)
a) Judul Sub Sub-Sub-Sub-Sub-Bab (italic)
b) Judul Sub Sub-Sub-Sub-Sub-Bab (italic)
2. Judul Sub Sub-Bab (bold)
B. Judul Sub-Bab (bold)
1. Judul Sub Sub-Bab (bold)
2. Judul Sub Sub-Bab (bold)
tepi kiri
Pedoman Penulisan Karya Ilmiah dan Penyusunan Skripsi, PIN, 2008.
Penulisan points/items hierarchy (rincian poin-poin/item-item) – tidak
sejajar dengan batas tepi kiri (masuk ke dalam, disesuaikan):
g. Untuk mendapatkan gambaran yang lebih jelas tentang perbedaan
keduanya (headings hierarchy dan points/items hierarchy) dalam
sebuah teks/tulisan, lihat contohnya pada Lampiran.
h. Sepanjang memungkinkan, hindari penggunaan hirarkhi sub-judul
(headings hierarchy) yang terlalu banyak tingkatannya (sub sub-subsub-
bab dan seterusnya). Hal ini bisa dilakukan dengan
memanfaatkan penggunaan rincian poin-poin atau item-item
(points/items hierarchy).
7. Bilangan dan satuan:
a. Bilangan diketik dengan angka kecuali bilangan yang terletak
pada awal kalimat yang harus dieja. Contoh:
Umur mesin 10 tahun.
Sepuluh perusahaan besar… dan seterusnya.
b. Bilangan desimal ditandai dengan koma (contoh: Rp1.150,25)
c. Satuan dinyatakan dengan singkatan resmi tanpa tanda titik (kg,
cm, dan lain-lain)
Batas tepi kiri pengetikan
A. Poin/Item
1. Sub-Poin/Item
a. Sub Sub-Poin/Item
1) Sub Sub-Sub-Poin/Item
2) Sub Sub-Sub-Poin/Item
b. Sub Sub-Poin/Item
1) Sub Sub-Sub-Poin/Item
2) Sub Sub-Sub-Poin/Item
a) Sub Sub-Sub-Sub-Poin/Item
b) Sub Sub-Sub-Sub-Poin/Item
(1) Sub Sub-Sub-Sub-Sub-Poin/Item
(2) Sub Sub-Sub-Sub-Sub-Poin/Item
(a) Sub Sub-Sub-Sub-Sub-Sub-Poin/Item
(b) Sub Sub-Sub-Sub-Sub-Sub-Poin/Item
2. Sub-Poin/Item
B. Poin/Item
1. Sub-Poin/Item
2. Sub-Poin/Item
Catatan: Poin/Item dan sub-subnya ditulis dengan huruf biasa,
kecuali untuk pemberian tekanan, istilah asing, dsb.
tepi kiri
Bagian Pertama: Pedoman Penulisan Karya Ilmiah.
d. Pecahan yang berdiri sendiri ditulis dengan angka, sedangkan
pecahan yang bergabung dengan bilangan bulat harus ditulis
dengan huruf/dieja. Contoh: tiga dua pertiga.
C. Penomoran Halaman
Ketentuan-ketentuan dalam penomoran halaman, seperti halamanhalaman
awal, halaman judul bab, halaman teks utama, dan lain sebagainya,
adalah sebagai berikut:
1. Bagian awal karya ilmiah (halaman judul, halaman pengesahan,
halaman pernyataan, abstrak, riwayat hidup, kata pengantar, daftar isi,
daftar tabel, daftar gambar, dan daftar lampiran) diberi nomor halaman
dengan angka romawi kecil (i, ii, iii, dan seterusnya) dan ditempatkan
di tengah bagian bawah. Halaman judul tidak diberi nomor, tetapi tetap
2. Mulai dari BAB I sampai dengan halaman terakhir pada Daftar Pustaka
diberi nomor halaman dengan angka latin (1, 2, 3, dan seterusnya).
Nomor halaman ditempatkan di sebelah kanan atas, kecuali bab baru
yang tidak diisi nomor halaman.
3. Data yang mendukung penelitian disajikan dalam lampiran yang
disajikan menurut kelompoknya tanpa diberi nomor halaman. Contoh:
Lampiran 1. Pedoman Wawancara
Lampiran 2. Peta Desa Mahak Baru
D. Tabel dan Gambar
Pembuatan dan penomoran Tabel dan Gambar mengikuti ketentuanketentuan
sebagai berikut:
1. Tabel
a. Tabel dalam bagian isi karya ilmiah berisi ringkasan data-data
penelitian yang penting. Data lengkapnya dapat disajikan pada
b. Tabel disajikan di tengah, simetris/sejajar dengan batas tepi kiri dan
kanan pengetikan.
c. Kolom-kolom disusun dengan rapi sehingga mudah dibaca.
d. Jarak antara baris dalam tabel adalah satu spasi.
e. Garis batas tabel tidak melampaui batas tepi kertas.
f. Kolom tabel diletakkan sejajar dengan panjang kertas.
g. Tabel boleh diletakkan di tengah halaman di antara baris-baris
teks. Dalam hal ini jarak tabel dan kalimat di bawahnya adalah dua
h. Di atas garis batas tabel dituliskan nomor dan judul tabel, dengan
Pedoman Penulisan Karya Ilmiah dan Penyusunan Skripsi, PIN, 2008.
1) Jika judul tabel terdiri dari dua baris atau lebih, maka spasi
yang digunakan adalah satu spasi. Baris terakhir judul terletak
dua spasi di atas garis batas atas tabel.
2) Nomor tabel terletak dua spasi di bawah baris terakhir teks.
Nomor tabel terdiri dari dua bagian, bagian pertama menunjukkan
nomor bab tempat tabel itu dimuat, dan bagian kedua
menunjukkan nomor urut tabel pada bab itu. Contoh: Tabel 2.5
menunjukkan bahwa tabel itu ada di BAB II dan tabel
urutan kelima pada bab itu.
i. Tabel yang memerlukan kertas yang lebih besar dari halaman
naskah dapat diizinkan, tetapi sebaiknya hanya tabel yang jika
dilipat satu kali sudah mencapai ukuran halaman naskah yang
dimasukkan dalam teks.
j. Dalam setiap tabel tentang data, di bawah tabel tersebut harus
dicantumkan sumbernya dengan ukuran huruf (font) 10 dengan
spasi tunggal (lihat Lampiran).
2. Gambar
a. Yang dimaksud dengan gambar adalah bagan, grafik, peta, diagram,
atau foto.
b. Garis batas gambar diletakkan sedemikian rupa sehingga garis batas
tersebut tidak melampaui batas tepi kertas.
c. Untuk gambar besar, ukurannya diatur agar sejajar dengan batas tepi
kiri dan kanan pengetikan; sedangkan untuk gambar kecil yang
tampilannya menjadi kurang bagus kalau diperbesar, atur ukuran dan
posisinya agar simetris dengan batas tepi halaman (tidak sejajar, tapi
jarak ke tepi kiri dan kanan sama).
d. Di atas gambar disajikan nomor dan judul gambar, dengan ketentuan:
1) Jika judul gambar terdiri dari dua baris atau lebih, spasi yang
digunakan adalah spasi tunggal. Baris terakhir judul terletak dua
spasi di atas gambar.
2) Nomor gambar terletak dua spasi di bawah baris terakhir teks.
Nomor gambar terdiri dari dua bagian. Bagian pertama
menunjukkan nomor bab tempat gambar itu dimuat, sedangkan
bagian kedua menunjukkan nomor urut tabel pada bab itu. Contoh:
Gambar 2.1 menunjukkan bahwa gambar tersebut adalah gambar
urutan pertama pada Bab II.
e. Gambar yang memerlukan halaman yang lebih besar dari halaman
naskah disajikan sebagai lampiran.
f. Jika ada keterangan gambar, keterangan tersebut ditulis pada tempat
kosong di bawah gambar (tidak diletakkan di halaman lain).
g. Contoh penyajian gambar bisa dilihat dalam Lampiran.
Pemilihan atau penggunaan bahasa merupakan hal yang sangat krusial
dalam penulisan karya ilmiah. Hal ini bertujuan agar apa yang disampaikan oleh
penulis skripsi bisa dipahami oleh pembaca. Oleh karenanya, gunakan bahasa
yang baik dan benar.
Ketentuan penggunaan bahasa dalam penyusunan karya ilmiah adalah
sebagai berikut:
1. Bahasa yang digunakan adalah bahasa Indonesia baku sebagaimana
termuat dalam Pedoman Umum Ejaan Bahasa Indonesia Yang
Disempurnakan (EYD) (lihat Lampiran).
2. Kalimat yang dibuat mesti lengkap, dalam arti ada subyek, predikat,
obyek dan/atau keterangan.
3. Satu paragraf terdiri dari minimal dua kalimat, yakni kalimat inti dan
kalimat penjelas.
4. Istilah yang digunakan adalah istilah Indonesia atau yang sudah di-
5. Istilah (terminologi) asing boleh digunakan jika memang belum ada
padanannya dalam bahasa Indonesia atau bila dirasa perlu sekali (sebagai
penjelas/konfirmasi istilah, diletakkan dalam kurung), dan diketik dengan
menggunakan huruf miring.
6. Kutipan dalam bahasa asing diperkenankan namun harus diterjemahkan
atau dijelaskan maksudnya, dan ditulis dengan huruf miring (italic).
7. Hal-hal yang harus dihindari:
a. Penggunaan kata ganti orang pertama atau orang kedua (saya, aku,
kami, kita, kamu). Pada penyajian ucapan terima kasih di bagian Kata
Pengantar, istilah “saya” diganti dengan “penulis”.
b. Menonjolkan penulis dalam menguraikan penelitian.
c. Pemakaian tanda baca yang tidak tepat.
d. Penggunaan awalan di dan ke yang tidak tepat (harus dibedakan
dengan fungsi di dan ke sebagai kata depan).
e. Memberikan spasi antara tanda hubung atau sebelum koma, titik,
titik koma, titik dua, tanda tanya, tanda kurung, dan sejenisnya.
f. Penggunaan kata yang kurang tepat pemakaiannya dalam penulisan
karya ilmiah.
Beberapa contoh kesalahan yang sering dijumpai dalam penyusunan
skripsi beserta koreksinya adalah sebagai berikut:
Pedoman Penulisan Karya Ilmiah dan Penyusunan Skripsi, PIN, 2008.
Contoh 1: Hubungan Subyek dan Predikat
Contoh 2: di dan ke sebagai kata depan dan awalan
Menurut Ichlasul Amal (1994) mengatakan bahwa pemerintah
Indonesia menghadapi dilema dalam melakukan desentralisasi dan
Menurut Ichlasul Amal (1994), pemerintah Indonesia menghadapi
dilema dalam melakukan desentralisasi dan demokratisasi.
Ichlasul Amal (1994) mengatakan bahwa pemerintah Indonesia
menghadapi dilema dalam melakukan desentralisasi dan
Sistem pemerintahan ditingkat desa telah di sempurnakan. Di lihat
dari perspektif politik, Kepala Desa yang di pilih langsung memiliki
posisi tawar yang lebih di banding Kepala Desa yang di tunjuk.
Karenanya, arus aspirasi otonom dari bawah keatas mengalir deras.
Sistem pemerintahan di tingkat desa telah disempurnakan. Dilihat
dari perspektif politik, Kepala Desa yang dipilih langsung memiliki
posisi tawar yang lebih besar dibanding Kepala Desa yang ditunjuk.
Karenanya, arus aspirasi otonom dari bawah ke atas mengalir deras.
Bagian Pertama: Pedoman Penulisan Karya Ilmiah.
Contoh 3: Penggunaan tanda kurung
Benar: (kata di dalam kurung tanpa spasi)
Contoh 4: Penggunaan huruf besar dan kecil
Contoh 5: Penggunaan tanda baca
Angkatan Bersenjata Republik Indonesia ( ABRI ) telah
direorganisasi menjadi Tentara Nasional Indonesia ( TNI ) dan
Kepolisian Republik Indonesia ( Polri ).
Angkatan Bersenjata Republik Indones (ABRI) telah direorganisasi
menjadi Tentara Nasional Indonesia (TNI) dan Kepolisian Republik
Indonesia (Polri).
Kecamatan long iram terdiri dari beberapa Desa, yang sebagian di
antaranya tidak bisa dijangkau dengan transportasi darat.
Kecamatan Long Iram terdiri dari beberapa desa, yang sebagian di
antaranya tidak bisa dijangkau dengan transportasi darat.
Bagaimanakah hubungan antara identifikasi partai dengan voting
behaviour dalam pemilihan umum ?
Pedoman Penulisan Karya Ilmiah dan Penyusunan Skripsi, PIN, 2008.
Benar: (tanpa spasi sebelum tanda tanya, tanpa titik setelah tanda tanya)
Contoh 7: Jika-maka
Benar: (tanda tanya tanpa spasi dan tidak ada titik setelah tanda tanya)
Bagaimanakan hubungan antara identifikasi partai dengan voting
behaviour dalam pemilihan umum?
Jika pemerintah pusat tidak hanya memberi otonomi administrasi
tapi juga otonomi polittik. Maka daerah otonom akan lebih leluasa
dalam menyelesaikan persolan-persoalan di daerahnya.
Jika pemerintah tidak hanya memberi otonomi administrasi tapi juga
otonomi politik, maka daerah otonom akan lebih leluasa dalam
penyelesaikan persoalan-persoalan di daerahnya.
Bagaimanakan hubungan antara identifikasi partai dengan voting
behaviour dalam pemilihan umum?.
A. Running Notes (Referensi Langsung):
Running notes atau referensi langsung adalah penyebutan sumber yang
dirujuk (referensi) yang diletakkan di teks utama sebuah karya ilmiah. Running
notes dibuat dengan format: ”(Nama keluarga/belakang pengarang Tahun)” atau
”Nama lengkap atau keluarga/belakang (Tahun)”. Contoh:
Jika referensinya dua pengarang atau lebih, pemisahannya memakai tanda ”,”
(koma). Contoh:
Jika referensinya dua buku dengan tahun terbit yang berbeda tapi ditulis oleh
pengarang yang sama, maka penulisannya adalah sebagai berikut:
Partai yang perolehan suaranya kurang dari satu persen
disebut sebagai partai desimal (Haris 2006).
Syamsudin Haris (2001) memberi terminologi ”partai desimal” untuk
partai yang perolehan suara suaranya kurang dari satu persen.
Menurut Harold Crouch (1979, 1988), keterlibatan militer (military
intervention) dalam politik disebabkan oleh faktor internal dan
Pembahasan yang mendalam tentang militer dan politik di Indonesia
banyak dilakukan oleh para ilmuwan politik asing (Crouch 1979,
Jenkins 1986, Sundhausen 1990, Singh 1988), yang pokok
bahasannya bisa dipetakan dalam berbagai perspektif pemikiran
berkenaan dengan hubungan sipil-militer di negara berkembang.
Pedoman Penulisan Karya Ilmiah dan Penyusunan Skripsi, PIN, 2008.
Jika referensinya dua buku dengan tahun terbit berbeda yang ditulis oleh
pengarang yang sama dan buku lainnya oleh pengarang lain, pemisahannya
memakai tanda ”;” (titik koma).
Tanda baca “;” (titik koma) juga dipakai untuk menghindari kekeliruan
penggunaan tanda “,” (koma) dalam pemisahan referensi yang satu dengan
referensi yang lainnya dan dalam referensi yang ditulis oleh tiga pengarang.
Jika referensinya berupa alamat website atau URL (Universal Resource
Locator) yang pendek, running notes bisa dibuat dengan menyebut URL-nya,
yang hyperlinknya dihilangkan (remove hyperlink)3 dan dicantumkan tanggal
aksesnya. Contoh:
3 Hyperlink dihilangkan maksudnya link langsung ke alamat website tersebut ditiadakan
sehingga tidak ada lagi alamat website (URL) berwarna selain hitam dan atau dengan garis
bawah (estetika dan konsistensi teks) dan link tersebut tidak langsung bisa diklik. Untuk
mengaksesnya, URL tersebut harus di-copy dan paste di browser.
Pembahasan tentang peranan militer dalam politik di Indonesia
banyak dilakukan oleh para ilmuwan politik asing (Crouch 1979,
1988; Jenkins 1986; Singh 1988), yang kajian-kajiannya bisa
dipetakan dalam berbagai perspektif pemikiran.
Di wilayah Asia Pasifik, Filipina merupakan salah satu negara
terdepan dan menjadi pionir dalam mengembangkan inovasi untuk
melakukan devolusi pengelolaan sumber daya alam (Dahal &
Capistrano 2006; Pulhin, Inoue & Enters 2007).
Kebijakan terbaru dalam pelembagaan proses devolusi pengelolaan
sumberdaya alam ditulis oleh beberapa pihak (DENR 2003; Magno
2003; Pulhin, Inoue & Enters 2007).
Bagian Pertama: Pedoman Penulisan Karya Ilmiah.
B. Footnotes (Catatan Kaki):
Catatan kaki adalah catatan di kaki halaman yang dipergunakan untuk
memberikan penjelasan tambahan atau mencantumkan URL panjang. Jika di
dalam catatan kaki ada referensi, referensinya dibuat dalam bentuk running
notes. Besar font catakan kaki adalah lebih kecil dari teks utama, yakni dengan
besar font 10.
1. Catatan Kaki Berisi Penjelasan
Catatan kaki bisa digunakan jika penulis ingin memberi penjelasan
tambahan sebuah istilah, frase, kalimat, dan sejenisnya. Pemakaian catatan kaki
dengan penjelasan bisa dilihat dalam contoh berikut:
Menurut Pemerintah Kabupaten Kutai Timur, Gerdabangagri adalah
program pembangunan yang memfokuskan diri pada peningkatan
kualitas sumberdaya manusia, perbaikan ekonomi rakyat, dan
pembangunan pertanian (, diakses 6 Juni 2007).
Dalam bidang pembangunan pertanian, kegiatan diarahkan pada
kegiatan pertanian yang mendukung agribisnis.
Jumlah kabupaten/kota yang ada di Kalimantan Timur terus
bertambah.1 Pertambahan ini tentu punya implikasi terhadap
meluasnya pemanfaatan lahan untuk perkantoran, perumahan, dan
kegiatan bisnis.
1Dalam rentang waktu yang cukup lama (era Orde Baru), kabupaten/ kotamadya
di Kaltim berjumlah enam buah (Balikpapan, Samarinda, Kutai, Bulungan,
Berau, Pasir). Pada pasca Orde Baru, jumlah kabupaten/kota meningkat dratis
menjadi 13 (Paser, Penajam Paser Utara, Balikpapan, Samarinda, Kutai
Kartanegara, Kutai Barat, Kutai Timur, Bontang, Bulungan, Berau, Tarakan,
Malinau, Nunukan), dan baru-baru ini ada penambahan satu kabupaten lagi,
yakni Kabupaten Tanah Tidung, sehingga sekarang terdapat 14 Kabupaten/Kota
di Kalimantan Timur.
Pedoman Penulisan Karya Ilmiah dan Penyusunan Skripsi, PIN, 2008.
2. Catatan Kaki Berisi Penjelasan dan Running Notes
Catatan kaki bisa juga digunakan jika penulis ingin memberi penjelasan
tambahan, lengkap dengan referensinya. Contoh catatan kaki yang menjelaskan
suatu teks lengkap dengan referensinya adalah sebagai berikut:
3. Catatan Kaki Berisi URL Panjang.
Referensi langsung yang berupa alamat website (URL) panjang
dicantumkan di catatan kaki, hyperlinknya dihilangkan dan tanggal aksesnya
dicantumkan. Jika URL-nya tidak cukup dalam satu baris, pemisahan dilakukan
di belakang tanda baca (”/”, ”_”, ”+”, ”=”, dan lain sebagainya), angka, atau
kata tertentu. Contoh:
Secara umum, aksi kolektif (collective action) didefinisikan sebagai
semua aksi yang dilakukan secara kolektif untuk mencapai tujuan
kolektif atau mendapatkan barang-barang/sarana-prasarana kolektif
(collective good2) (Olson 1965, 1971; Marwell & Oliver 1993).
2Beberapa ahli mendefinisikan collective good sebagai barang, fasilitas, saranaprasarana,
dan sejenisnya, yang mana individu-individu tertarik atau tak bisa
lepas dengannya (karena mereka merasa akan memperoleh manfaat darinya) dan
jika diberikan ke atau digunakan oleh orang lain, siapa saja (semua individu)
akan tetap bisa menggunakan atau memanfaatkan collective good itu (Marwell
dan Oliver 1993:4). Lihat juga Oberschall (1997).
Setelah revolusi Amerika dan Perancis, wacana yang muncul adalah
apakah untuk membatasi kediktatoran mayoritas diperlukan adanya
lembaga Senat (Upper Chamber).³
chambers (diakses 15 April 2008).
Mentaati etika ilmiah dalam pengutipan dengan menyebutkan sumber
kutipan akan menghindarkan diri dari perbuatan melakukan plagiasi atau
plagiarisme. Bab ini membahas jenis-jenis kutipan dan ketentuan penyebutan
sumber rujukan, yang di dalamnya meliputi pembahasan cara-cara pengutipan.
A. Jenis-Jenis Kutipan
1. Kutipan Langsung
Kutipan langsung (direct quotation) adalah kutipan hasil penelitian, hasil
karya, atau pendapat orang lain yang penyajiannya sama persis dengan teks
aslinya (yang dikutip). Dalam merujuk sumber kutipan di teks utama, sebutkan
referensinya dengan menulis nama pengarang, tahun penerbitan, dan nomor
a. Jika jumlah kata kutipan tidak lebih dari tiga baris, kutipan tersebut
diketik dengan jarak dua spasi dan diberi tanda petik. Contoh:
b. Jika jumlah kata kutipan lebih dari tiga baris, kutipan diketik pada
garis baru, sejajar dengan awal alinea baru, berjarak satu spasi, dan
tanpa tanda petik:
Ratnawati (2006:148) menegaskan bahwa “Hasil pemilu 1999 dan
pemilu 2004 secara gamblang menunjukkan bahwa PDI-P leading
di Kabupaten Bantul.”
Menurut Miriam Budiardjo (1992:4-5), dalam pemilu yang
menggunakan sistem distrik:
negara dibagi dalam sejumlah besar distrik pemilihan (kecil)
yang kira-kira sama jumlah penduduknya. Jumlah penduduk
distrik berbeda dari satu negara ke negara lain, misalnya di
Inggris jumlah penduduknya kira-kira 500.000 orang dan
India lebih dari 1 juta orang. Karena satu distrik hanya berhak
atas satu wakil, maka calon yang memperoleh suara pluralitas
(suara terbanyak) dalam distriknya menang.
Pedoman Penulisan Karya Ilmiah dan Penyusunan Skripsi, PIN, 2008.
Atau (jika huruf “n” kecil dalam kata “negara” diganti dengan huruf
“N” besar dalam kata “Negara”):
c. Jika kutipan memakai bahasa asing, kutipannya ditulis dalam huruf
miring. Contoh:
d. Jika mengutip bukan dari buku/sumber aslinya, melainkan dari
pengarang lain (mengutip sebuah kutipan), maka tambahkan kata
“dalam” ketika menyebut referensinya. Contoh: Afan Gaffar menulis
sebuah buku dan di dalam bukunya ia mengutip pendapat Giovanni
Sartori; penulis skripsi kemudian mengutip pendapat Sartori yang
terdapat dalam buku Gaffar tersebut; maka penulisan referensinya
adalah sebagai berikut:
Berkenaan dengan peradaban, Huntington (1996:303) mengatakan
sebagai berikut:
The overriding lesson of the history of civilization, however,
is that many things are probable but nothing is inevitable.
Civilizations can and have reformed and renewed themselves.
The central issue for the West is whether, quite apart from
any external challenges, it is capable of stoping and
reversing the internal processes of decay.
Menurut Sartori (dalam Gaffar 1992:37), “[t]he hegemonic party
system neither allows for a formal nor a defacto competition for
power. Other parties are permitted to exist, but as second class,
licensed parties.”
Menurut Miriam Budiardjo (1992:4-5), dalam pemilu yang
menggunakan sistem distrik:
[N]egara dibagi dalam sejumlah besar distrik pemilihan
(kecil) yang kira-kira sama jumlah penduduknya. Jumlah
penduduk distrik berbeda dari satu negara ke negara lain,
misalnya di Inggris jumlah penduduknya kira-kira 500.000
orang dan India lebih dari 1 juta orang. Karena satu distrik
hanya berhak atas satu wakil, maka calon yang memperoleh
suara pluralitas (suara terbanyak) dalam distriknya menang.
Bagian Pertama: Pedoman Penulisan Karya Ilmiah.
2. Kutipan Tidak Langsung
Kutipan tidak langsung (indirect quotation) merupakan kutipan hasil
penelitian, hasil karya, atau pendapat orang lain yang penyajiannya tidak sama
dengan teks aslinya, melainkan menggunakan bahasa atau kalimat
penulis/peneliti sendiri. Dalam pengutipan ini, sumber rujukan harus
disebutkan, baik dengan nomor halaman atau tanpa nomor halaman.
Paling sedikit ada dua jenis kutipan tidak langsung atau ada dua cara
dalam mengutip secara tidak langsung. Pertama, dengan meringkas,
menyimpulkan, atau merujuk pokok-pokok pikiran orang lain. Contoh:
Penyusun skripsi yang meringkas atau merujuk pokok-pokok pikiran (pendapat)
Huntington tentang gelombang demokratisasi di dunia ini dalam bukunya The
Third Wave of Democratization:
Kedua, dengan melakukan paraphrase, yakni pengubahan struktur/susunan
kalimat aslinya menjadi kalimat lain tanpa mengubah isi atau subtansi
kalimat/alinea. Contoh:
Seorang pakar ilmu politik, yang banyak mengamati perilaku partai
politik, mengatakan bahwa “[t]he hegemonic party system neither
allows for a formal nor a defacto competition for power. Other
parties are permitted to exist, but as second class, licensed parties”
(Sartori, dalam Gaffar 1992:37).
Gelombang demokratisasi yang ada di dunia ini bisa dibagi menjadi
tiga periode, yakni demokratisasi gelombang pertama yang
berlangsung antara 1828-1926, demokratisasi gelombang kedua yang
terjadi antara 1943-1962, dan demokratisasi gelombang ketiga yang
dimulai dari tahun 1974 sampai tahun1990-an (Huntington 1991).
Mengingat sekarang masih banyak rejim-rejim otoriter, apakah akan
ada gelombang demokratisasi keempat?
Pedoman Penulisan Karya Ilmiah dan Penyusunan Skripsi, PIN, 2008.
Kalimat asli yang dibuat oleh Miriam Budiardjo:
Kalimat paraphrasenya:
B. Pencantuman Referensi Kutipan atau Sumber Rujukan
Hal-hal yang perlu diperhatikan dalam mencantumkan referensi atau
sumber rujukan sebuah kutipan beserta contoh-contohnya adalah sebagai
1. Ketentuan-ketentuan umum dalam pengutipan sebuah teks:
a. Cantumkan nama pengarang dan tahun terbit dengan format
sebagaimana yang telah disebutkan, yakni “(Nama keluarga/belakang
Tahun)” atau ”Nama lengkap atau keluarga/belakang (Tahun)”. Gelar
pengarang tidak disebutkan; Tahun ditulis dengan angka empat digit.
b. Untuk kutipan langsung, nomor halaman harus disebutkan.
c. Untuk kutipan tidak langsung, nomor halamannya bisa disebutkan
atau bisa juga tidak disebutkan (disesuaikan, bila dirasa perlu, dsb).
d. Gunakan tanda baca “:“ (titik dua) di antara tahun dan nomor
halaman, diketik tanpa spasi.
Berkenan dengan sistem pemilu, Miriam Budiardjo mengatakan:
Pada umumnya kita kenal dua sistem pemilu, masing-masing
dengan beberapa variasinya. Dalam sistem distrik, satu
wilayah (yaitu distrik pemilihan) memilih satu wakil tunggal
(single-member constituency) atas dasar pluralitas (suara
terbanyak). Dalam system proporsional, satu wilayah (yaitu
daerah pemilihan) memilih beberapa wakil (multi-member
contituency), yang jumlahnya ditentukan atas dasar rasio,
misalnya 400.000 penduduk (Budiardjo 1982:4)
Sistem distrik dan sistem proporsional adalah dua jenis sistem
pemilihan umum yang paling populer, yang masing-masing sistem ini
memiliki variannya sendiri-sendiri. Dalam sistem distrik, jumlah
pemenangnya—yang akan menjadi wakil di parlemen—adalah satu
orang, sedangkan dalam sistem proporsional jumlah wakil yang akan
mewakili suatu daerah pemilihan adalah beberapa orang sesuai
dengan proporsi perolehan suaranya (Budiardjo 1982:4).
Bagian Pertama: Pedoman Penulisan Karya Ilmiah.
2. Referensi kutipan bisa diletakkan di awal kalimat, di tengah kalimat, dan
di akhir kalimat/kutipan. Contoh dari masing-masing referensi kutipan
ini adalah sebagai berikut:
Contoh 1 (referensi di awal kalimat):
Contoh 2 (referensi di tengah kalimat):
Contoh 3 (referensi di akhir kalimat/kutipan):
Rozi et al. (2006:5) mengamati bahwa meluasnya pertikaian antar
masyarakat beberapa saat setelah Orde Baru tumbang dikarenakan
“gagalnya upaya-upaya penghentian kekerasan atau dalam beberapa
kasus tampak adanya indikasi ‘pembiaran’ oleh aktor-aktor Negara.”
Berkenaan dengan meluasnya pertikaian antar masyarakat beberapa
saat setelah Orde Baru tumbang, Rozi et al. (2006:5) mengamati
bahwa “gagalnya upaya-upaya penghentian kekerasan atau dalam
beberapa kasus tampak adanya indikasi ‘pembiaran’ oleh aktor-aktor
Rozi dan beberapa ahli mengamati bahwa meluasnya pertikaian antar
masyarakat beberapa saat setelah Orde Baru tumbang dikarenakan
“gagalnya upaya-upaya penghentian kekerasan atau dalam beberapa
kasus tampak adanya indikasi ‘pembiaran’ oleh aktor-aktor Negara”
(Rozi et al. 2006:5).
Pedoman Penulisan Karya Ilmiah dan Penyusunan Skripsi, PIN, 2008.
Penyebutan referensi di akhir kalimat/kutipan seperti tersebut di atas
sering sangat diperlukan dalam kutipan tak langsung (mis. paraphrase)
untuk menunjukkan kepada pembaca tentang bagian mana yang
merupakan pendapat pengarang A, pengarang B, penulis/peneliti, dan lain
sebagainya. Contoh:
3. Jika suatu tulisan mempunyai dua atau tiga penulis, gunakan kata “dan “
dalam teks tetapi gunakan simbol “&“ dalam rujukan referensi langsung
(running notes).
Contoh 1:
Max Weber telah meletakkan prinsip-prinsip dasar birokrasi yang
rasional agar bisa melayani masyarakat dengan baik. Namun birokrasi
yang gemuk dan kompleks, bisa menimbulkan masalah. Dalam
pandangan Osborne dan Plastrik (2001), birokrasi yang gemuk dan
lamban perlu dipangkas agar lebih efisien dan lincah dalam merespon
permintaan layanan dari masyarakat.
Sistem distrik dan sistem proporsional adalah dua jenis sistem
pemilihan umum yang paling populer, yang masing-masing sistem ini
memiliki variannya sendiri-sendiri. Dalam sistem distrik, jumlah
pemenangnya—yang akan menjadi wakil di Dewan Perwakilan
Rakyat—adalah satu orang, sedangkan dalam sistem proporsional
jumlah wakil yang akan mewakili suatu daerah pemilihan adalah
beberapa orang sesuai dengan proporsi perolehan suaranya
(Budiardjo 1982). Mengenai sistem mana yang lebih cocok untuk
diterapkan di suatu negara, hal ini tergantung dari sejarah negara yang
bersangkutan, kesiapan penduduk, geografi wilayah, dan lain
sebagainya (Gaffar 1999).
Bagian Pertama: Pedoman Penulisan Karya Ilmiah.
Contoh 2:
Contoh 3:
4. Untuk dua sampai tiga pengarang, sebutkan nama mereka semuanya
(misalnya: Torgerson, Andrew & Smith 2001), sedangkan untuk empat
atau lebih penulis, gunakan ”et al.” (misalnya: Rozi et al. 2001).
5. Untuk mengutip lebih dari satu tulisan yang ditulis oleh seorang
penulis, gunakan huruf kecil “a, b, c” untuk mengidentifikasi tulisan
yang dipublikasikan pada tahun yang sama oleh penulis yang sama.
Contoh: ”(Thompson 2000a)” dan ”(Thompson 2000b)”. Kemudian
gunakan ”2000a” dan ”2000b” untuk tahun terbitnya dalam Daftar
6. Jika penulisnya adalah korporat, lembaga, atau organisasi yang namanya
cukup panjang, nama lengkap dari korporat, lembaga, atau organisasi ini
ditulis ketika pertama kali disebut dan singkatannya diletakkan dalam
tanda kurung. Untuk selanjutnya, penyebutannya cukup singkatannya
Dalam pandangan Osborne dan Plastrik, birokrasi yang gemuk dan
lamban perlu dipangkas agar lebih efisien dan lincah (Osborne &
Plastrik 2001). Upaya-upaya seperti ini bisa mendorong penciptaan
akuntabilitas dan responsibilitas birokrasi (Thoha 2006).
Kata “strategi” dulunya dipakai di kalangan militer atau dalam
peperangan. Kata ini berasal dari ”kata strategos dari Yunani yang
berarti ’jenderal.’ Jenderal yang baik memulai dengan menyusun
strategi: bukan rencana operasional, tetapi pendekatan yang mampu
mengubah keseimbangan kekuatan di lapangan” (Osborne & Plastrik
Pedoman Penulisan Karya Ilmiah dan Penyusunan Skripsi, PIN, 2008.
saja. Penulisan referensi dalam running notes adalah singkatannya.
7. Sumber dari Majalah/Koran
a. Majalah:
b. Koran:
United Nations Economic and Social Commission for Asia and the
Pacific (UNESCAP) memakai terminologi “governance” dalam
beberapa konteks, seperti corporate governance, national
governance, dan local governance (UNESCAP 2005). Pemakaian
istilah “governance“ dalam beberapa konteks oleh UNESCAP ini
kemudian dirujuk oleh banyak ahli (lihat Holtz 2002, Conyon 2008,
Lee & Yoo 2008, Bauwhede & Willekens 2008).
Peringkat universitas-universitas yang ada di Indonesia berada jauh
di bawah dibandingkan dengan beberapa universitas lain di Asia. UI,
misalnya, masuk dalam peringkat 395, sementara ITB dan
Universitas Gajah Mada masing-masing masuk peringkat 369 dan
60 (Tempo, 17 Februari 2008).
Sebagaimana terjadi di beberapa negara sedang berkembang, di
Indonesia juga ditemukan bahwa bahwa banyak kasus korupsi yang
terjadi atas nama pemberantasan korupsi (Kompas, 11 Maret 2008).
Bagian Pertama: Pedoman Penulisan Karya Ilmiah.
8. Sumber Online
a. Sebuah sumber online dikutip dengan cara yang sama seperti
sumber yang dicetak, yakni dengan mencantumkan nama
penulis/organisasi, nama website, atau pemilik website diikuti oleh
tahun publikasi dan tanggal akses (URL-nya dicantumkan di Daftar
b. Jika hanya ada nama penulis/organisasi tanpa tahun terbit, cantumkan
tahun terbit dengan n.d. (no data) dan tanggal akses (URL-nya
dicantumkan di Daftar Pustaka). Contoh:
c. Jika tidak ada nama penulis/organisasi/pemilik website/nama website
dan tahun penerbitan atau keduanya tidak jelas:
1) Bila URLnya relatif pendek, cantumkan URL-nya dan tanggal
2) Bila URL-nya relatif panjang, cantumkan URL dan tanggal akses
pada catatan kaki (footnote) dengan ukuran huruf 10. Contoh
penulisan: lihat Bab III huruf B nomor 3 pada Bagian Pertama
buku ini.
(Schino 2001, diakses 12 Juni 2007)
(UNESCO 2006, diakses 17 Mei 2007)
(ICG 2008, diakses 12 Maret 2008)
(Amnesty International 2007, diakses 27 Mei 2008)
(Anderson n.d., diakses 8 Maret 2007)
(FAO n.d., diakses 27 Oktober 2006)
(FreedomHouse n.d., diakses 12 Juli 2007)
(, diakses 8 Juli 2007)
(, diakses 27 Maret 2006)
Pedoman Penulisan Karya Ilmiah dan Penyusunan Skripsi, PIN, 2008.
9. Penulisan Hasil Wawancara
a. Mengutip beberapa kata penting dari ucapan narasumber:
Dalam mengutip hasil wawancara, penulis bisa mengutip beberapa
kata kunci/penting yang pendek yang disampaikan oleh narasumber
atau responden guna memberi tekanan atau untuk menunjukkan
”bukti verbal” kepada pembaca. Contoh:
b. Mengutip kalimat yang diucapkan oleh narasumber apa adanya:
Pengutipan kalimat narasumber apa adanya (persis seperti yang
disampaikan oleh narasumber) yang jumlah katanya tidak lebih dari
tiga baris atau lebih dari tiga baris mengikuti aturan penulisan
Kutipan Langsung sebagaimana dijelaskan di depan.
Contoh kutipan wawancara yang tidak lebih dari tiga baris:
Berkenaan dengan kegiatan pembalakan liar (illegal logging),
seorang tokoh masyarakat mengatakan bahwa ”kegiatan illegal
logging di wilayah ini sudah sangat parah, dan upaya untuk
membasminya seperti menegakkan benang basah” (Suparlan,
wawancara, 21 Juli 2007).
Desa ini merupakan basis dari Partai X sehingga tidak
mengherankan bila Partai X selalu menang dalam beberapa kali
Pemilu. Namun dalam Pemilu yang baru saja usai Partai X
dikalahkan secara telak oleh Partai Y. Menurut seorang tokoh
masyarakat, partai ini bisa menang telak karena partai Y melakukan
“serangan fajar“ dengan cara “membagi-bagikan uang“ dalam
jumlah “yang tidak sedikit“ (Anonim, wawancara, 28 Februari
Bagian Pertama: Pedoman Penulisan Karya Ilmiah.
Contoh kutipan wawancara yang lebih dari tiga baris:
c. Merujuk, meringkas, atau menyimpulkan ucapan narasumber:
d. Kutipan wawancara untuk menghindari pengulangan-pengulangan:
Ada perbedaan pendapat tentang hal ini. Sekretaris Desa, Budi
Rahman, mengatakan bahwa semua prosedur sudah dilakukan
(wawancara, 12 Mei 2007), sementara seorang tokoh masyarakat,
Fadjar Susanto, mengatakan bahwa masih ada prosedur yang belum
dilakukan (wawancara, 24 Juni 2007).
Berkenaan dengan kegiatan pembalakan liar (illegal logging),
seorang tokoh masyarakat mengatakan sebagai berikut:
Kegiatan illegal logging di wilayah ini sudah sangat parah,
dan upaya untuk membasminya seperti menegakkan benang
basah. Banyak pihak yang terlibat, mulai dari oknum-oknum
aparat sampai masyarakat sendiri. Semuanya punya alasan
atau logikanya sendiri-sendiri mengapa mereka tetap
melakukan, mendukung, atau menutup mata atas kegiatan
tersebut. Jika hutan itu nanti tandus, apa yang masih bisa kita
wariskan kepada anak cucu kita? (Suparlan, wawancara, 21
Juli 2007).
Sekretaris Desa, Budi Rahman, mengatakan bahwa semua prosedur
sudah dilakukan (wawancara, 12 Mei 2007). Hal senada juga
disampaikan oleh Ketua LPM (wawancara, 15 Mei 2007), Ketua
Kadarkum (wawancara, 24 Juni 2007), dan Ketua PKK (wawancara,
5 Juli 2007).
Pedoman Penulisan Karya Ilmiah dan Penyusunan Skripsi, PIN, 2008.
10. Referensi Komunikasi Personal
Komunikasi personal adalah komunikasi yang dilakukan secara
pribadi/personal dengan narasumber dan bukan berbentuk wawancara
terstruktur atau semi-terstruktur. Komunikasi personal termasuk hasil
percakapan, surat-menyurat, komunikasi melalui email, telepon, dan lain
sebagainya. Sumber rujukan narasumber hanya dicantumkan di teks
utama (tidak dicantumkan di Daftar Pustaka). Contoh:
Di desa yang kelihatannya damai, tentram, dan sejuk ini, situasinya
sebenarnya seperti bara dalam sekam dan berpotensi terjadinya
konflik frontal. Menurut seorang tokoh masyarakat, Budiarso,
konflik yang terpendam ini sudah terjadi sejak lama (komunikasi
personal, 12 Maret 2008). Narasumber lain menjelaskan, pemicu
ketegangan tersebut adalah persaingan pribadi antara dua mantan
calon Kepala Desa, yang memakai isu etnis dalam memobilisasi
massanya (Anonim, komunikasi personal, 27 Mei 2008). Hal ini
dikonfirmasi oleh seorang peneliti dari Italia yang sudah lama
tinggal di desa itu (Jenny Eghenter, komunikasi personal, 3 Juni
A. Ketentuan Umum
Ketentuan-ketentuan umum penulisan Daftar Pustaka dalam sebuah karya
ilmiah adalah berikut:
1. Hanya referensi-referensi yang disebut dalam teks utama yang
dimasukkan dalam daftar referensi. Gunakan judul Daftar Pustaka pada
halaman yang memuat daftar referensi.
2. Referensi-referensi berupa hasil komunikasi personal, wawancara, dan
sejenisnya, tidak dimasukkan dalam Daftar Pustaka (kecuali hasil
wawancara yang dimuat dalam suatu penerbitan).
3. Gelar pengarang tidak dicantumkan.
4. Daftar referensi disusun menurut abjad dengan satu spasi.
5. Ketik baris pertama dari setiap referensi rata kiri, dan baris selanjutnya
masuk ke dalam (hanging) satu sentimeter atau lima spasi.
6. Dari satu referensi ke referensi lainnya diberi jarak dua spasi.
7. Jika referensi dalam Daftar Pustaka terdiri dari berbagai kategori (buku,
dokumen-dokumen, koran/majalah, sumber internet, dsb), kelompokkan
referensinya sebagai berikut:
a. Untuk buku-buku, jurnal, proceedings, laporan penelitian, diktat, dan
sejenisnya, tidak perlu diisi nama kategori (referensi utama)
b. Masukkan referensi berupa Undang-Undang, Peraturan, SK,
dokumen-dokumen, Berita Acara, dan sejenisnya dalam kategori:
c. Masukkan referensi yang berasal dari majalah, koran ke dalam
kategori: Majalah [jika hanya berisi sumber dari majalah], Koran
[jika hanya berisi sumber dari], atau Majalah/Koran [jika berisi
sumber dari majalah dan koran].
d. Masukkan referensi yang berasal dari internet dalam kategori:
Sumber Internet.
e. Dan kategori lainnya (bila dianggap perlu)
B. Ketentuan Khusus:
Ketentuan-ketentuan khusus dalam penulisan Daftar Pustaka dijelaskan
dalam uraian berikut:
1. Referensi dari Buku:
a. Daftar Pustaka disusun menurut urutan abjad.
b. Penyebutan referensi dalam Daftar Pustaka dimulai dengan nama
penulis (nama keluarga/belakang, nama depan) [titik], tahun
publikasi [titik], judul buku dicetak miring [titik], tempat publikasi
[titik dua], penerbit [titik]. Contoh:
Pedoman Penulisan Karya Ilmiah dan Penyusunan Skripsi, PIN, 2008.
c. Buku yang dikarang oleh dua atau tiga pengarang, penulisannya
sebagai berikut berikut:
d. Jika sebuah buku mempunyai empat atau lebih penulis, cantumkan
penulis pertama, diikuti dengan et al. untuk mengindikasikan penulis
e. Jika sebuah buku terdiri tiga pengarang atau lebih dan ada pengarang
yang namanya terdiri dari satu kata (tanpa nama keluarga/belakang),
maka penulisannya memakai tanda titik koma (;) untuk membedakan
pengarang satu dengan lainnya. Contoh:
f. Jika referensinya adalah seorang pengarang dengan dua karya ilmiah
maka nama pengarang tersebut di urutan kedua ditulis dengan
“_____.” (garis bawah panjang [titik], yang artinya sama atau idem)
Ratnawati, Tri. 2006. Potret Pemerintahan Lokal di Indonesia
di Masa Perubahan: Otonomi Daerah Tahun 2000-
2005. Jakarta: Pustaka Pelajar.
Osborne, David, dan Plastrik, Peter. 2004. Memangkas
Birokrasi: Lima Strategi Menuju Pemerintahan
Wirausaha. Jakarta: Penerbit PPM.
Rozi, Syafuan et al. 2006. Kekerasan Komunal: Anatomi
dan Resolusi Konflik di Indonesia. Yakarta: Pustaka
Sulistiyo, Herman; Sulaiman; dan Sulastri, Sri. 2007. Otonomi
Desa di Era Otonomi Daerah. Semarang: Pena Mas.
Setiawan, Hawe; Suranto, Hanif; dan Istianto. 1999. Negeri
Dalam Kobaran Api: Sebuah Dokumentasi Tentang
Tragedi Mei 1998. Jakarta: Lembaga Studi Pers dan
Pembangunan (LSPP).
Bagian Pertama: Pedoman Penulisan Karya Ilmiah.
dan referensinya diurut secara kronologis (tahun terbit tulisan/buku),
bukan secara alfabetis. Contoh:
g. Jika referensi pertama adalah seorang pengarang dengan karya ilmiah
yang dibuat sendiri, dan dalam referensi kedua pengarang ini membuat
karya ilmiah dengan orang lain, maka referensi kedua ditulis dengan
“_____, dan pengarang lain” (garis bawah panjang [koma] dan
pengarang lain). Contoh:
Dengan pola penulisan yang sama, referensi di Daftar Pustaka bisa
seperti di bawah ini:
Sihbudi, M. Riza. 1992. “Politik, Parlemem, dan Oposisi di Ian
Pasca-Revolusi.” Jurnal Ilmu Politik, No. 11, 31-44.
_____. 1998. “Konflik Lebanon: Pertalian Antara Berbagai
Kepentingan.” Jurnal Ilmu Politik, No. 3, 68-81.
Collier, Paul. 1998. “On the Economic Consequences of Civil
War.” Dalam Oxford Economic Papers 51 (1999, 168-
83). Washington DC: The World Bank.
_____, dan Hoeffler, Anke. 1999. Justice-Seeking and Loot-
Seeking in Civil War. Washington DC: The World Bank,
February 17th, 1999.
Collier, Paul. 1998. “On the Economic Consequences of Civil
War.” Dalam Oxford Economic Papers 51 (1999, 168-
83). Washington DC: The World Bank.
_____. 2000. “Doing Well Out of War: An Economic
Perspective.” Dalam Berdal, Mats, dan Malone, David.
M (eds). Greed and Grievance; Economic Agenda in
Civil Wars. Ottawa: Lynne Rienner Publisher.
_____, dan Hoeffler, Anke. 1999. Justice-Seeking and Loot-
Seeking in Civil War. Washington DC: The World Bank,
February 17th.
Pedoman Penulisan Karya Ilmiah dan Penyusunan Skripsi, PIN, 2008.
h. Referensi dengan pengarang yang sama dan tahun terbit yang sama
disusun secara alfabetis dan ditandai dengan huruf kecil (a, b, c) tepat
setelah tahun.
i. Sebuah buku yang ditulis oleh korporat, lembaga atau organisasi
disusun seperti berikut :
j. Untuk buku yang diedit, di dalam Daftar Pustaka referensinya disusun
seperti berikut :
1) Satu orang editor:
2) Lebih dari satu orang editor:
BPS Kutai. 2000a. Kecamatan Long Bagun Dalam Angka 2000
(Long Hubung Sub District in Figure 2000). Tenggarong:
Badan Pusat Statistik Kabupaten Kutai.
_____. 2000b. Kecamatan Long Hubung Dalam Angka 2000
(Long Bagun Sub District in Figure 2000). Tenggarong:
Badan Pusat Statistik Kabupaten Kutai.
The World Bank. 2007. Minding the Gaps: Integrating Poverty
Reduction Strategies and Budgets for Domestic
Accountability. Washington: The World Bank.
United Nations Economic and Social Commission for Asia and
the Pacific (UNESCAP). 2008. Economic and Social
Survey of Asia and the Pacific 2008. Bangkok:
Mar’iyah, Chusnul (ed). 2005. Indonesia-Australia: Tantangan
dan Desempatan dalam Hubungan Politik Bilateral.
Jakarta: Granit.
Dwipayana, AAGN Ary, dan Eko, Sutoro (eds). Membangun
Good Governance di Desa. Yogyakarta: IRE Press.
Bagian Pertama: Pedoman Penulisan Karya Ilmiah.
k. Artikel dalam buku:
Tahun terbit referensi untuk artikel dalam buku hanya ditulis satu kali
(karena umumnya sama), kecuali disebutkan bahwa tahun terbit
artikel untuk pertama kalinya (atau copyrightnya) berbeda dengan
tahun terbit buku.
2. Referensi dari Diktat/Bahan Ajar:
3. Referensi dari Terbitan Berkala Ilmiah (Jurnal Ilmiah, dsb)
a. Jika Volume dan Nomor terbitannya lengkap, penyebutannya: nama
jurnal, volume, nomor (dalam kurung), halaman.
b. Jika tidak ada Volume-nya:
4. Referensi dari Majalah
Penulisan referensi yang bersumber dari majalah adalah sebagai berikut :
a. Jika ada nama pengarangnya:
Linz, Juan, dan Stephan, Alfred. 2001. ”Some Thought on
Decentralization, Devolution, and the Many Varieties of
Federal Arrangements.” Dalam Liddle, R. William (ed).
Crafting Indonesian Democracy. Bandung: Penerbit
Abdullah. 2001. Sistem Kepartaian. Bahan Ajar. Samarinda:
Program S1 Pemerintahan Integratif.
Blanton, Shannon Lindsey. 1999. “Instruments of Security or
Tools of Repession? Arms Imports and Human Rights
Conditions in Developing Countries.” Journal of Peace
Research 36(2):233-244.
Budiardjo, Miriam. 1992. “Sistem Pemilu dan Pembangunan
Politik.” Jurnal Ilmu Politik, No. 11, 3-27.
Basri, Muhammad Chatib. 2008. “Mosaik Modal, 10 Tahun
Setelah Krisis.” Tempo, 18 Mei, 100-101.
Pedoman Penulisan Karya Ilmiah dan Penyusunan Skripsi, PIN, 2008.
b. Jika tidak ada nama pengarangnya:
5. Referensi dari Surat Kabar/Koran
a. Jika ada nama pengarangnya:
b. Jika tidak ada nama pengarangnya :
6. Referensi dari Abstrak
Jika mengutip dari abstrak, penulisannya sama halnya dengan mengutip
dari majalah atau jurnal, tetapi dengan mencantumkan kata “Abstrak”
dalam tanda kurung “[ ]”.
7. Referensi dari Review Buku
Contoh berikut merupakan cara menulis referensi yang berasal dari
review sebuah buku.
8. Hasil Wawancara Tertulis dalam Sebuah Penerbitan
Referensi hasil wawancara yang dimuat dalam sebuah tulisan, penulisan
referensinya adalah sebagai berikut:
Tempo, 18 Mei 2008.
Syamsuddin, Amir. 2008. “Penemuan Hukum ataukah Perilaku
’Chaos’?” Kompas, 4 Januari.
Kaltim Post, 7 Maret 2008.
Rosen, G. 2000. “Public School Alternatives: The Voucher
Controversy” [Abstract]. Current, 423, 3-8.
Darmadi, Yusril. 2000. “Menjelajah Tafsir Sejarah” [Review
buku: Penjelasan Sejarah]. Tempo, 30 Maret.
Indrawati, Sri Mulyani. 2008. “Kelompok Menengah-Bawah
Akan Badly Hurt” [Wawancara]. Tempo, 25 Mei, 243-244.
Bagian Pertama: Pedoman Penulisan Karya Ilmiah.
9. Sumber dari Internet
a. Artikel online yang referensinya lengkap
b. Artikel Jurnal yang online
c. Artikel online yang referensinya tidak lengkap
1) Tanpa tempat terbit dan penerbit:
2) Tanpa tahun terbit, tempat terbit, dan atau penerbit:
10. Online Massages
Teks-teks atau pesan-pesan online yang dapat diakses oleh pembaca
—seperti pesan-pesan yang dikirimkan pada sebuah newsgroup,
discussion/mailing list (mail forum), signboard atau forum online
(web forum), dan lain sebagainya—daftar referensi di dalam Daftar
Pustaka dibuat sebagai berikut:
Collier, Paul, dan Hoeffler, Anke. 1999. Justice-Seeking and
Loot-Seeking in Civil War. Washington DC: The World
(diakses 23 Agustus 2003).
Ernada, Sus Eko. 2005. “Challenges to the Modern Concept of
Human Rights.” Jurnal Sosial-Politika 6(11):1-12.

1eko.pdf (diakses 4 Maret 2007).
Levy, Marc. 2000. Environemental Scarcity and Violent Conflict:
A Debate.
PROGRAMS/DIS/ECS/report2/ debate.htm (diakses 4 Juli
Aditjondro, George. n.d. The Political Economy of Violence in
Maluku,Indonesia. (diakses
21 September 2001).
Pedoman Penulisan Karya Ilmiah dan Penyusunan Skripsi, PIN, 2008.
11. Cakram Digital (CD, VCD, DVD, dsb)
12. Pita Kaset Video (Videotape)
Sius, Nugra. 2007. Melihat Wajah Kaltim Hari Ini. http://group., 6 Agustus
(diakses 6 Januari 2008).
Care International. 2001. Forest Resource Management for
Carbon Suguestration [VCD]. Samarinda, Jakarta: Care
Walhi. n.d. Hari Esok Yang Menghilang [DVD]. Jakarta:
Wahana Lingkungan Hidup (Walhi).
Braakman, Lydia, dan Edwards, Karen. n.d. The Art of Building
Facilitation Capacities [Videotape]. Bangkok, Thailand:

Harry Firman
1. Karya Ilmiah
Suatu karya ilmiah (scientific paper) adalah laporan tertulis dan dipublikasi
yang memaparkan hasil penelitian atau pengkajian yang telah dilakukan oleh
seseorang atau sebuah tim dengan memenuhi kaidah dan etika keilmuan yang
dikukuhkan dan ditaati oleh masyarakat keilmuan. Terdapat berbagai jenis
karangan ilmiah, antara lain laporan penelitian, makalah seminar atau simposium ,
artikel jurnal, yang pada dasarnya kesemuanya itu merupakan produk dari
kegiatan ilmuwan. Data, simpulan, dan informasi lain yang terkandung dalam
karya ilmiah tersebut dijadikan acuan (referensi) bagi ilmuwan lain dalam
melaksanakan penelitian atau pengkajian selanjutnya.
Di perguruan tinggi, khususnya jenjang S1, mahasiswa dilatih untuk
menghasilkan karya ilmiah, seperti makalah, laporan praktikum, dan skrispsi
(tugas akhir). Yang disebut terakhir umumnya merupakan laporan penelitian
berskala kecil tetapi dilakukan cukup mendalam. Sementara itu makalah yang
ditugaskan kepada mahasiswa lebih merupakan simpulan dan pemikiran ilmiah
mahasiswa berdasarkan penelaahan terhadap karya-karya ilmiah yang ditulis
pakar-pakar dalam bidang persoalan yang dipelajari. Penyusunan laporan
praktikum ditugaskan kepada mahasiswa sebagai wahana untuk mengembangkan
kemampuan menyusun laporan penelitian. Dalam beberapa hal ketika mahasiswa
melakukan praktikum, ia sebetulnya sedang melakukan “verifikasi” terhadap
proses penelitian yang telah dikerjakan ilmuwan sebelumnya. Kegiatan praktikum
didesain pula untuk melatih keterampilan dasar untuk melakukan penelitian.
2. Sitematika Karya Ilmiah
Sistematika suatu karya ilmiah sangat perlu disesuaikan dengan sistematika
yang diminta oleh media publikasi (jurnal atau majalah ilmiah), sebab bila tidak
sesuai akan sulit untuk dimuat. Sedangkan suatu karya ilmiah tidak ada artinya
sebelum dipublikasi. Walaupun ada keragaman permintaan penerbit tentang
sistematika karya ilmiah yang akan dipublikasi, namun pada umumnya meminta
penulis untuk menjawab empat pertanyaan berikut: (1) Apa yang menjadi
masalah?; (2) Kerangka acuan teoretik apa yang dipakai untuk memecahkan
masalah?; (3) Bagaimana cara yang telah dilakukan untuk memecahkan masalah
itu?; (4) Apa yang ditemukan?; serta (5) Makna apa yang dapat diambil dari
temuan itu?
Paparan tentang apa yang menjadi masalah dengan latar belakangnya biasanya
dikemas dalam bagian Pendahuluan. Paparan tentang kerangka acuan teoretik
yang digunakan dalam memecahkan masalah umumya dikemukakan dalan bagian
dengan judul Kerangka Teoritis atau Teori atau Landasan Teori , atau Telaah
Kepustakaan, atau label-label lain yang semacamnya. Paparan mengenai apa yang
dilakukan dikemas dalam bagian yang seringkali diberi judul Metode atau
Metodologi atau Prosedur atau Bahan dan Metode. Jawaban terhadap pertanyaan
apa yang ditemukan umumnya dikemukakan dalam bagian Temuan atau Hasil
Penelitian. Sementara itu paparan tentang makna dari temuan penelitian
umumnya dikemukakan dalam bagian Diskusi atau Pembahasan.
Tentu saja sistematika karya ilmiah ini tidak baku, atau harga mati.
Sistematika karya ilmiah sangat bergantung pada tradisi masarakat keilmuan
dalam bidang terkait, jenis karya ilmiah (makalah, laporan penelitian, skripsi).
Dalam suatu karya ilmiah yang mempunyai tingkat keformalan yang tinggi,
seperti misalnya skripsi, sistematika penulisan lebih baku, dan beberapa paparan
lainnya sering diminta dari mahasiswa, seperti seperti Kesimpulan dan
Rekomendasi (Saran-Saran) pada bagian akhir, atau Kata Pengantar pada bagian
Banyak jurnal dan majalah meminta abstrak, yakni rangkuman informasi yang
ada dalam dokumen laporan, makalah, atau skripsi, lengkapnya. Abstrak yang
ditulis secara baik memungkinkan pembaca mengenali isi dokumen lengkap
secara secara cepat dan akurat, untuk menentukan apakah isi dokumen sesuai
dengan bidang minatnya, sehingga dokumen tersebut perlu dibaca lebih lanjut.
Abstrak sebaiknya tidak lebih dari 250 kata (dalam satu atau dua paragraf),
menyatakan secara singkat tujuan dan lingkup penelitian/pengkajian, metode yang
digunakan, rangkuman hasil, serta kesimpulan yang ditarik.
3. Laporan Praktikum
Dalam tradisi pendidikan tinggi dalam bidang sains, kegiatan praktikum
menjadi bagian penting dari program pendidikan. Hal ini disebabkan oleh
pentingnya peranan kegiatan praktikum dalam mengembangkan kompetensi ahli
sains. Praktikum menjadi wahana untuk: (1) Pemantapan pengetahuan teoretis
yang telah dipelajari; (2) Pengembangan keterampilan menggunakan peralatanperalatan
standar laboratorium sains; (3) Pembinaan sikap ilmiah dalam bekerja
di laboratorium sains; dan (4) Pengembangan kemampuan menulis laporan
kegiatan laboratorium. Kombinasi antara pemahaman yang kuat aspek-aspek
teoretis, kemampuan merancang eksperimen/penyelidikan untuk memecahkan
masalah dengan mengaplikasikan pengetahuan teoretik tadi, keterampilan bekerja
di laboratorium, serta kemampuan menulis laporan sehingga layak dipublikasi,
merupakan unsur-unsur penting dari kompetensi seorang ilmuwan.
Seperti halnya karya ilmiah lainnya, laporan praktikum mesti memenuhi
kriteria: (1) Nalar (logic); (2) Kejelasan (clarity); dan (3) Presisi (precision).
Dalam kaitan ini kecermatan berbahasa dalam menulis laporan sangat penting
peranannya, karena faktor ini dapat membuat suatu laporan memenuhi tiga kriteria
tadi. Perlu diingat bahwa sebuah laporan praktikum adalah wahana penyampaian
pesan dari mahasiswa sebagai komunikator kepada pembaca laporan itu (dosen
dan mahasiswa lain) tentang: (1) Masalah apa yang diselidiki; (2) Pengetahuan
teoretis apa yang dijadikan landasan bagi penetapan prosedur/metode
penyelidikan: (3) Apa yang dilakukan untuk pengumpulan data dan informasi; (4)
Data apa yang terkumpul dan temuan apa yang dihasilkan dari analisis data; (5)
Pembahasan (diksusi) tentang hasil yang diperoleh, khususnya mengenai
implikasi temuan ; (6) Kesimpulan apa yang dapat ditarik.
Sesuai dengan fungsi laporan praktikum yang dikemukakan di atas, laporan
praktikum umumnya terdiri atas komponen-komponen: (1) Tujuan, yang
memaparkan permasalahan apa yang akan diselidiki; (2) Teori, yang memaparkan
konsep dan prinsip yang melandasi penyelidikan yang dilakukan; (3) Alat dan
bahan, yang merupakan paparan tentang jenis alat dan bahan yang dipakai, baik
nama maupun ukuran. Apabila alat ukur elektronik tertentu dipergunakan,
hendaknya disertakan merk dan nomor serinya. Bahan kimia perlu dilaporkan
dengan konsentrasinya (bila larutan) dan kemurniannya (bila zat murni); (3)
Prosedur percobaan, yang memaparkan tahap-demi tahap yang dilakukan; (4)
Hasil Percobaan , yang mengungkapkan data yang telah ditabulasi, hasil analisis
data, baik secara statistik maupun tidak, serta temuan-temuan penting percobaan
sebagai hasil analisis data; (5) Pembahasan, yang mengungkapkan rasionalisasi
(penjelasan yang masuk akal) terhadap berbagai temuan yang menarik, misalnya
perbedaan antara prediksi teoretis dengan realita yang diamati; (6) Kesimpulan ,
sebagai pernyataan singkat yang mengungkapkan hasil penyelidikan secara
4. Menuliskan Daftar Pustaka
Karya ilmiah perlu dilengkapi dengan daftar pustaka, yang memaparkan karya
ilmiah lain yang digunakan sebagai rujukan. Agar dapat ditelusuri orang lain
penulisan karya ilmiah rujukan tersebut perlu memuat nama pengarang, judul
karya ilmiah, tahun penerbitan, serta penerbitnya. Tata cara penulisan daftar
pustaka perlu juga memberikan isyarat apakah karya ilmiah yang dirujuk itu
berupa buku, jurnal, makalah seminar, laporan penelitian yang tidak dipublikasi,
dokumen Web, dll. Oleh karenanya ada tata cara yang ditetapkan untuk
menuliskan daftar pustaka. Namun demikian terdapat banyak versi tata cara
penulisan daftar pustaka, bergantung pada tradisi yang dipegang oleh masyarakat
keilmuan dalam masing-masing bidang. Tata cara penulisan daftar pustaka yang
disarankan da lam “Pedoman Penulisan Karya Ilmiah” di UPI diadopsi sebagian
besar dari tata cara yang ditetapkan “American Psychological Association
(APA)”. Tata cara ini berbeda dengan yang ditetapkan oleh American Chemical
Sosiety, yang keduanya juga berbeda dari tata cara yang ditetapkan oleh Chemical
Society of Japan (CJS). Namun, untuk penulisan karya ilmiah dalam konteks
pendidikan di UPI, mahasiswa diwajibkan mengikuti pedoman yang ditetapkan
Tata cara apapun dapat saja dipakai asalkan pemakaiannya konsisten. Namun
demikian apabila karya ilmiah kita ingin dipublikasikan dalam jurnal tertentu, kita
harus menyesuaikan diri dengan tata cara penulisan daftar pustaka yang ditetapkan
oleh redaksi jurnal tersebut.
Akhadiah, S., Arsjad, M. G., Ridwan, S. H. (1988). Pembinaan kemampuan menulis
bahasa Indonesia. Jakarta: Penerbit Erlangga.
Day, R. A. (1983). How to write and publish a scientific paper. Philadelphia: ISI Press.
Universitas Pendidikan Indonesia (2000). Pedoman penulisan karya ilmiah (laporan
buku, makalah, skripsi, tesis, disertasi).

Fakultas Teknologi Industri
Universitas Gunadarma
Petunjuk Penulisan Ilmiah 2 FTI Gunadarma 2009
Fakultas Teknologi Industri
Universitas Gunadarma
Tujuan pembuatan Tulisan Ilmiah adalah melatih mahasiswa menuangkan
hasil pengamatan atau pembuatan sesuatu atau pengalaman kerja dalam bentuk
sebuah laporan tertulis berdasarkan kaidah penelitian ilmiah.
Isi dari Penulisan Ilmiah diharapkan memenuhi aspek-aspek di bawah ini :
1. Relevan dengan jurusan dari mahasiswa yang bersangkutan.
2. Mempunyai pokok permasalahan dan batasan yang jelas.
3. Masalah dibatasi, sesempit mungkin. Memenuhi kaidah penelitian ilmiah.
Susunan struktur Tulisan Ilmiah adalah sebagai berikut :
1. Bagian Awal
2. Pendahuluan
3. Tinjauan Pustaka / Landasan Teori.
4. Hasil Penelitian dan Analisa Bagian Pokok
5. Kesimpulan (& Saran)
6. Bagian akhir
1. Bagian Awal
Bagian Awal, terdiri atas :
- Halaman Judul
Ditulis sesuai dengan cover depan Tulisan Ilmiah standar Universitas
- Lembar Originalitas & Publikasi
Berisi tentang pernyataan keaslian pembuatan tulisan ilmiah serta kerelaan
untuk dipublikasikan oleh Universitas Gunadarma.
- Lembar Pengesahan
Dituliskan Judul PI, Nama, NPM, NIRM, Tanggal Sidang, Tanggal Lulus,
dan tanda tangan Pembimbing, koordinator PI, serta Ketua Jurusan.
- Abstraksi
Berisi ringkasan dari penulisan. Maksimal 1 halaman. (Dalam bahasa
Indonesia dan Inggris)
- Kata Pengantar
Berisi ucapan terima kasih kepada pihak-pihak yang ikut berperan dalam
pelaksanaan penelitian dan penulisan ilmiah (a.l. Rektor, Dekan, Ketua
Jurusan, Pembimbing, Perusahaan), dll.
- Daftar Isi.
- Daftar Tabel 
- Daftar Gambar Bila ada
Petunjuk Penulisan Ilmiah 3 FTI Gunadarma 2009
- Daftar Lampiran 
2. Pendahuluan
Pendahuluan menguraikan pokok persoalan. Terdiri dari :
- Latar Belakang Masalah
Menguraikan mengapa penulis sampai kepada pemilihan topik
permasalahan yang bersangkutan.
- Ruang Lingkup
Memberikan batasan yang jelas bagian mana dari persoalan yang dikaji .
- Tujuan
Menggambarkan hasil yang diharapkan dari penelitian ini dengan
memberikan jawaban terhadap masalah yang diteliti.
- Metode Penelitian
Bagian metode penelitian menjelaskan secara rinci setiap kegiatan yang
dilakukan untuk menjawab tujuan yang sudah diuraikan pada bab 1. Bagian
ini juga menjelaskan peralatan dan bahan yang dibutuhkan dalam penelitian
(jika ada). Inti dari bagian ini adalah pembaca dapat melakukan ulang persis
seperti peneliti lakukan berdasarkan uraian yang diberikan peneliti dalam
bagian ini. Semua langkah-langkah yang dilakukan tidak boleh ada yang
ditutupi dan dijelaskan secara kronologis dan sistematis.
Contoh bagian Metode Penelitian yang dapat digunakan sebagai rujukan
(tidak mutlak harus seperti ini, tergantung dari kebutuhan masingmasing).
Perangkat yang dibutuhkan
Contoh :
Penelitian ini membutuhkan perangkat keras dan perangkat lunak. Perangkat
keras yang dibutuhkan adalah satu (1) unit komputer pribadi lengkap dengan
spesifikasi minimum………. Perangkat lunak yang dibutuhkan
Prosedur Pembuatan Aplikasi
Pada bagian ini dijelaskan prosedur pembuatan aplikasi dengan detail,
bukan pembuatannya.
Uji Coba Aplikasi
Dijelaskan dengan detail bagaimana uji coba aplikasi dilakukan dan apa
yang diamati dalam uji coba tersebut.
- Sistematika Penulisan
Memberikan gambaran umum dari bab ke bab isi dari Penulisan Ilmiah.
3. Tinjauan Pustaka
Menguraikan teori-teori yang menunjang tulisan/ penelitian (definisi,
pengertian, dll), yang bisa diperkuat dengan menunjukkan hasil penelitian
Petunjuk Penulisan Ilmiah 4 FTI Gunadarma 2009
sebelumnya. Dapat pula ditambahkan Tool/Program penunjang yang digunakan
untuk membantu penelitian, sebatas sejarah perkembangan, kelebihannya,
keuntungan dan keterbatasan tool. Tidak perlu memasukkan manualnya.
Dianjurkan untuk memasukkan minimal satu artikel (dari jurnal/ prosiding)
yang mendukung.
4. Gambaran Umum Perusahaan (untuk yang melakukan penelitian / kerja
praktek di perusahaan)
Menguraikan secara singkat profil perusahaan tempat dilakukannya kerja
praktek/penelitian. Dibuat bab tersendiri (tidak termasuk dalam landasan teori).
5. Analisa & Hasil Penelitian atau Perancangan & Implementasi
Bagian ini dapat dipecah menjadi beberapa bab (misal Bab III dan Bab IV)
tergantung kebutuhan.
- Hasil Penelitian (Analisa Perusahaan)
Menguraikan hasil penelitian yang mencakup semua aspek yang terkait
dengan penelitian.
- Perancangan & Implementasi.
Menguraikan tentang perancangan dari aplikasi yang akan dibuat, dapat
berupa tampilan rancangan tata letak (layout) input, output, menguraikan
bagaimana cara membuat aplikasi tersebut, berikut tampilan hasilnya. Setiap
hasil dicapai dideskripsikan dan dapat didukung oleh gambar ataupun tabel.
Spesifikasi perangkat keras dan perangkat lunak disebutkan untuk
penggunaan akhir dari aplikasinya.
6. Kesimpulan (dan Saran)
Bab ini bisa terdiri dari Kesimpulan saja atau ditambahkan Saran.
- Kesimpulan
Berisi jawaban dari masalah yang diajukan penulis, yang diperoleh dari
- Saran
Ditujukan kepada pihak-pihak terkait, sehubungan dengan pengembangan
hasil penelitian.
7. Bagian Akhir
- Daftar Pustaka
Berisi daftar referensi yang dapat berupa buku, jurnal ilmiah, majalah, dll.,
yang digunakan dalam penyusunan Tulisan Ilmiah.
- Daftar Simbol
Berisi deretan simbol-simbol yang digunakan di dalam penulisan, lengkap
dengan keterangannya.
- Lampiran
Petunjuk Penulisan Ilmiah 5 FTI Gunadarma 2009
Penjelasan tambahan, dapat berupa uraian, program, gambar, perhitunganperhitungan,
grafik, atau tabel, yang merupakan penjelasan rinci dari apa
yang disajikan di bagian-bagian terkait sebelumnya.
1. Penomoran Bab serta Subbab
- Bab dinomori dengan menggunakan angka latin.
- Subbab dinomori dengan menggunakan angka latin dengan mengacu pada
nomor bab/subbab dimana bagian ini terdapat.
Contoh :
2.1. Judul Subbab
2.2. Judul Subbab
2.2.1. Judul Sub-Subbab
- Penulisan nomor dan judul bab di tengah dengan huruf besar, ukuran font
14, tebal.
- Penulisan nomor dan judul subbab dimulai dari kiri, dimulai dengan huruf
besar, ukuran font 12, tebal.
2. Penomoran Halaman
- Bagian Awal, nomor halaman ditulis dengan angka romawi huruf kecil
(i,ii,iii,iv,…). Posisi di tengah bawah (2 cm dari tepi kertas). Khusus untuk
lembar judul dan lembar pengesahan, nomor halaman tidak perlu
ditampilkan, tapi tetap dihitung.
- Bagian Pokok, nomor halaman ditulis dengan angka latin. Halaman pertama
dari bab pertama adalah halaman nomor satu. Peletakan nomor halaman
untuk setiap awal bab di bagian bawah tengah, sedangkan halaman lainnya
di pojok kanan atas.
- Bagian akhir, nomor halaman ditulis di bagian bawah tengah dengan angka
latin dan merupakan kelanjutan dari penomoran pada bagian pokok.
3. Judul dan Nomor Gambar/Grafik/Tabel
- Judul gambar/grafik diletakkan di bagian bawah tengah dari gambar. Jika
gambar diperoleh dari pustaka yang menjadi referensi, maka sumbernya
disebutkan dengan menyantumkan nama Penulis dan Tahun Terbitnya.
Petunjuk Penulisan Ilmiah 6 FTI Gunadarma 2009
Gambar 3.6. Blok Diagram Uji Harris/NRL
(Sumber: Cain et al., 2003)
- Judul tabel diletakkan di sebelah atas tengah dari tabel. Jika tabel diperoleh
dari pustaka yang menjadi referensi, maka sumbernya disebutkan dengan
menyantumkan nama Penulis dan Tahun Terbitnya. Tabel diusahakan tidak
Tabel 3.1. Rasio Pendekatan Terbaik untuk Algoritma Pewarnaan Ganda dari
Beberapa Kelas Graph (Sumber: Kchikech M. dan O. Togni, 2006)
Graph Rasio Pendekatan
k-colorable [5]
Biparti 1[10]
Outerplanar 1[12]
Triangular Mesh
2th power triangular mesh H2
[2], 2
pth power triangular mesh Hp (p3) 4[6], 3
pth power square mesh (p2) 2
(G H)p ; Gp Hp , G adalah path; H adalah cycle 3
pth power toroidal mesh 4
- Penomoran tergantung pada bab yang bersangkutan.
Contoh : Gambar 3.1 berarti gambar pertama yang ada di Bab 3.
4. Penulisan Daftar Pustaka
- Dituliskan secara alfabetik dan diberi nomor urut.
Petunjuk Penulisan Ilmiah 7 FTI Gunadarma 2009
- Ditulis menurut kutipan-kutipan
- Nama pengarang asing ditulis dengan format:
Nama Keluarga, Nama Depan.
Nama pengarang Indonesia ditulis dengan format:
Nama Depan + Nama Keluarga
- Gelar tidak perlu disebutkan.
- Setiap pustaka diketik rata kiri dengan jarak satu spasi, tapi antara satu
pustaka dengan pustaka lainnya diberi jarak dua spasi.
- Bila terdapat lebih dari tiga pengarang, cukup ditulis pengarang pertama saja
dengan tambahan ‘et al’.
- Tahun terbit disarankan minimal tahun 2004 (maksimal 5 tahun di
- Selain Buku Teks, sumber pustaka lain yang dapat dicantumkan adalah
artikel dari wikipedia, internet non formal, journal/prosiding elektronik.
Untuk pustaka yang diperoleh melalui internet selain tahun terbit
dicantumkan pula Tanggal Akses.
- Penulisan daftar pustaka tergantung jenis informasinya yang secara umum
memiliki urutan sebagai berikut :
Untuk buku teks:
Nama Pengarang, Judul Karangan (digarisbawahi / tebal / miring), Edisi,
Nama Penerbit, Kota Penerbit, Tahun Penerbitan.
Untuk artikel dari jurnal ilmiah atau prosiding:
Nama Pengarang, “Judul Artikel”, Nama Jurnal Ilmiah/Prosiding
(digarisbawahi / tebal / miring), Nomor, Volume, Edisi, Penerbit, Kota,
Tahun, Halaman.
Contoh : Berikut adalah contoh penulisan pustaka berupa buku ([1], [2]) dan
jurnal ilmiah ([3]).
1. Date, C.J., An Introduction To Database Systems, 6th ed., Addison
Willey Publishing Wesley Company, Inc., Reading Massachusetts,
2. Anonim, Sistem Pemerintahan di Indonesia, Cetakan Pertama, PT.
Gunung Agung, Jakarta, 2005.
3. Cattell R.G.G. dan Skeen.J., “Object Operation Benchmark”. ACM
Trans. Database Systems, 17, 1992, pp. 1-31.
Petunjuk Penulisan Ilmiah 8 FTI Gunadarma 2009
Untuk jurnal ilmiah, jika ada, nama dan kota penerbit dapat dicantumkan di
antara volume dan halaman, nama jurnal digarisbawah / tebal / miring,
seperti contoh berikut:
[4] Owsley, N. L., ”Sonar Array Processing”, Array Signal Processing, S.
Haykin, Ed, Englewood Cliffs, NJ:Prentice-Hall, 1985, Ch. 3, pp. 115-
[5] Kchikech M. dan O. Togni, ”Approximation Algorithms for
Multicoloring Planar Graphs and Powers of Square and Triangular
Meshes”, Discrete Mathematics and Theoretical Computer Science,
Vol. 8, Nancy, France, 2006, pp. 159-172.
Contoh penulisan pustaka yang ditulis oleh lebih dari tiga penulis :
6Stoica, I., et al., “A Proportional Share Resource Allocation Algorithm
for Real-Time, Time-Shared Systems”, Proceedings Real-Time Systems
Symposium, IEEE Comp. Press, Desember, 1996, pp. 288 – 299.
Contoh penulisan pustaka yang diambil melalui Internet :
[7] Galagher, P. R. Jr., “A Guide To Understanding Audit In Trusted
2.html, 1997, Tanggal Akses: 1 Juni 1988.
5. Pengutipan
Agar pengutipan menjadi sederhana, judul materi yang diacu tidak perlu
diletakkan di bagian bawah pada halaman yang bersangkutan, melainkan cukup
dengan memberikan nomor urut acuan dari daftar pustaka, sbb :
………………..(kutipan)………………… 3.berarti kutipan diambil dari
buku ke tiga dari daftar pustaka.
- Jika kutipan kurang atau sama dari tiga baris, bagian awal dan akhir kutipan
diberi tanda kutip, spasi tetap biasa.
- Kutipan yang lebih panjang dari tiga baris tidak perlu diberi tanda kutip, tapi
diketik dengan jarak satu spasi dengan indent yang lebih dalam 7 ketuk pada
bagian kiri.
6. Format Pengetikan
Kertas A4
Margin Atas 4 cm
Kiri 4 cm
Bawah 3 cm
Kanan 3 cm
Spasi Abstrak 1 spasi
Teks 1,5 spasi
Daftar Pustaka 1 spasi
Huruf Jenis Times New Roman
Petunjuk Penulisan Ilmiah 9 FTI Gunadarma 2009
Ukuran Huruf Judul Bab 14 pt – Bold
Judul Subbab 12 pt – Bold
Teks 12 pt – Normal
7. Hasil Tulisan / Kerja Praktek :
- Diseminarkan dengan membawa bahan/materi presentasi yang dibuat dalam
format file presentasi, baik dalam bentuk softcopy (disimpan dalam flashdisk/
CD) maupun dalam bentuk hardcopy (dicetak pada lembar plastik transparan)
- Dijilid berbentuk buku (4 eksemplar, boleh asli atau fotocopy) dengan jumlah
halaman paling sedikit 12 (dua belas) halaman tidak termasuk cover, halaman
judul, daftar isi, kata pengantar dan daftar pustaka
- Diketik dengan menggunakan aplikasi pengolah kata legal atau open source
antara lain : Open Office, LaTeX, dsb.
- Dicetak dengan printer (dianjurkan dengan LASER PRINTER)
8. Ketentuan Isi CD Untuk PI yang Akan Diserahkan ke Perpustakaan
Mulai tahun 2003, untuk semua angkatan yang telah lulus sidang PI, file yang
diserahkan ke perpustakaan harus dalam format PDF (*.PDF). Dalam rangka
mengisi repository Universitas Gunadarma, file yang perlu diserahkan dibuat
dalam 2 format, yaitu file PDF yang terpisah (c.) dan file full PDF (nama
filenya : NPM.PDF).
Susunan Isi File Tulisan Ilmiah yang terpisah, terdiri dari :
1. COVER.pdf
2. LEMBAR PENGESAHAN.pdf file boleh terpisah atau dijadikan satu
4. BAB I.pdf , …
5. BAB II.pdf, …… (file terpisah untuk setiap bab)
6. ABSTRAK.pdf
8. DAFTAR TABEL.pdf file boleh terpisah ataupun dijadikan satu
Ketentuan untuk versi HARD COVER .
Di punggung Hard Cover dituliskan/dicantumkan:
- Judul PI
- Nama Mahasiswa
- Tahun Penulisan
- Ketentuan ini harap diperhatikan karena bila penyerahan dilakukan tidak
sesuai dengan ketentuan, maka PI Anda akan DITOLAK.
Petunjuk Penulisan Ilmiah 10 FTI Gunadarma 2009
- Untuk mengonversi dokumen Microsoft Word gunakan program bantu lain
seperti Adobe Acrobat Distiller (, CutePDF
(, dan lain-lain.
- Untuk dokumen OpenOffice, dapat menggunakan fitur built-in dari
program yang bersangkutan untuk meghasilkan dokumen PDF.
- Direkomendasikan untuk menggunakan LaTeX.
Petunjuk Penulisan Ilmiah 11 FTI Gunadarma 2009
Contoh halaman judul
Nama : Aria Trisanjaya
NPM : 50404097
Jurusan : Teknik Informatika
Pembimbing : Fenni Agustina, SKom., MM.
Diajukan Guna Melengkapi Sebagian Syarat Dalam Mencapai
Gelar Setara Sarjana Muda
Petunjuk Penulisan Ilmiah 12 FTI Gunadarma 2009
Contoh Pernyataan Originalitas dan Publikasi
Saya yang bertanda tangan di bawah ini,
Nama : Aria Trisanjaya
NPM : 50404097
Tanggal Sidang : 7 Januari 2008
Tanggal Lulus : 7 Januari 2008
menyatakan bahwa tulisan ini adalah merupakan hasil karya saya sendiri dan dapat
dipublikasikan sepenuhnya oleh Universitas Gunadarma. Segala kutipan dalam
bentuk apa pun telah mengikuti kaidah, etika yang berlaku. Mengenai isi dan
tulisan adalah merupakan tanggung jawab Penulis, bukan Universitas Gunadarma.
Demikian pernyataan ini dibuat dengan sebenarnya dan dengan penuh kesadaran.
Depok, 15 Februari 2008
Aria Trisanjaya
Petunjuk Penulisan Ilmiah 13 FTI Gunadarma 2009
Contoh Lembar Pengesahan
Judul PI :
Nama :
Tanggal Sidang :
Tanggal Lulus :
Pembimbing Koordinator PI
( _______________ ) ( __________________ )
Ketua Jurusan
( ____________________ )
Petunjuk Penulisan Ilmiah 14 FTI Gunadarma 2009
Contoh Penulisan Abstraksi
Djoko Dwinanto.50497666
PI. Jurusan Teknik Informatika, Fakultas Teknologi Industri, Universitas
Gunadarma, 2001
Kata Kunci : Sistem, Visualisasi, Multimedia
(x + 62 + lampiran)
Abstrak merupakan pemadatan dari hasil penelitian / tulisan. Ditulis 1 spasi
dengan jumlah maksimum 200 kata (maksimum 1 halaman). Isi abstrak mencakup
tujuan atau pertanyaan yang ingin dijawab oleh peneliti, metode penelitian /
penulisan, dan kesimpulan yang diperoleh dari penelitian.
Daftar Pustaka (1995-2000)
Petunjuk Penulisan Ilmiah 15 FTI Gunadarma 2009
Contoh Daftar Isi :
Halaman Judul ………………… i
Pernyataan Originalitas dan Publikasi ………………… ii
Lembar Pengesahan ………………… iii
Abstraksi ………………… iv
Kata Pengantar ………………… v
Daftar Isi ………………… vi
Daftar Tabel ………………… vii
Daftar Gambar ………………… viii
Daftar Lampiran ………………… ix
1.1 Latar Belakang Masalah ………………… 1
2.1. ……… ………………… 11
BAB 4 PENUTUP ………………… 50
DAFTAR SIMBOL ………………… 53
LAMPIRAN ………………… 54
Petunjuk Penulisan Ilmiah 16 FTI Gunadarma 2009
Contoh Daftar Gambar
Gambar 2.1 Jembatan Konigsberg ………………… 15
Gambar 2.2. Graf A ………………… 18
Gambar 3.1. Diagram Blok ………………… 25
Contoh Daftar Tabel
Tabel 2.1. Koefisien Pengukuran ………………… 19
Tabel 2.2. Daftar Variabel ………………… 20
Tabel 3.1. Hasil Pengukuran Pertama ………………… 33
Contoh Daftar Lampiran
Lampiran 1. Listing Program ………………… 56
Lampiran 2. Tampilan Antar Muka Input ………………… 67
Petunjuk Penulisan Ilmiah 17 FTI Gunadarma 2009
Contoh Daftar Pustaka
[1] Cattell R.G.G. dan Skeen J., “Object Operation Benchmark”, ACM Trans.
Database Systems, Vol. 17, 1992, pp. 1-31.
[2] Date, C.J., An Introduction To Database Systems, 6
ed, Addison Willey
Publishing Wesley Publishing Wesley Company, Inc, Reading Massachusetts,
[3] Galagher, P.R. Jr., “A Guide To Understanding Audit In Trusted System”,, 1997,
Tanggal Akses: 1 Juni 1988
[4] Kchikech M. dan O. Togni, ”Approximation Algorithms for Multicoloring
Planar Graphs and Powers of Square and Triangular Meshes”, Discrete
Mathematics and Theoretical Computer Science, Vol. 8, Springer, Nancy,
France, 2006, pp. 159-172.
[5] Kimball, R., Data Warehouse Toolkit, John Wiley & Son, Inc., Toronto,
[6] N.L. Owsley, “Sonar Array Processing”, Array Signal Processing, S. Haykin,
Ed., Englewood Cliffs, NJ:Prentice_Hall, 1985, Ch.. 3, pp.115-193.
[7] Pearl, J. dan Kim J.H., “Studies in Semi-Admissible Heuristics”, IEEE Trans.
Pattern Analysis and Machine Intelligence, Vol. 4, 1982, pp. 392 -399.
[8] Stoica, I., et al., “A Proportional Share Resource Allocation Algorithm for
Real-Time, Time-Shared Systems”, Proceedings Real Time Systems
Symposium, IEEE Comp. Press, Desember 1996, pp. 288 -299.

Oleh Agus Nero Sofyan
1. Pembuka
Dalam paparan ini akan dibicarakan hal-hal yang berkaitan dengan teknik penulisan
karya ilmiah, yaitu konvensi, sistematika, pengutipan, dan daftar pustaka.
2. Konvensi Naskah Karya Ilmiah
Dalam konvensi naskah karya ilmiah, misalnya, dalam bahasa Indonesia dibicarakan
definisi dan aspeknya.
2.1 Definisi
Konvensi naskah karya ilmiah ialah peraturan atau aturan yang telah disepakati bersama
oleh suatu lembaga atau beberapa lembaga tertentu yang menyangkut seperangkat cara dan
bahan yang digunakan.
Catatan: Pada prinsipnya, setiap lembaga atau beberapa instansi memiliki konvensi karya ilmiah
yang sama.
2.2 Aspek
Aspek-aspek konvensi karya ilmiah ialah hal-hal yang menjadi kesepakatan bersama
dalam penulisan karya ilmiah.
Aspek-aspek tersebut meliputi hal berikut:
a. bentuk karangan,
b. bagian-bagian karangan,
c. bahan dan jumlah halaman,
d. perwajahan,
e. penomoran, dan
f. penyajian.
A. Bentuk Karangan Ilmiah
Bentuk karangan ilmiah di sini identik dengan jenis karya tulis keilmuan yaitu makalah,
laporan praktik kerja, kertas kerja, skripsi, tesis, dan disertasi. Untuk lebih jelasnya, perhatikan
bentuk-bentuk karangan ilmiah berikut.
1. Makalah
Makalah ialah karya tulis ilmiah yang menyajikan masalah atau topik dan dibahas
berdasarkan data di lapangan atau kepustakaan; data itu bersifat empiris dan objektif.
2. Kertas kerja
Kertas kerja ialah karya tulis ilmiah yang bersifat lebih mendalam daripada makalah dengan
menyajikan data di lapangan atau kepustakaan; data itu bersifat empiris dan objektif.
3. Skripsi
Skripsi ialah karya tulis ilmiah yang mengemukakan pendapat penulis berdasarkan pendapat
orang lain (karya ilmiah S I). Karya ilmiah ini ditulis untuk meraih gelar sarjana. langsung
(observasi lapangan) skripsi tidak langsung (studi kepustakaan).
4. Tesis
Tesis ialah karya tulis ilmiah yang mengungkapkan pengetahuan baru dengan melakukan
pengujian terhadap suatu hipotesis. Tesis ini sifatnya lebih mendalam daripada skripsi (karya
ilmiah S II). Karya ilmiah ini ditulis untuk meraih gelar magister.
5. Disertasi
Disertasi ialah karya tulis ilmiah yang mengemukakan teori atau dalil baru yang dapat
dibuktikan berdasarkan fakta secara empiris dan objektif (karya ilmiah S III). Karya ilmiah
ini ditulis untuk meraih gelar doktor.
B. Bagian-Bagian Tulisan Ilmiah
Bagian-bagian karangan ilmiah meliputi berikut: kelengkapan awal, kelengkapan isi, dan
kelengkapan akhir. Kelengkapan awal meliputi kulit luar, halaman judul, halaman pengesahan,
halaman persembahan, abstrak (dalam bahasa Indonesia dan Inggris), kata pengantar, daftar
tabel, daftar grafik, atau gambar (jika ada), serta daftar singkatan dan lambang. Kelengkapan isi
meliputi pendahuluan, kajian teori, seputar lokasi objek penelitian (khusus praktik kerja),
pembahasan, dan penutup. Kelengkapan akhir meliputi daftar pustaka, riwayat hidup penulis,
penulisan indeks, dan lampiran.
C. Bahan dan Jumlah Halaman
Bahan yang digunakan dalam penulisan karya ilmiah ialah kertas HVS A-4 dan tinta
hitam atau biru. Jumlah halaman untuk makalah minimal 10 halaman, laporan praktik kerja 40,
skripsi 60, tesis 80, dan disertasi 250 halaman.
D. Perwajahan
Perwajahan ialah tata letak unsur-unsur karangan ilmiah dan aturan penulisan. Dari
perwajahan ini, akan dimunculkan tampilan atau format penulisan karya ilmiah, yaitu ukuran
kertas, huruf yang dipakai, spasi, tepi batas (pias).
E. Penomoran
Dalam memberikan nomor, harus diperhatikan hal-hal berikut.
1. Romawi Kecil
Penomoran dengan angka Romawi kecil dipakai untuk halaman judul, abstrak, kata
pengantar, daftar isi, daftar tabel, daftar grafik, serta daftar singkatan dan lambang.
2. Romawi Besar
Angka Romawi besar digunakan untuk menomori tajuk bab (bab pendahuluan, bab
teoretis, bab metode dan objek penelitian, bab analisis data, dan bab penutup).
3. Penomoran dengan Angka Arab
Penomoran dengan angka Arab (0―9) dimulai dari bab I sampai dengan daftar pustaka
(termasuk riwayat hidup dan lampiran).
4. Letak Penomoran
Setiap penomoran yang bertuliskan dengan huruf kapital, nomor halaman diletakkan atau
berada di tengah-tengah, sedangkan untuk nomor selanjutnya berada di tepi batas (pias) kanan
5. Sistem Penomoran
Sistem penomoran dengan angka Arab menggunakan sistem digital. Angka terakhir
dalam sistem digital tidak diberikan titik, misalnya, 1.1 Latar Belakang Masalah, 3.2.2
Peranan Bahasa dalam Pembangunan. Akan tetapi, bila satu angka diberi tanda titik,
misalnya, 1. Pendahuluan 2. Landasan Teori dll. (dalam makalah). Apabila ada penomoran
sistem digital antara angka Arab dan huruf, harus dicantumkan titik, misalnya, 3.2.2.a.
1.1 Latar Belakang Penelitian
1.2 Identifikasi Masalah
1.3 Tujuan dan Kegunaan Penelitian
1.3.1 Tujuan Penelitian
1.3.2 Kegunaan Penelitian
1.4 Kerangka Pemikiran
1.5 Metode Penelitian
1.6 Rancangan Analisis Data
1.7 Lokasi dan Lamanya Penelitian
1.1 Latar Belakang Penelitian
1.2 Identifikasi Masalah
1.3 Tujuan dan Kegunaan Penelitian
1.3.1 Tujuan Penelitian
1.3.2 Kegunaan Penelitian
1.4 Kerangka Pemikiran
1.5 Metode Penelitian
1.6 Rancangan Analisis Data
1.7 Lokasi dan Lamanya Penelitian
E. Penyajian
Penyajian dalam penulisan karya ilmiah ialah cara-cara menerapkan aturan penulisan,
pengutipan, penulisan daftar pustaka, dan konvensi. Dengan kata lain, penyajian meliputi
seperangkat bentuk penyajian karya ilmiah secara utuh (mulai dari jilid sampai dengan
3. Sistematika Tulisan Ilmiah
Sistematika karya ilmiah ialah aturan meletakkan bagian-bagian karanga ilmiah (bagian
mana yang harus didahulukan dan bagian mana yang harus dikemudiankan)
3.1 Bagian Pembuka
Bagian pembuka meliputi kulit luar (jilid), halaman judul, pengesahan, persembahan,
abstrak (dalam bahasa Indonesia dan Inggris), daftar isi, daftar tabel dan grafik, serta daftar
singkatan dan lambang, dan lampiran.
A. Judul Karangan (Kulit Luar)
Dalam kulit luar, harus dicantumkan judul karangan (dengan subjudul, bila ada), nama
karangan ilmiah, keperluan penyusunan, penyusun dan NPM, logo, nama lembaga pendidikan
(jurusan, fakultas, universitas), kota, dan tahun penyusunan.
a. judul tulisan:
b. nama bentuk tulisan ilmiah:
Dicantumkan jenis karangan ilmiah, misalnya, MAKALAH, LAPORAN PRAKTIK
KERJA, SKRIPSI, TESIS, atau DISERTASI yang ditulis dengan huruf kapital dan dicetak
c. tujuan penulisan:
Tujuan penulisan ditulis dengan memakai huruf kecil kecuali nama mata kuliah,
kegiatan, dan nama jurusan. (ditulis di tengah-tengah).
disusun untuk memenuhi tugas mata kuliah
Morfologi Bahasa Indonesia I
diajukan untuk dipertahankan dalam ujian Sidang Sarjana Sastra Indonesia
disusun untuk memenuhi tugas dalam mengikuti kuliah sintaksis Bahasa Indonesia pada Program
Studi Sastra Indonesia
d. dilengkapi dengan nama dosen pembina:
Dosen Pembina
Prof. Dr. J.S. Badudu
e. nama penulis:
Dicantumkan nama penyusun dan NPM yang didahului kata Oleh atau Disusun oleh
Tubagus Ahmad Soebagja
f. Logo:
Logo lembaga pendidikan dengan diameter 4 cm disimpan di tengah.
g. nama lembaga:
Dicantumkan nama jurusan, fakultas, universitas atau sekolah tinggi.
h. tempat dan waktu:
Dicantumkan tempat dan waktu pada saat tulisan ilmiah itu diselesaikan.
B. Halaman Judul
Halaman judul sama (identik) dengan kulit luar (jilid), tetapi dituangkan dalam kertas A-
4 atau kertas jeruk.
C. Halaman Pengesahan
Halaman pengesahan ialah halaman khusus dalam karya ilmiah yang berisikan judul
karangan, nama penyusun, NPM, pembimbing utama, pembimbing pendamping, diketahui ketua
jurusan, dan disahkan oleh dekan.
D. Halaman Persembahan
Lembaran ini bersifat subjektif. Artinya, isinya bebas bergantung kepada “keinginan
penulis”. Biasanya berisikan ayat-ayat suci agama. Persembahan disajikan untuk orang-orang
terdekat (ibu, bapak, kakak, adik, istri, suami, atau anak).
E. Abstrak
Abstrak mencerminkan seluruh isi karangan dengan mengungkapkan berikut: judul
karangan, metode penelitian, sumber data, kerangka teori, masalah yang dibahas, dan hasil yang
dicapai. Abstrak ini disajikan dengan jarak satu spasi dan ditulis dalam dua bahasa, yaitu bahasa
Indonesia dan Inggris. Jumlah kata dalam abstrak berkisar 200—500 kata.
F. Kata Pengantar
Kata pengantar dalam karya ilmiah, misalnya, skripsi berisikan hal-hal berikut: puji
syukur kepada Tuhan, judul karangan, tujuan penulisan, ucapan terima kasih, tanggung jawab
ilmiah penulis, dan titimangsa.
G. Tabel
Tulisan ilmiah yang lengkap, selain menganalisis data dengan saksama, juga
mencantumkan tabel yang merupakan gambaran analisis data (bila diperlukan). Nama tabel
diberikan nomor dengan angka Arab dan ditulis dengan memakai huruf kapital pada awal kata
kecuali preposisi dan konjungsi yang bukan di awal.
Tabel 1 Fungsi Kombinasi Afiks Me(N)-Kan………………………………………………………………35
Tabel 2 Fungsi Kombinasi Afiks Me(N)-I………………………………………………………………43
Daftar Gambar/Grafik/Bagan
Daftar grafik/gambar/bagan pada dasarnya sama dengan penulisan daftar tabel.
H. Daftar Singkatan dan Lambang
Tidak ada aturan yang menetapkan bahwa penulisan lambang dan singkatan harus
memakai huruf kapital atau tidak. Ketentuan mengenai bentuk singkatan atau lambang
bergantung pada keinginan penulis. Namun, hal yang perlu dipahami dalam penulisan daftar
singkatan itu harus konsisten.
I. Lampiran
Dalam lampiran diinformasikan tentang kelengkapan penelitian, misalnya, angket
pedoman wawancara, foto, peta lokasi, dan sumber data.
3.2 Bagian Isi
Bagian isi ialah bagian inti dalam karya ilmiah yang meliputi bab pendahuluan, bab
landasan teoretis, bab objek lokasi penelitian (khusus praktik kerja), bab pembahasan (analisis
data), dan bab penutup. Dengan kata lain, bagian isi merupakan penelitian si penulis.
Bab pendahuluan memuat penjelasan atau pengantar tentang isi karangan ilmiah. Bab ini
juga memuat landasan kerja dan arahan dalam penyusunan karangan ilmiah.
Pada bagian ini, diuraikan (a) masalah yang akan diteliti, (b) contoh masalah, (c)
penjelasan tentang dipilihnya masalah ini bagi penulis atau pun bagi orang lain, dan (d)
argumentasi yang logis antara data (realitas) dan teori (harapan).
Identifikasi masalah merupakan garis besar yang akan diteliti atau diuraikan. Identifikasi
masalah ini disajikan dalam bentuk pertanyaan. Akan tetapi, pembatasan masalah merupakan
bagian yang menyempitkan atau membatasi pokok permasalahan sehingga kajian tidak terlalu
luas dan abstrak.
Tujuan penelitian merupakan sasaran yang akan dicapai atau dihasilkan dalam penelitian
ini (harus sejalan dengan identifikasi masalah), sedangkan kegunaan penelitian merupakan
penegasan tentang manfaat yang akan dicapai baik secara teoretis maupun secara praktis.
Kerangka teori berisikan prinsip-prinsip teori (dari para ahli) yang dijadikan dasar untuk
menganalisis data.
Penelitian ilmiah harus menerapkan metode dan teknik penelitian. Metode penelitian
ialah seperangkat alat yang tersusun secara sistematis dan logis, sedangkan teknik penelitian
ialah tata cara melakukan setiap langkah-langkah metode penelitian.
Lokasi penelitian ialah tempat penelitian dilaksanakan. Lamanya penelitian dapat
dilakukan dengan membuat rencana atau jadwal kegiatan penelitian.
Penelitian ilmiah harus menyajikan sekaligus memaparkan sumber data. Sumber data ini
merupakan bahan yang diteliti. Jika penelitian ini berasal dari buku, misalnya, novel, majalah,
surat kabar, tabloid, identitas sumber data tersebut harus dicantumkan. Jika sumber data itu
banyak dan beragam, dapat digunakan sampel dan populasi.
B. Kajian Teori
Bab ini berisikan uraian tentang teori-teori atau pendapat-pendapat yang relevan dengan
masalah yang dibahas atau diteliti. Bisa saja, penelitian-penelitian terdahulu dapat
melatarbelakangi penulis untuk melakukan penelitian selanjutnya. Dalam bab ini, disertakan
alasan-alasan yang logis. Dengan demikian, penulis dapat menolak, menerima, mempertanyakan,
atau menguatkan teori yang sudah ada.
Teori yang dijadikan acuan hendaknya kepustakaan atau hasil penelitian yang mutahir
dengan berusia lima tahun ke belakang, tetapi jika teori lama masih relevan, pendapat tersebut
masih bisa dipakai.
C. Objek Penelitian
Dalam bab ini, dijelaskan keadaan lokasi penelitian atau objek penelitian secara singkat
(bergantung pada kebutuhan penelitian).
Hal hal yang perlu dijelaskan dalam bab ini, yaitu (a) sejarah objek penelitian, (b)
struktruk organisasi, dan (c) kegiatan objek penelitian.
D. Pembahasan (Analisis Data)
Bab pembahasan data merupakan bab yang paling penting dalam penulisan karya ilmiah
karena dalam bab ini dilakukan kegiatan analisis data, sintetis pembahasan, interpretasi penulis,
pemecahan masalah, dan temuan pendapat baru yang diformulakan (bila ada).
E. Penutup
Bab penutup meliputi dua bagian, yaitu simpulan dan saran.
Simpulan ini ialah bentuk singkat dari uraian yang dibahas pada bab analisis data.
Simpulan ini pun merupakan jawaban atas pembatasan masalah dan tujuan penelitian.
Saran merupakan informasi untuk ditindaklanjuti oleh pembaca bila akan mengadakan
penelitian lanjutan.
Catatan: Saran ini bukan merupakan saran peneliti atau penulis pada objek penelitian atau
instansi tertentu. Saran ini ditujukan untuk kemajuan dan perkembangan ilmu pengetahuan.
Artinya, masih ada celah lain dari penelitian ini yang belum tergarap sehingga dapat diteliti oleh
F. Bagian Akhir
Bagian akhir atau kelengkapan akhir meliputi daftar pustaka, daftar kamus, daftar riwayat
hidup, indeks, dan lampiran.
Satu di antara yang harus ada (mutlak) dalam tulisan karangan ilmiah ialah adanya
sumber acuan dan daftar pustaka. Dengan adanya daftar pustaka, pembaca bisa mengetahui
sumber acuan yang menjadi landasan dalam pengkajian.
Daftar kamus harus dibedakan dengan daftar pustaka.
Daftar riwayat hidup berisikan biodata penulis yang lengkap, yaitu identitas, pendidikan,
prestasi, dan pengalaman.
Indeks merupakan daftar istilah atau kosakata khusus dalam karya ilmiah yang disusun
secara alfabetis dan diberikan penunjukan halaman tertentu.
Lampiran berisikan hal-hal yang mendukung penulisan karangan ilmiah. Isi lampiran
bergantung kepada kebutuhan penulisan, misalnya, acuan wawancara, angket, surat izin
penelitian, dan data penelitian.
4. Pengutipan dalam Tulisan Ilmiah
Pengutipan ialah proses meminjam pendapat para ahli dalam disiplin ilmu tertentu baik
langsung atau pun tidak langsung yang dituangkan dalam karya ilmiah.
Hasil pengutipan karya ilmiah disebut kutipan.
Fungsi kutipan ialah (a) bukti untuk menunjang pendapat penulis, (b) bukti tanggung jawab
penulis, dan (c) bukti bahwa tulisan itu ilmiah.
Jenis-jenis Kutipan
Pada dasarnya, kutipan dalam karya ilmiah itu dibagi atas dua jenis, yaitu kutipan
langsung dan kutipan tidak langsung.
Kutipan langsung dapat diartikan meminjam pendapat para ahli secara utuh atau lengkap
baik itu berupa frase atau kalimat. Kutipan langsung dapat dibedakan pula atas kutipan langsung
yang kurang atau sama dengan empat baris dan kutipan langsung yang lebih dari empat baris.
Kutipan tidak langsung dapat diartikan meminjam pendapat para ahli tidak secara utuh.
Penulis menulis intinya atau topiknya saja, lalu dikembangkan dengan pendapat penulis.
Teknik Pengutipan
Kutipan langsung yang kurang atau sama dengan empat baris dapat dilakukan dengan
cara-cara berikut:
1. kutipan ditulis langsung dengan teks;
2. spasi kutipan ialah 2 spasi;
3. memakai tanda petik dua di awal dan di akhir
4. awal kutipan memakai huruf kapital;
5. diikuti nama akhir pengarang (marga), tahun
terbit buku, halaman buku; penulisan ini dapat
disajikan di awal atau di akhir kutipan.
Contoh: —————————-teks————————————
…………………………” (Badudu, 1994: 56).
Kutipan langsung yang lebih dari empat baris dapat dilakukan dengan cara-cara berikut:
1. dipisahkan dari teks 2,5 spasi;
2. spasi dalam kutipan 1 spasi;
3. memakai tanda petik dua atau pun tidak
4. semua kutipan dimulai dari 7—10 ketukan dari
sebelah kiri teks;
5. awal kutipan memakai huruf kapital;
6. diikuti nama akhir pengarang (marga), tahun
terbit buku, halaman buku; penulisan ini dapat
disajikan di awal atau di akhir kutipan.
2 Spasi
Kutipan tidak langsung dapat dilakukan dengan cara-cara berikut:
1. kutipan disatukan dengan teks;
2. spasi kutipan 2 spasi;
3. tidak memakai tanda petik dua;
4. menggunakan ungkapan, misalnya,
mengatakan bahwa, menyatakan bahwa,
mengemukakan bahwa, berpendapat bahwa;
5. mencantumkan nama akhir pengarang (marga),
tahun, dan halaman.
Selain tekniknya, juga harus diperhatikan Prinsip-prinsip dasar dalam pengutipan ialah
sebagai berikut.
a. Dalam kutipan tidak dibenarkan mencantumkan judul buku.
b. Nama marga, tahun terbit, dan halaman buku selalu berdekatan.
c. Kutipan tidak dibenarkan dicetak tebal atau dihitamkan.
d. Kutipan dalam bahasa asing atau bahasa daerah harus dicetak miring.
e. Jika nama pengarang ada dua, nama akhir (marga) kedua pengarang itu ditulis. Misalnya: J.S.
Badudu dan M. Ramlan menjadi Badudu dan Ramlan.
f. Jika nama pengarang ada tiga atau lebih, nama akhir pengarang pertama yang ditulis dan
diikuti dkk. Misalnya: J.S.Badudu, M. Ramlan, Gorys Keraf menjadi Badudu, dkk.
g. Apabila kutipan itu dirasakan terlalu panjang, penulis boleh mengambil bagian intinya saja
dengan teknik memakai tanda elipsis […------------------------------ (Badudu, 1994:45)….],
tetapi tidak boleh mengubah atau menggeserkan makna atau pesannya.
h. Jika kutipan berupa pendapat ahli yang berasal dari kutipan yang lain, bentuk penyajiannya
ialah Menurut Badudu (dalam Djajasudarma, 1993: 56) bahwa ….
5. Daftar Pustaka
Daftar putaka ialah daftar atau senarai yang ada dalam karya ilmiah, misalnya, makalah
atau skripsi yang berisikan identitas buku dan pengarang yang disusun secara alfabetis (setelah
nama marga pengarang dikedepankan).
Kepustakaan atau juga daftar pustaka memiliki ciri-ciri sebagai berikut:
a. diambil dari buku, majalah, makalah, surat
kabar, internet, dan orasi dalam karya ilmiah;
b. berisikan nama pengarang atau lembaga;
c. memiliki identitas buku, yaitu judul, tahun terbit,
cetakan atau edisi, nama penerbit, dan tempat
Fungsi dari daftar pustaka ialah sebagai berikut:
a. menunjukkan bahwa tulisan itu ilmiah (bersifat ilmu pengetahuan);
b. menginformasikan bahwa karya ilmiah itu (penelitian) memiliki referensi dan akumulasi dari
karya ilmiah sebelumnya;
c. merupakan alat kontrol pada landasan teoretis atau tinjauan pustaka.
Teknik penulisan daftar pustaka ialah berikut:
a. nama pengarang dibalikkan atau diputar dengan catatan nama yang dikedepankan, yaitu nama
marga/unsur nama akhir yang dipisahkan oleh koma;
b. setelah itu, nama pengarang disusun secara alfabetis;
c. bila nama pengarang ada dua, yang dibalikkan ialah nama pengarang pertama;
Contoh: Emil Salim dan Philip Kotler menjadi
Salim, Emil dan Philip Kotler
d. jika nama pengarang ada tiga atau lebih, nama pengarang pertamalah yang diputar dan diikuti
oleh dkk.
Contoh: Emil Salim, Philip Kotler, Djoemad
Tjiptowardojo menjadi Salim, Emil.
e. bila tidak terdapat nama pengarang, nama departemen atau lembagalah yang ditulis; bila tidak
ada kedua-duanya, tulislah tanpa pengarang, atau tanpa lembaga;
f. gelar akademik pengarang tidak dicantumkan;
g. judul buku harus dicetak miring dalam komputer atau digarisbawahi dalam mesin tik
atau tulisan tangan;
h. judul artikel, skripsi, tesis, atau disertasi yang belum dibukukan diapit oleh tanda petik
i. bila ada edisi atau cetakan ditulis sesudah judul buku;
j. jika buku tersebut merupakan terjemahan dari buku bahasa asing, penerjemah ditulis
sesudah edisi;
k. spasi dalam daftar pustaka satu spasi;
l. perpindahan dari satu pengarang ke pengarang yang lain dua spasi.
m. bila dalam satu buku diperlukan dua baris atau lebih, baris yang kedua atau selanjutnya
dimulai dari 1 tabulasi (5-7 ketukan);
n. jika seorang pengarang menuliskan lebih dari satu buku, nama pengarang ditulis satu
kali; nama pengarang itu diganti dengan garis panjang atau tanpa garis panjang;
o. bila ada dua atau lebih karya ilmiah (buku) yang ditulis oleh seorang pengarang, urutan
penulisannya berdasarkan tahun terbit;
p. bila ada dua atau lebih buku (karya ilmiah) dari seorang pengarang yang ditulis dalam
tahun yang sama, urutan penulisannya diikuti nomor urut a, b, c, dsb.
Bentuk Pertama
perhatikan urutan penulisan;
nama marga dan nama kecil, (dipisahkan koma), (diakhiri titik), tahun terbit, (diakhiri
titik), judul buku–anak judul, (diikuti titik dua dan diakhiri titik), cetakan (diakhiri titik), nama
tempat (diakhiri titik dua), nama penerbit (diakhiri titik).
Djajasudarma, T. Fatimah. 1993. Metode Linguistik: Ancangan Metode Penelitian dan Kajian.
Cetakan III.Bandung: Eresco.
Purwo, Bambang Kaswanti. 1989. “Tata Bahasa Kasus dan Valensi Verba” dalam PELLBA 2.
Lembaga Bahasa Unika Atma Jaya. Jakarta: Kanisius.
Bentuk Kedua
Djajasudarma, T. Fatimah
1993a Semantik 2: Pemahaman Ilmu Makna. Bandung: Eresco.
1993b Metode Linguistik: Ancangan Metode Penelitian dan Kajian. Bandung: Eresco.
5. Penutup
Banyak formalitas penulisan karya ilmiah yang bersifat teknis yang harus diikuti oleh
para penulis/ peneliti agar format keilmuannya dapat dipertanggungjawabkan.
Pustaka Acuan
Arifin, E. Zaenal, 1991. Penulisan Karya Ilmiah dengan Bahasa Indonesia yang Benar. Jakarta:
Mediyatama Sarana Perkasa.
Brotowijdoyo, Mukayat D., 1985. Penulisan Karangan Ilmiah. Jakarta : Akademika Pressindo.
Effendi, S., 1978. Pedoman Penulisan Laporan Penelitian. Jakarta: Pusat Bahasa.
Keraf, Gorys, 1980. Komposisi. Ende-Flores: Nusa Indah.
Djajasudarma, T. Fatimah, 1993, Metode Linguistik Ancangan Metode Penelitian dan Kajian.
Bandung : PT Eresco.
Moeliono, Anton. 1980. “Bahasa Indonesia dan Ragam-Ragamnya” dalam Pembinaan Bahasa
Indonesia I, Nomor 1: 15 s.d. 33.
Sudaryanto. 1998. Metode dan Aneka Teknik Analisis Bahasa: Pengantar Penelitian Wahana
Kebudayaan Secara Linguistik. Yogyakarta: Gadjah Mada University Press.

Muhiddin Sirat**)

Mengacu pada Pedoman Pelaksanaan PKL Progam D3 Perencanaan dan Pengelolaan Proyek dan Bisnis maka laporan akhir mahasiswa program D3 tersebut merupakan salah satu bentuk laporan penelitian. Laporan Penelitian merupakan suatu laporan yang disusun atau dihasilkan dengan menggunakan cara ilmiah mulai dari tahap penyusunan rancangan penelitian, pelaksanaan penelitian, sampai dengan pembuatan laporan penelitian. Secara lebih terinci ketiga tahapan penelitian tersebut adalah sebagai berikut: (1) memilih masalah dan penentuan judul penelitian, (2) studi pendahuluan, (3) merumuskan masalah, (4) merumuskan hipotesis, (5) memilih pendekatan yangakan digunakan, (6) menentukan variable penelitian dan sumber data, (7) menentukan dan menyusun instrument penelitian, (8) mengumpulkan data, (9) analisis data dan pembahasan, (10) menarik kesimpulan, dan (11) menyusun laporan penelitian.

Memperhatikan tahapan penelitian tersebut, maka Laporan Akhir Mahasiswa Program D3 sekurang-kurangnya memuat lima bab, yaitu : Pendahuluan, Tinjauan Pustaka, Metode Penelitian, Hasil dan Pembahasan, serta Kesimpulan dan Saran. Kelima bab tersebut harus saling terkait dan merupakan satu kesatuan yang terpadu.

Metode penelitian pada dasarnya merupakan cara ilmiah untuk mendapatkan data dengan tujuan dan kegunaan tertentu (Sugiyono, 2004: 1). Cara ilmiah mengandung arti bahwa kegiatan penelitian itu didasarkan pada ciri keilmuan, yaitu rasional, empiris, dan sistematis. Rasional berarti kegiatan penelitian itu dilaksankan dengan cara-cara yang masuk akal sehingga terjangkau oleh penalaran manusia. Empiris berarti berarti cara-cara yang dilakukan dapat diamati oleh indra manusia; dan Sistematis artinya proses yang digunakan dalam penelitian menggunakan langkah-langkah tertentu yang bersifat logis dan ilmiah.

Berbagai jenis penelitian yang dapat digunakan untukpenelitian dalam bidang ekonomi dan bisnis, yaitu : (1) Penelitian Akademik, yaitu penelitian yang dilakukan oleh mahasiswa dalam membuat skripsi/laporan akhir, tesis, dan di esertasi, sehingga lebih mementingkan validitas internal (caranya harus benar), variabel dan kecanggihan alat analisis disesuaikan dengan jenjang pendidikan mahasiswa. (2) Penelitian Profesional, yaitu penelitian yang dilakukan oleh dosen dan peneliti lainnya dengan tujuan untuk mendapatkan pengetahuan baru atau pengembangan pengetahuan yang sudah ada.

*)Disampaikan pada acara pelatihan PKL Mhs D3 Pengelolaan Proyek Tahun 2006
**) Staf Pengajar Jurusan EP F€akultas Ekonomi Unila
Variabel relatif lengkap, dan kecanggihan alat analisis disesuaikan dengan kepentingan masyrakat ilmiah; dan (3) Penelitian Institusional, yaitu penelitian yang bertujuan untuk mendapatkan informasi yang dapat digunakan untuk pengembanan lembaga dan hasil penelitian sangat bergunakan bagi pimpinan untuk pengambilan keputusan.

Jenis penelitian dapat dikelompokkan menurut tujuan, pendekatan, tingkat eksplanasi, serta menurut analisis dan jenis data. Pengelompokan penelitian menurut tingkat eksplanasi adalah pengelompokan berdasarkan kedudukan variabel yang diteliti serta hubungan antara satu variabel dengan variabel lainnya. Jenis penelitian menurut tingkat eksplanasinya dapat dikelompokkan menjadi tiga kelompok, yaitu:

1. Penelitian Deskriftif
Penelitian Deskriftif adalah penelitian yang dilakukan untuk mengetahui dan mendeskripsikan suatu variabel atau lebih tanpa membuat perbandingan atau menghubungkan variabel tersebut dengan variabel lainnya.
Contoh judul penelitian deskriptif adalah:
a. Kinerja Perusahaan pada Industri Pengolahan Skala Kecil dan Menengah di ….
b. Efektivitas Pelaksanaan Sistem Pengendalian Mutu Perusahaan………………..
c. Prestasi Kerja Karyawan Pada Perusahaan………………………………………
d. Efektivitas Pelaksanaan Kebijakan Harga dan Non-Harga Pada Industri……….
e. Kelayakan Finansial Pengembangan Usaha …………………………………….
f. Persepsi Konsumen Tentang Kualitas Pelayanan Usaha Jasa Ekspedisi ……….

2. Penelitian Komparatif
Penelitian Komparatif adalah suatu penelitian yang bersifat membandingkan : (1) suatu variabel yang sama dengan dua atau lebih perlakuan yang berbeda, dan (2) suatu variabel yang sama dalam kurun waktu yang berbeda.
Contoh judul Penelitian Komparatif:
a. Perbandingan Tingkat Keuntungan Usaha Nelayan Menggunakan Perahu Bermotor dan Tanpa Motorr di ……………(variabel sama, perelakuan berbeda).
b. Perbandingan Produktivitas lahan Usahatani Tanaman Hortikultura dengan menggunakan Pupuk Organik dan Non-Organik di……..(Perlakuan berbeda).
c. Kinerja usaha Perusahaan Dalam Industri Pengolahan Pada Masa Krisis dan Pasca Krisis Ekonomi di……………………(variabel sama, waktu berbeda)
d. Perbandingan Kinerja BUMD dan Badan Usaha Swasta di………..(varibel sama, lembaga berbeda).

3. Penelitian Asosiatif
Penelitian Asosiatif merupakan penelitian yang bertujuan untuk mengetahui pengaruh dan atau hubungan antara dua variabel atau lebih.
Contoh judul penelitian asosiatif:
a. Faktor-faktor yang Mempengaruhi Permintaan Ayam Pedaging di …………….
b. Pengaruh Pembinaan dan Modal Kerja Terhadap Kinerja Usaha ………………
c. Hubungan Antara Tingkat Pendidikan Masyarakat dengan Daya Beli Produk…
d. Pengaruh Iklan Terhadap Nilai Penjualan………………………………………..
e. Pengaruh Interior Toko, Warna Pakaian, dan Cara Pelayanan Terhadap Nilai Penjualan ………………………………………………………………………….
f. Estimasi Penerimaan Retribusi Izin Mendirikan Bangunan (IMB) dengan Memperhatkan Perilaku Variabel yang Mempengaruhinya……………………….
g. Pendugaan Efisiensi Alokasi Faktor Produksi dan Skala Usaha Pada Indusri…….
h. Analisis Penyerapan Tenaga Kerja Pada Indusatri………………………………….
i. Tingkat Efektivitas Pelaksanaan Sistem Kemitraan dan Hubungannya dengan Kinerja Usaha Pada Industri……………………………………………………………
j. Pengaruh Kemampuan dan Motivasi Kerja Terhadap Produktivitas Keja………..

Jenis penelitian menurut tingkat eksplanasi dapat digunakan sebagai dasar dalam merumuskan judul penelitian. Oleh karena itu judul penelitian ada yang bersifat deskriftif, komparatif, dan asosiati seperti contoh-contoh judul penelitian yang dikemukakan tersebut di atas.

Menarik atau tidaknya suatu judul penelitian tergantung beberapa faktor, antara lain: (1) apakah judul penelitian telah mencerminkan adanya suatu masalah yang menarik untuk diteliti; (2) apakah judul tersebut menarik minat dan bersesuaian dengan bidang ilmu peneliti; dan (3) apakah judul penelitian sepengetahuan peneliti belum ada yang menelitinya.
Sebagai acuan utama pemilihan judul penelitian yang tepat adalah memperhatikan ada tidaknya masalah umum atau kesenjangan(gap) antara apa yang diharapkan dengan apa yang terjadi atas suatu aktivitas pengadaan faktor produksi(input), Aktivitas produksi(proses), hasil aktivitas (output), dan atau dampak suatu aktivitas(outcome) tertentu.
Sebagai contoh: setelah penyuluhan pertanian dilaksanakan seharusnya petani sudah dapat melaksanakan kegiatan produksi dengan baik, namun dalam kenyataannya petani belum melaksanakan proses produksi sesuai dengan teknologi yang dianjurkan dan produktivitas ushatani masih relatif rendah. Memperhatikan contoh di atas terdapat beberapa kesenjangan yang terjadi, yaitu : rendahnya pemahaman petani tentang materi penyuluhan, proses produksi belum berjalan dengan baik , produktivitas lahan rendah,

Kondisi yang diharapkan …………………………… Kondisi saat ini (Kenyataa)

Dasar : Kesenjangan(gap) Dasar:
a. Peraturan a. Data Kuantitatif
b. Teori Penyebabnya apa? b. Data kualitatif
c. Target

Atas dasar kesenjangan atau masalah umum yang terjadi (terpilih) peneliti dapat menentukan judul penelitian : (1) Efektivitas Pelaksanaan penyuluhan, atau (2) Studi korelasi antara tingkat pengetahuan petani peserta penyuluhan dengan produktivitas lahan usahatani, atau (3) Perbandingan Produktivitas lahan usahatani peserta penyuluhan dan bukan peserta penyuluhan.


Laporan akhir mahasiswa program D3 pengelolaan proyek sekurang-kurangnya memuat lima bab, yaitu: Pendahuluan, Tinjauan Pustaka, Metode Penelitian, Hasil dan Pembahasan, serta Kesimpulan dan Saran.

Bab pendahuluan berisikan Latar Belakang, Perumusan masalah, Kerangka Pemikiran, dan Hipotesis Penelitian (jika ada).

1. Latar Belakang
Penelitian dilakukan untuk menjawab keingintahuan peneliti mengungkap suatu gejala untuk suatu tujuan. Sub bab ini utamanya menjelaskan tentang hal-hal yang mendorong (argumentasi) pentingnya penelitian dilakukan. Oleh kaena itu dalam sub bab ini peneliti menjelaskan: (1) kesenjangan (masalah) yang terkait denga judul penelitian, (2) proses mengidentifikasi masalah, (3) alasan pentingnya pemecahan masalah guna kemajuan ilmu pengetahuan dan pembangunan, dan (4) menjelaskan tentang pendekatan yang digunakan untuk menjawab masalah tersebut.

2. Perumusan Masalah
Spesifikasi masalah yang telah diuraikan pada latar belakang dirinci dan dirumuskan pada sub-bab ini. Perumusan masalah umumnya berupa kalimat tanya: apakah, bagaimanakah, seberapa besar, dan lain-lain sesuai dengan judul penelitian. Rumusan masalah Deskriptif antara lain berupa kalimat tanya :Seberapa baik, berapakah. Rumusan masalah Komparatif antara lain barupa kalimat tanya adakah perbedaan yang signifikan antara suatu variabel dengan variabel lainnya. Rumusan masalah Asosiatif antara lain berupa kalimat tanya Adakah hubungan dan atau adakah pengaruh yang signifikan antara variabel bebas dengan variabel terikatnya.

3. Tujuan Penelitian
Tujuan Penelitian ditinjau dari segi isinya merupakan ssesuatu yang ingin dicapai. Penelitian dapat bertujuan untuk menguraikan/mendeskripsikandan atau membuktikan sesuatu. Apabila masalah penelitian dikemukakan dalam kalimat tanya, maka tujuan penelitian dirumuskan dalam bentuk kalimat pernyataan (ingin mengathui, ingin mengukur, ingin menjelaskan, dan lain-lain).

4. Kerangka Pemikiran
Kerangka pemikiran memuat alur pikir mulai dari perumusan masalah, tujuan, sampai dengan cara mencapai tujuan penelitian. Uraian dan dasar penguat alur pikir dirinci dalam tinjauan pustaka.

5. Hipotesis Penelitian
Hipotesis Penelitian merupakan jawaban/kesimpulan sementara (dugaan sementara) yang perlu dibuktikan kebenarannya. Oleh karena itu hipotesis harus konsisten dengan judul, masalah, dan tujuan penelitian. Apabila judul penelitian bersifat deskriftif, atau komparatf, atau asosiatif; maka hipotesis juga dapat berupa Hipotesis Deskriptif (jika diperlukan), Hipotesis Komparatif, atau hipotesis asosiatif.

Bagan Hubungan Antara Masalah, Tujuan, Hipotesis, dan Kesimpulan

Masalah Tujuan Penelitian
(hal yang perlu (jawaban yang ingin
Dipertanyakan) dicapai)

Hipotesis Kesimpulan
(Dugaan Sementara) (Jawaban yang diperoleh)

Memaparkan perkembangan topik yang diteliti untuk justifikasi teori yang digunakan sebagai landasan yang dipakai sesuai dengan alur pikir dalam penyusunan karya ilmiah. Penulusuran pustaka diutamakan melalui tulisan ilmiah yang terpuklikasi, seperti buku ajar, jurnal ilmiah, laporan penelitian, dan karya ilmiah lain yang terbublikasi.. Teori yang dirujuk/dikutip dapat digunakan sebagai batasan, dasar pembenaran, alas an pembanding, alas an penguat atau pendukung dalam tulisan.
Rujukan dan kutipan harus mngikuti tata cara yang berlaku.

Dalam bab ini, penulis memaparkan tentang : tempat dan waktu penelitian, Penentuanb ukuran dan alokasi sample (jika ada), data dan sumber data, alat analisis dan pengujian hipotesis penelitian, dan pelaksanaan penelitian.
1. Tempat dan Waktu Penelitian
Dalam sub-bab ini menjelaskan tentang tempat dan sasaran penelitian, dan kapan penelitian dilakukan.

2. Metode Penentuan Ukuran Sample dan Alokasi Sampel
Penelitian yang memerlukan data primer, pengumpulan data dilakukan dengan penelitian survei, yaitu penelitian yang menggunakan sampel dan kuesioner sebagai alat bantu mengumpulkan data yang utama. Metode penentuan ukuran sampel antara lain menggunakan: (1) metode penarikan sampel acak sederhana (Simple Random Sampling), dan (2) metode penarikan sampel acak berstrata (Stratified Random Sampling). Selanjutnya agar sampel dapat mewakili populasi maka alokasi sampel proposional dengan jumlah anggota populasi disetiap stratum yang lazim disebut alokasi sampel berimbang.

a. Metode pengukuran besaran sample
(1) simple random Sampling

Rumus = =

Keterangan :

= Jumlah Anggota populasi
= Standar deviasi variable ukuran heterogenitas populasi
= Bound of Error.
= Jumlah Sampel

(2) Stratificad random sampling
Rumus =

Jika terdapat dua struktur rumus diatas dapat di jabarkan ;

Keterangan .
= Jumlah anggota populasi
= Jumlah anggota populasi stratum I (luas ≤ 1 Ha)
= Jumlah Anggota Populasi stratum 2 (luas ≥ 2 Ha)
= dan
= Standar deviasi variabel ukuran heterogenitas ( misal ; luas areal)
= Bound of Error
= Jumlah sampel

3. Data dan Sumber Data
Untuk mendapatkan data yang valid, maka peneliti terlebih ahulu mengetahui macam-macam data.Macam data ada dua yaitu data kualitatif dan data kuantitatif. Data kualitatif yaitu data yang dinyatakan dalam bentuk kata, kalimat, dan gambar. Data Kuantitatif adalah data data yang berbentuk angka, atau data kualitatif yang dikuantifikasi dalam bentuk angka


Macam Data Diskrit/nominal

Kuantitatif Ordinal

Kontinum Interval


Data kuantitatif dibagi dua yaitu data diskrit/nominal dan data kontinum. Data nominal adalah data yang hanya dapat digolongkan secara terpisah secara diskrit atau katagori. Penggolongan data dapat dilakukan menurut katagori tertentu, misalnya penggolongan data menurut jenis kelamin, suku, pola produksi , dan lain-lain. Misalnya dalam satu kelas terdapat 50 mahasiswa, terdiri dari 30 pria dan 20 wanita. Jadi data nominal adalah data diskrit, bukan data yang kontinum.

Data kontinum adalah data yang bervariasi menurut tingkatan dan diperoleh dari hasil pengukuran. Data kontinum dibagi menjadi data ordinal, data interval, dan data rasio. Data ordinal adalah data yang berbentuk rangking atau peringkat dan dinyatakan dalam skala ordinal untuk setiap indikator dari suatu variabel tertentu. Misalnya data tentang persepsi konsumen terhadap kualitas produk Altenatif jawaban responden dijenjang mulai dari baik sekali, baik, cukup baik, kurangbaik, dan tidak baik.(skoring: Baik sekali: 5, Baik: 4, Cukup baik: 3, Kurang baik: 2 , dan Tidak Baik: 1).

Data interval adalah data yang memiliki jarak yang sama untuk setiap kelas interval, tetapi tidak memiliki nilai nol

1 3 5 7 9 11

Data rasio adalah data yang memiliki nilai nol (nol mutlak). Misalnya data tetang berat (kg), panjang (m), volume (m3), produksi (ton). Apabila berat 0 kg berarti tidak ada bobot, panjang 0 m berarti tidak ada panjang,nya, apabila produksi 0 ton berarti tidah ada hasil produksi, dan lain-lain. Data rasio yang memiliki satuan yang sama dapat dijumlahkan, dikurangkan, dibagi atau dikalikan secara aljabar.

Data ditinjau dari segi sumber data dapat dikelompokkan menjadi data primer dan data sekunder . Data primer adalah data yang langsung diperoleh dari responden (objek yang diteliti), dan data sekunder adalah data yang diperoleh secara tidak langsung dari objek yang diteliti, melainkan diperoleh dari buku-buku laporan penelitian pihak lain, laporan dinas instansi yang terkait, dan sumber lain yang telah terpublikasi.

4. Alat Analisis dan Pengujian Hipotesis

a. Alat analisis untuk menguji hipotesis penelitian deskriptif, menggunakan statistik deskriptif untuk mengetahui rata-rata, modus, standar deviasi suatu nilai variabel, dan dapat juga dilanjutkan dengan uji signifikansi rata-rata nilai suatu varabel dengan menggunakan uji- t..

b. Alat analisis untuk menguji hipotesis penelitian komparatif dilakukan dengan cara membandingkan rata-rata nilai dua variabel dan untuk mengetahui signifikansi beda nilai dua variabel mengunakan uji beda rata-rata nilai dua variabel dengan menggunakan uji- t .

c. Alat analisis untuk menguji hipotesis asosiatif (korelasi dan atau pengaruh)
(1). Untuk menguji hipotesis asosiatif (korelasi) menggunakan statistik non parametrik untuk mengukur keeratan hubungan antara dua variabel atau lebih secara parsial. Dan untuk menguji signifikasi korelasi menggunakan uji-t.
(2) untuk menguji hipotesis asosiatif (pengaruh) menggunakan statistik parametrik, yaitu analisis regresi linier sederhana atau regresi linier berganda.Dalam upaya mengetahui besaran pengaruh dan korelasi variabel bebas terhadap variabel terikat. Selnjutnya untuk mengetahui signifikansi pengaruh dan korelasi tersebut juga menggunakan uji-t.

d. Contoh Alat Analisis untuk Pengujian hipotesis.

1. Hipotesis (1) :

Usaha tani ………… menguntungkan dengan tingkat keuntungan minimal 20 % ( Hipotesis Deskriptif )

Alat analisis :

2. Hipotesis (2) :
Keuntungan perhektar usaha tani monokultur lebih besar dari usaha tani polikultur ( hipotesis Komparatif)

Alat Analisis :
Uji signifikasi beda rata – rata keuntungan menggunakan uji – t.

= t tabel.

Kaidah keputusan :

> t tabel = menunjukan adanya perbedaan yang signifikan antara
keuntungan monokultur dengan polikultur.

3. Hipotesis (3)

Faktor input lahan (X1), tenaga kerja (X2), dan pupuk ( X3) berpengaruh positif signifikan terhadap produksi (Y).

Alat analisis :
Y = f ( X1, X2, X3 )
LnY = + Ln + Ln + t

Misalnya :
LnY = 50 + 0.3 Ln X1 + 0.4 Ln X2 + 0.7 Ln X3

R2 = 0.89.
Besaran panjang ;
• terhadap Y ditunjukan = + 0.3
• terhadap Y di tunjukan = + 0.4
• terhadap Y di tunjukan = + 0.7
• Pengaruh X1, X2 , X3 secara bersama – sama terhadap Y di tunjukan koefisien determinasi ( R2 = 0.89 )
Sebelum besaran pengaruh di maknakan perlu di lakukan uji signifikasi pengaruh .

a. uji signifikasi pengaruh X1 , X2, X3 secara parsial menggunakan uji – t
> = berpengaruh signifikan terhadap Y
> = X2 berpengaruh signifikan terhadap Y
> = X3 berpengaruh signifikan terhadap Y

b. untuk menguji signifikasi pengaruh X1 , X2, X3 secara bersama – sama terhadap Y menggunakan uji – F.

> : X1 , X2, X3 secara bersama – sama berpengaruh
signifikan terhadap Y.

4. Hipotesis (4) :

Alokasi faktor produksi lahan ( X1), tenaga kerja (X2), dan Pupuk (X3) belum efisien ( hipotesis deskriptif dan hipotesis komperatif).

Alat analisis:

Misal :

> 1 penggunaan input X1 belum efisien dan perlu di tambah
= 1 Penggunaan input X1 telah efisien
0 layak

2. Gross =
Gross > 1 layak

3. Net =
Net > 1 layak

4. IRR ( Internal Rate Of Return)
IRR > r layak

Keterangan ;
r = suku bunga


a. Hasil Penelitian
Hasil penelitian dipaparkan melalui hasil estimasi model empiris dengan menggunakan teori yang relevan. Pemaparan hasil penelitian dilakukan setelah melakukan perhitungan dengan menngunakan alat analisis dan cara pengujian hipotesis yang relevan.

b. Pembahasan
Dalam sub-bab ini dipaparkan penafsiran secara teoritis yang berhubungan hasil penelitian, Kekutan tulisan terletak pada pemaparan hasil estimasi yang ditafsir ecara teoriris. Rujukan penelitian sejenis terutama hasil penelitian yang terpubliksi dapat digunakan sebagai pembanding untuk mempertajam pemaknaan hasil penelitian guna mendapatkan kesimpulan yang tepat. Pembahasan juga dapat memuat implikasi temuan untuk membantu pengambilan kebijakan, penarikan kesimpulan, pengembangan teori, dan atau prediksi untuk topik yang diteliti.


1, Kesimpulan
Kesimpulan memuat abstraksi temuan pokok atau inti temuan dalam laporan penelitian.

2. Saran
Saran memuat rekomendasi untuk kebijakan, prediksi, rintisan untuk penelitian lebih lanjut. Saran harus dibuat sejalan dan sesuai dengan temuan penelitian.


Latar Belakang
Universitas Indonesia bercita-cita menjadi Universitas riset kelas dunia. Untuk mewujudkan universitas riset diantaranya diperlukan kegiatan untuk meningkatkan jumlah dan kualitas penelitian. Harian The Times Inggris menampilkan hasil survei peringkat perguruan tinggi (PT) terkemuka, dari data tahun 2006 dan 2007 tiga besar dunia diduduki Harvard University (AS), University of Cambridge (Inggris) dan University of Oxford (Inggris). Universitas Indonesia termasuk dalam 500 besar, dimana peringkat UI pada tahun 2006 (ke-250) yang disusul setelahnya adalah ITB (ke-258) dan UGM (ke-270). Sedangkan pada tahun 2007 peringkat UI mengalami penurunan (peringkat ke-395), dibawah UGM (ke-360) dan ITB (ke-369). Parameter yang dinilai diantaranya adalah jumlah dan kualitas penelitian, kualitas pendidikan, kualitas dosen/peneliti, jumlah dan kualitas mahasiswa.

Usaha untuk mewujudkan UI menjadi universitas kelas dunia memang tidak mudah. Kelemahan utama lebih disebabkan oleh motivasi dosen untuk meneliti hanya dikaitkan dengan usaha kenaikan pangkat kepegawaian. Sivitas akademika Universitas Indonesia merupakan sumber daya yang dituntut untuk memiliki kemampuan yang lebih dari masyarakat biasa karena kapasitasnya yang lebih intens berinteraksi dengan ilmu pengetahuan. Hal tersebut sudah sepatutnya mampu mengaktualisasikan kompetensinya bukan sekedar kegiatan penelitian, tetapi mampu untuk menulis hasil penelitian tersebut dalam media publikasi baik yang bertaraf nasional, regional, maupun internasional. Yang pada akhirnya dapat berkontribusi positif bagi permasalahan dan kesejahteraan bangsa.

Road map penelitian UI sampai dengan tahun 2012 bersifat lintas dan multidisiplin dengan tema utama “perkotaan” (urban) yang berfokus pada bidang unggulan mutakhir atau yang berada digaris terdepan untuk pengembangan ilmu pengetahuan, teknologi, budaya dan seni, seperti : Nano Science and Technology, Genome Technology, Information and Communication Technology, Policy Studies dan Indigenous Studies. Dengan adanya acuan kebijakan umum tentang arah pengembangan UI 2007-2012, maka UI melakukan penelitian terapan bersifat inter disiplin atau rumpun ilmu (Kesehatan, Sains-Teknologi, Sosial-Humaniora) yang diarahkan bagi penyelesaian peningkatan kualitas hidup dan peri- kehidupan masyarakat serta pengentasan kemiskinan. UI dalam visinya menjadi universitas riset harus mampu mendorong universitas menjadi sebuah entitas penghasil pengetahuan baru dengan memberikan prioritas yang tinggi pada penelitian.

Untuk menuju peringkat UI yang lebih baik dalam level internasional, diantaranya diperlukan jumlah dan mutu penelitian ilmiah yang dipublikasikan secara internasional oleh dosen ataupun peneliti UI. Untuk hal tersebut diperlukan peningkatan pengetahuan untuk menulis artikel ilmiah internasional, melalui pelatihan penulisan artikel untuk jurnal internasional. Dalam hal ini, Direktorat Riset dan Pengabdian Masyarakat (DRPM) UI bekerjasama dengan unit riset dan pengabdian masyarakat fakultas atau program pasca sarjana di lingkungan Universitas Indonesia melaksanakan pelatihan penulisan artikel untuk jurnal internasional secara terpusat bagi para staf pengajar/dosen/peneliti di Universitas Indonesia, melalui dana isian pelaksanaan anggaran (DIPA-tahun 2008) Dikti. Kegiatan yang dilakukan dikelompokkan dalam tiga rumpun ilmu yaitu Kesehatan, Sains-Teknologi, dan Sosial-Humaniora.

Maksud dan Tujuan

Dalam rangka mengorganisasi kegiatan pelatihan penulisan artikel ilmiah yang ada di lingkungan Universitas Indonesia, maka DRPM UI mencoba untuk menyatukan kegiatan Pelatihan Penulisan Artikel Ilmiah untuk Jurnal Internasional secara terpusat dalam rumpun keilmuwan. Adapun tujuan dari kegiatan ini adalah :
1. Memberikan pengetahuan bagi para peneliti yang belum berpengalaman dalam menulis artikel ilmiah di jurnal internasional, khususnya bagi dosen/peneliti muda
2. Mengembangkan pengetahuan dan meningkatkan kualitas penulisan artikel ilmiah
bagi para dosen/peneliti
3. Menjalin hubungan yang erat antara para peneliti di masing-masing rumpun bidang
4. Mendorong dan meningkatkan jumlah publikasi hasil riset para dosen/peneliti.

Ruang Lingkup

Ruang lingkup Pelatihan Penulisan Artikel Ilmiah untuk Jurnal Internasional ini meliputi Dasar-dasar penulisan karya tulis ilmiah (untuk rumpun ilmu Kesehatan, ilmu Sains-Teknologi, dan ilmu Sosial-Humaniora); Hal-hal yang perlu dan tidak perlu dilakukan dalam penulisan karya tulis ilmiah; Penulisan artikel ilmiah dalam bahasa inggris yang baik dan benar (untuk rumpun ilmu Kesehatan, Sains-Teknologi, dan Sosial-Humaniora); Kiat penyampaian artikel ilmiah ke jurnal internasional; Pengalaman Penulisan Artikel Ilmiah Jurnal Internasional (untuk rumpun ilmu Kesehatan, Sains-Teknologi, dan Sosial-Humaniora); dan Penyusunan dan perbaikan proposal artikel ilmiah oleh masing-masing peserta yang akan dikirim ke jurnal internasional (untuk rumpun ilmu Kesehatan, Sains-Teknologi, dan Sosial-Humaniora).

Metode Penelitian

Metode pelatihan penulisan artikel ilmiah ini meliputi : ceramah, praktik penulisan artikel ilmiah, dan diskusi oleh para ahli di semua rumpun ilmu.

Kategori Pelatihan

Kategori pelatihan yang dilaksanakan oleh DRPM UI terdiri atas :
1. Pelatihan Penulisan Artikel Ilmiah untuk Jurnal Internasional di rumpun ilmu Kesehatan yang terdiri dari Fakultas Kedokteran, Fakultas Kedokteran Gigi, Fakultas Kesehatan Masyarakat, Fakultas Ilmu Keperawatan, dan Program Pascasarjana.
2. Pelatihan Penulisan Artikel Ilmiah untuk Jurnal Internasional di rumpun ilmu Sains dan Teknologi yang terdiri dari Fakultas Ilmu Komputer, Fakultas Matematika dan Ilmu Pengetahuan Alam, Fakultas Teknik, dan Program Pascasarjana.
3. Pelatihan Penulisan Artikel Ilmiah untuk Jurnal Internasional di rumpun ilmu Sosial-Humaniora yang terdiri dari Fakultas Ekonomi, Fakultas Ilmu Sosial dan Ilmu Politik, Fakultas Hukum, Fakultas Psikologi, Program Pascasarjana dan Fakultas Ilmu Budaya.


Sasaran Pelatihan

Sasaran pelatihan ini adalah para staf pengajar/dosen/peneliti yang ada di Universitas

Materi Pelatihan, Pembicara, dan Fasilitator

No. Materi Pembicara dan Fasilitator
a. Dasar-dasar penulisan karya tulis ilmiah (untuk rumpun ilmu Kesehatan, Sains-Teknologi, dan Sosial-Humaniora) Abdul Fatah Lauder, M.A

b. Hal-hal yang perlu dan tidak perlu dilakukan dalam penulisan artikel ilmiah (untuk rumpun ilmu Kesehatan, Sains-Teknologi, dan Sosial-Humaniora) Abdul Fatah Lauder
c. Penulisan artikel ilmiah dalam bahasa inggris yang baik dan benar (untuk rumpun ilmu Kesehatan, Sains-Teknologi, dan Sosial-Humaniora) Abdul Fatah Lauder
d. Kiat penyampaian artikel ilmiah ke jurnal internasional (Elsevier_iGroup)
(untuk rumpun ilmu Kesehatan, Sains-Teknologi, dan Sosial-Humaniora) Helwis Tjhai

e. Pengalaman Penulisan Artikel Ilmiah Jurnal Internasional (untuk rumpun ilmu Kesehatan, Sains-Teknologi, dan Sosial-Humaniora) 1. Prof. Jeanne A. Pawitan, Ph. D
2. Dr. Terry Mart
3. Bantarto Bandoro, SH., MA
f. Penyusunan dan perbaikan proposal artikel ilmiah oleh masing-masing peserta yang akan dikirim ke jurnal internasional (untuk rumpun ilmu Kesehatan, Sains-Teknologi, dan Sosial-Humaniora)
Fasilitator Rumpun Ilmu Kesehatan
1. Prof. Jeanne A. Pawitan, Ph. D
2. Prof. Dr. Budi Utomo, MPH, Ph.D
3. Dr. Budi Haryanto, SKM, MKM, MSc
4. dr Isnani Azizah Salim Suryono MS
5. Prof. dr Saleha Sungkar DAP&E, MS, SpParK
Fasilitator Rumpun Ilmu Sains-Teknologi
1. Dr. Terry Mart
2. Prof. Drs. Benyamin Kusumoputro, M.Eng, Dr.Eng
3. Ir. Wahidin Wahab, MS.c, Ph.D
4. Dr. Ir. Bondan Tiara Sofyan, M.Si
5. Dr. Dwi Susilaningsih

Fasilitator Rumpun Ilmu Sosial-Humaniora
1. Bantarto Bandoro, SH., MA
2. Arianto Arif Patunru, Dr.
3. Prof. Dr. Melani Budianta
4. Yetty Komalasari Dewi SH., ML.I
5. Dr. Dra. Sulistyowati Suwarno M.A
6. Abdul Fatah Lauder, M.A

Waktu dan Tempat Pelatihan

Pelatihan Penulisan Artikel Ilmiah untuk Jurnal Internasional ini diadakan pada tanggal 21-23 Juli 2008, selama satu hari per rumpun ilmu (Kesehatan, Sains-Teknologi, dan Sosial-Humaniora). Pelatihan ini dilaksanakan di 2 tempat yaitu di ITTC Gd. IASTH, Lt.2 kampus UI Salemba (untuk rumpun ilmu Kesehatan) dan di ITTC Gd. A, Perpustakaaan Pusat Kampus UI Depok (untuk rumpun ilmu Sains-Teknologi dan Sosial-Humaniora).
Rangkaian Pelatihan ini dilanjutkan dengan kegiatan Bimbingan Draft Artikel selama 4 hari yaitu pada tanggal 4 Agustus untuk fasilitator Arianto Arief Patunru SE, MSc, PhD; Dr. Dra. Sulistyowati Suwarno M.A; dan Yetty Komalasari Dewi SH., ML.I. Pada tanggal 5 Agustus untuk fasilitator Prof. Drs. Benyamin Kusumoputro, M.Eng, Dr.Eng; Dr. Terry Mart; Ir. Wahidin Wahab, M.Sc., Ph.D; Dr. Ir. Bondan Tiara Sofyan, M.Si; dan Bantarto Bandoro, SH., MA. Tanggal 6 Agustus 2008 untuk fasilitator Prof. dr. Saleha Sungkar, DAP&E, MS, Sp. Par (K); dr. Isnaini Azizah Salim Suryono, MS; dan pada tanggal 7 Agustus 2008 untuk fasilitator Prof. Dr. Melani Budianta; Prof. Budi Utomo, MPH, Ph.D. Kegiatan bimbingan tersebut diadakan di Gedung DRPM UI Lantai Dasar kampus UI Depok, dimulai pada pukul 09.00 sampai dengan 12.00 WIB.

Persyaratan Bagi Peserta Pelatihan

1. Lebih baik jika sudah mempunyai draft artikel
2. Membawa contoh jurnal Internasional atau contoh format artikel Jurnal Internasional yang menjadi tujuan publikasi (jika ada)
3. Seluruh biaya pelatihan ditanggung oleh DRPM UI melalui dana isian pelaksanaan anggaran (DIPA-tahun 2008) Dikti
4. Sertifikasi bagi peserta diberikan apabila yang bersangkutan mengikuti seluruh kegiatan yang dijadwalkan.

Jadwal Kegiatan

Hari Pertama
Waktu dan Tempat : Senin, 21 Juli 2008 bertempat di ITTC Gd. IASTH, Lt.2
kampus UI Salemba

Rumpun Ilmu Kesehatan
08.00-08.30 : Registrasi
08.30-08.45 : Sambutan Direktur DRPM UI sekaligus membuka kegiatan pelatihan (Bachtiar Alam, PhD)
08.45-09.45 : Dasar-dasar penulisan artikel ilmiah ilmu Kesehatan
Pembicara : Abdul Fatah Lauder, M.A
Moderator : Dr. Budiarso, M.Eng
09.45-10.00 : Rehat Kopi
10.00-11.00 : Hal-hal yang perlu dan tidak perlu dilakukan dalam penulisan artikel ilmiah
Pembicara : Abdul Fatah Lauder, M.A
Moderator : Bachtiar Alam, Ph.D.
11.00-12.00 : Penulisan artikel ilmiah dalam bahasa Inggris yang baik dan benar
Pembicara : Abdul Fatah Lauder, M.A
Moderator : Bachtiar Alam, Ph.D
12.00-13.00 : Ishoma
Diskusi Panel
13.00-13.30 : Kiat penyampaian artikel ilmiah ke jurnal internasional
Pembicara : Helwis Tjhai (Elsevier – Library Connect)
Moderator : Dr. Budiarso M.Eng.
13.30-14.30 : Pengalaman Penulisan Artikel Ilmiah Jurnal Internasional
Pembicara : Prof. Jeanne A. Pawitan, Ph.D
Moderator : Dr. Budiarso M.Eng.

14.30-16.00 : Penyusunan dan perbaikan proposal artikel ilmiah oleh masing- masing peserta yang akan dikirim ke jurnal internasional
Semua Fasilitator :
1. Prof. Jeanne A. Pawitan, Ph. D
2. Prof. Dr. Budi Utomo, MPH, Ph.D
3. Dr. Budi Haryanto, SKM, MKM, MSc
4. dr Isnani Azizah Salim Suryono MS
5. Prof. dr Saleha Sungkar DAP&E, MS, SpParK
Penanggung Jawab : Dr. Yoki Yulizar dan Dr. Budiarso, M.Eng
16.00-16.15 : Rehat Kopi
16.15-16.30 : Penutupan oleh Direktur DRPM UI (Bachtiar Alam, PhD)

Hari Kedua
Waktu dan Tempat : Selasa, 22 Juli 2008 bertempat di ITTC Gd. A, Perpustakaan Pusat-Kampus UI Depok

Rumpun Ilmu Sains-Teknologi
08.00-08.30 : Registrasi
08.30-08.45 : Sambutan Direktur DRPM UI sekaligus membuka kegiatan pelatihan (Bachtiar Alam, Ph.D)
08.45-09.45 : Dasar-dasar penulisan artikel ilmiah ilmu Sains-Teknologi
Pembicara : Abdul Fatah Lauder, M.A
Moderator : Fatma Lestari, PhD
09.45-10.00 : Rehat Kopi
10.00-11.00 : Hal-hal yang perlu dan tidak perlu dilakukan dalam penulisan artikel ilmiah
Pembicara : Abdul Fatah Lauder, M.A
Moderator : Fatma Lestari, PhD
11.00-12.00 : Penulisan artikel ilmiah dalam bahasa Inggris yang baik dan benar
Pembicara : Abdul Fatah Lauder, M.A
Moderator : Fatma Lestari, PhD
12.00-13.00 : Ishoma
Diskusi Panel
13.00-13.30 : Kiat penyampaian artikel ilmiah ke jurnal internasional
Pembicara : Helwis Tjhai (Elsevier – Library Connect)
Moderator : Dr. Yoki Yulizar
13.30-14.30 : Pengalaman Penulisan Artikel Ilmiah Jurnal Internasional
Pembicara : Dr. Terry Mart
Moderator : Dr. Yoki Yulizar
14.30-16.00 : Penyusunan dan perbaikan proposal artikel ilmiah oleh masing- masing peserta yang akan dikirim ke jurnal internasional
Semua Fasilitator :
1. Dr. Terry Mart
2. Prof. Drs. Benyamin Kusumoputro, M.Eng, Dr.Eng
3. Ir. Wahidin Wahab, MS.c, Ph.D
4. Dr. Ir. Bondan Tiara Sofyan, M.Si
5. Dr. Dwi Susilaningsih
Penanggung jawab : Dr. Yoki Yulizar dan Dr. Budiarso, M.Eng
16.00-16.15 : Rehat Kopi
16.15-16.30 : Penutupan oleh Direktur DRPM UI (Bachtiar Alam, Ph.D)

Hari Ketiga
Waktu dan Tempat : Rabu, 23 Juli 2008 bertempat di ITTC Gd. A, Perpustakaaan
Pusat-Kampus UI Depok

Rumpun Ilmu Sosial-Humaniora
08.00-08.30 : Registrasi
08.30-08.45 : Sambutan Direktur DRPM UI sekaligus membuka kegiatan pelatihan (Bachtiar Alam, Ph.D)

08.45-09.45 : Dasar-dasar penulisan artikel ilmiah ilmu Sosial-Humaniora
Pembicara : Abdul Fatah Lauder, M.A
Moderator : Tirta N. Mursitama, Ph.D
09.45-10.00 : Rehat Kopi
10.00-11.00 : Hal-hal yang perlu dan tidak perlu dilakukan dalam penulisan artikel ilmiah
Pembicara : Abdul Fatah Lauder, M.A
Moderator : Tirta N. Mursitama, Ph.D
11.00-12.00 : Penulisan artikel ilmiah dalam bahasa Inngris yang baik dan benar
Pembicara : Abdul Fatah Lauder, M.A
Moderator : Tirta N. Mursitama, Ph.D
12.00-13.00 : Ishoma
Diskusi Panel
13.00-13.30 : Kiat penyampaian artikel ilmiah ke jurnal internasional
Pembicara : Helwis Tjhai (Elsevier – Library Connect)
Moderator : Bachtiar Alam, Ph.D
13.30-14.30 : Pengalaman Penulisan Artikel Ilmiah Jurnal Internasional
Pembicara : Bantarto Bandoro, SH., MA
Moderator : Tirta N. Mursitama, Ph.D
14.30-16.00 : Penyusunan dan perbaikan proposal artikel ilmiah oleh masing- masing peserta yang akan dikirim ke jurnal internasional
Semua Fasilitator :
1. Bantarto Bandoro, SH., MA
2. Arianto Arif Patunru, Dr.
3. Prof. Dr. Melani Budianta
4. Yetty Komalasari Dewi SH., ML.I
5. Dr. Dra. Sulistyowati Suwarno M.A
6. Abdul Fatah Lauder, M.A
Penanggung Jawab : Tirta N. Mursitama, Ph.D, Dr. Yoki Yulizar, dan Dr. Budiarso, M.Eng

16.00-16.15 : Rehat Kopi
16.15-16.30 : Penutupan oleh Direktur DRPM UI (Bachtiar Alam, Ph.D)

Dana Pelatihan
Biaya untuk pelatihan ini dibiayai dari DRPM UI melalui dana isian pelaksanaan anggaran (DIPA-tahun 2008) Dikti.

Penanggung Jawab : Bachtiar Alam, PhD (Direktur DRPM UI)

Panitia Pengarah : 1. Bachtiar Alam, PhD (Direktur DRPM UI)
2. Dr. Budiarso, M. Eng (Wakil Direktur DRPM UI)

Panitia Pelaksana :
1. Ketua : Dr. Yoki Yulizar
Wakil Ketua : Dra. Fatma Lestari, M.Si., Ph.D
Tirta N. Mursitama, Ph.D
2. Sekretariat dan Registrasi : AAA. Ratna Dewi, Msi., Ak
Lenny Maykel Muliawati, SKM
Vera Andriyani, SKM
Dwi Dharmaningsih, S.Kp
Wanti Wulandari, S.Si
3. Undangan : Cucu Sukaesih
Lenny Maykel MW, SKM
Krestika Widyana D.S, Amd
Dina Nur Wulandari, S.Kp
4. Bendahara/Konsumsi : Rr. Tutik Sri Hariyati Skp., MARS
Melly Riana, SKM
Almira Gitta
5. Acara/Persidangan : Suharti, Amd
Ns. Aklia Suslia, S. Kep
Amalia Kamila, S. Si
6. Publikasi/Dokumentasi : Ahmad Nizhami, S.Si
Agung Citra
Raditya Margi
M. Prabu W
7. Perlengkapan/Akomodasi : Sudarmaji, M.Si
Mukhlis Sutami, S.Pd
Maman Suherman
8. Panitia Penyusun Materi :
Bachtiar Alam, Ph.D (DRPM UI)
Dr. Budiarso, M. Eng (DRPM UI)
Dr. Yoki Yulizar (DRPM UI)
Dra. Fatma Lestari, M.Si., Ph.D (DRPM UI)
Tirta N. Mursitama, Ph.D (DRPM UI)

Uraian Tugas Kepanitiaan
● Penanggung Jawab :
Bertanggung jawab terhadap keseluruhan kegiatan pelatihan (Penulisan Artikel
Ilmiah untuk Jurnal Internasional).

● Panitia Pengarah :
1. Memberikan pengarahan dan memantau berlangsungnya kegiatan pelatihan yang akan dilaksanakan.

● Ketua dan Wakil Ketua :
1. Merencanakan dan menyusun kegiatan pelatihan yang akan dilakukan
2. Memberi pengarahan kepada anggota panitia lainnya tentang kegiatan
pelatihan yang akan dilangsungkan
3. Memberi masukan materi dan pembicara pada pelatihan yang akan dilaksanakan
4. Mengkoordinasi seluruh kegiatan pelatihan dengan seluruh tim kerja sesuai dengan
jadwal yang telah ditentukan.

● Kesekretariatan/Registrasi/Undangan :
1. Mengkoordinasi dan mempersiapkan surat menyurat dan pengirimannya dari persiapan sampai selesai;
2. Mempersiapkan undangan ke pembicara untuk tiap sesi pelatihan;
3. Mempersiapkan undangan ke peserta, yaitu para staf pengajar/peneliti/dosen dari tiap fakultas di Lingkungan UI;
4. Memastikan jumlah peserta dengan mengkonfirmasi kehadiran calon peserta dan membuat daftar peserta untuk disampaikan kepada bagian registrasi;
5. Menyiapkan daftar peserta dan memonitor kehadiran peserta;
6. Menyiapkan materi pelatihan untuk para peserta, dan pada hari pelaksanaan sudah tersedia pada meja registrasi;
7. Menyiapkan segala bentuk informasi;
8. Mengkonfirmasi kepada moderator;
9. Menyiapkan daftar peserta;
10. Membuat notulensi rapat;
11. Membuat arsip kegiatan Pelatihan (Penulisan Artikel Ilmiah untuk Jurnal Internasional)
12. Membuat laporan pertanggungjawaban kegiatan pelatihan (Penulisan Artikel Ilmiah untuk Jurnal Internasional).

● Bendahara/Konsumsi :
1. Menyiapkan anggaran dan permohonan pencairan dana ke pihak Dir.
keuangan UI;
2. Menangani masalah keuangan untuk peminjaman ruang ITTC Gd. A, Perpus Pusat dan Laboratorium komputer Lt.2, Gd. BNI Program Pascasarjana, kampus UI Salemba
3. Mengatur aliran dana/cashflow dana;
4. Membuat laporan pertanggungjawaban keuangan;
5. Memastikan dan memonitor jumlah makanan yang dipesan baik untuk unit setiap rehat maupun makan siang;
6. Check kesiapan ruang untuk rehat dan makan siang.

● Acara/Persidangan
1. Mengatur jalannya pelatihan, sesi/presentasi;
2. Menyiapkan acara dan Memonitor jalannya acara;
3. Menghubungi dan meminta konfirmasi pembicara;
4. Memastikan keberadaan moderator;
5. Memastikan file presentasi peserta sudah di copy ke CPU komputer;
6. Bila dianggap perlu maka bisa menggantikan posisi moderator.
7. Mendampingi tamu undangan;
8. Menyiapkan MC.

● Perlengkapan/Akomodasi
1. Menyiapkan semua peralatan yang dibutuhkan dalam ruangan, seperti : LCD, Komputer/lap top, kabel gulung, sound sytem, pengaturan meja dalam ruang, timer, pointer, layar, menyiapkan meja registrasi dan perlengkapannya, dan mengatur dekorasi;
2. Memasang Back-Drop dan Spanduk;
3. Mengurus ijin pemasangan ke UPT PLK UI;
4. Memastikan kesiapan ruangan dan perlengkapannya, di hari pelaksanaan.

● Dokumentasi/Publikasi
1. Menyiapkan bahan-bahan materi yang akan dipresentasikan;
2. Mengatur format;
3. Menyiapkan dan membuat disain materi publikasi (backdrop, spanduk, flayer);
4. Mencari dan mengabadikan momen-momen penting.

● Panitia Penyusun Materi:
Mempersiapkan dan meyusun bahan materi pelatihan penulisan artikel ilmiah untuk
jurnal Internasional, yang terbagi dalam rumpun ilmu Kesehatan, Sains-Teknologi,
dan Sosial-Humaniora.

Jadwal Pelatihan
1. Persiapan :
a. Melakukan pembuatan proposal untuk diajukan ke pimpinan DRPM UI
b. Peserta diprioritaskan adalah staf pengajar/dosen/peneliti di lingkungan UI
c. Sosialisasi kegiatan pelatihan ke setiap fakultas dan program pascasarjana di
lingkungan UI

2. Pelaksanaan
Jadwal pelatihan terlampir

3. Evaluasi
Dilakukan pada akhir pelatihan agar dapat diketahui kekurangan dan kelebihan
dari pelatihan, sehingga pelatihan berikutnya dapat berjalan dengan lebih baik.


Pelatihan Tanggal 21-23 Juli 2008

Pelatihan Penulisan Artikel Ilmiah untuk Jurnal Internasional diadakan selama 3 hari per rumpun ilmu, yaitu pada tanggal 21 Juli untuk rumpun ilmu kesehatan, 22 Juli untuk rumpun ilmu sains-teknologi, dan 23 Juli 2008 untuk rumpun ilmu sosial-humaniora. Pelatihan ini diadakan di dua tempat, pada tanggal 21 Juli 2008 pelatihan diadakan di Gedung IASTH Lt.1 dan 3, PascaSarjana kampus UI Salemba. Sedangkan pada tanggal 22&23 Juli 2008 pelatihan diadakan di Gedung ITTC Pusat Lt.3 dan Ruang Lab.Komputer Lt.1 Perpustakaan Pusat kampus UI Depok. Jumlah peserta yang mendaftar sebanyak 217 peserta yang terdiri dari 98 peserta dari rumpun ilmu kesehatan, 56 peserta dari rumpun ilmu sains-teknologi, dan 63 peserta dari rumpun ilmu sosial-humaniora. Sedangkan jumlah peserta yang datang dan mengikuti pelatihan ini sebanyak 179 peserta (untuk ke tiga rumpun ilmu), dan draft artikel yang dikumpulkan sebanyak 48 draft (terdapat pada lampiran A).

Pada hari pertama, Pelatihan di buka oleh Dr. Budiarso M.Eng selaku wakil direktur DRPM UI. Pelatihan hari pertama dimulai pada pukul 09.00 WIB sampai dengan pukul 16.30 WIB dan dihadiri oleh 76 peserta, yang terdiri dari 6 orang dari Fakultas Ilmu Keperawatan, 16 orang dari Fakultas Kesehatan Masyarakat, 1 orang dari Program Pascasarjana, 26 orang dari Fakultas Kedokteran, dan 27 dari Fakultas Kedokteran Gigi. Pada sesi pertama materi yang diberikan adalah Dasar-Dasar Penulisan Artikel Ilmiah dengan pembicara Abdul Fattah Lauder, M.A (Lampiran 1 : Getting Your research Published Internationally, 1 Strategies for getting your research article (RA) published internationally, 3 Targeting specific journals in your field : A demonstration) dan dimoderatori oleh Dr. Budiarso M.Eng. Kemudian acara diselingi dengan rehat kopi yang kemudian dilanjutkan materi tentang Hal-hal yang Perlu dan Tidak Perlu Dilakukan Dalam Penulisan Artikel Ilmiah (Lampiran 2 : 3 Demonstration on Citation Management), dengan pembicara Abdul Fattah Lauder, M.A dan dimoderatori oleh Bachtiar Alam, Ph.D. Sesi selanjutnya adalah materi tentang Penulisan Artikel Ilmiah dalam Bahasa Inggris yang Baik dan Benar (Lampiran 3 : 2 Writing Research Articles (Ras) in English) dengan pembicara Abdul Fattah Lauder, M.A dan dimoderatori oleh Bachtiar Alam, Ph.D.

Setelah pembicara A. Lauder selesai, materi selanjutnya di isi oleh perwakilan dari i_Group dengan judul Kiat Penyampaian Artikel Ilmiah ke Jurnal Internasional (Lampiran 4 : Guidelines for International Journal Contributors) yang diberikan oleh Helwis Tjhai dan dimoderatori oleh Dr. Budiarso M.Eng. Dalam sesi keempat ini ada pertanyaan dari Prof. Jeanne A. Pawitan Ph.D, yang secara lengkap dapat terangkum di bawah ini :
• Jeanne dari FK : Adakah definisi yang baku dari Jurnal Internasonal?
• Helwis Tjhai : Tidak ada definisi yang baku. Yang jelas asal setidaknya menulis berupa abstrak, itu sudah bisa di katakan jurnal internasional jika minimal dimasukkan ke dalam jurnal online.
Sebelum ke materi selanjutnya acara diselingi dengan ISHOMA, pada pukul 12.00-13.00 WIB. Kemudian acara dilanjutkan dengan materi dari Prof. Dr. Jeanne A. Pawitan tentang Pengalaman Penulisan Artikel Ilmiah Jurnal Internasional (Lampiran 5 : Pengalaman penulisan artikel ilmiah jurnal internasional untuk rumpun ilmu kesehatan) dan dimoderatori oleh Dr. Budiarso M.Eng. Pada sesi ini ada pertanyaan dari peserta yang kami rangkum sebagai berikut :
• No name, FIK : Jika artikel ditulis lebi dari 1 orang, apakah kesemuanya harus membubuhkan tanda tangan atau tidak?
Prof. Jeanne : Tergantung jurnal, ada yang meminta ada pula yang tidak.

Pada sesi terakhir para peserta pindah ruangan menuju ke ruang komputer untuk melakukan penyusunan draft artikel dalam bahasa Inggris, yang dibimbing oleh fasilitator dari masing-masing fakultas atau bidang ilmu yang ada dengan penanggung jawab kegiatan ini adalah Dr. Yoki Yulizar dan Dr. Budiarso M.Eng.

Sedangkan pada hari kedua, pelatihan dibuka oleh Bachtiar Alam, PhD selaku Direktur DRPM UI. Pelatihan hari kedua dimulai pada pukul 09.00 WIB sampai dengan pukul 16.30 WIB. Dihadiri oleh 37 peserta dari rumpun ilmu sains-teknologi yang terdiri dari 5 orang dari Fakultas Ilmu Komputer, 11 orang dari Fakultas Teknik, 19 orang dari Fakultas Matematika dan Ilmu Pengetahuan Alam, dan 2 orang dari Program Pascasarjana. Pada sesi pertama materi yang diberikan adalah Dasar-Dasar Penulisan Artikel Ilmiah (Lampiran 6 : Getting Your research Published Internationally, 1 Strategies for getting your research article (RA) published internationally, 3 Targeting specific journals in your field : A demonstration) dengan pembicara Abdul Fattah Lauder, M.A dan dimoderatori oleh Fatma Lestari, PhD. Dalam sesi ini ada beberapa pertanyaan dari para pesrta yang kami rangkum sebagai berikut :
• Yugo, Fasilkom : Apakah editor melakukan check and re-check terhadap kemungkinan terjadinya plagiarsm?
Mr. Lauder : Editor tidak melakukan check and re-check terhadap kemungkinan plagiarsm. Selain itu juga terdapat perbedaan budaya tentang plagiarsm antara Indonesia dan dunia Internasional pada umumnya.
• No Name : Bagaimana cara yang etis untuk menulis materi yang sama di jurnal yang berbeda misalnya di jurnal nasional dan internasional?
Mr. Lauder : Tergantung dari jurnalnya. Ada yang boleh ada juga yang tidak memperbolehkan jurnal yang sudah pernah di publikasikan sebelumnya.
• Rita, FMIPA : Jika proses publikasi sebuah karya memakan waktu selama empat tahun, apakah itu masih bisa dikategorikan sebagai new findings?
Mr. Lauder : Bisa saja. Selama belum ada yang membahas materi yang sama.
Kemudian acara diselingi dengan rehat kopi yang kemudian dilanjutkan materi tentang Hal-hal yang Perlu dan Tidak Perlu Dilakukan Dalam Penulisan Artikel Ilmiah (Lampiran 7 : 3 Demonstration on Citation Management), dengan pembicara Abdul Fattah Lauder, M.A dan dimoderatori oleh Fatma Lestari, PhD. Pada sesi ini ada 2 pertanyaan yang diajukan oleh peserta pelatihan yaitu :
• Rita, FMIPA : Untuk publish artikel ke jurnal internasional, apakah ada bantuan dari pihak lain untuk mengorganisirnya?
Mr. Lauder : Tidak ada. Karena ini adalah hanya antara saya (penulis), editor, dan publisher.
• Bondan, FT : Berapa penting hak paten dalam penerbitan jurnal internasional, apakah harus diminta pada publisher?
Mr. Lauder : Saya kurang tahu tentang hal itu. Tapi saya cenderung akan mengikuti hal-hal yang dilakukan orang lain pada hak paten mereka.
Sesi selanjutnya adalah materi tentang Penulisan Artikel Ilmiah dalam Bahasa Inggris yang Baik dan Benar (Lampiran 8 : 2 Writing Research Articles (Ras) in English) dengan pembicara Abdul Fattah Lauder, M.A dan dimoderatori oleh Fatma Lestari, PhD. Sesi ke tiga ini ada 4 pertanyaan dari peserta yang diajukan oleh nara sumber yang terdiri dari :
• Dewi, FT : Mengapa End-Note tidak bisa diakses di Indonesia? karena itu, saya menjadi agak tidak bersemangat dalam menulis, karena sulit untuk mendapatkan jurnal-jurnal sebagai citation.
Mr. Lauder : Mungkin karena UI belum berlangganan End-Note. Walaupun begitu, jangan menjadikan itu sebagai alasan untu tidak menulis. Karena sayang sekali. Masih ada cara-cara lain yang bisa dilakukan untuk mendapatkan jurnal maupun pencarian citation. Misalnya dengan Pro-Quest. Mengenai End-Note, mungkin bisa dilaporkan kepada pihak UI bahwa anda sangat membutuhkannya, agar bisa ditindaklanjuti untuk berlangganan End-Note. Jika Demand nya besar, maka UI juga akan mempertimbangkan untuk berlangganan.
• No Name : Saat ni saya berlangganan dua buah jurnal hanya dengan biaya sekitar 2 – 3 juta per tahun untuk membership dan subscribe. Mungkin itu menjadi salah satu cara untuk get link dengan jurnal internasional?
Mr. Lauder : Ya, saya setuju dengan anda. Itu adalah cara yang baik untuk menjalin network dan get link ke jurnal internasional.
• Rianti, MIPA : Selain bahasa, kendala apalagi yang menjadi barrier bagi peneliti Indonesia untuk publish internasionally?
Mr. Lauder : Salah satu kendala lain yang terbesar adalah masalah perbedaan pola pikir antara audience dari jurnal lokal dan jurnal internasional. Dan kebanyakan peneliti Indonesia belum menyadari hal tersebut.
• A.Herman, FT : Apakah bisa kami meminta soft copy dari presentasi anda hari ini?
Mr. Lauder : tentu saja bisa. Anda bisa menghubungi panitia untuk mendapatkan soft copy dari presentasi saya.

Kemudian acara dilanjutkan dengan materi yang berisi tentang Kiat Penyampaian Artikel Ilmiah ke Jurnal Internasional oleh Helwis Tjhai perwakilan dari iGroup (Lampiran 9 : Guidelines for International Journal Contributors) dan dimoderatori oleh Dr. Yoki Yulizar. Dalam sesi keempat ini ada 2 pertanyaan dari peserta, yang secara lengkap dapat terangkum di bawah ini :
• Wellizar MIPA : Akses ke jornal elektronik di UI Sangay terbatas walaupun UI telah berlangganan Elsevier dan beberapa jornal on-line lanilla. Maka kami membutuhkan jornal Life Science juga untuk dilanggan oleh UI demi memperlancar penelitian dan pembelajaran baik mahasiswa maupun dosen. Untuk itu, bagaimana regulasinya untuk berlangganan?
Helwis : Untuk berlangganan jurnal bisa dilanggan dan dibayar oleh universitas atau perpustakaan. Selain itu, bisa juga dibayar sebagian oleh facultas atau departemen. Tergantung perjanjian yang dilakukan. Untuk saat ini, jornal yang dilanggan UI baru sebatas Bisnis dan Ekonomi, bisa jadi karena harga jornal lain terlalu mahal.
• No Name FT : Dimana kami dapat mendapatkan informasi tentang pengaksesan jurnal elektronik?
Jurnal-jurnal yang dilanggan UI terkadang bahkan seringkali sulit untuk di download. Apa penyebabnya?
Helwis : Informasi tentang jornal elektronik biasanya disebarkan melalui website dan milist.
Penyebabnya mungkin karena masa trial nya sudah habis. Mungkin juga karena ID nya salah atau telah berubah.
Selesai sesi keempat, acara selanjutnya adalah ISHOMA pukul 12.00-13.00 WIB, yang kemudian dilanjutkan dengan materi dari Dr. Terry Mart tentang Pengalaman Penulisan Artikel Ilmiah Jurnal Internasional (Lampiran 10 : Pengalaman Publikasi di Jurnal Internasional) dan dimoderatori oleh Dr. Yoki Yulizar. Pada sesi ini ada pertanyaan dari peserta yang kami rangkum sebagai berikut :
• Budiarso DRPM : Biasanya jira kita sudah pernah mempublish artikel di statu comunitas /jurnal, maka selanjutnya kita cenderung akan publish ke jornal yang sama. Sebaiknya bagaimana? Apakah stick di satu tempat atau berbeda-beda?
Terry : biasanya kalau sudah sering publish di satu jurnal maka akan lebih mudah diterima di jurnal tersebut lagi.
• Yoki DRPM : Apakah di web site pribadi tidak boleh mencantumkan paper kita?
Terry : Boleh saja. Tetapi jadi membuka kemungkinan besar untuk di plagiat.
Pada sesi terakhir para peserta pindah ke ruangan komputer untuk melakukan penyusunan draft artikel dalam bahasa Inggris oleh masing-masing fasilitator yang telah ditunjuk, dengan penanggung jawab kegiatan ini adalah Dr. Yoki Yulizar dan Dr. Budiarso M.Eng.

Hari ketiga Pelatihan Penulisan Artikel Ilmiah untuk Jurnal Internasional di buka oleh Bachtiar Alam, PhD selaku Direktur DRPM UI. Pelatihan hari ketiga dimulai pada pukul 09.00 WIB sampai dengan pukul 16.00 WIB dan dihadiri oleh 66 peserta dari rumpun ilmu sosial-humaniora, yang terdiri dari 10 orang dari Fakultas Ekonomi, 12 orang dari Fakultas Hukum, 13 orang dari Fakultas Ilmu Budaya, 9 orang dari Fakultas Ilmu Sosial dan Ilmu Politik, 8 orang dari Fakultas Psikologi, 10 orang dari Program Pascasarjana, dan 4 orang dari Pusat Studi Jepang. Pada sesi pertama materi yang diberikan adalah Dasar-Dasar Penulisan Artikel Ilmiah (Lampiran 11 : Getting Your research Published Internationally, 1 Strategies for getting your research article (RA) published internationally, 3 Targeting specific journals in your field : A demonstration ) dengan pembicara Abdul Fattah Lauder, M.A yang dimoderatori oleh Tirta N. Mursitama, PhD. Dalam sesi ini ada beberapa pertanyaan dari para peserta yang kami rangkum sebagai berikut :
• No Name : Dalam jurnal ilmiah, dimana kita meletakkan “findings” yang diperoleh dari penelitian?
Mr. Lauder : Bisa diletakkan di jurnal asalkan memang menjadi penjelasan umum.
• Bachtiar,DRPM : IMRD hanya satu model dari penulisan ilmiah diantara banyak bentuk lainnya. Bagaimana pendapat anda?
Mr.Lauder : Sebelumnya saya tekankan bahwa IMRD bukanlah struktur baku satu-satunya. Biasanya IMRD digunakan untuk jurnal-jurnal natural science.
• No name, F. Psi : Bagaimana dengan non-IMRD artikel? Karena agak aneh jika jurnal sejenis filosofi-psikologi memakai bentuk IMRD.
Mr.Lauder : IMRD itu tidak universal melainkan hanya salah satu bentuk penulisan saja. Tetapi mungkin ada juga dalam filosofi. Intinya tiap artikel mempunyai strukture tersendiri. IMRD itu hanya salah satu bentuk untuk menyederhanakannya. Dan IMRD adalah salah satu dari sekian banyak struktur yang ada.
• Citra, F.Psi : Berapa banyak kata yang lazim dipakai dalam indroduction part?
Mr. Lauder : Sekali lagi tergantung peraturan dari jurnal masing-masing.
Kemudian acara diselingi dengan rehat kopi yang kemudian dilanjutkan dengan materi yang diberjudul Hal-Hal Yang perlu dan Tidak Perlu Dilakukan Dalam Penulisan Artikel Ilmiah (Lampiran 12 : 3 Demonstration on Citation Management) dengan nara sumber Abdul Fatah Lauder, M.A yang dimoderatori oleh Tirta N. Mursitama, PhD. Ada beberapa pertanyaan dari sesi ini yang kami rangkum sebagai berikut :
• Riska, F.Psi : Pada bagian introduction, dapatkah dimuali dari sebuah fenomena atau harus perkembangan teori terlebih dahulu?
Mr.Lauder : Mari perhatikan stage-stage yang telah diterangkan yaitu stage satu, dua, tiga. Mulai dari subtopic, penjelasan yang general, dan baru masuk ke penjelasan yang spesifik.
• Rizka, F.Psi : Bagaimana dengan komposisi dar tiap section-section dalam jurnl ilmiah?
Mr. Lauder : Anda bias menjawabnya sendiri dengan membaca notifications for author pada setiap jurnal. Karena beda jurna beda pula aturannya.
• Olmes, FE : Dimanakah perbedaan antara overview pada bagian introduction jurnal ilmiah dengan di literature?
Mr. Lauder : Overview di introduction itu pengantar dari penjelasan general ke area yang lebih spesifik.
Dalam sesi ketiga materi yang diberikan adalah Penulisan Artikel Ilmiah dalam Bahasa Inggris yang Baik dan Benar (Lampiran 13 : 2 Writing Research Articles (Ras) in English) dengan nara sumber yang sama yaitu Abdul Fatah Lauder, M.A dan dimoderatori oleh Tirta N. Mursitama, Ph. D. Ada beberapa pertanyaan dari sesi ini yang kami rangkum sebagai berikut :
• No Name : Bagaimana term-and condition dari penggunaan End-Note?
Mr. Lauder : Hal tersebut isa ditanyakan pada perpustakaan pusat UI.
• Hendri, FISIP : Apakah ada program lain untuk mengedit jurnal misalnya untuk edit body text?
Mr.Lauder : Ada tetapi mungkin belum dilanggan oleh UI. Laporkan saja kebutuhan anda kepada pihak yang berwenang, lalu mereka pasti akan mempertimbangkannya.

Acara diselingi dengan ISHOMA, pukul 12.00-13.00 WIB yang kemudian dilanjutkan dengan materi tentang Kiat Penyampaian Artikel Ilmiah ke Jurnal Internasional yang diberikan oleh Helwis Tjhai dari iGroup (Lampiran 14 : Handout Hari Ketiga Sesi Keempat) dan dimoderatori oleh Bachtiar Alam, Ph.D. Dalam sesi keempat ini ada 2 pertanyaan dari peserta, yang secara lengkap dapat terangkum di bawah ini :
• Frieda, F.Psi : Apakah saat ini UI sudah bisa mengakses Elsevier?
Helwis : Ya bisa. Karena saat ini UI telah melanggan Elsevier dan beberapa jurnal online lainnya.
• Syamsul, FISIP : Saya pernah coba masuk Elsevier untuk mencari jurnal, tetapi jurnal yang saya maksud tidak tersedia. Dan itu bukan hanya satu tapi belasan jurnal yang saya cari tidak tersedia. Kira-kira jurnal apa yang lebih lengkap dari Elsevier ya?
Helwis : UI memang berlangganan Elsevier, namun tidak semua jurnal yang ada di Elsevier bisa diakses karena UI hanya melanggan sebagia jurnal di Elsevier, tidak seluruhnya.
Selesai sesi keempat, acara terhenti dengan adanya ISHOMA, pada pukul 13.00 WIB dan kemudian acara dilanjutkan dengan materi dari Bantarto Bandoro, SH., MA tentang Pengalaman Penulisan Artikel Ilmiah Jurnal Internasional (Lampiran 15 : Penulisan Artikel Ilmiah Jurnal Internasional) dan dimoderatori oleh Tirta N. Mursitama, Ph..D. Pada sesi ini ada pertanyaan dari peserta yang kami rangkum sebagai berikut :
• No name, FIB : Sebagai peneliti yang karyanya telah puluhan kali di published pada jurnal internasional, apakah anda bergerak di jurnal yang berbeda-beda atau dijurnal yang sama?
T. Mart : Saya bergerak di level komunitas. Karena dengan publish dijurnal yang bisa dikatakan dibaca oleh komunitas tertentu, karya saya akan tepat sasaran.
Pada sesi terakhir para peserta pindah ke ruangan komputer untuk melakukan penyusunan draft artikel dalam bahasa Inggris oleh masing-masing fasilitator yang telah ditunjuk, dengan penanggung jawab kegiatan ini adalah Dr. Yoki Yulizar, Tirta N. Mursitama, Ph.D dan Dr. Budiarso M.Eng.

Bimbingan Draft Artikel Tanggal 4-7 Agustus 2008

Kegiatan pelatihan sehari penulisan artikel ilmiah untuk jurnal internasional bertujuan agar para peserta bisa memasukkan tulisan artikel ke salah satu jurnal internasional. Oleh karena itu DRPM UI selaku lembaga penyelenggara pelatihan, berusaha untuk memfasilitasi kegiatan bimbingan artikel dalam bahasa inggris sampai pada tahap finalisasi. Sehingga para peserta perlu mengumpulkan kembali perbaikan draft artikel yang telah dikoreksi oleh para fasilitator sampi pada tanggal 1 Agustus 2008. Setelah itu peserta diundang kembali oleh panitia untuk melakukan finalisasi draft artikel bersama dengan para fasilitator. Kegiatan bimbingan diadakan pada tanggal 4-7 Agustus 2008, di tempat yang berbeda-beda untuk setiap rumpun ilmu fasilitator. Kegiatan bimbingan ini hanya diikuti oleh 32 peserta (dari pelatihan sehari tgl 21-23 Juli 2008), dengan jumlah draft artikel yang terkumpul sebanyak 33 Draft (terdapat pada lampiran B).

Pada tanggal 4 dan 5 Agustus 2008 bertempat di ITTC Perpustakaan Pusat Lantai 2 kampus UI Depok, yang dimulai pada pukul 09.00-12.00 WIB dengan fasilitator Arianto Arief Patunru SE, MSc, PhD; Dr. Dra. Sulistyowati Suwarno M.A; Yetty Komalasari Dewi SH., ML.I; Prof. Drs. Benyamin Kusumoputro, M.Eng, Dr.Eng; Dr. Terry Mart; Ir. Wahidin Wahab, M.Sc., Ph.D; Dr. Ir. Bondan Tiara Sofyan, M.Si; dan Bantarto Bandoro, SH., MA. Sedangkan pada tanggal 6 Agustus kegiatan bimbingan finalisasi diadakan di IASTH Kampus UI Salemba Lantai 1 mulai pukul 09.00-12.00 WIB, dengan fasilitator Prof. dr. Saleha Sungkar, DAP&E, MS, Sp. Par (K) dan dr. Isnaini Azizah Salim Suryono, MS. Bimbingan pada hari terakhir diadakan pada tanggal 7 Agustus 2008 bertempat di Ruang Rapat DRPM UI lantai dasar Kampus UI Depok, yang dimulai pada pukul 09.00-12.00 WIB untuk fasilitator Prof. Dr. Melani Budianta dan pada pukul 14.00-17.00 WIB dengan fasilitator Prof. Budi Utomo, MPH, Ph.D. Kegiatan bimbingan ini hanya dihadiri oleh 9 peserta dari rumpun ilmu Kesehatan, 7 peserta dari rumpun ilmu Sains-Teknologi, dan 16 peserta dari rumpun ilmu Sosial-Humaniora.

teknik penulisan karya ilmiah

Petunjuk Penulisan Skripsi i
Petunjuk penulisan Skripsi ini disusun oleh Tim Penyusun sebagai petunjuk
dasar bagi mahasiswa dan dosen pembimbing Skripsi.
Pemahaman dari isi buku ini diharapkan akan memperlancar langkah
penyusunan Proposal dan Skripsi.
Perlu juga disadari bahwa pembuatan Proposal dan Skripsi merupakan
tanggung jawab mahasiswa untuk memenuhi seluruh aturan yang ada dalam
hubungan dengan studi tingkat sarjana seperti yang tercantum pada buku ini.
Harapan kami adalah agar para mahasiswa dapat berhasil menempuh cita-cita
mencapai gelar Sarjana.
Pedoman ini masih jauh dari kata sempurna, jadi tetap terbuka atas segala
masukan untuk perbaikan. Akhir kata, semoga Buku Petunjuk ini bermanfaat.
Purwokerto, Juli 2006
Tim Penyusun
Petunjuk Penulisan Skripsi 1
Bab I Proposal
Proposal merupakan usulan skripsi yang dapat disusun oleh mahasiswa paling
cepat bersamaan pada saat mengikuti Metodologi Penelitian dan mata kuliah yang
A. Ketentuan dalam Penyusunan Proposal
Beberapa ketentuan umum dalam proses penyusunan proposal adalah sebagai
1. Proposal terdiri atas:
a. Cover depan (lihat Lampiran 5).
b. Daftar Isi
c. Bab I
d. Bab II
e. Bab III, dan
f. Daftar Referensi
Catatan: ketentuan umum untuk setiap bagian proposal mengacu pada Bab IV
poin D, Bagian Isi.
2. Proposal disusun dengan memperhatikan Buku Pedoman Format Penulisan Karya
3. Penyusunan proposal harus berdasarkan jurnal ilmiah/replikasi jurnal, dengan
melakukan pengembangan (antara lain: variabel penelitian, obyek penelitian,
tahun penelitian, metode analisis data, dll.).
4. Pemahaman mengenai teori/konsep harus jelas.
5. Penentuan dan kedalaman obyek penelitian dilakukan dengan cara
memperhatikan model penelitian serta metode statistik yang digunakan dalam
analisis data.
B. Proses Penyusunan Proposal
Alur penyusunan proposal dapat dilihat pada Gambar 1.1. Status proposal hasil
review adalah sebagai berikut:
1. Ditolak, maka mahasiswa harus menyusun proposal kembali.
2. Disetujui (OK), proposal yang telah disetujui (status OK) langsung dilanjutkan
dengan proses penyusunan skripsi, dengan terlebih dahulu mengajukan
pendaftaran penyusunan skripsi untuk memperoleh Pembimbing Skripsi yang
ditunjuk oleh Ketua Jurusan.
3. Disetujui dengan revisi, maka mahasiswa dengan proposal ini harus
menghadap ke Pembimbing teknis yang ditunjuk untuk melakukan proses
bimbingan atau revisi proposal. Bimbingan teknis ini dilaksanakan dalam rangka
penyempurnaan penyusunan proposal sampai dengan mendapat status Disetujui
Bimbingan teknis proposal akan diberikan oleh Pembimbing Teknis yang
ditunjuk oleh Jurusan. Apabila bimbingan teknis sudah selesai, maka Pembimbing
Teknis memberikan persetujuan. Jika proposal telah disetujui, mahasiswa dapat
melanjutkannya ke proses penyusunan skripsi dengan terlebih dahulu mengajukan
pendaftaran penyusunan skripsi untuk memperoleh Pembimbing Skripsi yang
ditunjuk oleh Ketua Jurusan.
Petunjuk Penulisan Skripsi 2
Dokumen yang diperlukan untuk persyaratan administratif Pendaftaran Skripsi:
1. Proposal yang telah disetujui (OK)
2. Surat Penunjukan Pembimbing
3. Fotocopy Transkrip terakhir
4. Kartu rencana Stusi (KRS) yang memuat mata kuliah Skripsi.
Mahasiswa pendaftar skripsi yang memenuhi kriteria akan memperoleh
Pembimbing Skripsi melalui Surat Penunjukkan Pembimbing Skripsi dari Ketua
Jurusan. Proses selanjutnya adalah bimbingan skripsi.
Petunjuk Penulisan Skripsi 3
Bab II Definisi dan Tujuan Skripsi
A. Definisi Skripsi
Skripsi adalah suatu karya tulis ilmiah berupa paparan tulisan hasil penelitian
yang membahas masalah dalam bidang ilmu sesuai pada jurusan yang sedang
ditempuh dengan menggunakan kaidah yang berlaku. Skripsi disusun oleh
mahasiswa/i di bawah pengawasan dosen pembimbing untuk memenuhi sebagian
persyaratan memperoleh gelar sarjana (strata 1) pada lingkungan Sekolah Tinggi
Informatika dan Komputer Yos Sudarso Purwokerto.
B. Ruang lingkup Skripsi
Penelitian dasar
Yaitu penelitian murni terhadap sesuatu karena ada perhatian dan
keingintahuan terhadap hasil suatu aktivitas. Penelitian ini dilakukan dengan
intellectual reasoning yang mendasarkan diri atas keinginan untuk
mengetahui semata-mata dan tidak langsung mempunyai kegunaan praktis.
Penelitian terapan
Yaitu penelitian yang menggunakan practical reasoning untuk menjawab
sesuatu masalah yang timbul pada suatu ketika, agar dapat melakukan
sesuatu dengan lebih baik. Hasil penelitian tidak harus sebagai satu
penemuan baru, tetapi merupakan aplikasi baru dari penelitian terdahulu.
Penelitian Korelasional
Adalah penelitian yang bertujuan untuk mengetahui ada tidaknya hubungan
dari suatu fenomena, dan kalau ada berapa besar derajat hubungannya,
antara beberapa variabel yang diteliti, walaupun tidak dapat diketahui apakah
hubungan tersebut adalah hubungan sebab akibat ataupun bukan.
Penelitian Kausal Komparatif
Adalah penelitian yang bertujuan untuk mengetahui kemungkinan adanya
hubungan sebab akibat dengan cara berdasar atas pengamatan terhadap
akibat yang ada, kemudian mencari kembali faktor yang diduga menjadi
penyebabnya, melalui pengumpulan data dengan melakukan perbandingan di
antara data-data yang terkumpul/diteliti.
Penelitian Eksperimental
Adalah penelitian yang bertujuan untuk mengetahui kemungkinan adanya
hubungan sebab akibat dengan cara memberikan satu atau lebih perlakuan
kepada satu atau lebih kelompok eksperimental dan membandingkan dengan
satu atau lebih kelompok kontrol yang tidak diberikan perlakuan. Penelitian
ini bertujuan pula untuk menjelaskan sebab-sebab berlangsungnya suatu
proses akibat, serta efek-efek dari suatu kondisi tertentu.
Penelitian Analitis
Adalah suatu penelitian yang menganalisis data yang mengarah kepada suatu
kesimpulan suatu populasi, bersifat inferensial. Berdasarkan dari sample
digeneralasisasi menuju ke data populasi.
Petunjuk Penulisan Skripsi 4
C. Tujuan Skripsi
Tugas penyusunan skripsi dilaksanakan dengan tujuan agar:
1. Mahasiswa mampu menyusun dan menulis suatu karya ilmiah, sesuai dengan
bidang ilmu yang ditempuh.
2. Mahasiswa mampu melakukan penelitian mulai dari merumuskan masalah,
mengolah data, mengumpulkan data, menganalisis, menarik suatu
3. Membantu mahasiswa menyampaikan, menggunakan, mengaplikasikan ilmu
dan pengetahuan yang diperoleh menjadi suatu sistem yang terpadu untuk
pengembangan ilmu.
Petunjuk Penulisan Skripsi 5
Bab III Prosedur Penyusunan Skripsi
2.1 Persyaratan Akademik
1. Mahasiswa telah menyelesaikan 120 sks (dengan ketentuan bahwa mata
kuliah keahlian mendapatkan nilai minimal C dan maksimal nilai D adalah 4
mata kuliah).
2. Indeks Prestasi Kumulatifnya > 2.
3. Pernah/sedang mengambil mata kuliah Metodologi Penelitian
2.2 Persyaratan Administrasi
1. Menyerahkan fotokopi transkrip akademik terakhir.
2. Melampirkan fotokopi KRS semester berjalan.
3. Menyelesaikan administrasi keuangan semester berjalan.
2.3 Peraturan Pendaftaran Bimbingan Skripsi
1. Skripsi dilaksanakan secara perorangan, oleh karena itu pada waktu pendaftaran,
mahasiswa harus mengisi mata kuliah skripsi pada KRS.
2. Mahasiswa wajib menghadiri briefing skripsi yang diselenggarakan oleh jurusan.
Pada saat briefing tersebut mahasiswa dianjurkan sudah membawa topik (baik
yang sudah diseminarkan di mata kuliah metodologi penelitian maupun topik
baru) untuk dikonsultasikan dengan Ketua/Sekretaris Jurusan.
3. Apabila topik telah diperoleh, maka mahasiswa dapat menuliskannya ke dalam
Proposal Skripsi yang berisi antara lain: Latar Belakang Penelitian, Perumusan
Masalah, Tujuan dan Manfaat Penulisan Skripsi, Metodologi Penelitian, Daftar Isi
Sementara, dan Kerangka Teoretis (Daftar isi proposal skripsi dilampirkan di
dalam buku panduan ini).
4. Proposal skripsi diserahkan kepada Ketua/Sekretaris Jurusan, sesuai dengan
jadwal yang ditentukan pada waktu mendapatkan briefing Skripsi.
2.4 Penentuan Dosen Pembimbing Skripsi
1. Proposal yang diajukan dipertimbangkan kelayakannya oleh Ketua/Sekretaris
Jurusan. Apabila dinilai layak maka akan dibuat surat penunjukan pembimbing.
Namun apabila dinyatakan belum layak, maka mahasiswa skripsi diwajibkan
untuk memperbaiki proposalnya, dan mengulangi kembali proses pengajuannya.
2. Batas Judul Skripsi dan Penunjukan Pembimbing berlaku maksimum selama 2
(dua) semester, terhitung sejak penunjukan pembimbing. Lewat dari batas
waktu tersebut, mahasiswa harus mengikuti proses 1 dan 2 kembali dan
mengganti topik skripsinya.
2.5 Proses Bimbingan Skripsi
1. Mahasiswa diharuskan mengadakan/menyusun skripsi secara individu, yaitu
setiap orang menyusun satu skripsi.
2. Menyusun Skripsi secara mandiri serta melalui konsultasi dengan dosen
pembimbing yang ditunjuk.
3. Konsultasi dengan dosen pembimbing minimal harus 8 kali.
4. Mahasiswa harus menggunakan kartu konsultasi selama pembimbingan
berlangsung. Setiap kali konsultasi, dosen pembimbing menuliskan uraian hasil
konsultasi pada kolom yang telah disediakan dan menandatanganinya.
5. Jika dosen pembimbing sulit untuk ditemui, diharapkan mahasiswa dapat
mendiskusikan terlebih dahulu jadwal konsultasi yang dikehendaki dengan dosen
Petunjuk Penulisan Skripsi 6
pembimbing yang ditunjuk. Jadwal konsultasi diatur bersama antara mahasiswa
dengan dosen pembimbing.
6. Apabila menurut pembimbing skripsi sudah layak dikatakan selesai, dan layak
diujikan, maka pembimbing akan menandatangani Lembar Pengesahan
7. Mahasiswa akan menjilid skripsinya dengan softcover dan mengajukan
permohonan sidang skripsi ke BAAK dengan memperhatikan persyaratan berkas
yang tertera pada formulir “Pendaftaran Sidang Skripsi”.
8. Setelah skripsi selesai disusun, mahasiswa wajib membuat softcover Skripsi
sebanyak 3 (tiga) rangkap dan mengumpulkannya ke BAAK untuk didaftarkan
dan dijadwalkan sidang skripsi dan ujian komprehensif teori (komprehensif teori
khusus untuk Jurusan Manajemen, Akuntansi dan Sistem Informasi).
9. Warna sampul softcover skripsi diatur oleh masing-masing jurusan.
2.6 Pengumpulan Softcover Skripsi
1. Untuk batas waktu pengumpulan Skripsi dibahas pada saat briefing berlangsung.
Ketua Jurusan akan mengeluarkan pengumuman jadwal deadline melalui BAAK)
Jika batas waktu ini dilewati maka mahasiswa wajib memperpanjang masa
penulisan skripsinya (dengan mendaftarkan mata kuliah Skripsi pada pengisian
2. Jika mahasiswa gagal menyelesaikan Skripsi selama 2 (dua) semester bimbingan
terhitung sejak penunjukan pembimbing, maka mahasiswa harus mengulang dari
langkah 2.1 untuk semester berikut dan menggganti topik.
3. Bagi mahasiswa yang tidak menyelesaikan Skripsi pada semester berjalan, harus
melakukan perpanjangan dengan membayar uang kuliah Pokok dan uang kuliah
Variabel untuk mata kuliah skripsi pada semester berikutnya.
2.7 Langkah-langkah Penyelesaian Hardcover
1. Penilaian yang diberikan oleh penguji sidang skripsi dimasukkan pada lembar
penilaian dan diserahkan kepada ketua sidang. Ketua Sidang akan menyerahkan
seluruh berkas (softcover skripsi dan rangkuman nilai) ke BAAK, termasuk Berita
Acara Sidang. Di dalam Berita Acara Sidang akan terdapat lampiran yang berisi
catatan-catatan dari penguji untuk menjadi perbaikan bagi skripsi mahasiswa
sebelum skripsi tersebut dijilid dengan hardcover.
2. Mahasiswa akan memperbaiki skripsi berdasarkan catatan dari hasil penguji.
3. Sebelum dijilid dalam bentuk hardcover, mahasiswa harus memperoleh
persetujuan dari pembimbing melalui formulir Lembar Pengesahan untuk
penjilidan Hardcover.
4. Mahasiswa akan menyerahkan 4 eksemplar skripsi hardcover ke BAAK.
5. BAAK akan memberikan stempel, mengembalikan laporan asli ke mahasiswa
kemudian mendistribusikan ke Perpustakaan, Pembimbing dan Jurusan.
Petunjuk Penulisan Skripsi 7
Bab IV Skripsi
Secara umum skripsi terdiri atas tiga bagian, yaitu Bagian Awal, Bagian Isi, dan
Bagian Akhir.
A. Bagian Awal.
Bagian awal skripsi terdiri dari:
1. Halaman Judul (Lampiran )
2. Halaman Persetujuan dan Pengesahan Skripsi (Lampiran )
3. Kata Pengantar
4. Abstrak
5. Daftar Isi
6. Daftar Tabel
7. Daftar Gambar
8. Daftar Lampiran
B. Bagian Isi.
Bagian isi skripsi terdiri dari:
1. Pendahuluan, yang memuat latar belakang masalah, perumusan masalah,
tujuan dan manfaat penelitian, serta sistematika pembahasan.
2. Tinjauan Pustaka dan Pengembangan Hipotesis (jika diperlukan)
3. Metodologi Penelitian
4. Analisis dan Pembahasan
5. Penutup, terdiri atas, kesimpulan, keterbatasan dan rekomendasi.
C. Bagian Akhir.
Bagian akhir skripsi terdiri dari:
1. Daftar Referensi
2. Lampiran
D. Ketentuan Umum.
Ketentuan umum tata cara penulisan yang harus diperhatikan untuk setiap
bagian skripsi adalah sebagai berikut:
1. Bagian Awal
a. Halaman Judul, terdiri dari halaman judul bagian terluar (hardcover) dan
halaman judul bagian dalam (Lampiran ). Halaman judul memuat:
1. Judul disajikan dalam bentuk piramida terbalik, dibuat singkat, jelas dan
tepat yang menunjukkan:
2. Maksud dibuatnya skripsi adalah untuk memenuhi sebagian dari syaratsyarat
guna mencapai gelar sarjana.
3. Nama mahasiswa disajikan dengan lengkap tanpa singkatan. Di bawah
nama diketik NIM.
4. Lambang STIK Yos Sudarso dengan ukuran 4 cm x 3,5 cm dan titik
tengahnya terletak diantara NIM mahasiswa dengan baris nama jurusan.
5. Instansi yang dituju adalah S-1 Sistem Informasi, Sekolah Tinggi
Informatika dan Komputer Yos Sudarso
6. Tahun penulisan adalah tahun lulus ujian skripsi.
b. Lembar Persetujuan Skripsi, halaman ini ditandatangi oleh Pembimbing
Skripsi untuk menyatakan bahwa skripsi tersebut telah siap untuk diuji (lihat
Lampiran ).
Petunjuk Penulisan Skripsi 8
c. Lembar Pengesahan Skripsi. Tanggal yang dicantumkan adalah tanggal
pengesahan skripsi.
d. Kata Pengantar, berisi uraian singkat tentang maksud penyusunan skripsi dan
ucapan terima kasih serta penghargaan kepada pihak yang telah membantu
dalam penelitian (minimal kepada: orang tua, Ketua Jurusan, Pembimbing
Skripsi, dan lain sebagainya).
e. Abstrak/Sinopsis, merupakan bagian dari laporan penelitian. Abstrak ditulis
dengan spasi tunggal (1 spasi) dan menggunakan bahasa Indonesia. Maksimum
penulisan 1 halaman (200 kata/25 baris). Penulisan abstrak diikuti minimal 4 kata
kunci (keyword) untuk memudahkan penyusunan bibliografi atau abstract
database. Abstrak terdiri dari:
1. Paragraf pertama memberikan informasi secara ringkas mengenai tujuan
penelitian termasuk alas an pokok dan tujuan khusus dari penelitian,
2. Paragraf kedua memberikan informasi mengenai metodologi penelitian
(obyek penelitian, pemilihan sample, pengumpulan, dan analisis data);
3. Paragraf ketiga memberikan informasi tentang kesimpulan yang disusun
berdasarkan hasil data.
f. Daftar Isi, memberikan gambaran secara menyeluruh mengenai isi skripsi dan
bertujuan untuk memudahkan pembaca mengerti alur isi skripsi serta
memudahkan pembaca mengetahui/mencari dengan cepat letak suatu pokok
bahasan/bab/sub bab. Daftar isi memuat: urutan bab dan sub bab disertai nomor
halamannya masing-masing dan kerangka dari keseluruhan skripsi.
g. Daftar Tabel, merupakan daftar yang memuat nomor dan judul gambar beserta
nomor halamannya secara teratur berdasarkan nomor gambar.
h. Daftar Lampiran, merupakan daftar yang memuat urutan judul lampiran
beserta nomor halamannya secara teratur berdasarkan nomor lampiran, dan
2. Bagian Isi
a. Pendahuluan, terdiri dari:
1. Latar Belakang Penelitian, pembahasan dimulai dengan uraian mengenai
arti pentingnya penelitian ini dilakukan, alasan pemilihan judul, serta hasil
penelitian yang telah dilakukan sebelumnya yang melandasi topik penelitian.
Selanjutnya uraian bagian ini diarahkan untuk mencari jawaban atas
i. Apakah penelitian yang akan diajukan merupakan penelitian terapan
(applied research)?
ii. Jika merupakan penelitian dasar (basic research) bagaimana kaitan antara
penelitian ini dengan penelitian sebelumnya?
iii. Mengapa penelitian yang sedang dilakukan merupakan replika
(pengulangan) dari penelitian sebelumnya?
iv. Merupakan perluasan/pengembangan dari penelitian sebelumnya,
sebutkan dalam hal apa dan apa perlunya?
2. Masalah Penelitian, merupakan rumusan masalah dalam bentuk
pertanyaan yang dapat diteliti secara jelas dan diuji melalui mengumpulan
dan analisis data. Batasan atau asumsi yang digunakan dalam penelitian
dikemukakan di bagian ini. Rumusan masalah harus spesifik dan tidak terlalu
umum. Misalnya,
i. “motivasi” (terlalu umum), lebih tepat jika menggunakan “motivasi kerja”
(lebih fokus), atau
Petunjuk Penulisan Skripsi 9
ii. “rasio keuangan” (terlalu umum), lebih tepat jika menggunakan “rasio
likuiditas atau solvabilitas”.
3. Tujuan dan Manfaat Penelitian, sesuai dengan masalah penelitian yang
dirumuskan, dijelaskan tujuan yang hendak di capai dari penelitian. Kemudian
diuraikan manfaat atau kontribusi apa yang diberikan oleh hasil penelitian
tersebut, baik dari aspek teoritis maupun aspek praktisnya.
4. Sistematika Pembahasan, memuat sitematika yang direncanakan untuk
penulisan skripsi.
b. Kerangka teoritis dan Perumusan Hipotesis, terdiri atas:
1. Kerangka Teoritis, berisi rincian hasil penelitian sebelumnya dan teori-teori
yang ada hubungannya dengan masalah penelitian. Pembahasan bagian ini
difokuskan pada satu atau lebih teori dan hasil penelitian terdahulu yang relevan
dengan masalah penelitian. Kerangka toritis untuk memecahkan masalah
penelitian dengan menggambarkan variabel dan hubungan variabel penelitian.
Selain itu juga kerangka teoritis ditujukan untuk menjadi landasan dalam
pengembangan model penelitian dan perumusan hipoteis.
2. Model Penelitian, merupakan gambar yang mengungkapkan hubungan antar
variabel penelitian.
3. Perumusan Hipotesis, adalah jawaban sementara terhadap permasalahan
yang diteliti dan kebenarannya perlu diuji secara empiris. Hipotesis diperlukan
untuk penelitian korelasional, kausal komparatif, eksperimental dan sebagian
deskriptif. Hipotesis yang baik harus memenuhi kriteria berikut ini (Indriantoro
dan Supomo, 1999):
i. Berupa pernyataan yang mengarah pada tujuan penelitian.
ii. Berupa pernyataan yang dirumuskan dengan maksud untuk dapat diuji
secara empiris.
iii. Berupa pernytaan yang dikembangkan berdasarkan teori-teori yang lebih
kuat dibanding dnegan hipotesis rivalnya.
iv. Rumusan hipotesis dapat dinyatakan dalam salah satu dari berbagai bentuk
hipotesis berikut ini:
Pernyataan “jika-maka” (if-then statement) atau proposisi.
Jika karyawan mengalami tekanan dalam bekerja yang lebih rendah,
maka mereka akan memperoleh kepuasan kerja yang lebih tinggi.
Hipotesis null (null hypothesis).
Tidak terdapat perbedaan signifikan antara persepsi akuntan dan
mahasiswa terhadap etika bisnis, atau
H0:G0=GM atau H0: G0-GM=0
Tidak terdapat pengaruh usia terhadap kepuasan kerja
Hipotesis alternatif (alternative hypothesis).
Terdapat perbedaan signifikan antara persepsi akuntan dan mahasiswa
terhadap etika bisnis, atau
HA:GAı‚GM atau H0: GA-GMı‚0
Usia mempunyai pengaruh yang signifikan terhadap kepuasan kerja
c. Metodologi Penelitian, terdiri atas:
Petunjuk Penulisan Skripsi 10
a) Rancangan penelitian, disusun berdasarkan karakteristik masalah atau
tujuan penelitian. Misalnya untuk penelitian korelasional, rancangan
penelitian menjelaskan struktur penelitian yang menggambarkan hubungan
antar variabel penelitian.
b) Obyek penelitian, bagian ini menjelaskan obyek penelitian beserta
karakteristik, unit analisi, horizon waktu penelitian dan metode pengambilan
sampel yang digunakan.
c) Definisi operasional variabel dan pengukurannya, menguraikan
tentang penentuan construct sehingga menjadi variable yang dapat diukur.
Definisi operasional variable menjelaskan tipe-tipe variable yang dapat
diklasifikasikan beradasarkan fungsi variable dalam hubungan antar variabel
serta skala pengukuran variabel yang digunakan.
d) Teknik pengumpulan data, berisi uraian data-data yang digunakan dan
disebutkan jenis data penelitian, data primer atau data sekunser serta
bagaimana cara memperoleh data tersebut.
e) Uji kualitas data, berisi uraian tentang metode dan batasan yang
digunakan dalam uji kualitas data penelitian yang meliputi:
a. Uji normalitas, untuk data primer dan sekunder.
b. Uji outlier, dilakukan jika data tidak terdistribusi secara normal.
c. Uji reliabilitas dan validitas, untuk data primer.
f) Metode analisis data, menguraikan tentang metode statistik yang
digunakan dalam pengujian hipotesis beserta batasan- batasannya untuk
dasar pengambilan keputusan menolak/tidak berhasil menolak (reject/fail to
reject) hipotesis penelitian.
g) Analisis statistik kualitatif, menggunakan statistik deskriptif.
h) Pada sub bahasan ini menjelaskan pula mengenai uji asumsi klasik (uji
autokorelasi, multikolinieritas dan heteroskedastisitas), untuk pengujian
hipotesis dengan metode linier/ANOVA/MANOVA.
i) Analisis kuantitatif, dengan menggunakan statistik inferensi (parametric dan
non-parametrik). Pemilihan metode statistik dipengaruhi oleh tujuan
penelitian, jenis data juga tipe skala pengukuran variabel yang digunakan.
d. Analisis dan Pembahasan, merupakan bagian dari uraian hasil proses
pengujian data setalah tahap pemilihan dan pengumpulan data penelitian.
Analisis dan pembahasan minimal terdiri dari 3 bagian, yaitu:
a) Statistik deskriptif, memuat deskripsi statistik mengenai variabel atau sample
penelitian dan demografi responden (ukuran frekuensi, tendensi sentral dan
b) Hasil uji kualitas data, misalnya terdiri dari hasil uji reliabilitas, uji validitas, uji
normalitas data, uji outlier, dan seterusnya.
c) Pengujian hipotesis, dibahas kensekuensi hasil pengujian yang menolak atau
tidak berhasil menolak hipotesis penelitian, dan membandingkannya dengan
hasil penelitian sebelumnya.
3. Penutup
a. Kesimpulan, memuat rangkuman hasil analisis dan pembahasan pada bab
sebelumnya untuk menjawab masalah penelitian. Kesimpulan penelitian
dibuatkan rujukan kepada beberapa penelitian sebelumnya, apakah hasil
penelitian tersebut konsisten atau tidak dengan hasil penelitian sebelumnya.
Petunjuk Penulisan Skripsi 11
b. Keterbatasan, merupakan bagian yang mengemukakan kelemahan penelitian,
mungkin mempengaruhi hasil penelitian. Misalnya kelemahan penentuan
kerangka sample atau setting penelitian.
c. Rekomendasi, berisi masukan untuk penelitian selanjutnya yang menggunakan
topik sejenis. Rekomendasi pada penelitian berupa saran pembuatan kebijakan
atau penentuan tindakan yang akan dilakukan pada penelitian serupa di masa
datang untuk mengatasi keterbatasan penelitian.
Bagian Akhir
Daftar Referensi, memuat referensi yang diacu dan dibaca langsung dalam
menyusun penelitian dan disajikan menurut abjad nama penulis tanpa nomor urut.
Penulisan referensi bisa dilihat pada Buku Pedoman Format Penulisan Karya
Petunjuk Penulisan Skripsi 12
Bab V Susunan Isi Skripsi
1. Paradigma kuantitatif
Bab I Pendahuluan
1.1 Latar Belakang
1.2 Permasalahan Penelitian
1.3 Tujuan dan Manfaat Penelitian
1.4 Sistematika Penulisan
Bab II Kerangka Teoretis dan Perumusan Hipotesis
Bab III Metode Penelitian
3.1 Rancangan Penelitian
3.2 Obyek Penelitian
3.3 Definisi Operasional Variabel
3.4 Teknik Pengumpulan Data
3.5 Metode Analisis Data
Bab IV Analisis dan Pembahasan
4.1 Statistik Deskriptif
4.2 Uji Kualitas Data
4.3 Pengujian Hipotesis
Bab V Kesimpulan, Keterbatasan dan Rekomendasi
5.1 Kesimpulan
5.2 Keterbatasan
5.3 Rekomendasi
Petunjuk Penulisan Skripsi 13
Penjelasan :
Judul penelitian harus memiliki ciri-ciri :
1. Secara konkrit mendeskripsikan masalah yang dikaji.
2. Harus dipilih sesuai dengan isi, jangan menyimpang dari isi, sederhana tapi tepat,
singkat dan jelas.
Pendahuluan merupakan bagian dari isi skripsi yang memuat 4 aspek: (1) Latar
belakang yang menjadi motivasi peneliti untuk melakukan penelitian. (2) Rumusan
masalah penelitian, (3) Tujuan dan manfaat penelitian dan (4) Sistematika penulisan.
Pembahasan dalam bagian ini, dimulai dengan uraian yang cukup mengenai arti
pentingnya penelitian dan alasan pemilihan bidang masalah dan topik yang diteliti.
Peneliti harus memberikan rumusan masalah yang jelas, batasan-batasan dan
asumsi-asumsi yang jelas, serta tujuan dan manfaat yang akan didapatkan dari
penelitian tersebut baik dari aspek teoretis maupun dari aspek praktis.
Bagian ini memuat konsep-konsep teoretis yang digunakan sebagai kerangka atau
landasan untuk menjawab masalah penelitian. Pembahasan pada bagian ini,
difokuskan pada literatur-literatur yang membahas konsep teoretis yang relevan
dengan rumusan masalah dan tujuan penelitian. Untuk penelitian korelasional, kausal
komparatif, dan eksperimental maka hipotesis diperlukan sebagai jawaban
sementara terhadap permasalahan yang diteliti dan kebenarannya perlu diuji secara
Tidak semua penelitian harus mengembangkan dan merumuskan hipotesis
a. Rancangan Penelitian
Menjelaskan jenis penelitian, apakah merupakan penelitian kausal komparatif,
atau korelasional, atau berupa penelitian observasi.
b. Obyek Penelitian
Menjelaskan obyek penelitian, unit analisis dan horison waktu penelitian.
c. Definisi Operasional Variabel
Definisi operasional adalah penentuan construct sehingga menjadi variabel yang
dapat diukur. Definisi operasional variabel menjelaskan tipe-tipe variabel yang
dapat diklasifikasikan berdasarkan fungsi variabel dalam hubungan antar variabel
serta skala pengukuran yang digunakan.
d. Teknik Pengumpulan Data
Sumber data penelitian terdiri dari sumber data primer dan sumber data
sekunder. Data primer merupakan sumber data penelitian yang diperoleh secara
langsung dari sumber asli. Metode yang dapat digunakan untuk mengumpulkan
data primer adalah metode survei (wawancara atau kuesioner) dan metode
observasi. Data sekunder merupakan sumber data penelitian yang diperoleh
peneliti secara tidak langsung melalui media perantara. Berdasarkan sumbernya,
data sekunder dapat diklasifikasikan menjadi data internal dan data eksternal.
e. Metode Analisis Data
Petunjuk Penulisan Skripsi 14
Data yang telah dikumpulkan kemudian dianalisis dengan cara:
Analisis kualitatif, misalnya berupa analisis komparatif dan deskriptif
Analisis kuantitatif, dengan menggunakan statistik deskriptif, statistik
parametrik dan statistik non-parametrik. Pemilihan metode statistik
dipengaruhi oleh tipe skala pengukuran yang digunakan untuk menentukan
pemilihan metode parametrik dan non-parametrik.
Analisis data penelitian merupakan bagian dari proses pengujian data setelah tahap
pemilihan dan pengumpulan data penelitian. Analisis dan pembahasan terdiri dari 3
bagian, yaitu:
a. Statistik deskriptif, memuat deskripsi statistik mengenai sampel penelitian dan
demografi responden (ukuran frekuensi, tendensi sentral dan dispersi)
b. Uji kualitas data, terdiri dari uji reliabilitas dan uji validitas
c. Pengujian hipotesis
Pada bagian ini dibahas konsekuensi hasil pengujian yang menolak atau
menerima hipotesis, dan membandingkan hasil pengujian dengan hasil pengujian
penelitian sebelumnya.
a. Kesimpulan, memuat pendapat singkat peneliti berdasarkan hasil dan
pembahasan pada bagian sebelumnya. Berdasarkan kesimpulan yang dibuat,
peneliti dapat membuat rujukan pada beberapa penelitian sebelumnya apakah
hasil penelitian tersebut mendukung atau menolak hasil penelitian yang dibuat.
b. Keterbatasan, merupakan bagian dari isi skripsi yang mengemukakan kelemahankelemahan
yang disadari peneliti yang kemungkinan akan mempengaruhi hasil
penelitian tersebut.
c. Rekomendasi, berisi masukan untuk penelitian selanjutnya yang menggunakan
topik sejenis dengan penelitian yang dilakukan.
Petunjuk Penulisan Skripsi 15
Bab VI Tata Laksana Sidang Skripsi
6.1 Pendahuluan
1. STIK Yos Sudarso mewajibkan setiap mahasiswanya untuk menulis karya ilmiah
pada akhir dari jenjang studinya, untuk jenjang S1, karya ilmiah tersebut
dinamakan Skripsi.
2. Adapun pokok yang diujikan mencakup dua hal penting yaitu pertama, keaslian
dari karya ilmiah yang ditulis, dimana karya ilmiah tersebut tidak boleh berisi
plagiat (pencurian) karya orang lain dan yang kedua, kemampuan ilmiah dari
mahasiswa baik dari materi serta tata cara penulisan maupun penguasaan
mahasiswa terhadap apa yang dituliskan dalam karya ilmiah tersebut.
6.2 Ketentuan Umum
1. Mahasiswa harus bertanggung jawab penuh terhadap karya ilmiah yang diajukan
dalam Sidang Skripsi.
2. Nilai akhir yang telah diputuskan oleh Ketua Tim Penguji adalah mutlak.
3. Mahasiswa dapat dinyatakan tidak lulus bila nilai akhir yang dicapainya tidak
memenuhi syarat kelulusan.
4. Pengecekan perbaikan Skripsi dan persetujuan akan dilakukan oleh Pembimbing
setelah mahasiswa melakukan perbaikan sesuai hasil keputusan sidang.
6.3 Tata Tertib Sidang: Mahasiswa yang Diuji
1. Harus hadir di sekitar ruang sidang minimal 15 menit sebelum sidang dimulai.
2. Mahasiswa peserta diwajibkan memakai kemeja lengan panjang, celana kain
3. Menerima hasil keputusan dewan penguji secara mutlak.
4. Materi presentasi harus dibuat dalam bentuk Power Point Slides atau sejenisnya.
Petunjuk Penulisan Skripsi 16
Bab VII Berkas Pengumpulan Hardcover
a. Jilid hardcover dengan urutan sebagai berikut:
• Cover luar
• Judul dalam
• Halaman persetujuan hardcover (foto copy)
• Halaman Abstrak
• Kata Pengantar
• Daftar Isi
• Daftar Tabel (jika ada)
• Daftar Gambar (jika ada)
• Daftar Lampiran
• Isi Skripsi sama seperti softcover (Bab 1 – 5)
• Daftar Pustaka
• Lampiran-lampiran
b. 1 (satu) softcopy dari Skripsi dalam bentuk CD ROM.
Petunjuk Penulisan Skripsi 17
Bab VIII Susunan Isi Proposal Skripsi
Bab I Pendahuluan
1.9 Latar Belakang
1.10 Permasalahan Penelitian
1.11 Tujuan dan Manfaat Penelitian
Bab II Kerangka Teoretis dan Perumusan Hipotesis
Bab III Metode Penelitian
3.1 Rancangan Penelitian
3.2 Obyek Penelitian
3.3 Definisi Operasional Variabel
3.4 Teknik Pengumpulan Data
3.5 Metode Analisis Data
Petunjuk Penulisan Skripsi 18
Petunjuk Penulisan Skripsi L- 1
Jenis bimbingan : O Skripsi O Kerja praktek O Laporan Akhir
Sehubungan dengan kegiatan penyusunan penulisan oleh mahasiswa,
NPM : …………………………………. Nama : ………………………………… ……………………
Judul sementara :
pada Semester : Ganjil / Genap Tahun akademik : ……………………../ …………………….
dengan ini kami mohon bantuan kepada
Bapak / Ibu ……………………………………………………. Kode Dosen : ………………………
Untuk bersedia menjadi pembimbing mahasiswa tersebut. Pembimbing dimaksudkan
bertindak sebagai pemberi masukan dan pengarah materi kerja
praktek/skripsi/laporanakhir*) agar layak dan berbobot sesuai dengan jenjang S1. Selain itu
juga bertindak sebagai pengarah sistematika dan tata bahasa Indonesia bagi mahasiswa
dalam menulis laporan kerja praktek/skripsi/laporan akhirnya*).
Atas bantuan dan bimbingan yang diberikan, kami mengucapkan terima kasih.
Purwokerto, ………………………..
( ……………………………….. )
Ketua/Sekretaris Jurusan
Copy 3 rangkap untuk :
Dosen pembimbing
Mahasiswa Bersangkutan
Asli untuk Ketua Jurusan c.q. Sekretaris Jurusan
*) coret yang tidak perlu
Petunjuk Penulisan Skripsi L- 2
Jurusan :……………………………………………………………………..
Judul Skripsi : …………………………………………………………………….
Dosen Pembimbing : …………………………………………………………………….
NPM : …………………………………………………………………….
Nama Lengkap : …………………………………………………………………….
Tempat/Tanggal Lahir : …………………………………………………………………….
Alamat Rumah : …………………………………………………………………….
Telepon Rumah : ………….. – …………………….
Telepon Kantor : ………….. – ……………………. / HP: ………………………
Sidang Ke : …………..
Status Sebelumnya : Tidak hadir Perbaikan
Ka Jurusan Mahasiswa,
__________________ ______________________
Nama : Nama,
Syarat yang harus dilampirkan dimasukkan ke dalam map dengan warna yang
telah ditentukan, kemudian pada cover map dituliskan NPM dan Nama
Persyaratan Berkas BAAK
Fotokopi Softcover Skripsi (4 eksemplar).
Menyerahkan disket / CDRoom untuk presentasi (presentasi harus
menggunakan power point atau sejenisnya).
Pasfoto berwarna terbaru (3 bulan terakhir) ukuran 4×6 cm sebanyak
5 lembar dan 2×3 cm sebanyak 2 lembar. Tulis NPM, Nama, dan
jurusan di belakang foto (mahasiswa harus memakai dasi dan jas
untuk pasfoto. Pasfoto tidak dibuat dengan polaroid).
Kartu Konsultasi (Asli).
Formulir penggantian judul, bagi mahasiswa yang judul skripsinya
berbeda dengan judul pada surat penunjukan pembimbing.
Pernyataan kelulusan seluruh mata kuliah dari jurusan.
Bukti pembayaran uang sidang.
Bukti bebas tunggakan dari bagian keuangan.
Bukti bebas pinjam dari perpustakaan, minimal satu hari sebelum ujian

Petunjuk Penulisan Skripsi L- 3
Form Pengajuan Topik
Yth. Ketua Jurusan
di tempat
Dengan ini saya :
NPM : ……………………. Nama: …………………………………………………………….
Mengajukan topik skripsi, sebagai berikut:
Sudah diseminarkan Belum diseminarkan
Purwokerto, ………………………………..
Hormat saya,
( …………………………………………… )
Mengetahui, Menyetujui,
( …………………………………………… ) ( …………………………………………….. )
Dosen Metodologi Penelitian Ybs Ketua Jurusan
Copy 3 rangkap untuk:
Dosen pembimbing
Mahasiswa Bersangkutan
Asli untuk Ketua Jurusan c.q. Sekretaris Jurusan
Petunjuk Penulisan Skripsi L- 4
Form Perubahan Topik
di tempat
Dengan ini saya :
NPM : ……………………. Nama: …………………………………………………………….
Mengajukan perubahan topik skripsi, sebagai berikut:
Yang semula:
Diganti :
Alasan Penggantian Judul :Bimbingan Keputusan Sidang
Purwokerto, ………………………………..
Hormat saya,
( …………………………………………… )
Mengetahui, Menyetujui,
( …………………………………………… ) ( …………………………………………….. )
Pembimbing Ketua Jurusan
Copy 3 rangkap untuk:
Dosen pembimbing (untuk perubahan topik)
Mahasiswa Bersangkutan
Asli untuk Ketua Jurusan c.q. Sekretaris Jurusan
Petunjuk Penulisan Skripsi L- 5

Diajukan sebagai salah satu syarat
Untuk gelar kesarjanaan pada
(Nama Jurusan)
(Nama Fakultas)
Jenjang Pendidikan Strata 1
Oleh :


Petunjuk Penulisan Skripsi L- 6
N P M :
Nama :
Konsentrasi :
Judul Karya Akhir :
Ketua Jurusan
Tanggal : ………………………
Tanggal : ……………………… Pembimbing Skripsi
Petunjuk Penulisan Skripsi L- 7
NPM : ………………………………………………………
Nama : ……………………………………………………..
Jurusan : ……………………………………………………..
Semester : Genap/Ganjil , Tahun Akademik :………………….
Judul : …..………………………………………………….
Dosen Pembimbing : ..……………………………………………..
No Tanggal Uraian Tanda Tangan


 Cryptography
 Istilah-Istilah
 Kriptografi merupakan seni dan ilmu menyembunyikan informasi daripenerima yang tidak berhak.
 Kata cryptography berasal dari kata Yunani kryptos (tersembunyi) dan graphein (menulis).
 Cryptanalysis adalah aksi untuk memecahkan mekanisme kriptografi dengan cara mendapatkan plaintext atau kunci dari ciphertext yang digunakan untuk mendapatkan informasi berharga kemudian mengubah atau memalsukan pesan dengan tujuan untuk menipu penerima yang sesungguhnya, memecahkan ciphertext.
 Cryptology adalah ilmu yang mencakup cryptography dan cryptanalysis.
 Encryption adalah transformasi data kedalam bentuk yang tidak dapat terbaca tanpa sebuah kunci tertentu. Tujuannya adalah untuk meyakinkan privasi dengan menyembunyikan informasi dari orang-orang yang tidak ditujukan, bahkan mereka mereka yang memiliki akses ke data terenkripsi.
 Dekripsi merupakan kebalikan dari enkripsi, yaitu transformasi data terenkripsi kembali ke bentuknya semula.
 Plaintext merupakan data/pesan sebelum dilakukan proses encryption atau data sesudah dilakukan proses decryption
 Chypertext merupakan data setelah dilakukan proses encryption
 Terminology
 Tujuan
 Confidentiality
 Hanya bisa diakses orang tertentu
 Authentication
 Pengirim penerima orang yang sebenarnya
 Integrity
 Terjamin tidak berubah, rusak, ditambah dll
 Non Repudiation
 Tidak terjadi pengingkaran
 Access Control
 Membatasi akes
 History
 3000 tahun SM bangsa Mesir menggunakan hieroglyphcs untuk menyembunyikan tulisan dari mereka yang tidak diharapkan.
 Sekitar 50 SM, Julius Caesar, kaisar Roma, menggunakan cipher substitusi untuk mengirim pesan ke Marcus Tullius Cicero.
 Huruf-huruf apfabet disubstitusi dengan huruf-huruf yang lain pada alfabet yang sama.
 Menggeser 3 posisi alphabet
 Pada abad ke-9, filsuf Arab al-Kindi menulis risalat (ditemukan kembali th 1987) yang diberi judul “A Manuscript on Deciphering Cryptographic Messages”.
 Pada 1790, Thomas Jefferson mengembangkan alat enkripsi dengan menggunakan tumpukan yang terdiri dari 26 disk yang dapat diputar scr individual
 Mesin kriptografi mekanik yang disebut Hagelin Machine dibuat pada tahun 1920 oleh Boris Hagelin di Scockholm, Swedia. Di US, mesin Hagelin dikenal sebagai M-209.
 Militer Jerman menggunakan mesin cipher substitusi polialfabetik disebut Enigma sebagai sistem pengkodean utama selama PD II.
 awal tahun 70an Feistel menemukan DES, tahun 1977 DES (Data Encryption Standard) dipakai sebagai standar pemrosesan informasi federal US untuk mengenkripsi informasi yang unclassified. DES merupakan mekanisme kriptografi yang paling dikenal sepanjang sejarah
 1976, Diffie dan Hellman mempublikasikan New Directions in Cryptography, memperkenalkan konsep revolusioner kriptografi kunci publik dan juga memberikan metode baru dan jenius untuk pertukaran kunci,
 Pembagian Cryptography
 Classical Cryptography
 Substitusi
 Caesar cipher adalah cipher substitusi sederhana yang mencakup pergeseran alfabet 3 posisi ke kanan.
 Transposisi (Permutasi)
 Melakukan perubahan posisi karaker
 Contoh : Teknik Rail Fence, Transposisi kolumnar dan Enigma
 Vernam Cipher (One Time Pad)
 Cipher ini diimplementasikan melalui sebuah kunci yang terdiri dari sekumpulan random karakter-karakter yang tidak berulang.
 Book Key Cipher / Running Key Cipher
 Cipher ini menggunakan teks dari sebuah sumber (misalnya buku) untuk mengenkripsi plaintext.
 Codes
 Codes berkaitan dengan kata-kata dan frase dan menghubungkan kata-kata ini sebagai frase untuk sekelompok angka atau huruf. Sebagai contoh, angka 526 dapat berarti “Attack at dawn”
 Steganography
 Sebuah contohnya adalah microdot, yang mengkompresi pesan kedalam ukuran period atau dot.
 Steganography dapat digunakan untuk membuat “watermark” digital untuk mendeteksi penyalinan image digital secara ilegal.
 Modern Symmetric Cryptography
 Symmetric Algorithms
 The sender and receiver use two instances of the same key for encryption and decryption
 If an intruder were to get this key, the intruder could decrypt any intercepted message encrypted with this key.
 Main type of Symmetric Cryptography
 The two main types of symmetric algorithms
 block ciphers: work on blocks of bits
 Block cipher encryption steps:
1. The message is divided into blocks of bits
2. These blocks are then put through mathematical functions, one block at a time.
 stream ciphers: work on one bit at a time
 A stream cipher treats the message as a stream of bits and performs mathematical functions on each bit individually.
 Example of Symmetric Systems
 Block Chiper
 Data Encryption Standard (DES)
 3DES
 Blowfish
 Stream Cheaper
 RC3, RC4, RC5
 Tagima
 Wake
 Modern Block Chiper
 Mode Operasi Enskripsi-Dekripsi
 Electronic Codebook – ECB
 Cipherblock Chaining – CBC
 Cipher Feedback – CFB
 Output Feedback – OFB
 Feistel Chiper
 Feistel was one of the designers of early cryptographic algorithms at IBM in the 1970’s
 Feistel Cipher is a scheme / template for specifying the algorithm of a block cipher
 The Feistel scheme allows encryption and decryption with the same hardware circuit / piece of software
 Algorithms that use the Feistel scheme:
 􀂾 DES
 􀂾 IDEA
 􀂾 RC5
 Asymmetric Cryptography
 Asymmetric Cryptography
 In public key systems, each entity has a pair of different keys, or asymmetric keys.
 The two different asymmetric keys are mathematically related.
 The public key can be known to everyone
 The private key must be known and used only by the owner.
 It must be computationally infeasible to derive the private key from the public key.
 Asymmetric Cryptography
 Some common asymmetric algorithms
 Diffie-Hellman
 Elliptic curve cryptosystem (ECC)
 El Gamal
 Digital Signature Algorithm (DSA)
 Knapsack
 Konsep Asymmetric
 Konsep Asymmetric
Precondition: Alice and Bob agree to use a prime number p=23
and base g=5.
1. Alice chooses a secret integer a=6, then sends Bob g^a mod p = 5^6 mod 23 = 8.
2. Bob chooses a secret integer b=15, then sends Alice g^b mod p = 5^15 mod 23 = 19.
3. Alice computes (g^b mod p)^a mod p=19^6 mod 23 = 2.
4. Bob computes (g^a mod p)^b mod p=8^15 mod 23 = 2.
 Applied Cryptography
 Secure Socket Layer
 PGP (Pretty Good Privacy) for email
 IP Sec
 Pretty Good Privacy (PGP)
 widely used de facto secure email
 developed by Phil Zimmermann
 selected best available crypto algs to use
 integrated into a single program
 available on Unix, PC, Macintosh and Amiga systems
 originally free, now have commercial versions available also
 PGP Operation – Email Compatibility
 when using PGP will have binary data to send (encrypted message etc)
 however email was designed only for text
 hence PGP must encode raw binary data into printable ASCII characters
 uses radix-64 algorithm
 maps 3 bytes to 4 printable chars
 also appends a CRC
 PGP also segments messages if too big
 PGP Software
 Algoritma Kriptografi Klasik
(bag 1)
 Pendahuluan
 Algoritma kriptografi klasik berbasis karakter
 Menggunakan pena dan kertas saja, belum ada komputer
 Termasuk ke dalam kriptografi kunci-simetri
 Tiga alasan mempelajari algoritma klasik:
1. Memahami konsep dasar kriptografi.
2. Dasar algoritma kriptografi modern.
3. Memahami kelemahan sistem cipher.
Algoritma kriptografi klasik:
1. Cipher Substitusi (Substitution Ciphers)
2.Cipher Transposisi (Transposition Ciphers)
 Cipher Substitusi
 Contoh: Caesar Cipher
 Tiap huruf alfabet digeser 3 huruf ke kanan
pi : A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
ci : D E F G H I J K L M N O P Q R S T U V W X Y Z A B C
 Contoh:
 Dalam praktek, cipherteks dikelompokkan ke dalam kelompok n-huruf, misalnya kelompok 4-huruf:
 Atau membuang semua spasi:
 Tujuannya agar kriptanalisis menjadi lebih sulit
 Misalkan A = 0, B = 1, …, Z = 25, maka secara matematis caesar cipher dirumuskan sebagai berikut:
Enkripsi: ci = E(pi) = (pi + 3) mod 26
Dekripsi: pi = D(ci) = (ci – 3) mod 26
 Jika pergeseran huruf sejauh k, maka:

Enkripsi: ci = E(pi) = (pi + k) mod 26
Dekripsi: pi = D(ci) = (ci – k) mod 26
k = kunci rahasia
 Untuk 256 karakter ASCII, maka:

Enkripsi: ci = E(pi) = (pi + k) mod 256
Dekripsi: pi = D(ci) = (ci – k) mod 256
k = kunci rahasia
/* Program enkripsi file dengan Caesar cipher */

main(int argc, char *argv[])
FILE *Fin, *Fout;
char p, c;
int k;

Fin = fopen(argv[1], “rb”);
if (Fin == NULL)
printf(“Kesalahan dalam membuka %s sebagai berkas masukan/n”, argv[1]);
Fout = fopen(argv[2], “wb”);
printf(“\nEnkripsi %s menjadi %s …\n”, argv[1], argv[2]);
printf(“k : “);
scanf(“%d”, &k);
while ((p = getc(Fin)) != EOF)
c = (p + k) % 256;
putc(c, Fout);

/* Program dekripsi file dengan Caesar cipher */


main(int argc, char *argv[])
FILE *Fin, *Fout;
char p, c;
int n, i, k;

Fin = fopen(argv[1], “rb”);
if (Fin == NULL)
printf(“Kesalahan dalam membuka %s sebagai berkas masukan/n”, argv[1]);
Fout = fopen(argv[2], “wb”);
printf(“\nDekripsi %s menjadi %s …\n”, argv[1], argv[2]);
printf(“k : “);
scanf(“%d”, &k);
while ((c = getc(Fin)) != EOF)
p = (c – k) % 256;
putc(p, Fout);
Caesar cipher mudah dipecahkan dengan exhaustive key search karena jumlah kuncinya sangat sedikit (hanya ada 26 kunci).

Contoh: kriptogram XMZVH
1 oggv og chvgt vjg vqic rctva
2 nffu nf bgufs uif uphb qbsuz
3 meet me after the toga party
4 Ldds ld zesdq sgd snfz ozqsx
5 kccr kc ydrcp rfc rmey nyprw
6 …
21 ummb um inbmz bpm bwoi xizbg
22 tlla tl hmaly aol avnh whyaf
23 skkz sk glzkx znk zumg vgxze
24 rjjy rj fkyjw ymj ytlf ufwyd
25 qiix qi ejxiv xli xske tevxc
Contoh: Kriptogram HSPPW menghasilkan dua kemungkinan kunci yang potensial, yaitu k = 4 menghasilkan pesan DOLLS dan k = 11 menghasilkan WHEEL.
Jika kasusnya demikian, maka lakukan dekripsi terhadap potongan cipherteks lain tetapi cukup menggunakan k = 4 dan k = 11 agar dapat disimpulkan kunci yang benar.
 Di dalam sistem operasi Unix, ROT13 adalah fungsi menggunakan Caesar cipher dengan pergeseran k = 13

 Contoh: ROT13(ROTATE) = EBGNGR
 Nama “ROT13” berasal dari net.jokes
(hhtp:// (tahun 1980)
 ROT13 biasanya digunakan di dalam forum online untuk menyandikan jawaban teka-teki, kuis, canda, dsb
 Enkripsi arsip dua kali dengan ROT13 menghasilkan pesan semula:
P = ROT13(ROT13(P))
sebab ROT13(ROT13(x)) = ROT26(x) = x
 Jadi dekripsi cukup dilakukan dengan mengenkripsi cipherteks kembali dengan ROT13

 PGP Software
 PGP SOftware
 Once the e-mail arrives at your computer, you will need a way to “unlock” the code.
 IPSec Application
 IPSec is a transparent standards-based security layer for TCP/IP that is commonly used to create and operate Virtual Private Networks (VPNs).
 IPSec Architecture
 What is a VPN
 HomeNet to the office
with VPN
 Dasar Matematika Cryptigraphy
 OR
 Penjumlahan Modulo
 Pergeseran bit (Sift)
 Konversi
 Bit to Hexa
 Hexa to bit

arsitektur perangkat lunak

1.1. Pengertian Rekayasa Perangkat Lunak
Definisi Rekayasa
Engineering = rekayasa
􀂾Pemakaian ‘science’ untuk menyelesaikan ‘masalah praktis’
􀂾Dari tidak ada menjadi ada

Definisi Perangkat Lunak
Ada beberapa definisi perangkat lunak yang pernah dikemukakan antara lain :
• Software = Perangkat lunak
􀂾Kumpulan program komputer dengan fungsi tertentu
• Perangkat lunak adalah
1. Instruksi (program komputer) yang bila dieksekusi dapat menjalankan fungsi tertentu,
2. Struktur data yang dapat membuat program memanipulasi informasi, dan
3. Dokumen yang menjelaskan operasi dan penggunaan program (Pressman, 1997).
• Perangkat lunak adalah program komputer, prosedur, aturan, dan dokumentasi yang berkaitan serta data, yang bertalian dengan operasi suatu sistem komputer (IEEE, 1993).

Karakteristik Perangkat Lunak
Perangkat lunak lebih dikenal sebagai elemen lojik daripada fisik, oleh karena itu perangkat lunak memiliki karakteristik yang berbeda dari perangkat keras :
1. Perangkat lunak dikembangkan atau direkayasa, jadi tidak diproduksi dalam pengertian klasik.
2. Merupakan produk yang unik (tidak ada seri produksi).
3. Perangkat lunak tidak pernah akan rusak/aus karena selalu diperbaharui
4. Tidak terlihat (invisible).
5. Perangkat lunak pada umumnya dibangun sesuai keinginan, jadi tidak dibentuk dari komponen yang sudah ada.
6. Fleksibel, sehingga mudah dimodifikasi.
7. Dihubungkan (linked) dengan sistem komputer.

Rekayasa perangkat lunak (software engineering) adalah suatu proses rancang bangun. Beberapa definisi tentang rekayasa perangkat lunak :
• Pembentukan dan penggunaan prinsip rekayasa (engineering) untuk mendapatkan perangkat lunak secara ekonomis namun andal dan dapat bekerja secara efesien pada komputer (Fritz Bauer, 1968).
• Penerapan pendekatan yang sistematis, disiplin, dan terukur untuk pengembangan, operasi, dan pemeliharaan perangkat lunak (IEEE, 1993).
• Suatu disiplin yang mengintegrasikan proses/prosedur, metode, dan perangkat tools untuk pembangunan perangkat lunak komputer (Pressman, 97).
• Merupakan aplikasi dari prinsip-prinsip sains untuk

Modul Rekayasa Perangkat Lunak Halaman 1 dari 64

o Mengurutkan transformasi masalah menjadi solusi yang dapat bekerja dengan baik
o Urutan pemeliharaan perangkat lunak tersebut sampai tidak dapat digunakan lagi (Alan M. Davis)

Proses RPL dimulai jauh sebelum “Coding” dilakukan dan berlanjut terus setelah versi awal dari program selesai dikerjakan.
Tujuan dari RPL adalah
a. Menghasilkan sebuah perangkat lunak yang berkualitas. Yang dimaksud dengan berkualitas dapat dilihat dari tiga sisi, sisi sponsor (individu atau organisasi yang telah mengeluarkan biaya dalam pembangunan perangkat lunak), sisi pemakai (siapapun yang menggunakan perangkat lunak tersebut), sisi maintainer / modifier (yang memelihara dan memodifikasi perangkat lunak tersebut). Untuk lebih jelasnya lihat gambar 1.1.
Sisi Sponsor :
Tujuan utama sponsor adalah menghasilkan dan atau menghemat uang. Sponsor ingin menggunakan perangkat lunak tersebut untuk meningkatkan produktivitas organisasi. Sponsor mengharapkan untuk dapat menghasilkan sebuah layanan dengan biaya yang rendah tetapi masuk akal. Karena itu sistem yang dibuat harus handal, fleksibel dan efisien. Selain itu biaya dari pemeliharaan, modifikasi dan peningkatan dari sistem tersebut harus serendah mungkin.
Sisi Pemakai :
Bagi pemakai perangkat lunak adalah alat untuk membantu menyelesaikan tugas-tugasnya. Karena itu perangkat lunak harus menyediakan fungsi-fungsi yang dibutuhkan oleh pemakai. Perangkat lunak juga harus handal dan efisien, perangkat lunak harus dapat menghasilkan output yang konsisten. Selain itu pemakai harus merasa perangkat lunak yang dibuat mudah untuk dipelajari, mudah digunakan dan mudah untuk diingat.
Sisi Maintainer/modifier :
Yang diinginkan oleh maintainer/modifier adalah perangkat lunak tersebut memiliki sangat sedikit error pada saat penginstallan pertama (catatan : sangat kecil kemungkinannya untuk menghasilkan perangkat lunak yang 100 % bebas dari bug). Selain itu perangkat lunak tersebut harus terdokumentasi dengan baik. Source code juga harus mudah dibaca, terstruktur dan dirancang dengan baik dan bersifat modular.
b. Tujuan kedua dari RPL adalah menghasilkan perangkat lunak dengan biaya yang efisien.
c. Sedangkan tujuan ketiga dari RPL adalah menghasilkan perangkat lunak tepat pada waktunya.

Modul Rekayasa Perangkat Lunak Halaman 2 dari 64
Gambar 1.1 Paremeter Perangkat Lunak Yang Berkualitas Berdasarkan Sudut Pandang
Rekayasa perangkat lunak merupakan suatu teknologi berlapis, yaitu proses/prosedur, metode, dan perangkat, dengan fokus kualitas sebagai dasar utamanya.
Mengapa Rekayasa Perangkat Lunak ?
Adanya krisis perangkat lunak (NATO conference, 1968) :
• Perangkat lunak lebih banyak menyebabkan masalah daripada menyelesaikannya.
• Peningkatan ukuran perangkat lunak tanpa pengorganisasian.
• Perbaikan suatu kesalahan menyebabkan timbulnya kesalahan lainnya.
• Tidak ada kendali pemeliharaan.

Masalah-masalah perangkat lunak :
• Perangkat lunak telah diselesaikan dan diserahkan (delivered) tetapi tidak pernah digunakan (47%).
• Pemakai (user) sudah membayar untuk perangkat lunak tetapi tidak pernah jadi dan diserahkan (29,7%).
• Perangkat lunak digunakan setelah dilakukan modifikasi (3%).
• Perangkat lunak digunakan sebagaimana mestinya (2%).

Selain itu faktor pendukung kehadiran rekayasa perangkat lunak adalah :
• Ketidak mampuan untuk memprediksi waktu, usaha dan biaya pada pengembangan perangkat lunak.
• Kualitas perangkat lunak yang kurang baik.

Modul Rekayasa Perangkat Lunak Halaman 3 dari 64

• Perubahan perbandingan (rasio) harga perangkat keras dan perangkat lunak.
• Kemajuan teknologi perangkat keras.
• Kemajuan teknik perangkat lunak.
• Kebutuhan yang meningkat terhadap perangkat lunak.
• Kebutuhan akan perangkat lunak yang lebih besar dan kompleks.

1.2. Pengertian Perangkat Lunak
Jenis-jenis Perangkat Lunak
Dilihat dari sudut pandang fungsinya, perangkat lunak dapat dikelompokkan menjadi :
1. Perangkat lunak sistem
Perangkat lunak yang kegunaannya lebih banyak ditujukan untuk operasional komputer.
• sistem operasi
• penerjemah bahasa pemrograman (compiler/interpreter)
2. Perangkat lunak aplikasi
Perangkat lunak yang kegunaannya lebih banyak ditujukan untuk membantu menyelesaikan masalalah-masalah yang dihadapi oleh pemakai.
• program paket yang sudah jadi
• program aplikasi buatan sendiri

Sedangkan dilihat dari aplikasinya, perangkat lunak dibedakan menjadi :
1. Perangkat Lunak Sistem (Sistem Software)
Sekumpulan program yang ditulis untuk kepentingan program lain, contoh editor, driver dan lain-lain
2. Perangkat Lunak Waktu Nyata (Real Time Software)
Perangkat lunak yang digunakan untuk mengukur/menganalisis atau mengontrol proses pemasukan data dari lingkungan luar sampai menghasilkan laporan yang diinginkan
3. Perangkat Lunak Bisnis (Business Software)
Perangkat lunak yang memberikan fasilitas operasi untuk bisnis atau fasilitas pengambilan keputusan manajemen, contoh sistem akuntansi, inventory, payroll dan lain-lain
4. Perangat Lunak Rekayasa dan Sains (Engineering and Scientific Software)
Perangkat lunak yang digunakan di dalam bidang aplikasi teknik dan kerekayasaan
Perangkat lunak jenis ini biasanya berhubungan dengan komputasi data numerik, CAD (Computer Aided Design), simulasi sistem, dan lain-lain.
5. Embedded Software
Perangkat lunak yang digunakan untuk mengontrol suatu produk dan sistem dimana perangkat lunak tersebut disimpan. Biasanya ditempatkan di ROM, contoh Tombol di Microwave Oven
6. Perangkat Lunak Komputer Pribadi (Personal Computer Software)
Banyak digunakan pada aplikasi yang bersifat perorangan, contohnya : pengolah kata, spreadsheet, game, DBMS dan lain-lain.
7. Perangkat Lunak Intelegensia Buatan (Artificial Intelligent Software)

Modul Rekayasa Perangkat Lunak Halaman 4 dari 64

Dibuat dengan menggunakan teknik algoritma non-numerik untuk memecahkan masalah yang kompleks, digunakan dalam bidang aplikasi kecerdasan buatan, contohnya : game, expert sistem, neural network, Turbo Prolog, dan lain-lain

1.3. Mitos Perangkat Lunak
Berkaitan dengan Manajemen :
Biasanya muncul pada manajer yang bertanggung jawab terhadap perangkat lunak. Mereka biasanya ditekan untuk menjaga budget, jadwal harus selalu terpenuhi dan harus meningkatkan kualitas. Mitos tersebut antara lain :
Mitos : Kita sudah punya buku yang berisi standard dan prosedur yang banyak untuk pengembangan perangkat lunak. Bukankah hal ini sudah cukup untuk mencari semua yang ingin diketahui ?
Kenyataan : Buku-buku itu memang lengkap, tapi apakah digunakan ? Apakah praktisi perangkat lunak sadar dengan keberadaannya? Apakah cocok dengan pengembangan yang modern? Apakah benar-benar lengkap ? Pada banyak kasus jawabannya adalah tidak.
Mitos : Staff Kami mempunyai alat Bantu pengembangan yang canggih, bahkan dibelikan komputer generasi terbaru.
Kenyataan : Masalah pengembangan perangkat lunak yang berkualitas lebih penting dari sekedar komputer yang terbaru. CASE (Computer Aided Software Engineering) tools lebih penting daripada perangkat keras untuk mendapatkan kualitas dan produktifitas yang baik, tapi banyak pengembang perangkat lunak yang tidak menyadarinya.
Mitos : Jika Kita dikejar jadwal, tambah programmer untuk mengejarnya
Kenyataan : Membuat perangkat lunak bukan proses mekanis seperti industri manufaktur. Jika kita menambah orang pada proyek yang terlambat itu justru akan lebih terlambat
Berkaitan dengan Klien
Konsumen sering mempercayai mitos karena pembuat perangkat lunak kurang berusaha untuk membetulkan misinformasi ini.
Mitos : Sebuah kalimat umum yang menyatakan objektif sudah cukup untuk memulai menulis program. Kita bias perinci lagi nanti.
Kenyataan : Definisi yang tidak jelas, justru akan menggagalkan usaha pengembangan perangkat lunak. Justru diperlukan deskripsi formal dan detil dari domain informasi, fungsi, performansi, antarmuka, batasan desain, dan kriteria validasi. Karakteristik ini hanya bias didapat melalui komunikasi total antara pelanggan dan pengembang.
Mitos : Kebutuhan proyek akan terus berubah, tapi perubahan ini akan dapat ditanggapi dengan mudah karena perangkat lunak itu bersifat fleksibel
Kenyataan : memang betul kebutuhan perangkat lunak akan berubah, namun dampaknya tergantung pada waktu pemunculannya. Jika muncul pada tahap definisi, pengaruhnya tidak banyak, lebih kebelakang dampaknya akan lebih besar.
Modul Rekayasa Perangkat Lunak Halaman 5 dari 64
Berkaitan dengan Pengembang
Mitos : Setelah program selesai ditulis dan dapat dijalankan, maka tugas sudah selesai.
Kenyataan : Ada yang mengatakan bahwa “Lebih cepat program dibuat, maka lebih lama selesainya”. Dari data industri 50-70% dari usaha pada pembuatan program akan bertambah lagi setelah program dilihat untuk pertama kalinya oleh pelanggan.
Mitos : Selama program belum berjalan, sulit untuk mengetahui kualitasnya
Kenyataan : Software review adalah cara efektif untuk mencari Software defect daripada tahap pengujian
Mitos : Faktor penentu suksesnya proyek adalah program yang dapat berjalan
Kenyataan : Program hanyalah salah satu komponen dari perangkat lunak. Dokumentasi penting sebagai dasar pengembangan yang sukses serta sebagai penunjuk untuk pemeliharaan perangkat lunak
Modul Rekayasa Perangkat Lunak Halaman 6 dari 64
2.1. Latar Belakang
Pada pertengahan tahun 60 sampai 70-an banyak dikembangkan sistem-sistem perangkat lunak yang besar. Sistem-sistem yang dikembangkan ini banyak yang dipandang tidak efisien, kurang berhasil, bahkan banyak yang gagal. Kegagalan ini disebabkan karena tidak tersedianya teknik pengembangan perangkat lunak yang baik. Pada awal tahun 70-an mulai muncul metodologi-metodologi pengembangan perangkat lunak yang cukup baik.
Pengembangan perangkat lunak dapat diartikan sebagai proses membuat suatu perangkat lunak baru untuk menggantikan perangkat lunak lama secara keseluruhan atau memperbaiki perangkat lunak yang telah ada. Agar lebih cepat dan tepat dalam mendeskripsikan solusi dan mengembangkan perangkat lunak, juga hasilnya mudah dikembangkan dan dipelihara, maka pengembangan perangkat lunak memerlukan suatu metodologi khusus. Metodologi pengembangan perangkat lunak adalah suatu proses pengorganisasian kumpulan metode dan konvensi notasi yang telah didefinisikan untuk mengembangkan perangkat lunak. Secara prinsip bertujuan untuk membantu menghasilkan perangkat lunak yang berkualitas. Penggunaan suatu metodologi sesuai dengan persoalan yang akan dipecahkan dan memenuhi kebutuhan pengguna akan menghasilkan suatu produk perekayasaan yang berkualitas dan terpelihara serta dapat menghindari masalah-masalah yang sering terjadi seperti estimasi penjadwalan dan biaya, perangkat lunak yang tidak sesuai dengan keinginan pengguna dan sebagainya.
Metodologi pengembangan perangkat lunak (atau disebut juga model proses atau paradigma rekayasa perangkat lunak) adalah suatu strategi pengembangan yang memadukan proses, metode, dan perangkat (tools).
Menurut Pressman (1997) Komponen metodologi pengembangan perangkat lunak dapat dibagi dalam tiga unit, yaitu :
1. Metode, yaitu suatu cara atau teknik pendekatan yang sistematik yang dipergunakan untuk
mengembangkan perangkat lunak. Metode ini mencakup : Perencanaan proyek dan perkiraan, analisis keperluan sistem dan perangkat lunak, perancangan struktur data, arsitektur program, prosedur algoritma, Coding, uji coba dan pemeliharaan.
2. Alat bantu (Tools), yaitu alat-alat (manual atau otomatis) yang mendukung pengembangan
perangkat lunak. Terdapat 2 alat Bantu yang dapat digunakan yaitu : alat Bantu manual
dan alat Bantu otomatis.
3. Prosedur, yang dipergunakan untuk mendefinisikan urut-urutan pekerjaan (daur) dari
metode dan alat bantu tersebut.
Secara umum daur hidup pengembangan perangkat lunak meliputi tahapan-tahapan atau aktivitas pengembangan yang terdiri dari tahap analisis, tahap perancangan, tahap implementasi serta tahap pengujian dan perawatan perangkat lunak. Tahap analisis dan perancangan merupakan tahapan awal yang penting dalam suatu paradigma pemgembangan perangkat lunak, karena sangat mempengaruhi tahapan selanjutnya. Sehingga jika terjadi kesalahan pada tahap analisis dan perancangan, maka akan terdapat juga kesalahan pada tahap implementasi dan tahapan-tahapan selanjutnya. Tahap implementasi perangkat lunak bertujuan untuk menerapkan spesifikasi kebutuhan perangkat lunak ke dalam bahasa pemrograman tertentu. Tahap pengujian perangkat lunak dilakukan untuk menemukan kesalahan (bug) yang mungkin terdapat di dalam sebuah perangkat lunak. Sedangkan tahap perawatan perangkat lunak fokusnya adalah pengubahan. Ada tiga pengubahan yaitu : pembetulan, adaptasi (perbaikan terhadap lingkungan) dan perluasan (penambahan karena permintaan pemakai).
Sequence diagram
M.Fadly Syahputra, M.Sc.IT
Dalam Perancangan Sistem Hubungan Antara Timeline dan Process Juga Diperhitungkan untuk Digambarkan
Penggambaran Model Dalam Rentang Waktu dan Urutan Proses Adalah Untuk Memastikan Sistem Dapat Berjalan Sesuai Dengan Keinginan Pengguna
Sequence : Urutan, Tahapan
Diagram: Diagram
Sequence Diagram : Penggambaran Model Perangkat Lunak Dalam Urutan Atau Tahapan Tertentu
Object Lifeline : Menggambarkan Batasan Objek
Boundary,Controller, Entiti
Massage Arrow: Menggambarkan Alir Proses, Perintah Atau Pengiriman Data
Boundary: Berhubungan Dengan Proses Input Output Ataupun Interface
Controller: Berhubungan Dengan Proses
Entiti : Berhubungan Dengan Input-Output Data
Activation: Menggambarkan Aktivasi Objek
Actor : Menggambarkan Actor Sebagai Objek
Contoh Sequence Diagram
Contoh Sequence Diagram

2.2. Proses Pengembangan Perangkat Lunak
Proses pengembangan perangkat lunak adalah suatu proses dimana kebutuhan pemakai diterjemahkan menjadi produk perangkat lunak. Proses ini mencakup aktivitas penerjemahan kebutuhan pemakai menjadi kebutuhan perangkat lunak, transformasi kebutuhan perangkat lunak menjadi desain, penerapan desain menjadi kode program, uji coba kode program, dan instalasi serta pemeriksaan kebenaran perangkat lunak untuk operasional (IEEE. 1990). Berdasarkan pengertian tersebut, secara umum dapat dikatakan bahwa proses pengembangan perangkat lunak mengikuti tahap-tahap :
1. Menentukan APA yang harus dikerjakan oleh perangkat lunak dalam satu rentang
waktu tertentu.
2. Mendefinisikan BAGAIMANA perangkat lunak dibuat, mencakup arsitektur
perangkat lunaknya, antar muka internal, algoritma, dan sebagainya.
3. Penerapan (penulisan program) dan pengujian unit-unit program.
4. Integrasi dan pengujian modul-modul program.
5. Validasi perangkat lunak secara keseluruhan (pengujian sistem).

2.3. Siklus Pengembangan Perangkat Lunak
Siklus pengembangan perangkat lunak atau sering disebut juga dengan siklus hidup perangkat lunak adalah (IEEE,1987) :
• Periode waktu yang diawali dengan keputusan untuk mengembangkan produk perangkat lunak dan berakhir setelah perangkat lunak diserahkan. Umumnya siklus pengembangan ini terdiri dari tahap analisis kebutuhan, perancangan, penerapan, pengujian, dan instalasi serta pemeriksaan.
• Periode waktu yang diawali dengan keputusan untuk mengembangkan produk perangkat lunak dan berakhir saat produk tidak dapat ditingkatkan lebih jauh lagi oleh pengembang.

2.4. Model Proses Pengembangan Perangkat Lunak
A. Linear Sequential Model
Linear sequential model (atau disebut juga “classic life cycle” atau “waterfall model”) adalah metode pengembangan perangkat lunak dengan pendekatan sekuensial dengan cakupan aktivitas :
1. Rekayasa sistem dan Analisis (Sistem Engineering and Analysis)
Karena perangkat lunak adalah bagian dari sistem yang lebih besar, pekerjaan dimulai dari pembentukan kebutuhan-kebutuhan untuk seluruh elemen sistem dan kemudian memilah mana yang untuk pengembangan perangkat lunak. Hal ini penting, ketika perangkat lunak harus berkomunikasi dengan hardware, orang dan basis data
2. Analisis kebutuhan perangkat lunak (Software Requirements Analysis)
Pengumpulan kebutuhan dengan fokus pada perangkat lunak, yang meliputi :
Domain informasi, fungsi yang dibutuhkan, unjuk kerja/performansi dan antarmuka. Hasilnya harus didokumentasi dan direview ke pelanggan
3. Perancangan (Design)
Ada 4 atribut untuk program yaitu : Struktur Data, Arsitektur perangkat lunak, Prosedur detil dan Karakteristik Antarmuka. Proses desain mengubah kebutuhan-kebutuhan menjadi bentuk karakteristik yang dimengerti perangkat lunak sebelum

Modul Rekayasa Perangkat Lunak Halaman 8 dari 64

dimulai penulisan program. Desain ini harus terdokumentasi dengan baik dan menjadi bagian konfigurasi perangkat lunak.
4. Pembuatan kode (Coding)
Penterjemahan perancangan ke bentuk yang dapat dimengerti oleh mesin, dengan menggunakan bahasa pemrograman
5. Pengujian (Testing)
Setelah kode program selesai testing dapat dilakukan. Testing memfokuskan pada logika internal dari perangkat lunak, fungsi eksternal dan mencari segala kemungkinan kesalahan dan memriksa apakah sesuai dengan hasil yang diinginkan.
6. Pemeliharaan (Maintenance)
Merupakan bagian paling akhir dari siklus pengembangan dan dilakukan setelah perangkat lunak dipergunakan. Kegiatan :
• Corrective Maintenance : Mengoreksi kesalahan pada perangkat lunak, yang baru terdeteksi pada saat perangkat lunak dipergunakan
• Adaptive Maintenance : Penyesuaian dengan lingkungan baru, misalnya sistem operasi atau sebagai tuntutan atas perkembangan sistem komputer, misalnya penambahan printer driver
• Perfektive Maintenance : Bila perangkat lunak sukses dipergunakan oleh pemakai. Pemeliharaan ditujukan untuk menambah kemampuannya seperti memberikan fungsi-fungsi tambahan, peningkatan kinerja dan sebagainya.

Kelemahan model linear sequential:
1. Proyek yang sebenarnya jarang mengikuti alur sekuensial seperti diusulkan, sehingga perubahan yang terjadi dapat menyebabkan hasil yang sudah didapat tim harus diubah kembali/iterasi sering menyebabkan masalah baru.
2. Linear sequential model mengharuskan semua kebutuhan pemakai sudah dinyatakan secara eksplisit di awal proses, tetapi kadang-kadang ini tidak dapat terlaksana karena kesulitan yang dialami pemakai saat akan mengungkapkan semua kebutuhannya tersebut.
3. Pemakai harus bersabar karena versi dari program tidak akan didapat sampai akhir rentang waktu proyek.
4. Adanya waktu menganggur bagi pengembang, karena harus menunggu anggota tim proyek lainnya menuntaskan pekerjaannya.

B. Prototyping Model
Pendekatan prototyping model digunakan jika pemakai hanya mendefenisikan objektif umum dari perangkat lunak tanpa merinci kebutuhan input, pemrosesan dan outputnya, sementara pengembang tidak begitu yakin akan efesiensi algoritma, adaptasi sistem operasi, atau bentuk antarmuka manusia-mesin yang harus diambil. Cakupan aktivitas dari prototyping model terdiri dari :
1. Mendefinisikan objektif secara keseluruhan dan mengidentifikasi kebutuhan yang sudah diketahui.
2. Melakukan perancangan secara cepat sebagai dasar untuk membuat prototype.

Modul Rekayasa Perangkat Lunak Halaman 9 dari 64

3. Menguji coba dan mengevaluasi prototype dan kemudian melakukan penambahan dan perbaikan-perbaikan terhadap prototype yang sudah dibuat.

Kelemahan prototyping model :
1. Pelanggan yang melihat working version dari model yang dimintanya tidak menyadari, bahwa mungkin saja prototype dibuat terburu-buru dan rancangan tidak tersusun dengan baik
2. Pengembang kadang-kadang membuat implementasi sembarang, karena ingin working version bekerja dengan cepat

C. RAD (Rapid Application Development) Model
Merupakan model proses pengembangan perangkat lunak secara linear sequential yang menekankan pada siklus pengembangan yang sangat singkat. Jika kebutuhan dipahami dengan baik, proses RAD memungkinkan tim pengembangan menciptakan “sistem fungsional yang utuh” dalam periode waktu yang sangat pendek (kira-kira 60-90 hari).
Pendekatan RAD model menekankan cakupan :
1. Pemodelan bisnis (Bussiness Modelling)
Aliran informasi diantara fungsi-fungsi bisnis dimodelkan dengan suatu cara untuk
menjawab pertanyaan-pertanyaan berikut : Informasi apa yang mengendalikan proses
bisnis ? Kemana informasi itu pergi? Siapa yang memprosesnya ?
2. Pemodelan data (Data Modelling)
Aliran informasi yang didefinisikan sebagai bagian dari fase pemodelan bisnis disaring ke dalam serangkaian objek data yang dibutuhkan untuk menopang bisnis tersebut. Karakteristik/atribut dari masing-masing objek diidentifikasi dan hubungan antara objek-objek tersebut didefinisikan.
3. Pemodelan proses (Process Modelling)
Aliran informasi yang didefinisikan dalam fase pemodelan data ditransformasikan untuk mencapai aliran informasi yang perlu bagi implementasi sebuah fungsi bisnis. Gambaran pemrosesan diciptakan untuk menambah, memodifikasi, menghapus atau mendapatkan kembali sebuah objek data.
4. Pembuatan aplikasi (Application generation)
Selain menciftakan perangkat lunak dengan menggunakan bahasa pemrograman generasi ketiga yang konvensional, RAD lebih banyak memproses kerja untuk memakai lagi komponen program yang telah ada atau menciftakan komponen yang bias dipakai lagi. Pada semua kasus, alat-alat Bantu otomatis dipakai untuk memfasilitasi kontruksi perangkat lunak.
5. Pengujian dan pergantian (Testing and turnover)
Karena proses RAD menekankan pada pemakaian kembali, banyak komponen yang telah diuji. Hal ini mengurangi keseluruhan waktu pengujian. Tapi komponen baru harus diuji.

Kelemahan RAD model :
1. Untuk proyek dengan skala besar, RAD membutuhkan sumber daya manusia yang cukup untuk membentuk sejumlah tim RAD.
2. RAD membutuhkan pengembang dan pemakai yang mempunyai komitmen untuk melaksanakan aktivitas melengkapi sistem dalam kerangka waktu yang singkat.

Modul Rekayasa Perangkat Lunak Halaman 10 dari 64

3. Akan menimbulkan masalah jika sistem tidak dapat dibuat secara modular.
4. RAD tidak cocok digunakan untuk sistem yang mempunyai resiko teknik yang tinggi.

D. Spiral Model
Merupakan model proses perangkat lunak yang memadukan wujud pengulangan dari model prototyping dengan aspek pengendalian dan sistematika dari linear sequential model, dengan penambahan elemen baru yaitu analisis resiko. Model ini memiliki 4 aktivitas penting, yaitu :
1. Perencanaan (Planning), penentuan tujuan, alternatif dan batasan
2. Analisis resiko (Risk Analysis), analisis alternatif dan identifikasi/pemecahan resiko
3. Rekayasa (Engineering), pengembangan level berikutnya dari produk
4. Evaluasi Pemakai (Customer Evaluation) penilaian terhadap hasil rekayasa

Bentuk spiral memberikan gambaran bahwa semakin besar iterasinya, maka menunjukkan makin lengkap versi dari perangkat lunak yang dibuat. Selama awal sirkuit, objektif, alternatif dan batasan didefinisikan serta resiko diidentifikasikan dan dianalisa. Jika resiko menunjukkan ada ketidakpastian terhadap kebutuhan, maka prototyping harus dibuat pada kuadran rekayasa. Simulasi dan pemodelan lain dapat digunakan untuk mendefinisikan masalah dan memperbaiki kebutuhan.
Pelanggan mengevaluasi hasil rekayasa (kuadran evaluasi pelanggan) dan membuat usulan untuk perbaikan. Berdasarkan masukan dari pelanggan, fase berikutnya adalah perencanaan dan analisis resiko. Setelah analisis resiko selalu diperiksa apakah proyek diteruskan atau tidak, jika resiko terlalu besar, maka proyek dapat dihentikan.
Model spiral ini adalah pendekatan yang paling realistic untuk sistem sekala besar. Metode ini menggunakan pendekatan evolusioner, sehingga pelanggan dan pengembang dapat mengerti dan bereaksi terhadap suatu resiko yang mungkin terjadi
Kelemahan spiral model :
1. Sulit untuk meyakinkan pemakai (saat situasi kontrak) bahwa penggunaan pendekatan ini akan dapat dikendalikan.
2. Memerlukan tenaga ahli untuk memperkirakan resiko, dan harus mengandalkannya supaya sukses.
3. Belum terbukti apakah metode ini cukup efisien karena usianya relatif baru.

E. Fourth Generation Techniques (4GT)
Istilah generasi ke empat, mengarah ke perangkat lunak yang umum yaitu tiap pengembang perangkat lunak menentukan beberapa karakteristik perangkat lunak pada level tinggi.
Saat ini pengembangan perangkat lunak yang mendukung 4GT, berisi tool-tool berikut :
• Bahasa non prosedural untuk query basis data
• Report generation
• Data manipulation
• Interaksi layar
• Kemampuan grafik level tinggi
• Kemampuan spreadsheet

Modul Rekayasa Perangkat Lunak Halaman 11 dari 64
Tiap tool ini ada tapi hanya untuk sauatu aplikasi khusus.
Menggunakan perangkat bantu (tools) yang akan membuat kode sumber secara otomatis berdasarkan spesifikasi dari pengembang perangkat lunak. Hanya digunakan untuk menggunakan perangkat lunak yang menggunakan bahasa khusus atau notasi grafik yang diselesaikan dengan syarat yang dimengerti pemakai. Cakupan aktivitas 4GT :
1. Pengumpulan kebutuhan, idealnya pelanggan akan menjelaskan kebutuhan yang akan ditranslasikan ke prototype operasional.
2. Translasi kebutuhan menjadi prototype operasional, atau langsung melakukan implementasi secara langsung dengan menggunakan bahasa generasi keempat (4GL) jika aplikasi relatif kecil.
3. Untuk aplikasi yang cukup besar, dibutuhkan strategi perancangan sistem walaupun 4GL akan digunakan.
4. Pengujian.
5. Membuat dokumentasi.
6. Melaksanakan seluruh aktivitas untuk mengintegrasikan solusi-solusi yang membutuhkan paradigma rekayasa perangkat lunak lainnya.

Salah satu keuntungan penggunaan model 4GT adalah pengurangan waktu dan peningkatan produktivitas secara besar, sementara kekurangannya terletak pada kesulitan penggunaan perangkat bantu (tools) dibandingkan dengan bahsa pemrograman, dan juga kode sumber yang dihasilkannya tidak efisien.
Untuk aplikasi yang yang kecil, adalah mungkin untuk langsung berpindah dari pengumpulan kebutuhan ke implementasi dengan menggunakan 4GL. Tapi untuk aplikasi yang besar, dibutuhkan pengembangan strategi desain untuk sistem, walau digunakan 4GL. Penggunaan 4GT tanpa perencanaan yang matang (untuk proyek skala besar) akan meyebabkan kesulitan yang sama (kualitas dan pemeliharaan yang jelek, ketidakpuasan pelanggan) seperti dengan metode konvensional.
Modul Rekayasa Perangkat Lunak Halaman 12 dari 64
3.1. Proses-proses Dalam Manajemen Proyek
Manajemen proyek merupakan lapisan pertama dalam proses rekayasa perangkat lunak skala besar. Untuk menuju pada proyek yang berhasil, perlu dimengerti tentang :
• Lingkup pekerjaan
• Resiko yang dapat ditimbulkan
• Sumber-sumber yang diperlukan
• Tugas yang harus dilaksanakan
• Patokan yang harus diikuti
• Usaha atau biaya yang dikeluarkan
• Dan Penjadwalan

Awal Proyek Perangkat Lunak
Untuk mengestimasi biaya, pembagian tugas, dan penjadwalan, sebelum sebuah proyek direncanakan perlu :
• Memastikan tujuan dan ruang lingkup
• Memperhatikan alternatif-alternatif solusi
• Identifikasi batasan teknik dan manajerial

Pengukuran dan Satuan Ukuran
Pengukuran dan satuan ukuran akan membantu untuk mengerti proses-proses dalam pengembangan produk dan produk itu sendiri. Proses dan produk diukur dalam usaha untuk meningkatkan kualitasnya.
Dalam aktifitas utama proyek yaitu perencanaan, dilakukan estimasi :
• Sunber daya manusia (ukuran orang/bulan)
• Jangka waktu kronologis (Ukuran waktu kalender)
• Biaya (Ukuran uang Rp)

Analisis Resiko
Analisis resiko sangat penting dalam manajemen proyek perangkat lunak. Beberapa hal yang harus diperhatikan berkaitan dengan resiko adalah ;
• Masa yang akan dating : resiko apa yang mempengaruhi trend (kecenderungan) proyek perangkat lunak
• Perubahan : Bagaimana perkembangan dunia mempengaruhi keawetan dan kesuksesan perangkat lunak
• Pilihan : metode apa yang dipakai, berapa orang diperlukan, seberapa tinggi kualitas perangkat lunak dan sebagainya

Analsis resiko merupakan serangkaian langkah untuk menyiasati resiko, yaitu :
• Identifikasi resiko
Identifikasi resiko melist semua resiko sesuai dengan kategori(secara makro) sebagai berikut :
1. Resiko proyek : masalah pembiayaan, penjadwalan, personil, sumber daya, pelanggan dan kebutuhan dikaitkan dengan akibatnya terhadap pelanggan.

Modul Rekayasa Perangkat Lunak Halaman 13 dari 64

2. Resiko teknis : masalah desain, implementasi, antarmuka, verifikasi dan pemeliharaan.
3. Resiko bisnis : termasuk di dalamnya adalah resiko pasar, resiko manajemen, dan resiko pembiayaan.
Salah satu metode terbaik untuk mengerti tiap resiko adalah dengan sejumlah pertanyaan seperti :
1. Adakah orang-orang yang paling top (The best) ?
2. Sesuaikah keahlian orang-orang tersebut?
3. Cukupkah orang-orang yang tersedia?
4. Apakah staf cukup dapat dipercaya untuk keseluruhan proyek?
5. Akan adakah staf yang bekerja paruh waktu?
6. Apakah staf telah memiliki persepsi yang benar tentang pekerjaannya?
7. Sudah cukupkah pelatihan untuk staf?
8. Cukup rendahkah tingkat pelimpahan kerja untuk menjamin kelanjutan proyek?
• Perkiraan resiko
Memperhitungkan lebih lanjut estimasi resiko dalam bentuk : [ri, li, xi] dengan
ri : resiko
li : kemungkinan terjadinya
xi : akibat dari resiko dengan memprioritaskan resiko dan memulai memikirkan cara
mengendalikan dan atau mengurangi resiko yang mungkin terjadi
• Proyeksi resiko
Disebut juga estimasi resiko, adalah usaha untuk mengukur setiao resiko dengan 2 cara :
1. Kemungkinan adanaya resiko
2. Konsekuensi (masalah yang bisa timbul karena resiko)

Ada 4 aktivitas estimasi resiko :
1. Memastikan skala yang merefleksikan kemungkinan resiko
2. Memperkirakan konsekuensi resiko
3. Estimasi efek dari resiko pada proyek dan produk
4. Menentukan akurasi keseluruhan dari proyeksi resiko
• Strategi manajemen resiko
• Putusan (Resolution) resiko
• Dan Pemantauan resiko

Langkah-langkah yang dilakukan dalam penjadwalan :
• Identifikasi sekumpulan tugas
• Pastikan keterkaitan antar tugas
• Estimasi usaha untuk tiap-tiap tugas
• Tentukan pekerja dan sumber-sumber lainnya
• Buat jaringan tugas
• Buat jadwal kerja berdasarkan waktu

Penelusuran dan Pengendalian
Penelusuran dan pengendalian dilakukan setelah ada penjadwalan yang pasti, yaitu memeriksa apakah tugas telah dilaksanakan sesuai dengan jadwal.
3.2. Satuan Ukuran Produktivitas dan Kualitas Perangkat Lunak
Modul Rekayasa Perangkat Lunak Halaman 14 dari 64
Pengukuran perangkat lunak dilakukan untuk :
• Indikasi kualitas produk
• Perkiraan produktivitas orang-orang yang menghasilkan produk
• Perkiraan manfaat dari penerapan metode dan tools
• Membentuk dasar dari estimasi
• Menegaskan (Justify) permintaan tools baru dan pelatihan

Satuan ukuran perangkat lunak dikategorikan ke dalam :
• Satuan ukuran produktivitas : Output dari proses rekayasa
• Satuan ukuran kualitas : indikasi tingkat pemenuhan kebutuhan konsumen
• Satuan ukuran teknik : Karakteristik perangkat lunak

Kategori lain untuk pengukuran :
• Pengukuran berorientasi besarnya (Ukuran) : Besarnya perangkat lunak = jumlah baris program
Pengukuran berorientasi ukuran merupakan pengukuran langsung. Pengukuran berorientasi ukuran menggunakan tabel berisi data berorientasi ukuran yang merupakan daftar proyek pengembangan perangkat lunak yang telah diselesaikan dikaitkan dengan data berorientasi ukuran untuk proyek yang bersangkutan
Contoh perhitungan :
o Produktivitas = KLOC (Kilo Line of Code)/Orang-Bulan
o Kualitas = Cacat (Kesalahan)/ KLOC
o Biaya = Satuan uang ($ atau Rp)/KLOC
o Dokumentasi = Jumlah halaman dokumentasi/KLOC
• Pengukuran berorientasi fungsi : fungsi = ruang lingkup informasi dan tingkat kesulitannya
Merupakan pengukuran tidak langsung, yang menitikberatkan pada fungsionalitas atau utilitas program. Disebut juga metode Function Point sesuai dengan informasi-informasi yang didefinisikan sebagai :
o Jumlah masukan dari pemakai
o Jumlah keluaran dari pemakai
o Jumlah penyelidikan dari pemakai
o Jumlah file
o Jumlah antarmuka eksternal

3.3. Satuan Ukuran Kualitas Parangkat Lunak
Kualitas perangkat lunak dihitung pada saat proses rekayasa perangkat lunak ataupun setelah diserahkan kepada pemakai. Satuan ukuran kualitas perangkat lunak pada saat proses rekayasa :
o Kompleksitas program
o Modularitas yang efektif
o Besarnya program

Definisi pengukuran kualitas menurut Gilb:
• Kebenaran (Correctness) : Program harus bekerja dengan benar. Kebenaran merupakan tingkat perangkat lunak bekerja sesuai dengan fungsi yang dibutuhkan. Pengukuran yang umum adalah cacat (defect) /KLOC

Modul Rekayasa Perangkat Lunak Halaman 15 dari 64

• Perawatan (Maintainability) : Kemudahan perbaikan jika ada kesalahan, penyesuaian terhadap perubahan lingkungan atau peningkatan sesuai permintaan pemakai
• Integritas (Integrity) : Pengukuran tingkat ketahanan perangkat lunak terhadap serangan (disengaja/tidak) pada program, data dan dokumen
• Kegunaan (Usability) : Berkaitan dengan kemudahan pemakaian yang diukur berdasarkan keahlian yang diperlukan untuk mempelajari sistem, waktu yang dibutuhkan untuk dapat menggunakan sistem, peningkatan produktivitas dengan penggunaan sistem dan perkiraan yang sifatnya subjektif pada kelakuan pemakai

Menurut Basili dan Zelkowitz ada 5(lima) faktor yang mempengaruhi produktivitas perangkat lunak :
• Faktor manusia : jumlah dan tingkat keahlian tim
• Faktor masalah : Tingkat kerumitan masalah yang harus dipecahkan
• Faktor proses : Teknik analisis dan desain, bahasa dan tools
• Faktor produk : keandalan dan performansi sistem berbasis komputer
• Faktor sumber daya : ketersediaan tools, sumber-sumber perangkat keras dan perangkat lunak

Modul Rekayasa Perangkat Lunak Halaman 16 dari 64
Analisis kebutuhan perangkat lunak (software requirements analysis) merupakan aktivitas awal dari siklus hidup pengembangan perangkat lunak. Untuk proyek-proyek perangkat lunak yang besar, analisis kebutuhan dilaksanakan setelah aktivitas sistem information engineering dan software project planning.
Tahap analisis adalah tahapan pengumpulan kebutuhan-kebutuhan dari semua elemen sistem perangkat lunak yang akan di bangun. Pada tahap ini dibentuk spesifikasi kebutuhan perangkat lunak, fungsi perangkat lunak yang dibutuhkan, performansi (unjuk kerja) sistem perangkat lunak, penjadwalan proyek, identifikasi sumber daya (manusia , perangkat keras dan perangkat lunak yang dibutuhkan) dan taksiran biaya pengembangan perangkat lunak.
Kegunaan analisis adalah untuk memodelkan permasalahan dunia nyata agar dapat dimengerti. Permasalahan dunia nyata harus dimengerti dan dipelajari supaya spesifikasi kebutuhan perangkat lunak dapat diungkapkan. Tujuan aktivitas ini adalah untuk mengetahui ruang lingkup produk (product space) dan pemakai yang akan menggunakannya. Analisis yang baik akan mengungkapkan hal-hal yang penting dari permasalahan, dan mengabaikan yang tidak penting.
Setiap metode analisis mempunyai pandangan yang berbeda. Tetapi pada dasarnya semua metode analisis memiliki prinsip analisis yang sama, yaitu :
1. Menggambarkan domain informasi masalah
2. Mendefinisikan fungsi perangkat lunak
3. Menghasilkan model yang menggambarkan informasi, fungsi dan kelakuan yang dibagi secara rinci pada sebuah model lapisan (hirarki)
4. Informasi pokok pada tahap analisis memudahkan tahap implementasi yang lebih rinci.
Tujuan tahap analisis adalah :
1. Menjabarkan kebutuhan pemakai
2. Meletakkan dasar-dasar untuk tahap perancangan perangkat lunak
3. Mendefinisikan semua kebutuhan pemakai sesuai dengan lingkup kontrak yang disepakati kedua belah pihak (pengembang dan pengguna).

4.1. Apa yang Disebut Kebutuhan (Requirement)
Pengertian Kebutuhan
Menurut arti kamus, kebutuhan adalah sesuatu yang diminta, sesuatu yang dibutuhkan. Sedangkan menurut IEEE (The Institute of Electrical and Electronics Engineers) kebutuhan adalah :
• Kondisi atau kemampuan yang diperlukan pemakai untuk menyelesaikan suatu persoalan, atau untuk mencapai sebuah objek.
• Kondisi atau kemampuan yang harus dipenuhi oleh sistem, dalam arti memenuhi kontrak, standar, spesifikasi atau dokumen formal lain yang diinginkan.

Tahap kebutuhan akan perangkat lunak dimulai dengan :
1. Dikenalinya adanya sebuah permasalahan yang membutuhkan sebuah penyelesaian. Identifikasi sebuah permasalahan mungkin dapat dilakukan dengan berorientasi pada aplikasi, berorientasi pada bisnis, atau berorientasi pada kenaikan produktivitas (product improvement oriented).
2. Munculnya ide untuk membuat sebuah perangkat lunak baru (sebagai sebuah kemajuan).

Modul Rekayasa Perangkat Lunak Halaman 17 dari 64

Ada dua jenis kebutuhan :
1. Behavioral
• apa yang dilakukan oleh sistem (input dan output dari dan ke sistem).
• hubungan informasi antara input dan output sehingga menghasilkan sebuah fungsi transformasi.
2. Non-behavioral
Mendefinisikan atribut sistem yang terkait untuk membentuk pekerjaan tersebut. Termasuk deskripsi lengkap tentang efisiensi, keamanan (security), rehability maintenability (bagaimana perawatan untuk sistem), dan portability (bisa dipindahkan dari satu perangkat keras ke perangkat keras lainnya).

Mengapa Kebutuhan Penting ?
Perhatikan gambar dampak kumulatif berikut ini :

Requirements spesifications Correct spesification Erroneous Spesification Design Correct design Erroneous design Design based on erroneous spesification Implementation Correct programs Programing errors Programs based on erroneous design Programs based on erroneous spesification Testing correct functions coretable errors uncoretable errors hidden error The real problemImperfect program product
Gambar 4.1. Dampak Kesalahan Kumulatif
Mencari kesalahan diakhir siklus hidup pengembangan perangkat lunak ternyata akan banyak mengeluarkan uang.
Modul Rekayasa Perangkat Lunak Halaman 18 dari 64

• Jika dapat dideteksi, dilakukan perbaikan pada setiap tahap proses.
• Jika tidak dapat dideteksi, kesalahan baru kelihatan setelah produk selesai dibuat.

4.2. Tahap Analisis Kebutuhan Perangkat Lunak
Tahap pekerjaan analisis kebutuhan perangkat lunak pada dasarnya terdiri dari urutan aktivitas :
1. Menentukan kebutuhan (requirement)
Lebih banyak berhubungan dengan pemakai. Hasil belum terstruktur.
• Data atau informasi apa yang akan diproses
• Fungsi apa yang diinginkan
• Kelakuan sistem apa yang diharapkan
• Antarmuka apa yang tersedia (user interfaces, hardware interfaces, software interface, dan communications interfaces)
2. Sintesis
Mengubah kebutuhan yang belum terstruktur menjadi model atau gambar dengan memanfaatkan teknik dan metodeanalisis tertentu.
3. Membuat dokumen Software Requirements Spesification (SRS).
Sudah merupakan analisis yang lebih rinci, sebagai tahap awal perancangan.

4.3. Metode Analisis
Metode atau teknik untuk melakukan analisis kebutuhan perangkat lunak dikelompokkan berdasarkan pendekatan yang diambil pada saat melakukan aktivitas tersebut.
1. Berorientasi Aliran Data (Data Flow Oriented atau Functional Oriented)
Sudut pandang analisis pada pendekatan ini difokuskan pada aspek fungsional dan behavioral (perilaku laku) sistem. Pengembang harus mengetahui fungsi-fungsi atau proses-proses apa saja yang ada dalam sistem, data apa yang menjadi masukannya, dimana data tersebut disimpan, transformasi apa yang akan dilakukan terhadap data tersebuat, dan apa yang menjadi hasil transformasinya. Selain itu pengembang harus mengetahui keadaan (state), perubahan (transition), kondisi (condition), dan aksi (action) dari sistem.
Salah satu metode yang paling populer untuk pendekatan ini adalah Analisis Terstruktur (Structured Analysis) yang dikembangkan oleh Tom DeMarco, Chris Gane dan Trish Sarson, dan Edward Yourdon . Pada metode ini, hasil analisis dan perancangan dimodelkan dengan menggunakan beberapa perangkat permodelan seperti :
• Data Flow Diagram (DFD) dan Kamus Data (data dictionary) untuk menggambarkan fungsi-fungsi dari sistem.
• Entity-Relationship Diagram (ERD) untuk menggambarkan data yang disimpan (data storage).
• State Transition Diagram (STD) untuk menggambarkan perilaku sistem.
• Structure Chart untuk menggambarkan struktur program
2. Berorientasi Struktur Data
Analisis pendekatan ini difokuskan pada struktur data, dimana struktur tersebut dapat dinyatakan secara hirarki dengan menggunakan konstruksi sequence, selection dan repetition. Beberapa metode berorientasi struktur data ini diantaranya adalah :

Modul Rekayasa Perangkat Lunak Halaman 19 dari 64

• Data Structured System Development (DSSD)
Diperkenalkan pertama kali oleh J.D. Warnier [1974] dan kemudian oleh Ken Orr [1977], sehingga sering disebut juga metode Warnier-Orr. Metode ini menggunakan perangkat entity diagram, assembly line diagram dan Warnier-Orr diagram untuk memodelkan hasil analisis dan rancangannya.
• Jackson Sistem Development (JSD)
Dikembangkan oleh M.A. Jackson [1975] dengan menggunakan perangkat permodelan yang disebut strukture diagram dan sistem spesification diagram.
3. Berorientasi objek
Berbeda dengan pendekatan-pendekatan sebelumnya, pendekatan berorientasi objek memandang sistem yang akan dikembangkan sebagai suatu kumpulan objek yang berkorespondensi dengan objek-objek dunia nyata. Pada pendekatan ini, informasi dan proses yang dipunyai oleh suatu objek “dienkapsulasi” (dibungkus) dalam satu kesatuan. Beberapa metode pengembangan sistem yang berorientasi objek ini diantaranya adalah :
• Object Oriented Analysis (OOA) dan Object Oriented Design (OOD) dari Peter Coad dan Edward Yourdon [1990].
• Object Modelling Technique (OMT) dari James Rumbaugh [1987].
• Object Oriented Software Engineering (OOSE)

4.4. Analisis Berorientasi Aliran Data
Pendekatan dari sisi bisnis (DeMarco, Yourdan dan Senn). Analisis aliran data adalah analisis yang dilakukan untuk mempelajari pemanfaatan data pada setiap aktifitas. Menampilkan hasil pengamatan dalam apa yang disebut Data Flow Diagram (DFD) atau Diagram Alir Data (DAD).
4.4.1. Diagram Aliran Data (Data Flow Diagram)
• Suatu tampilan grafis yang memunculkan relasi/hubungan antara proses dan data berserta kamus data yang menjelaskan rincian data yang dipergunakan
• Diagram untuk menggambarkan aliran data dalam sistem, sumber dan tujuan data, proses yang mengolah data tersebut, dan tempat penyimpanan datanya.
• Representasi jaringan dari sistem yang menggambarkan sistem berdasarkan komponen-komponennya dengan semua antar muka diantara komponen-komponen tersebut.
• Perangkat permodelan yang dapat menggambarkan sistem sebagai sebuah jaringan proses-proses fungsional yang satu dengan yang lainnya dihubungkan oleh “pipa saluran” data.
• Diagram yang merepresentasikan bagaimana informasi keluar masuk dari ke sistem, proses apa yang mengubah informasi tersebut dan dimana informasi disimpan.
• Diperkenalkan oleh Tom DeMarco serta Chris Gane dan Trish Sarson berdasarkan notasi SADT (Structure Analysis dan Design Technique).
• Merupakan salah satu teknik yang cukup penting dalam menganalisa sistem karena :
􀂾Dapat mendefinisikan batasan sistem.
􀂾Membantu memeriksa kebenaran dan kelengkapan aliran informasi.

Modul Rekayasa Perangkat Lunak Halaman 20 dari 64

􀂾Merupakan dasar perancangan dengan memunculkan proses-proses pengolahan data.
• Dapat digunakan untuk menggambarkan aktivitas proses secara paralel (beberapa aliran data dapat terjadi secara simultan). Bandingkan dengan flowmap yang hanya dapat menggambarkan aliran data (dokumen) secara serial.

Elemen-elemen DFD
Ada empat elemen yang membentuk suatu Data Flow Diagram, yaitu :
1. Aliran Data (Data Flow)
• Pipa saluran dimana paket informasi yang diketahui komposisinya mengalir.
• Penghubung antar proses yang merepresentasikan informasi yang dibutuhkan proses sebagai masukan atau informasi yang dihasilkan proses sebagai keluaran.
• Aliran paket informasi dari satu bagian sistem ke bagian sistem lainnya.
• Umumnya mengalir antar proses, tetapi dapat juga mengalir keluar masuk dari ke file (data store) atau dari ke sumber tujuan data.
• Data yang dinyatakan dengan aliran data boleh datang dari beberapa dokumen, jadi tidak perlu dirinci menjadi dokumen-dokumen tersebut.
• Diberi nama sesuai dengan substansi isi dari paket informasi (bukan nama dokumen) yang mengalir.
• Jumlah aliran data yang masuk dan keluar proses harus sama

2. Proses
• Transformasi aliran data yang datang menjadi aliran data yang keluar.
• Transformasi bagaimana satu atau beberapa masukan diubah menjadi keluaran.
• Menjelaskan proses-proses transformasi data apa saja yang ada dalam sistem atau yang harus dikerjakan oleh sistem. Komponen-komponen fisik tidak dapat diidentifikasikan sebagai proses.
• Diberi nama dan nomor yang akan dipergunakan untuk keperluan identifikasi. Nama yang diberikan harus dapat menjelaskan apa yang dilakukan oleh proses. Nama proses baisanya ditulis dalam kata kerja.

3. Penyimpanan Data (Data Store)
• Tempat penyimpanan data atau tempat data yang dirujuk oleh proses.
• Kumpulan paket data yang harus diingat oleh sistem dalam periode waktu tertentu.
• Pada akhir pembangunan sistem, data store biasanya diimplementasi sebagai file atau basis data.

4. Entitas Eksternal/Terminator/ Source atau Sink
• Menggambarkan entitas yang berinteraksi dengan sistem yang berada diluar ruang lingkup sistem (bukan yang menjalankan sistem tersebut) atau entitas yang berfungsi sebagai producer/consumer dari sistem (sumber atau tujuan data).
• Dapat berupa orang, unit organisasi, komputer eksternal, organisasi eksternal atau sistem lain. Operator yang memasukkan data dalam sistem termasuk entitas internal, karena ia bukan consumer/producer sistem (kecuali untuk ruang lingkup perangkat lunak tertentu).
• Antara terminator tidak boleh berkomunikasi langsung

Modul Rekayasa Perangkat Lunak Halaman 21 dari 64

• Jumlah entitas/terminator yang terkait pada satu level akan muncul dalam jumlah yang sama untuk level lainnya

Berikut adalah tabel yang menunjukkan notasi yang digunakan dalam DFD.
Aliran Data
Entitas Eksternal/
Data Store

Rekayasa Perangkat Lunak (Software Engineering)
Software Engineering :
Suatu disiplin ilmu yang membahas semua aspek produksi
perangkat lunak, mulai dari tahap awal requirement capturing
(analisa kebutuhan pengguna), specification (menentukan
spesifikasi dari kebutuhan pengguna), design, coding, testing
sampai pemeliharaan sistem setelah digunakan.
Definisi Software Engineering menurut IEEE1 pada projek SWEBOK2
adalah aplikasi sistematik, disiplin, pendekatan kuantitatif untuk
pengembangan, operasi dan pemeliharaan dari software; dapat
disimpulkan sebagai teknik aplikasi untuk perangkat lunak.
Latar belakang munculnya software engineering ketika adanya
krisis software di era tahun 1960-an. Krisis tersebut akibat dari
lahirnya komputer generasi ke III yang ditandai dengan
penggunaan IC (Integrated Circuit).
Kemampuan hardware yang meningkat, membuat adanya
kebutuhan untuk memproduksi software yang lebih baik. Akibatnya
software yang dihasilkan menjadi menjadi beberapa kali lebih besar
dan kompleks.
Pendekatan informal yang digunakan dalam pengembangan
perangkat lunak pada saat itu, menjadi tidak cukup efektif (secara
biaya, waktu dan kualitas). Biaya hardware mulai jatuh dan biaya
perangkat lunak menjadi naik cepat. Oleh karena itu muncul
pemikiran untuk menggunakan pendekatan yang lebih efektif,
standard dan terukur dalam mengembangan perangkat lunak.
Krisis software adalah sekumpulan masalah yang ditemukan dalam
pengembangan software komputer. Masalahnya tidak hanya
terbatas pada software yang tidak berfungsi sebagaimana
mestinya, tetapi krisis software ini terdiri dari masalah yang
berhubungan dengan :
a. Bagaimana mengembangkan software.
b. Bagaimana memelihara software yang ada, yang berkembang
dalam jumlah besar.
c. Bagaimana mengimbangi permintaan software yang makin
1) IEEE (Institute of Electrical and Electronics Engineers)
2) SWEBOK (Software Engineering Body of Knowledge)
Krisis software dipicu oleh beberapa masalah :
a. Estimasi jadwal dan biaya yang seringkali tidak tepat.
b. Produktivitas pembuat software yang tidak dapat mengimbangi
permintaan software.
c. Kualitas software yang kurang baik.
Beberapa mitos software
Mitos management
• Kita tidak perlu mengubah pendekatan terhadap pengembangan
software, karena jenis pemrograman yang kita lakukan sekarang
ini sudah kita lakukan 10 tahun yang lalu.
Realita : Walau hasil program sama, produktivitas dan kualitas
software harus ditingkatkan dengan menggunakan pendekatan
software developments.
• Kita sudah mempunyai buku yang berisi standarisasi dan
prosedur untuk pembentukan software.
Realita : Memang buku tersebut ada, tetapi apakah buku tersebut
sudah dibaca atau buku tersebut sudah ketinggalan jaman (out of
• Jika kita tertinggal dari jadwal yang ditetapkan, kita menambah
beberapa programmer saja. Konsep ini sering disebut Mongolian
harde concept.
Mitos customer
• Pernyataan tujuan umum sudah cukup untuk memulai penulisan
program. Penjelasan yang lebih rinci akan menyusul kemudian.
Realita : Definisi awal yang buruk adalah penyebab utama
kegagalan terhadap usaha-usaha pembentukkan software.
Penjelasan yang formal dan terinci tentang informasi fungsi
performance interface, hambatan desain dan kriteria validasi
adalah penting.
• Kebutuhan proyek yang terus menerus berubah dapat dengan
mudah diatasi karena software itu bersifat fleksibel.
Realita : Jika perubahan mendekati akhir penyelesaian, maka
biaya akan lebih besar.
Mitos Praktisi
• Tidak ada metode untuk analisis disain dan testing terhadap
suatu pekerjaan, cukup menuju ke depan terminal dan mulai
Realita : Metode untuk analisis desain dan testing diperlukan
dalam pengembangan software.
• Segera setelah software digunakan, pemeliharaan dapat
diminimalisasikan dan diatasi.
Realita : Diperlukan budget yang besar dalam maintenance
software. Pemeliharaan software harus diorganisir, direncanakan
dan dikontrol seolah-olah sebagai suatu proyek besar dalam
sebuah organisasi.
Secara umum karakteristik software :
1. Software merupakan elemen sistem logik dan bukan elemen
sistem fisik seperti hardware
2. Elemen itu tidak aus, tetapi bisa rusak.
3. Elemen software itu direkayasa atau dikembangkan dan bukan
dibuat di pabrik seperti hardware
Evolusi Perangkat Lunak
Tahun-tahun pertama :
• Batch Orientation
Suatu orientasi dimana proses dilakukan setelah data
dikumpulkan dalam satuan waktu tertentu, atau proses dilakukan
setelah data terkumpul, kebalikan dari batch adalah online atau
Interactive Process. Keuntungan dari Interactive adalah
mendapatkan data yang selalu up to date.
• Limmited distribution
Suatu penyebaran software yang terbatas pada perusahaanperusahaan
• Custom software
Software yang dikembangkan berdasarkan perusahaanperusahaan
Era kedua :
• Multi user
Suatu sistem dimana satu komputer digunakan oleh beberapa
user pada saat yang sama.
• Real Time
Suatu sistem yang dapat mengumpulkan, menganalisa dan
mentransformasikan data dari berbagai sumber, mengontrol
proses dan menghasilkan output dalam mili second.
• Database
Perkembangan yang pesat dari alat penyimpan data yang online
menyebabkan muncul generasi pertama DBMS.
• Product Software
Software dikembangkan untuk dijual kepada masyarakat luas.
Era ketiga :
• Distributed system
Suatu sistem yang tidak hanya dipusatkan pada komputer induk,
daerah atau bidang lainnya yang juga memiliki komputer yang
ukurannya lebih kecil dari komputer induk.
• Embedded Intelegence
Suatu product yang diberi tambahan “Intellegence” dan biasanya
ditambahkan mikroprocessor yang mutakhir. Contohnya adalah
automobil, robot, peralatan diagnostic serum darah.
• Low Cost Hardware
Harga hardware yang semakin rendah, ini dimungkinkan karena
munculnya Personal Computer.
• Consummer Impact
Adanya perkembangan komputer yang murah menyebabkan
banyaknya software yang dikembangkan, software ini memberi
dampak yang besar terhadap masyarakat.
Era keempat :
• Expert system
Suatu penerapan A.I. (Artificial Intellegence) pada bidang-bidang
tertentu, misalnya bidang kedokteran, komunikasi, dll.
• AI Machine
Suatu mesin yang dapat meniru kerja dari sebagian otak
manusia. Misalnya mesin robot, komputer catur.
• Parallel Architecture
Arsitektur komputer yang memungkinkan proses kerja LAN
paralel, yang dimungkinkan adanya prosesor berbeda dalam satu
Dalam membuat software, secara umum ada beberapa fase :
Fase Perencanaan (Planning) :
a. Rencana software
b. Analisa kebutuhan software
c. Analisa cost banefit (Salah satu bagian dari studi kelayakan)
Fase Pengembangan (Development) :
a. Coding
b. Testing
Macam-macam test program :
• Unit test (Test per modul)
• Integreated test (Test penggabungan dari modul-modul yang
telah diuji)
• Validated test (Diuji dengan data sebenarnya)
• System test (Test dilakukan dengan lingkungan sebenarnya)
• Topdown test (Test gabungan dari atas ke bawah)
• Bottom up test (Test gabungan dari bawah ke atas)
Fase Pemeliharaan (Maintenance) :
Jenis-jenis maintenance
a. Koreksi (Corection)
b. Adaptasi (Adaptive)
Adaptasi yang berkembang pada dewasa ini terbagi atas :
• Sistem Operasi
• RDBMS (Relational DataBase Management System)
• Bahasa
• Mengarah pada perkembangan bahasa generasi ke empat
(Fourth Generation Language)
• Perfective
Menyempurnakan software yang biasanya dilakukan karena
permintaan atau saran atau kritik user
Aplikasi perangkat lunak
• System software
Adalah sekumpulan program yang ditulis untuk melayani atau
menunjang program lainnya. Beberapa sistem software seperti
compiler, editor, komponen-komponen sistem operasi, driver dan
prosesor telekomunikasi.
• Real-time software
Software yang mengukur, menganalisis dan mengontrol kejadian
yang sesungguhnya terjadi di dunia.
Elemen-elemen real time software terdiri dari :
a. Komponen pengumpulan data
Yang mengumpulkan dan menyusun informasi dari lingkungan
b. Komponen analisis
Yang mentransformasikan informasi yang diperlukan oleh
c. Komponen kontrol
Yang memberikan respon kepada lingkungan external
d. Komponen monitor
Yang mengkoordinasi semua komponen-komponen lainnya,
sehingga respons real time yang berkisar 1 milisecond sampai
1 menit dapat dipertahankan.
Istilah real time berbeda dari istilah interactive atau time
sharing. Sistem real time harus memberikan respons pada
waktu yang ditentukan, sedangkan pada sistem interactive
atau time sharing respons time biasanya melebihi batas waktu
yang ditentukan tanpa merusak hasil.
• Business software
Software ini digunakan oleh manajemen untuk mengambil
keputusan dalam bidang bisnis.
• Engineering and scientific software
Software yang dicirikan dengan algoritma numerik, aplikasinya
berkisar dari astronomi sampai vulkanologi, dari analis
ketegangan otomotif sampai dinamika orbit ruang angkasa.
Software ini banyak digunakan dalam bidang engineering dan
Contohnya CAD dan CAM
• Embedded software
Suatu software disimpan dalam memori tetap – ROM – Read Only
Memory, dan digunakan untuk mengontrol product dan sistem
software ini dijalankan dengan berbagai fungsi terbatas.
• Personal computer software
Software yang banyak digunakan di komputer pribadi.
• Artificial intelligence software
Software yang banyak menggunakan algoritma non numerik
dalam memecahkan masalah kompleks yang tidak dapat
dianalisis dengan analisis komputasi biasa.
Karakteristik Sub karakteristik
Functionality : Software untuk
menjalankan fungsinya sebagaimana
kebutuhan sistemnya
Suitability, Accuracy,
Reliability : Kemampuan software
untuk dapat tetap tampil sesuai
dengan fungsinya ketika digunakan
Maturity, Fault tolerance,
Usability : Kemampuan software
untuk mudah dimengerti, dipelajari,
digunakan dan disukai pengguna
Learnability, Operability,
Efficiency : Kemampuan software
untuk menampilkan performans
relatif terhadap penggunaan
Time Behavior, Resource
Maintainability : Kemampuan
software untuk dimodifikasi
Analyzability, Changeability,
Stability, Testability
Portability : Kemampuan software
untuk ditransfer dari satu lingkungan
ke lingkungan lain
Adaptability, Installability
1) ISO (International Organization for Standardization)

Konsep dan Prinsip Desain
Tujuannya adalah untuk menghasilkan suatu model atau representasi dari
entitas yang kemudian akan dibangun.
Desain Perangkat Lunak dan Rekayasa Perangkat Lunak
Fase pengembangan terdiri dari tiga langkah yaitu design, code generation
(manual or automatic) dan testing.
Setiap langkah melakukan transformasi informasi dengan suatu cara yang
akhirnya menghasilkan software komputer yang valid.
Software Requirements
Dijelaskan dengan information domain, functional and performance
requirments, dan feed the design step.
Dengan menggunakan satu dari sejumlah metode desain, langkah desain
menghasilkan :
a. Desain data (difokuskan pada definisi dari struktur data)
b. Desain arsitektur (mendefinisikan hubungan antara elemen struktur utama
dari program)
c. Desain interface
d. Desain prosedural (mengubah struktur elemen kedalam prosedur
Selama desain, kita dapat membuat keputusan yang akan mempengaruhi
kesuksesan konstruksi software dan kemudahan maintenance-nya. Desain
sangat penting karena dapat menentukan kualitas dari suatu software.
Proses Desain
Software design dibagi dalam 2 tahap :
1. Preliminary Design, Pada tahap ini difokuskan dengan transformasi dari
keperluan/kebutuhan ke dalam data dan arsitektur software
2. Detail Design, Difokuskan pada penghalusan representasi arsitektur yang
berisi struktur data detail dan algoritma untuk software
Agar dihasilkan desain dengan kriteria yang baik, maka suatu desain
haruslah :
1. Memperlihatkan organisasi hirarki yang mengontrol elemen-elemen
2. Berkenaan dengan modul. Software secara logika terbagi dalam elemenelemen
yang membentuk fungsi dan sub fungsi
3. Berisi representasi yang berbeda dan terpisah dari data dan prosedur
4. Membentuk modul (contoh subroutine dan procedure) yang
memperlihatkan karakteristik fungsi yang tidak saling bergantung
5. Diturunkan dengan menggunakan metode perulangan yang didukung oleh
informasi yang ada selama analisa kebutuhan software
Evolusi Desain Software
Merupakan suatu proses kontinu yang terus berlangsung selama tiga
dekade. Beberapa metodologi telah tumbuh, dan secara umum memiliki
karakteristik sebagai berikut :
a. Mekanisme penerjemahan suatu model analisis ke dalam representasi
b. Notasi untuk merepresentasikan komponen-komponen fungsional dan
c. Heuristik bagi penyaringan dan partisi
d. Pedoman bagi penilaian kualitas
Prinsip desain
Desain perangkat lunak berupa model dan proses. Proses desain adalah
serangkaian langkah iteratif yang memungkinkan desainer menggambarkan
semua aspek perangkat lunak yang dibangun. Model desain adalah ekivalen
rencana arsitek untuk sebuah “rumah”, yang dimulai dengan menyajikan
totalitas dari hal yang akan dibangun.
Konsep-konsep desain
1. Abstraksi
Jika kita menggunakan suatu solusi modular untuk beberapa masalah,
maka beberapa level / tingkat abstrasi dapat ditampilkan / diperlihatkan.
• Pada level tertinggi, suatu solusi berada pada term yang umum dengan
menggunakan bahasa natural
• Level yang lebih rendah lebih berorientasi pada prosedur-prosedur
Contoh :
Abstraksi 1
The software will incorporate a computer graphics interface that will
enable visual communication with the drafts person and a digitizer
interface that replace the drafting board and square. All line and
curve drawing, all geometric computation, and all sectioning and
auxiliary views will be performed by the CAD Comp.
Abstraksi 2
CAD Software tasks :
user interaction task ;
2-D drawing creation task ;
graphics display task ;
drawing file management task ;
Abstraksi 3
procedure : 2-D drawing creation ;
repeat until (drawing creation task terminates)
do while (digitizer interaction occurs)
digitizer interface task ;
determine drawing request case ;
line : line drawing task ;
circle : circle drawing task ;

end ;
do while (keyboard interaction occurs)
keyboard interaction task ;
process analysis / computation case ;
view : auxiliary view task ;
section : cross sectioning task ;


end repetition ;
end procedure.
2. Penyaringan
Penyaringan stepwise adalah strategi desain top-down yang diusulkan
oleh Wiklaus Wirth.
Kajian dari konsep tersebut adalah “Pada setiap langkah (penyaringan),
satu atau beberapa instruksi dari program yang diberikan didekomposisi
ke dalam instruksi-instruksi yang lebih detail. Dekomposisi berurutan atau
penyaringan spesifikasi berhenti bila semua instruksi diekspresikan dalam
bentuk bahasa pemrograman atau komputer yang mendasar. Jika tugastugas
disaring, maka data harus disaring juga, didekomposisi atau
distruktur, dan adalah wajar untuk menyaring program dan spesifikasi data
secara paralel” .
Abstraksi dan penyaringan adalah konsep kompementer. Kedua konsep
tersebut membantu desainer dalam menciptakan suatu model desain
lengkap jika desain berkembang.
3. Modularitas
Software dibagi ke dalam elemen-elemen terpisah yang dapat dipanggil,
yang disebut dengan modul.
Misalkan :
C(x) : fungsi kompleksitas dari suatu masalah
E(x) : fungsi usaha/waktu yang diperlukan untuk memecahkan suatu
P1 ,P2 = masalah 1, masalah 2
Jika : C(P1) > C(P2) maka : E(P1) > E(P2)
Berdasarkan penelitian :
1. C ( P1 + P2 ) > C ( P1 ) + C ( P2 )
2. E ( P1 + P2 ) > E ( P1 ) + E ( P2 )
4. Arsitektur perangkat lunak
Arsitektur perangkat lunak menyinggung 2 karakteristik penting dari
sebuah program komputer :
1. Hirarki struktur dari komponen-komponen prosedural ( modul )
2. Struktur data
5. Partisi structural
Struktur progam harus dipartisi baik secara horizontal maupun vertikal.
Partisi horizontal menentukan cabang-cabang terpisah dari hirarki modular
untuk setiap fungsi program mayor. Keuntungannya :
a. Menghasilkan perangkat lunak yang lebih mudah diuji.
b. Membawa kepada perangkat lunak yang lebih mudah dipelihara.
c. Menghasilkan penyebaran efek samping yang lebih sedikit.
d. Menghasilkan suatu perangkat lunak yang lebih mudah untuk diperluas.
Partisi vertikal menyatakan bahwa kontrol dan kerja harus didistribusikan
secara top-down dalam arsitektur program.
6. Hirarki Kontrol (Program Structure)
• Program structure menampilkan/menyajikan organisasi (seringkali
organisasi hirarki) dari komponen-komponen program (modul-modul)
dan mengandung arti hirarki dari kontrol program
• Notasi yang digunakan adalah diagram tree. Biasanya dinamakan
structure chart
7. Prosedur perangkat lunak
Prosedur perangkat lunak berfokus pada detail-detail pemrosesan dari
masing-masing modul secara individual. Prosedur harus memberikan
spesifikasi yang teliti terhadap pemrosesan, mencakup urutan event, poinpoin
keputusan nyata, operasi repetitif, dan organisasi struktur data.
8. Struktur data
Struktur data adalah representasi dari hubungan logis antara elemenelemen
data individual.
Contoh :
type G = array [1..100] of integer;

Procedure S ( var T : G ; n : integer ; sum : integer );
I : integer;
sum := 0;
for I:=1 to n do
sum := sum + t[i];
9. Penyembunyian informasi
Prinsip penyembunyian informasi menyatakan bahwa modul ditandai
dengan keputusan desain tersembunyi dari semua desain lain.
Contoh :
Black Box : input, output, & proses diketahui tetapi proses detail tidak
Bagi Modul B, Modul C adalah Black Box

Prosiding Konferensi Nasional Teknologi Informasi & Komunikasi untuk Indonesia
3-4 Mei 2006, Aula Barat & Timur Institut Teknologi Bandung
M.Sukrisno Mardiyanto
Teknik Informatika STEI ITB
Kecermatan proses verifikasi dan validasi perangkat lunak merupakan kunci keberhasilan penjaminan mutu
(kualitas) perangkat lunak. Proses validasi model dinamis perangkat lunak sangat menentukan kehandalan
perangkat lunak, karena validasi pada tahapan analisis dan desain akan dapat mengurangi resiko kesalahan yang
fatal pada tahap implementasi. Keberhasilan validasi model dinamis ditentukan oleh kecermatan analisis dengan
dukungan metode formal dan kakas verifikasi dan validasi model perangkat lunak. Arah perkembangan validasi
model perangkat berbasis UML menjadi kajian utama, dimana potensi perpaduan dengan metode formal yang berorientasi
objek (antara lain Object-Oriented Petri Net dan Object Z) berpeluang untuk dikembangkan menjadi
metode formal yang bersifat hybrid.
Kata kunci : Validasi Perangkat Lunak, metode formal, UML, Petri Net, bahasa Z
Dalam pembangunan perangkat lunak, langkah penting
yang mutlak dilakukan dalam rangka menjamin mutu
(kualitas) perangkat lunak adalah proses verifikasi dan
validasi (Verification & Validation) yang dilaksanakan
pada setiap tahapan pembangunan.
Verifikasi dan validasi pada tahap desain (perancangan)
bertujuan untuk mengeliminasi dan menghindari
kesalahan pada sa’at implementasi. Proses validasi model
sistem perangkat lunak pada tahap ini menjadi sangat
penting pada pembangunan perangkat lunak yang
tergolong critical system dan/atau critical mission,
olehkarena kesalahan yang terjadi dapat menimbulkan
bencana dan berakibat fatal. Olehsebab itu proses
verifikasi dan validasi hasil desain perangkat lunak
menjadi sangat penting.
Pemodelan sistem perangkat lunak pada tahap desain
direpresentasikan dalam bentuk model statis dan model
dinamis. Model statis menggambarkan arsitektur sistem
perangkat lunak, berupa struktur kendali modul-modul
perangkat lunak dan model pemrosesan dalam setiap
model. Sedangkan model dinamis lebih menggambarkan
model kelakuan sistem (system behavior) termasuk
interaksi dengan pengguna dan lingkungannya.
Proses validasi model dinamis membutuhkan tingkat
ketelitian dan kepastian yang tinggi dalam menghindari
kesalahan desain. Untuk itu perlu dukungan kakas (tools)
yang mampu menganalisis kemungkinan kesalahan dan
menguji hasil desain secara cermat. Beberapa metode
desain (design methods) dan kakas analisis
(analysis tools) telah dikembangkan dan digunakan
dalam proses validasi model dinamis.
Dalam makalah ini permasalahan penggunaan
merode pembangunan perangkat lunak akan
dibatasi pada metode analisis dan desain berorientasi
objek berbasis UML (Unified Modeling
Language). Sedangkan pembahasan kakas analisis
untuk validasi model dinamis bertumpu pada
kemampuan analisis yang dimiliki oleh Petri Net
dan bahasa formal Z (dan/atau sejenisnya).
Dengan penggabungan kemampuan dari Petri Net
dan bahasa formal Z (dan sejenisnya) diperoleh
suatu metode validasi Hybrid yang diharapkan
berkemampuan analisis yang lebih baik dan dapat
menjawab kebutuhan kakas validasi perangkat
lunak yang handal. Di samping itu dengan adanya
upaya pembakuan notasi dan format dari Petri Net
serta bahasa formal yang sejenis akan
memudahkan interkoneksi dan interoperasi antar
kakas verifikasi dan validasi perangkat lunak.
2.1 Verifikasi dan Validasi Perangkat Lunak.
Prosiding Konferensi Nasional Teknologi Informasi & Komunikasi untuk Indonesia
3-4 Mei 2006, Aula Barat & Timur Institut Teknologi Bandung
Ada perbedaan makna yang mendasar dalam pemahaman
tentang proses verifikasi dan validasi seperti
diekspresikan dalam pertanyaan berikut :
- Verification : Are we building the product right ?
- Validation : Are we building the right product ?
Arti verifikasi dalam hal ini lebih ditekankan pada
kebenaran pelaksanaan proses pembangunan perangkat
lunak, sedangkan validasi lebih ke arah pembuktian
bahwa perangkat lunak yang dibangun sudah benar
Dalam industri perangkat lunak, proses validasi dapat
dilakukan sepanjang langkah pembangunan perangkat
lunak, mulai dari tahapan analisis sampai dengan tahapan
implementasi (coding & testing). Dalam makalah ini
permasalahan yang dibahas difokuskan ke masalah
validasi perangkat lunak pada tahapan desain
2.2 Metode Formal untuk Validasi Perangkat
Proses validasi perangkat lunak pada tahapan desain lebih
sulit dilakukan dibandingkan dengan proses validasi pada
tahapan implementasi yang dilakukan dalam tahap
ujicoba perangkat lunak (software testing). Hal ini
diakibatkan oleh adanya tingkat abstraksi yang lebih
tinggi dalam pemodelan perangkat lunak pada hasil
Olehsebab itu proses validasi pada tahapan ini
membutuhkan alat bantu (kakas) yang mampu
mendukung pelaksanaan validasi secara cermat, yakni
berupa metode formal (formal methods).
Metode formal tersebut umumnya dilengkapi :
a. Notasi matematis dalam bentuk tekstual, grafis atau
b. Proses yang mendeskripsikan bagaimana membuat
artifak perangkat lunak (software artifact) berupa :
spesifikasi perangkat lunak, desain perangkat lunak,
program, dan sebagainya.
c. Kakas untuk memeriksa dan membuktikan kebenaran
artifak perangkat lunak tersebut secara formal.
Secara umum metode formal diklasifikasikan berdasarkan
spesikasi bahasa formal, teknik verifikasi dan teknik
validasi yang diterapkan. Dalam praktek validasi dikenal
2 kelas bahasa spesifikasi formal, yakni:
(1). Model-based specification language, dimana model
sistem dibuat berdasarkan konstruksi matematis
seperti kumpulan (sets) dan urutan (sequences) ,
sedangkan pengoperasian sistem dinyatakan dalam
bentuk perubahan status dari sistem. Bahasa formal
yang termasuk kelas ini adalah : CSP, Petri
Net dan bahasa Z.
(2). Algebra-based specification language, dimana
sistem dinyatakan dalam terminologi operasi
dan hubungan antar operasi tersebut. Yang
termasuk kelas ini adalah bahasa Larch dan
Tabel 2.1 di bawah ini memperlihatkan peta
klasifikasi bahasa spesifikasi formal tersebut [14].
TABEL 2.1. Klasifikasi Bahasa Spesifikasi Formal
Jenis Bahasa J