BAB I PENDAHULUAN 1.1 Latar Belakang Masalah Membangun sebuah perangkat lunak merupakan sebuah proses yang rumit, dan pada 25 tahun terakhir, para peneliti telah mengidentifikasi aktivitas-aktivitas yang harus dilalui dalam sebuah pengembangan perangkat lunak. Aktivitasaktivitas tersebut antara lain[2] : - Definisi permasalahan - Penggalian requirement - Perencanaan konstruksi - Mendesain arsitektur perangkat lunak, atau sering juga disebut high-level design - Tahap design yang lebih detail. - Coding dan debugging - Unit testing - Integration testing - Integration - System testing - Corrective maintenance Sedangkan Pressman menyatakan tahapan-tahapan pengembangan perangkat lunak sebagai berikut [3] : - Communication - Planning - Modeling - Construction - Deployment Sebelum tahun 2000, lebih dari lima puluh persen pengembangan perangkat lunak yang dilakukan oleh para vendor di Amerika Serikat mengalami I-1 I-2 kegagalan[4], hal ini disebabkan karena perangkat lunak yang dibuat tidak dapat memenuhi kebutuhan dan harapan pengguna (user requirements dan user expectations). Kendala yang dialami ketika mengembangkan sebuah perangkat lunak adalah suatu pengembangan perangkat lunak tidak berhenti ketika perangkat lunak telah dikirim ke konsumen. melainkan terus berlangsung selama masa hidup perangkat lunak tersebut. Setelah sebuah perangkat lunak diterima oleh konsumen, perangkat lunak tersebut harus selalu berubah mengikuti aturan bisnis yang seringkali berubah. Sebagian dari perangkat lunak tersebut harus dimodifikasi untuk menghilangkan error yang ditemukan, untuk beradaptasi terhadap perubahan hardawre dan software, atau untuk meningkatkan performa. Namun perubahan tersebut seringkali menimbulkan permasalahan baru yang tidak terduga sebelumnya. Erlikh(2000) mengadakan polling terhadap industri yang ada di Amerika Serikat, dan hasilnya menunjukkan bahwa 85-90% dari biaya perangkat lunak terletak pada biaya evolusi perangkat lunak. Survey lain menunjukkan bahwa sekitar 2/3 dari biaya perangkat lunak adalah biaya pemeliharaan[5]. Kegagalan-kegagalan dan problema yang ada ketika membangun perangkat lunak menunjukkan bahwa membangun perangkat lunak merupakan hal yang cukup kompleks sehingga dibutuhkan suatu disiplin ilmu yang berfungsi untuk menjelaskan dan memahami karakteristik dari pengembangan perangkat lunak. Hal ini ditunjukkan dengan adanya disiplin ilmu Software Engineering yang memberikan guidelines untuk membangun perangkat lunak. Supaya perangkat lunak yang telah dibangun dapat berevolusi mengikuti aturan bisnis yang selalu berubah-ubah, maka dibutuhkan suatu metode yang disebut dengan SoC(Separation of Concern) ketika membangun perangkat lunak. Gagasan ini dipopulerkan pertama kali oleh Edgar W. Dijkstra pada tahun 1974 dalam papper-nya yang berjudul “On Role Scientific Thought”. Konsep awal Separation of Concern (SoC) yang dikemukakan Dijkstra, bertujuan untuk memecah sebuah permasalahan yang kompleks ke dalam bagianbagian kecil yang lebih sederhana, lalu mencari solusi pada bagian-bagian kecil I-3 tersebut. Namun dalam pembangunan sistem berorientasi objek, konsep SoC ini memungkinkan adanya pemisahan domain permasalahan. Pada awal tahun 1960-an, meskipun saat itu paradigma pengembangan perangkat lunak masih didominasi oleh paradigma prosedural maupun struktural, mulai dikembangkan paradigma sistem berorientasi objek. Paradigma ini memiliki salah satu ciri yang menganut prinsip SoC yaitu encapsulation. Dengan adanya encapsulation ini perubahan yang terjadi pada suatu kelas dapat diatur sehingga tidak memengaruhi kelas lainnya. Sekitar tahun 1980-an, ketika perangkat lunak mulai dominan digunakan di perusahaan-perusahaan bisnis berskala besar, sistem berorientasi objek semakin banyak digunakan. Keunggulan-keunggulan sistem berorientasi objek dibandingkan sistem lainnya antara lain dengan adanya konsep-konsep seperti component reusable, inheritance, polymorphism dan lain sebagainya. Karakteristik sistem berorientasi objek menyebabkan sistem ini cocok digunakan pada sistem informasi yang berkaitan dengan dunia bisnis, antara lain sistem informasi akuntansi, sistem informasi manajemen, manufaktur dan lainlain. Kemudahan sistem berorientasi objek dalam berevolusi mengikuti perubahan aturan bisnis pada perusahaan merupakan salah satu nilai tambah dari sistem berorientasi objek. Pada pembangunan Sistem Inventaris, perubahan nilai tukar valas, minimnya stok, membanjirnya permintaan, dan terjadinya suatu bencana alam, dapat menyebabkan fluktuasi pada harga barang dan menyebabkan suatu perubahan pada aturan bisnis yang berlaku. Perubahan pada aturan bisnis tersebut dapat mempengaruhi cara kerja Sistem Inventaris, dan dapat menyebabkan modifikasi pada Sistem. Modifikasi tersebut seringkali menyebabkan munculnya error-error dan bugs baru yang tidak teridentfikasi sebelumnya. Bahkan tidak jarang, modifikasi pada satu bagian sistem menimbulkan tidak berfungsinya bagian sistem yang lain. Berdasarkan uraian di atas, maka pada proposal tugas akhir ini penulis tertarik untuk mengangkat tema tentang pengembangan perangkat lunak dengan I-4 ”Pemanfaatan Separation of Concern (SoC) pada Sistem Berorientasi judul Objek (Studi Kasus Sistem Inventaris Toko Aksesoris Komputer)”. 1.2 Identifikasi Masalah Berdasarkan latar belakang yang telah dipaparkan di atas, maka masalah yang muncul dalam penelitian ini adalah: 1. Banyaknya pembangunan perangkat lunak yang mengalami kegagalan, baik dari segi user requirement maupun dari segi user expectations. 2. Sulitnya membangun perangkat lunak secara tepat waktu dan sesuai budjet. 3. Besarnya biaya dan sumberdaya yang mesti dikeluarkan saat tahap maintenance pada proses pembangunan perangkat lunak. 4. Sistem inventaris yang bersifat fleksibel dan dapat berevolusi mengikuti perubahan aturan bisnis pada perusahaan sulit untuk dikembangkan. 1.3 Rumusan Masalah Berdasarkan identifikasi masalah yang telah dipaparkan di atas, maka masalah yang muncul dalam penelitian ini dapat dirumuskan sebagai berikut: 1. Bagaimana cara agar sebuah perangkat lunak dapat dimodifikasi untuk mengikuti perubahan pada aturan bisnis? 2. Bagaimana membangun sebuah kelas yang menerapkan prinsip SRP (Single Responsibility Principle)? 3. Bagaimana membangun struktur kelas yang menerapkan prinsip OCP (Open Closed Principle)? 4. Bagaimana membangun sebuah Sistem Inventaris yang fleksibel namun robust? I-5 1.4 Tujuan Penelitian Adapun tujuan dari tugas akhir ini adalah memahami prinsip-prinsip pembangunan sistem berorientasi objek yang memungkinkan kemudahan modifikasi sistem, dengan memperhatikan SoC (Separation of Concern) seperti prinsip SRP (Single Responsibility Principle), OCP (Open Closed Principle), design pattern yang berkaitan dengan SoC, dan membangun aplikasi dengan layering. 1.5 Batasan Masalah Untuk dapat menghindari penyimpangan-penyimpangan serta memperjelas ruang lingkup pelaksanaan penelitian pada tugas akhir ini, penulis memiliki batasan masalah meliputi : 1. Sistem ini hanya mencakup garis besar prinsip-prinsip pemisahan problem domain. 2. Pembangunan sistem ini hanya menggunakan satu komputer, sehingga permasalahan-permasalahan yang bersifat client-server tidak dibahas di sini. 3. Sistem ini tidak membahas tentang keamanan, seperti keamanan aplikasi dan keamanan database. 4. Tidak semua design pattern yang berkaitan dengan SoC digunakan, melainkan hanya design pattern yang berkaitan dengan aplikasi yang dibuat. 1.6 Metode Penelitian Kegiatan penelitian ini dalam bentuk pengembangan perangkat lunak dan menggunakan Waterfall Model, tahapan-tahapan pengembangan yang dilakukan adalah Requirement analysis and definition, system and software design, implementation and unit testing, integration and system testing, dan operation and maintenance. Tahapan-tahapan tersebut saling terkait dan saling mempengaruhi membentuk sebuah siklus hidup perangkat lunak (Software Development Life Cycle). Langkah-langkah yang akan ditempuh dalam pengerjaan Tugas Akhir ini adalah: I-6 A. Pemahaman Sistem dan Studi Literatur Tahap ini dilakukan dengan cara mempelajari literatur baik yang berupa buku, jurnal maupun halaman web yang berhubungan dengan pembangunan aplikasi pembangunan aplikasi berorientasi objek serta teknik-teknik yang berhubungan dengan Separation of Corncern B. Pengembangan Aplikasi Tahap ini merupakan pengembangan perangkat lunak dengan menggunakan Waterfall Model, tahapan-tahapan pengembangan yang dilakukan adalah : 1. Requirement Analysis and definition (analisis kebutuhan dan pendefinisian dari kebutuhan tersebut). Dalam tahap ini terjadi komunikasi berupa konsultasi dengan calon pengguna sistem mengenai layanan-layanan atau fitur yang disediakan oleh sistem, batasan atau domain yang dicakup oleh sistem, dan tujuan pembangunan sistem. Keseluruhan elemen tersebut kemudian didefinisikan secara detil dan berfungsi sebagai system specification (spesifikasi sistem). 2. System and software design (perancangan sistem dan perancangan perangkat lunak). Proses perancangan sistem mengalokasikan requirement yang telah diperoleh dari tahap analisis ke dalam perangkat lunak dan perangkat keras sistem dengan cara membangun arsitektur sistem secara keseluruhan. Sedangkan proses perancangan perangkat lunak meliputi proses identifikasi dan penggambaran abstraksi dasar sistem beserta relasi-relasinya. 3. Implementation and unit testing Pada tahap ini, desain perangkat lunak diimplementasikan ke dapam kumpulan program-program atau unit program. Unit I-7 testing meliputi proses verifikasi bagwa setiap unit yang telah diimplementasikan memenuhi spesifikasinya. 4. Integration and system testing Unit-unit program yang masih terpisah diintegrasikan dan ditest sebagai sebuah sistem yang terintegrasi untuk memastikan bahwa requirement perangkat lunak telah dipenuhi. Setelah testing dilakukan, perangkat lunak tersebut kemudian dikirimkan ke konsumen. 5. Integration and system testing Umumnya (meskipun tidak selalu), tahap ini adalah tahap terlama dari SDLC. Sistem tersebut di-install dan mulai digunakan pada dunia nyata. Tahap pemeliharaan meliputi perbaikan error-error yang tidak ditemukan pada tahap-tahap SDLC yang lebih awal, peningkatan implementasi dari unit sistem dan memperbaiki fitur sistem untuk menyesuaikan terhadap requirement-requirement baru yang ditemukan. C. Penyusunan Laporan Tugas Akhir Pada tahapan ini dilakukan untuk membuat laporan dari semua dasar teori dan metode yang digunakan serta hasil- hasil yang diperoleh selama pengerjaan tugas akhir. 1.7 Sistematika Penulisan Pembahasan dalam tugas akhir ini dibagi menjadi beberapa bab sebagai berikut: Bab Satu Pendahuluan, bab ini merupakan suatu dasar penyusunan yang didalamnya berisi latar belakang masalah, rumusan masalah, tujuan, metode pengembangan sistem dan sistematika penulisan. Bab Dua Landasan Teori, bab ini menjelaskan tentang teori-teori yang berhubungan dengan sistem kerja dan pengembangan aplikasi yang bersangkutan. I-8 Bab Tiga Analisis Sistem. Bab ini membahas tentang analisis kebutuhan sistem, ada empat aktivitas untuk mengetahui kebutuhan sistem, yaitu: Feasibility study, Requirement elicitation and analysis, Requirement specification, dan Requirement validation. Bab Empat Perancangan Sistem. Bab ini menjelaskan tentang perancangan arsitektural sistem, perancangan antarmuka, perancangan komponen sistem, dan perancangan basis data. Bab Lima Kesimpulan dan Saran, dalam bab ini membahas kesimpulan dan saran dari beberapa bab yang telah disusun sebelumnya.