BAB 2 BAB 2 LANDASAN TEORI 2.1 Proyek Software 2.1.1 Pengertian Proyek Software Definisi dari proyek adalah sebuah asumsi perencanaan secara luas bagaimana kita menyelesaikan suatu pekerjaan sebelum kita memulainya. Perencanaan adalah pemikiran secara matang terhadap sesuatu sebelum kita melakukannya dan biasanya pada suatu proyek yang belum jelas, ini bisa bekerja dengan baik selama hasil perencanaan yang diterima bersifat sementara dan spekulatif. Menurut Amri Shodiq dalam artikel-nya yang dimuat oleh ilmukomputer.com, Proyek software adalah manajemen proyek yang berfokus hanya pada merancang dan mengembangkan software. Untuk itu sebuah proyek software perlu di kelola. Manajemen itu berupa persiapan pekerjaan, pelaksanaan rencana, mengendalikan proyek tersebut dan terakhir menutup proyek dengan sebuah kesimpulan, yaitu sukses. 2.1.2 Karakteristik Proyek Software Pada umumnya karakteristik dari suatu software merupakan faktor-faktor yang akan digunakan untuk menentukan kualitas dari software tersebut. Pengertian kualitas dari suatu software juga banyak sekali berdasarkan pendapat para pakar. 22 Menurut Steve McConnell's suatu kualitas dari suatu software terbagi menjadi 2 yaitu karakteristik kualitas internal dan karakteristik kualitas eksternal. Karakteristik kualitas eksternal merupakan bagian dari software yang langsung berhubungan dengan user, dan sebaliknya dengan yang internal. Pengertian lain menurut Dr. Tom DeMarco mengatakan bahwa kualitas suatu produk adalah ketika produk itu berfungsi seberapa banyak untuk mengubah dunia untuk menjadi lebih baik, dengan kata lain dapat dikatakan sebagaimana kepuasan user lebih penting daripada semua kualitas yang lain. Beberapa karakteristik dari software yaitu : • Understandability, dimiliki oleh suatu software jika tujuan dari produk tersebut telah jelas. Semua perancangan dan dokumentasi user haruslah jelas sehingga mudah untuk dimengerti. Tentunya juga sudah seharusnya secara subjektif sesuai dengan user-nya. Sebagai contoh, produk software yang digunakan bagi perancang software tidaklah perlu untuk dimengerti oleh kaum awam. • Completeness, merupakan karakteristik software dimana setiap bagian software telah dikembangkan secara maksmimum. Ini berarti bahwa program menggunakan bagian-bagian dari sumber data lain, paket software harus mengandung referensi ke sumber data dan semua parameter yang dibutuhkan haruslah dikirimkan. Semua input data yang dibutuhkan haruslah ada. • Conciseness, merupakan karakteristik software dimana tidak ada bagian software yang mengandung sesuatu yang tidak dibutuhkan atau berlebihan. Karakteristik ini sangatlah penting ketika kapasitas dari penyimpanan yang ada terbatas, dan ini penting untuk mengurangi jumlah baris program. Dapat 23 dikembangkan dengan menggunakan fungsi-fungsi yang dapat digunakan berulang kali. Ini juga berlaku pada dokumentasi. • Portability, merupakan karekteristik software dimana software tersebut dapat dioperasikan pada berbagai konfigurasi komputer. sebagai gambaran portabilitas dapat dimaksudkan bahwa software dapat dioperasikan pada sistem operasi yang berbeda seperti MAC, Linux dan lainnya. • Consistency, merupakan karakteristik suatu software dimana software itu menggunakan simbol-simbol, notasi-notasi, dan terminologi yang sudah umum digunakan. • Testability, merupakan karakteristik suatu software dimana software itu di beri fasilitas dalam mendukung evalusi kemampuan dari software tersebut. Karakteristik seperti ini harus ada selama pembuatan software agar produk mudah dalam melakukan pengujian. Suatu perancangan yang complex biasanya memiliki tingkat testability yang rendah. • Usability, merupakan karakteristik suatu software dimana software itu mudah untuk digunakan. • Reliability, merupakan karakteristik suatu software dimana software dapat menyediakan fungsi-fungsi yang dibutuhkan secara memuaskan. Ini butuh diterapkan dalam jangka waktu yang lama untuk merealisasikannya. • Efficiency, merupakan karakteristik suatu software dimana software tersebut dapat mencapai tujuannya tanpa menghabiskan resource yang tersedia. Resource yang dimaksud disini adalah utilisasi memory dan kecepatan processor. 24 2.1.3 Life Cycle Proyek Software Dalam mengerjakan sebuah proyek, perencanaan awal sangatlah penting, dan biasanya prinsip dasar dari perencanaan proyek ini adalah membuat perencanaan pada outline terlebih dahulu dan kemudian menjadikannya lebih terperinci, dan sekaligus menentukan pendekatan-pendekatan dalam tiap-tiap aktifitasnya. Bisa digambarkan life cycle dari proyek software adalah seperti gambar berikut: Gambar 2.1 : Life Cycle Proyek Software (Sumber : http://conxxion.com/assets/sys_life_cyle.gif) 25 2.2 Unified Modelling Language (UML) 2.2.1 Sejarah UML UML (dulu bernama OMT – Object Modelling Technique) adalah sebuah bahasa yang telah menjadi standar dalam industri untuk memvisualisasi, menspesifikasi, merancang dan mendokumentasi sistem piranti lunak (Booch et al, 1999, p14). UML menawarkan sebuah standar yang dicetuskan oleh IBM untuk merancang model sebuah sistem. Seperti bahasa-bahasa lainnya, UML juga memiliki notasi. Notasi UML merupakan sekumpulan bentuk khusus untuk menggambarkan berbagai diagram piranti lunak. Setiap bentuk memiliki makna tertentu dan UML menjelaskan bagaimana bentukbentuk tersebut didefinisikan. Notasi UML terutama diturunkan dari tiga notasi yang telah ada sebelumnya yaitu Grady Booch OOD (Object Oriented Design), Jim Rumbaugh OMT (Object Modelling Technique) dan Ivan Jacobson (Object Oriented Software Engineering). Dimulai pada bukan Oktober 1994, Booch, Rumbaugh dan Jacobson yang merupakan tiga tokoh dimana metodenya banyak digunakan, mempelopori usaha untuk penyatuan pendesainan berorientasi objek (Booch et al, 1999, pXIX). Pada tahun 1995 dirilislah UML (versi 0.8). Sejak tahun 1996 pengembangan tersebut lalu dikoordinasikan oleh Object Management Group (OMG). Sejak itulah UML menjadi standar bahasa pemodelan untuk aplikasi berorientasi objek. 26 2.2.2 Faktor Pendorong dibuatnya UML Membangun model untuk suatu sistem piranti lunak sangat bergantung pada konstruksinya atau kemudahan dalam memperbaikinya. Oleh karena itu, membuat model sangat penting sebagai mana pentingnya memiliki cetak biru untuk bangunan yang besar. Model yang bagus sangat penting untuk menghasilkan komunikasi yang baik antar anggota tim dan untuk meyakinkan sempurnanya arsitektur sistem yang dibangun. Jika ingin membangun suatu model dari suatu sistem yang kompleks, tidak mungkin kita dapat memahaminya secara keseluruhan. Dengan meningkatnya kompleksitas sistem, visualisasi dan pemodelan menjadi sangat penting. UML dibuat untuk merespon kebutuhan tersebut. 2.2.3 Tujuan UML Melihat dari faktor sejarah dan pendorong terbentuknya UML ini, dapat ditarik suatu kesimpulan mengenai tujuan dibentuknya UML yang terangkum sebagai berikut : • Memberikan gambar model konseptual piranti lunak dari suatu bahasa pemograman yang tekstual sehingga dapat dimengerti oleh orang yang nonprogrammer. • Membangun model yang tepat, tidak ambigu, dan lengkap yang dapat membantu dalam tahap-tahap dari analisis, perancangan dan implementasi. • Dapat memodelkan beberapa jenis bahasa pemograman dan membantu memetakan kembali model tersebut ke suatu bahasa pemograman yang lain. • Membantu dalam dokumentasi perancangan piranti lunak. 27 2.2.4 Beberapa bagian dari UML A. Class Diagram Class Diagram menunjukkan entitas yang ada pada sistem dan bagaimana entitas tersebut saling berhubungan (Booch et al, 1999, p107). Entitas tersebut memiliki atribut dan perilaku tertentu. Class Diagram memperlihatkan hubungan antar class dan penjelasan detail tiap-tiap class di dalam logical view dari suatu sistem. Selama proses analisis, class diagram memperlihatkan aturan-aturan dan tanggung jawab entitas yang menentukan perilaku sistem. Selama tahap desain, class diagram berperan dalam menangkap struktur dari semua kelas yang membentuk arsitektur sistem yang dibuat. Class diagram direpresentasikan dalam bentuk kotak yang terbagi atas tiga bagian yaitu nama class, atribut, dan perilaku (behaviour), seperti gambar dibawah ini : Gambar 2.2 : Contoh Class Diagram Terdapat juga hubungan (relationship) diantara class diagram, yang menggambarkan logical connections pada class dan objek. Berikut ini beberapa relationship yang sering digunakan : 28 • Association, merupakan hubungan struktural yang menggambarkan hubungan antara objek. Gambar 2.3: Contoh association pada Class Diagram (sumber : http://en.wikipedia.org/wiki/Image:UML_role_example.gif) • Aggregation, merupakan bagian khusus dari suatu asosiasi yang menyatakan “whole-part” (bagian dari). Gambar 2.4 : Contoh aggregation pada Class Diagram (sumber : http://en.wikipedia.org/wiki/Image:KP-UML-Aggregation-20060420.svg) • Composition, merupakan hubungan asosiasi yang kuat dan lebih spesifik dari aggregation. Gambar 2.5 : Contoh composition pada Class Diagram (sumber : http://upload.wikimedia.org/wikipedia/en/9/9f/AggregationAndComposition.svg) 29 • Generalization, biasa dikenal juga dengan istilah inheritance yaitu hubungan yang menyatakan bahwa salah satu dari dua class merupakan turunan yang lebih khusus dari class induk-nya. Gambar 2.6 : Contoh generalization pada Class Diagram (sumber : http://en.wikipedia.org/wiki/Image:KP-UML-Generalization-20060325.svg) B. Use Case Diagram Use Case Diagram menggambarkan sekumpulan use case dan aktor serta hubungannya (Booch et al, 1999, p234). Yang ditekankan adalah “apa” yang dilakukan terhadap sistem dan bukan “bagaimana”. Sebuah use case menggambarkan interaksi antara aktor dengan sistem. Dibawah ini dijelaskan bagian use case diagram : a. Aktor Aktor adalah segala sesuatu yang melakukan tatap muka dengan sistem, seperti orang, piranti lunak, piranti keras, atau jaringan (Schneider dan Winters, 1997, p12). Tiap-tiap aktor menunjukkan perannya masing-masing. Contohnya, seorang aktor dapat memberikan input ke dalam dan menerima informasi dari aplikasi piranti lunak. 30 Notasi aktor dengan nama aktor tersebut dibawahnya: Pengguna b. Use Case Use Case menggambarkan segala sesuatu yang aktor ingin lakukan terhadap sistem. Use Case harus merupakan “apa” yang dikerjakan piranti, bukan “bagaimana” aplikasi piranti lunak mengerjakannya. Suatu sistem yang kompleks memiliki banyak use case, sehingga perlu diorganisasi. Notasi use case : Untuk menghubungkan antara aktor dengan use case digunakan simbol garis yang disebut sebagai relationship. Dengan adanya sebuah use case diagram maka akan membantu dalam menyusun kebutuhan sebuah sistem dan mengkomunikasikannya dengan klien. 31 C. Sequence Diagram Sequence diagram menggambarkan sekumpulan objek dan interaksinya, termasuk message yang dikirim terhadap urutan waktu (Booch et al, 1999, p245). Sequence diagram biasa digunakan untuk menggambarkan skenario atau rangkaian langkahlangkah yang dilakukan sebagai tanggapan dari sebuah event untuk menghasilkan keluaran tertentu. Diawali dari apa yang memicu aktivitas tersebut, proses dan perubahan apa saja yang terjadi secara internal dan keluaran yang dihasilkan. Masing-masing objek memiliki lifeline vertikal sedangkan message digambarkan secara horizontal. 2.3 Estimasi Biaya Proyek Software Menurut Sommerville (1996, pp590-591), ada tiga parameter yang dilibatkan dalam software yaitu : 1. Hardware, software, dan maintenance 2. Biaya perjalanan dan pelatihan 3. Biaya usaha (biaya untuk membayar pembuat software) Untuk kebanyakan proyek, biaya yang paling dominan adalah biaya usaha. Walaupun komputer dan biaya perjalanan merupakan hal yang signifikan dalam mengembangkan proyek, namun ini biasanya relatif rendah untuk kebanyakan proyek. 32 Sedangkan biaya usaha bukan hanya biaya pembuat software saja melainkan dihitung juga sebagai biaya keseluruhan dalam menjalankan organisasi dan membaginya dengan jumlah staf produktif. Oleh karena itu, biaya berikut juga merupakan bagian dari biaya total usaha : • Biaya penyediaan dan penerangan kantor. • Biaya staf tambahan seperti akuntan, sekretaris, dan lain-lain. • Biaya komunikasi dan networking. • Biaya fasilitas seperti perpustakaan, rekreasi, dan lain-lain. • Biaya pegawai lain seperti pensiun, asuransi kesehatan, dan lain-lain. 2.3.1 Metode Estimasi Biaya Barry Boehm telah mengidentifikasi beberapa teknik umum yang digunakan untuk melakukan estimasi dalam proyek pengembangan software (Kemerer, 1997, p61), antara lain: 1. Algorithmic models, dimana prediksi usaha dilakukan berdasarkan karakteristik dari sistem yang direncanakan dan lingkungan dimana sistem tersebut akan bekerja. 2. Expert Judgement, dimana estimasi usaha dilakukan berdasarkan pengalaman dari seorang ahli yang sudah sangat familiar dengan software yang akan dibuat. 33 3. Analogy, estimasi usaha dihitung berdasarkan proyek yang telah diselesaikan pada masa lalu dan serupa dengan proyek yang akan dikerjakan. Usaha aktual dari proyek tersebut dijadikan dasar perhitungan untuk mengestimasi usaha pada proyek yang baru. 4. Parkinson, dimana mengidentikasi usaha dari staff yang tersedia untuk melakukan proyek sebagai “estimasi”. 5. Price to win, dimana estimasi dilakukan dengan memperkirakan “usaha” terendah untuk memenangkan kontrak. 6. Top-down, dimana keseluruhan estimasi diformulasikan untuk keseluruhan proyek dan kemudian dipecah-pecah menjadi usaha yang diperlukan untuk tiap-tiap tugas. 7. Bottom-up, dimana tugas-tugas terkecil dari suatu proyek diidentifikasi terlebih dahulu dan kemudian estimasi usaaha tiap-tiap tugas tersebut digabungkan untuk mendapatkan estimasi usaha secara keseluruhan proyek. Dari 7 teknik yang dipaparkan oleh Barry Boehm, penulis hanya menggunakan teknik Algorithmic models untuk melakukan estimasi effort pengembangan sebuah projek software. 34 2.3.2 Metric Software Metric software digunakan untuk tujuan strategis, digunakan manajer proyek dan tim software untuk mengadaptasi aliran kerja proyek dan aktifitas teknis. Metric proyek mempunyai tujuan ganda yaitu untuk meminimalkan jadwal pengembangan dengan melakukan penyesuaian yang diperlukan untuk menghindari penundaan serta mengurangi masalah dan resiko potensial. Kedua, metrik proyek dipakai untuk memperkirakan kualitas produk pada basis yang berlaku dan bila dibutuhkan, memodifikasi pendekatan teknis untuk meningkatkan kualitas. 2.3.2.1 Source Lines of Code (SLOC) SLOC adalah software metric yang digunakan untuk memperkirakan besar suatu aplikasi software dengan menghitung jumlah baris pada text dari source code program. SLOC biasanya digunakan untuk memprediksikan effort yang dibutukan untuk mengembangkan sebuah aplikasi. Pada awalnya orang menggunakan SLOC, karena kebanyakan orang menggunakan bahasa pemograman seperti FORTRAN dan assembler yang merupakan kelompok line-oriented languages. SLOC pada kenyataannya kurang efektif untuk membandingkan penulisan program dengan bahasa yang berbeda-beda terkecuali adanya penyesuaian faktor-faktor yang digunakan untuk menormalisasikan bahasa-bahasa tersebut. Berbagai macam computer languages menyeimbangkan keringkasan dan kejelasan dalam cara yang berbeda-beda. Contohnya adalah penggunaan assembly languages membutuhkan ratusan 35 jumlah baris yang lebih banyak dalam melakukan sebuah pekerjaan yang sama seperti pada APL. Contoh lainnya adalah pembandingan program “Hello Word” yang ditulis dalam C dan dalam COBOL yang ditulis terlalu kompleks. Ada beberapa kekurangan yang dimiliki oleh SLOC, diantaranya adalah kurangnya kemampuan dalam keakuratan penghitungan, hasil estimasi yang didapatkan jauh dibawah yang sesungguhnya, dan sulit digunakan untuk program yang menggunakan GUI, dan lainnya. 2.3.2.2 Function Point Salah satu metode estimasi yang paling populer adalah metode function point analysis yang merupakan salah satu metode yang berlandaskan pada teknik algorithnic models yang telah dijelaskan pada bagian 2.31. Metode ini menggunakan faktor standar untuk menilai kepentingan relatif dari functional requirement yang bermacam-macam. Diciptakan pertama kali oleh Albrecht di IBM pada tahun 1979. Albrecht mengidentifikasikan 5 fungsi utama yang sering ada dalam pengembangan software komersial dan mengategorikannya sesuai dengan kompleksitas pengembangan relatifnya. Kelima fungsi tersebut adalah sebagai berikut : • Input, adalah layar atau form dimana melaluinya pengguna aplikasi ataupun program lain dapat menambahkan data baru atau memperbaharui data yang sudah ada. • Output, adalah layar atau laporan yang dihasilkan oleh aplikasi untuk keperluan pengguna atau untuk program lain. 36 • Inquiry, adalah layar yang memperbolehkan pengguna untuk mencari lebih lanjut dari sebuah aplikasi dan untuk meminta bantuan atau informasi, seperti layar Help. • Data File, adalah koleksi logikal dari catatan yang telah dimodifikasi atau diperbarui oleh aplikasi. • Interface, adalah file-file yang dishare dengan aplikasi lain dan meliputi incoming atau outgoing tape file, database yang dishare, dan daftar parameter. Total unadjusted function point didapat dari menghitung jumlah 5 fungsi diatas dikali dengan bobot masing-masing fungsi sesuai dengan tabel di bawah ini. Tabel 2.1 : Bobot Masing-Masing Fungsi Pada Function Point Tipe Fungsi Bobot Inputs 4 Outputs 5 Inquiry 4 Logical File 10 Interface 7 Setelah menghitung total unadjusted function-point, maka untuk mendapatkan adjusted function-point dibutuhkan nilai masing-masing faktor yang mempengaruhi function-point. 37 Tabel 2.2 : Faktor-faktor yang Mempengaruhi Function Point Faktor Data communications Distributed functions Performance objectives Heavily used configuration Transaction rate On-line data entry End-user efficiency On-line update Complex processing Reusability Installation ease Operational ease Multiple sites Facilitate change Faktor-faktor yang mempengaruhi function-point menggunakan nilai pengaruh dari skala 0 sampai 5, dimana 0 berarti sangat sederhana dan 5 yang berarti sangat kompleks atau rumit. Kemudian untuk mendapatkan nilai dari function point kita harus menghitung terlebih dahulu nilai dari Complexity Multiplier atau value adjustment factor yang kemduian di kalikan dengan unadjusted function-point. 38 Constructice Cost Model Cocomo (Cocomo 81) dirumuskan berdasarkan model yang didapat oleh Boehm pada tahu 1970 yang melakukan penelitian pada 63 proyek dimana hanya 7 diantaranya yang merupakan sistem bisnis. Model Cocomo didasarkan pada persamaan : Dimana effort diukur dalam satuan person-month yang terdiri dari 152 jam kerja. Sedang ukuran (size) diukur dalam satuan kdsi (thousand of delivered code instruction). Development time adalah waktu yang dibutuhkan untuk pengembangan software, dinyatakan dalam satuan bulan (month). P adalah jumlah orang yang dibutuhkan untuk mengerjakan proyek tersebut. Sedangkan a,b,c dan d adalah konstanta yang ditentukan tipe dari proyek software yang akan dibuat, apakah termasuk dalam kategori Organic mode, Embedded mode atau Semi-detached mode yang nilainya dapat dilihat pada tabel berikut. 39 Tabel 2.3 : Konstanta Cocomo model Jenis Proyek a b c d Organic 2.4 1.05 2.5 0.38 Semi-detached 3.0 1.12 2.5 0.35 Embedded 3.6 1.20 2.5 0.32 Organic adalah tipe umum yang digunakan ketika sebuah software kecil dikembangkan oleh sebuah tim kecil. Embedded digunakan ketika produk yang dikembangkan sangat dibatasi oleh batasan-batasan dan perubahan kecil terhadap sistem akan sangat mahal. Semi-detached adalah kombinasi antara organic dan embedded. Basic Cocomo ini baik untuk perkiraan yang cepat, awal dan kasar dari biaya pembuatan software, namun keakurasiannya sangat terbatas karena kurangnya faktor untuk menghitung perbedaan pada batasan hardware, kualitas personal dan pengalaman, teknik dan penggunaan alat-alat modern, dan atribut proyek lainnya yang dikenal mempunyai pengaruh yang kuat pada biaya pembuatan software. 40 2.3.2.3 OO-Metric Chidamber dan Kemerer mendefinisikan 6 metric baru bagi software yang dikembangkan dengan metode object oriented. Dimana perhitungan metric ini beranggapan bahwa method-method pada setiap class yang ada bukan merupakan constructor, destructor, setter, dan getter pada sebuah class. Gambar 2.7 Contoh Class Diagram sebuah Aplikasi 41 Weighted Method per Class (WMC) WMC adalah jumlah method yang diimplementasi dalam class atau total kompleksitas dari method-methodnya. Jumlah method yang ada dan kompleksitas dari method-method yang digunakan bisa digunakan untuk memprediksikan berapa waktu dan usaha yang dibutuhkan untuk mengembangkan dan memelihara sebuah class. Semakin banyak jumlah method dalam sebuah class, semakin besar dampak potensial terhadap class turunannya; class turunannya mewarisi semua method yang didefinisikan pada class induknya. Class dengan jumlah method yang besar biasanya untuk aplikasi yang spesifik, dan jarang bisa untuk digunakan kembali. WMC sangat baik untuk menjadi indikator untuk implementation dan test effort. Mengacu pada figure 4 diatas, WMC yang didapatkan dengan menghitung jumlah method pada tiap class adalah sebagai berikut : Tabel 2.4 : Nilai WMC pada Class Diagram (Gambar 2.7) Nama Class WMC Class1 1 Class2 1 Class3 1 Class4 3 Class5 1 Class6 2 42 Depth of The Inheritance Tree (DIT) DIT adalah kedalaman dari hirarki class, dimana mendefinisikan panjang maksimum dari node hingga mencapai root dari tree. Makin dalam sebuah class dalam hirarkinya akan semakin baik kompleksitas desain-nya, dan membuat class tersebut lebih kompleks untuk diprediksi sifatnya. Semakin besar DIT maka akan semakin reuse tetapi juga memunculkan kesulitan dalam understandabilty dan testability. Mengacu pada figure 4 diatas, DIT yang didapatkan dengan menghitung kedalaman hirarki pada tiap class-nya adalah sebagai berikut : Tabel 2.5 : Nilai DIT pada Class Diagram (Gambar 2.7) Nama Class DIT Class1 1 Class2 1 Class3 1 Class4 1 Class5 2 Class6 2 43 Number Of Children (NOC) NOC adalah jumlah class yang diturunkan secara langsung dalam sebuah hirarki class. Semakin baik NOC maka semakin reuse dan semakin besar kemungkinan dari kesalahan abstraksi pada class induknya dan mungkin juga sebagai penyalahgunaan dari pengertian subclasses. NOC juga bisa dijadikan sebagai indikator dari reusability dan testing effort. Mengacu pada figure 4 diatas, NOC yang didapatkan dengan menghitung jumlah class turunan secara langsung dari sebuah class adalah sebagai berikut : Tabel 2.6 : Nilai NOC pada Class Diagram (Gambar 2.7) Nama Class NOC Class1 0 Class2 0 Class3 0 Class4 2 Class5 0 Class6 0 44 Response for a Class (RFC) RFC adalah jumlah dari method yang dapat digunakan dalam merespon suatu pesan terhadap sebuah class. Termasuk didalamnya semua method yang dapat diakses dalam hirarki class. Dimana metric ini melihat kombinasi dari kompleksitas sebuah class melalui jumlah method dan banyaknya komunikasi dengan class-class lain. Jika semakin besar jumlah method yang dapat di gunakan untuk meresponse sebuah pesan, maka testing dan debugging dari class akan menjadi lebih complex dikarenakan semakin besarnya level dalam memahami bagian oleh tester. Semakin besar jumlah method yang bisa digunakan oleh sebuah class, maka akan semakin besar kompleksitas dari sebuah class. RFC bisa dijadikan indikator untuk mengukur design complexity dan testabilty. Mengacu pada figure 4 diatas, RFC yang didapatkan dengan menghitung jumlah method yang digunakan dalam sebuah class adalah sebagai berikut : Tabel 2.7 : Nilai RFC pada Class Diagram (Gambar 2.7) Nama Class RFC Class1 1 Class2 1 Class3 1 Class4 3 Class5 4 Class6 5 45 Coupling between Object Classes (CBO) CBO adalah jumlah hubungan dari suatu class dengan class lainnya yang bukan merupakan class turunannya. Coupling yang terlalu banyak antara objek class dapat merusak perancangan modular dan mengurangi reuse. Semakin independent class tersebut semakin mudah untuk digunakan kembali pada aplikasi lain. Semakin besar coupling maka akan semakin sensitif untuk merubah bagian lain pada perancangan, sehingga proses maintanance akan menjadi semakin sulit. Pengukuruan coupling ini sangat baik untuk menggambarkan seberapa besar kompleksitas dalam melakukan testing pada setiap bagian dari desain. CBO dapat mengevaluasi dalam implementasi perancangan dan reusablity. Mengacu pada figure 4 diatas, CBO yang didapatkan dari jumlah hubungan suatu class dengan class laiinnya yang bukan merupakan class turunannya adalah sebagai berikut : Tabel 2.8 : Nilai CBO pada Class Diagram (Gambar 2.7) Nama Class CBO Class1 1 Class2 2 Class3 0 Class4 0 Class5 0 Class6 0 46 Lack of Cohesion in Methods (LCOM) LCOM adalah salah satu metric yang dapat digunakan untuk mengevaluasi sistem software yang berorientasi objek. LCOM sangat baik digunakan untuk menghitung kohesi pada sistem. Rendahnya kohesi dapat meningkatkan kompleksitas, sehingga secara tidak langsung juga meningkatkan kemungkinan terjadinya error selama proses pengembangan. Sedangkan, semakin tinggi kohesi mengindikasikan semakin baik subdivision dari class. LCOM adalah indikator langsung untuk menunjukkan kompleksitas design dan reusability. Mengacu pada contoh class diagram diatas, dimana untuk class4 method operation4a() menggunakan 2 attribut, operation4b() menggunakan 2 attribut, dan operatiob4c() menggunakan 1 attribut, sehingga LCOM untuk setiap class pada figure 4 diatas, adalah sebagai berikut : 47 Tabel 2.9 : Nilai LCOM pada Class Diagram (Gambar 2.7) Nama Class LCOM Class1 0 Class2 0 Class3 0 Class4 2 Class5 0 Class6 1 2.3.2.4 Use Case Point Untuk mengetahui kebutuhan fungsional suatu proyek software , model use case seringkali digunakan. Pemodelan use case adalah suatu teknik yang telah digunakan sebagian besar industri untuk menggambarkan dan mengetahui kebutuhan fungsional dari sebuah sistem software. Use case points adalah suatu metode baru untuk meng-estimasi pengembangan software. Semenjak use case dikembangkan sebagai suatu bagian biasa dari penggabungan kebutuhan dan analisis, dan semenjak use case dapat mengetahui dan secara akurat merepresentasikan kebutuhan user, masuk akal untuk mendasarkan suatu tugas yang lebih sulit dari estimasi ukuran dan sumber kebutuhan padanya, sebagai perbandingan pada teknik-teknik yang lain seperti function point, LOC, dll. Keuntungan lain dari penggunaan use case sebagai dasar estimasi bahwa use case dapat diamati dari 2 arah dengan kemampuan untuk menelusuri kebutuhan modern dari bagian-bagian manajemen. 48 Bente Anda membandingkan metode use case point dengan estimasi expert yang dibuat dari pengalaman pengembang software. Metode Use case point memberikan sebuah estimasi yang hampir mendekati estimasi sebenarnya yang dihasilkan dari pengalaman pengembang software. Metode estimasi itu memberikan tingkat kepuasan yang besar dari besarnya relatif error yang ada bersama kendala estimasi. Hasil dari pembelajaran ini menunjukkan bahwa metode use case point dapat dengan sukses digunakan untuk meng-estimasi effort dari suatu pengembangan software. Penjelasan mengengai use case point akan lebih dijelaskan secara detail pada bagian 2.4. 2.4 Estimasi Use Case Point Estimasi awal terhadap effort suatu sistem yang berdasarkan pada use case dapat dilakukan ketika sudah dapat memahami permasalahan-permasalahan yang ada, ukuran sistem, dan arsitektur pada tahapan dimana estimasi akan dibuat. Metode use case point adalah pengukuran software dan metode estimasi yang berdasarkan pada hitungan use case yang disebut use case point. 49 2.4.1 Klasifikasi Aktor dan Use Case Use case point dapat dihitung dari analisis use case pada sistem. langkah pertama adalah menentukan terlebih dahulu aktor sebagai simple, average, atau complex. Tabel 2.10 Tipe, Bobot, dan Deskripsi Aktor pada Use Case Point Actor Weight Description Simple 1 Didefinisikan dengan API Medium 2 Interactive atau Berinteraksi Melalui Protokol, Seperti TCP/IP Complex 3 Berinteraksi dengan GUI atau Web Page Total Unadjusted Actor Weights (UAW) didapat dari menghitung berapa banyak aktor dari masing-masing jenis ( tingkat kompleksitas ),dikali dengan total faktor berat masing-masing sesuai dengan tabel. Masing-masing use case di bagi juga menjadi simple, average, dan complex. Tergantung dari jumlah transaksi yang dilakukan dalam deskripsi use case. Transaksi merupakan kumpulan dari aktifitas, dimana berada seutuhnya, atau tidak sama sekali. Penghitungan jumlah transaksi dapat dilakukan dengan menghitung langkah-langkah use case. Pada metode ini Karner tidak mengajukan penghitungan terhadap included use case dan extended use case, tetapi sebabnya belum bisa dijelaskan. 50 Tabel 2.11 Tipe, Bobot, dan Deskripsi Use Case pada Use Case Point Use Case Weight Description Simple 5 Menggunakan <= 3 transaksi Medium 10 Menggunakan 4 sampai 7 transaki Complex 15 Menggunakan > 7 transaksi Total Unadjusted Use Case Weights (UUCW) didapat dari menghitung berapa banyak use case dari masing-masing jenis ( tingkat kompleksitas ),dikali dengan total faktor berat masing-masing sesuai dengan tabel. Kemudian jumlahkan UAW dan UUCW untuk mendapatkan Unadjusted Use Case Point (UUCP). 2.4.2 Faktor-Faktor pada Use Case Pada metode use case point ini juga terdapat teknikal faktor yang mengacu pada faktor-faktor Technical Complexity Adjustment yang terdapat pada metode Function Point Analysis, dan faktor-faktor enviromental yang digunakan untuk menghitung fungsifungsi yang tidak fungsional yang biasa digunakan untuk mempermudah pekerjaan seorang programmer. 51 Faktor-faktor tersebut memiliki bobot nilai, dan nilai-nilai akan diberikan pada setiap faktor, tergantung dari seberapa besar pengaruh dari faktor tersebut. 0 berarti tidak mempengaruhi, 3 berarti rata-rata, dan 5 berarti memberikan pengaruh yang besar. Faktor-faktor tambahan akan dikalikan dengan unadjusted use case points untuk menghasilkan adjusted use case points, dan akhirnya digunakan untuk menentukan ukuran dari software. Tabel 2.12 Technical Factor Technical Factor Weight Distributed System 2 Performance 1 End User Efficiency 1 Complex Internal Processing 1 Code must be reusable 1 Easy to Install 0.5 Easy to Use 0,5 Portable 2 Easy to change 1 Multi-threaded application 1 Special security features 1 Direct access to other systems 1 Special user training facilities are required 1 52 Nilai-nilai pada technical factor tersebut dikalikan dengan bobot nilai masinmasing, kemudian dijumlah untuk mendapatkan total technical factor (TF), yang kemudian digunakan untuk mendapatkan Techinal Complexity Factor (TCF). Tabel 2.13 Enviromental Factor Enviromental Factor Weight Familiarity with UML 1.5 Application Experience 0.5 Object Oriented Experience 1 Lead Analyst Capbility 0.5 Team Motivation 1 Stable Requirements 2 Project team is part-time -1 Difficult Programming Language -1 Nilai-nilai pada enviromental factor tersebut dikalikan dengan bobot nilai masingmasing, kemudian dijumlah untuk mendapatkan total enviromental factor (EF), yang kemudian digunakan untuk mendapatkan Enviromental Complexity Factor (ECF). 53 Sehingga akhirnya kita bisa mendapatkan nilai dari Adjusted Use Case Point (UCP) yang didapatkan melalui perkalian UUCP, TCF, dan ECF. 2.4.3 Estimasi Bedasarkan Use Case Point Untuk merubah nilai UCP yang didapatkan menjadi nilai effort yaitu staff hours, maka nilai UCP harus dikalikan dengan nilai staff-hour per use case point, Karner mengemukakan nilai 20 staff hours untuk setiap use case point untuk estimasi akhir sebuah proyek. Pengalaman langsung telah menunjukkan bahwa nilai staff-hour dapat berkisar dari 15 sampai 30 jam untuk setiap use case point, dimana nilai ini akan mengubah secara langsung use case point ke dalam waktu perkiraan yang mungkin masih belum memiliki kepastian. 54 2.5 Java 2.5.1 Sejarah Perkembangan Java Bahasa pemograman Java pertama kali lahir dari The Green Project, yang berjalan selama 18 bulan, dari awal tahun 1991 hingga musim panas 1992. Proyek tersebut belum menggunakan versi yang dinamakan Oak. Proyek ini dimotori oleh Patrih Naughton, Mike Sheridan, James Gosling dan Bill Joy, beserta sembilan programmer lainnya dari Sun Microsystems. Salah satu hasil proyek ini adalah maskot Duke yang di buat oleh Joe Palrang. Pertemuan proyek berlangsung di sebuah gedung perkantoran Sand Hill Road di Menlo Park. Sekitar musim panas 1992 proyek ini ditutup dengan menghasilkan sebuah program Java Oak pertama, yang ditujukan sebagai pengendali sebuah peralatan dengan teknologi layar sentuh (touch screen), seperti pada PDA sekarang ini. Teknologi baru ini dinamai “*7” (Star Seven). Setelah era Star Seven selesai, sebuah anak perusahaan TV kabel tertarik ditambah beberapa orang dari proyek The Green Project. Mereka memusatkan kegiatannya pada sebuah ruangan kantor di 100 Hamilton Avenue, Palo Alto. Perusahaan ini bertambah maju, jumlah karyawan meningkat dalam waktu singkat dari 13 menjadi 70 orang. Pada rentang waktu ini juga ditetapkan pemakaian internet sebagai medium yang menjembatani kerja dan ide di antara mereka. Pada awal tahun 1990-an, internet masih merupakan rintisan, yang dipakai hanya di kalangan akademis dan militer. 55 Mereka menjadikan browser Mosaic sebagai landasan awal untuk membuat browser Java pertama yang dinamai Web Runner, terinspirasi dari film 1980-an, Blade Runner. Pada perkembangan rilis pertama, Web Runner berganti nama menjadi Hot Java. Pada sekitar bulan Maret 1995, untuk pertama kali kode sumber Java versi 1.0a2 dibuka. Kesuksesan mereka diikuti dengan pemberitaan pertama kali pada surat kabar San Jose Mercury News pada tanggal 23 Mei 1995. Sayang terjadi perpecahan di antara mereka suatu hari pada pukul 04.00 di sebuah ruangan hotel Sheraton Palace. Tiga dari pimpinan proyek, Eric Schmidt dan George Paolini dari Sun Microsystems bersama Marc Andreessen, membentuk Netscape. Nama Oak, diambil dari pohon oak yang tumbuh di depan jendela ruangan kerja “bapak java”, James Gosling. Nama Oak ini tidak dipakai untuk versi release Java karena sebuah perangkat lunak sudah terdaftar dengan merek dagang tersebut, sehingga diambil nama penggantinya menjadi “Java”. Nama ini diambil dari kopi murni yang digiling langsung dari biji (kopi tubruk) kesukaan Gosling. 56 2.5.2 Kelebihan Java Beberapa kelebihan dari menggunakan bahasa pemograman java adalah sebagai berikut : • Multiplatform. Kelebihan utama dari Java ialah dapat dijalankan di beberapa platform/sistem operasi komputer, sesuai dengan prinsip “tulis sekali, jalankan di mana saja”. Dengan kelebihan ini pemogram cukup menulis sebuah program Java dan dikompilasi (diubah, dari bahasa yang dimengerti manusia menjadi bahasa mesin / bytecode) sekali lalu hasilnya dapat dijalan diatas beberapa platform tanpa perubahan. Kelebihan ini memungkinkan sebuah program berbasis java dikerjakan diatas operating system Linux tetapi dijalankan dengan baik di atas Microsoft Windows. Platform yang didukung sampai saat ini adalah Microsoft Windows, Linux, Mac OS dan Sun Solaris. Penyebabnya adalah setiap sistem operasi menggunakan programnya sendirisendiri (yang dapat didapatkan dari situs Java) untuk meninterpretasikan bytecode tersebut. • OOP (Object Oriented Programming – Pemograman Berorientasi Objek) yang artinya semua aspek yang terdapat di Java adalah Objek. Java merupakan salah satu bahasa pemograman berbasis objek secara murni. Semua tipe data diturunkan dari kelas dasar yang disebut Object. Hal ini sangat memudahkan pemrogram untuk mendesain, membuat, mengembangkan dan mengalokasi kesalahan sebuah program dengan basis Java secara cepat, tepat, mudah dan teroganisir. Kelebihan ini menjadikan 57 Java sebagai salah satu bahasa pemograman termudah, bahkan untuk fungsifungsi yang advance seperti komunikasi antara komputer sekalipun. • Perpustakaan Kelas Yang Lengkap, Java terkenal dengan kelengkapan library / perpustakaan (kumpulan program yang disertakan dalam pemrograman java) yang sangat memudahkan dalam penggunaan oleh para pemrogram untuk membangun aplikasinya. Kelengkapan perpustakaan ini ditambah dengan keberadaan komunitas Java yang besar yang terus-menerus membuat perpustakaan-perpustakaan baru untuk melingkupi seluruh kebutuhan pembangunan aplikasi. • Bergaya C++, memiliki sintaks seperti bahasa pemrograman C++ sehingga menarik banyak programmer C++ untuk pindah ke Java. Saat ini pengguna Java sangat banyak, sebagian besar adalah programmer C++ yang pindah ke Java. Universitas-universitas di Amerika juga mulai berpindah dengan mengajarkan Java kepada murid-murid yang baru karena lebih mudah dipahami oleh murid dan dapat berguna juga bagi mereka yang bukan mengambil jurusan komputer. • Pengumpulan sampah otomatis, memiliki fasilitas pengaturan penggunaan memori sehingga para pemogram tidak perlu melakukan pengaturan memori secara langsung (seperti halnya dalam bahasa C++ yang dipakai secara luas). 58 2.5.3 Kekurangan Java Selain kelebihan-kelebihan java yang telah dtuliskan diatas, juga terdapat kekurangan dalam menggunakan bahasa pemograman java adalah sebagai berikut : • Tulis sekali, perbaiki di mana saja, Masih ada beberapa hal yang tidak kompatibel antara platform satu dengan platform lain. Untuk J2SE, misalnya SWT-AWT bridge yang sampai sekarang tidak berfungsi pada Mac OS X. • Mudah didekompilasi, Dekompilasi adalah proses membalikkan dari kode jadi menjadi kode sumber. Ini dimungkinkan karena kode dari Java merupakan bytecode yang menyimpan banyak atribut bahasa tingkat tinggi, seperti nama-nama kelas, metode, dan tipe data. Hal yang sama juga terjadi pada Microsoft .Net Platform. Dengan demikian, algoritma yang digunakan program akan lebih sulit desembunyikan dan mudah dibajak / di reverseengineer. • Penggunaan memori yang banyak, Penggunaan memori untuk program berbasis Java jauh lebih besar daripada bahasa tingkat tinggi generasi sebelumnya seperti C/C++ dan Pascal (lebih spesifik lagi, Delphi dan Object Pascal). Biasanya ini bukan merupakan masalah bagi pihak yang menggunakan teknologi terbaru (karena trend memori terpasang makin murah), tetapi menjadi masalah bagi mereka yang masih harus berkutat dengan mesin komputer berumur lebih dari 4 tahun. 59