Implementasi CakePHP pada Sistem...
Transcript of Implementasi CakePHP pada Sistem...
2
1. Pendahuluan
Dunia pemrograman aplikasi berbasis web menyediakan berbagai macam
bahasa pemgrograman. Salah satu bahasa pemrograman yang banyak digunakan oleh
para pembuat aplikasi web adalah PHP. PHP merupakan sebuah bahasa pemrograman
yang memungkinkan seorang developer mengembangkan sebuah aplikasi berbasis
web yang powerful. Seiring dengan berkembangnya kebutuhan akan aplikasi berbasis
PHP dan semakin kompleksnya pengembangan aplikasi, maka diperlukanlah sebuah
kerangka kerja (framework) yang dapat membantu developer menyelesaikan hal
tersebut. Teknik pemrograman berbasis OOP (Object Oriented Programming) telah
menjadi trend pemrograman saat ini, karena kemudahan, kecepatan dan pengerjaan
yang terstruktur, membuat framework menjadi alternatif bagi developer dalam
mengembangkan suatu website. Framework-framework yang bermunculan tersebut
kebanyakan juga telah mendukung beberapa konsep seperti arsitektur Model View
Controller (MVC) dan Object Relational Mapping (ORM).
Framework CakePHP merupakan sebuah framework untuk membuat aplikasi
CRUD (Create, Read, Update, Delete) menggunakan bahasa pemrograman PHP.
Framework CakePHP dapat menangani mulai dari masalah request pengguna sampai
membentuk sebuah website. CakePHP juga mendukung untuk konsep MVC (Model-
View-Controller) sehingga mempermudah pengembangan aplikasi. Framework
CakePHP ini akan digunakan untuk membangun sebuah aplikasi berbasis web untuk
Sistem Informasi Pelayanan Administrasi Pasien Rawat Jalan Berbasis Web di
Rumah Sakit Fatima Makale Tana Toraja. Proses manual yang menghambat layanan
pasien rawat jalan seperti contoh pencatatan rekam medis yang masih dicatat dalam
buku rekam medis yang menyulitkan pelayanan administrasi baik staf administrasi
maupun dokter. Dengan keterbatasan penanganan administrasi tersebut, maka
dibutuhkan dukungan sistem informasi pelayanan administrasi yang memadai. Hal
ini didasari oleh pengelolaan data pasien membutuhkan waktu yang lama, tuntutan
ketersediaan informasi yang cepat dan akurat, media penyimpanan informasi untuk
pemrosesan dan pembaharuan data. Berdasarkan uraian latar belakang tersebut, maka
muncullah sebuah keinginan untuk menerapkan dan meneliti salah satu framework
PHP yaitu CakePHP yang telah mendukung arsitektur Model View Controller (MVC)
yang dapat membangun sistem informasi berbasis web dan mempermudah
pengembangan aplikasi dengan validasi secara cepat, dimana rumah sakit adalah
salah satu instansi dengan keperluan pengerjaan administrasi yang cepat dan tepat.
2. Tinjauan Pustaka
Telah banyak yang menulis dan menerapkan penggunaan sistem informasi
berbasis web dalam beberapa tahun terakhir dengan menggunakan berbagai macam
studi kasus. Penelitian terdahulu yang membahas Aplikasi Sistem Informasi
Pelayanan Administrasi Pasien Berbasis Mobile (Studi Kasus: Rumah Sakit Umum
Sawerigading Palopo, Sulawesi Selatan). Pembahasan utama dalam penelitian ini
3
adalah perancangan dan pembuatan aplikasi sistem informasi berbasis web berbasis
mobile. Aplikasi ini dirancang menggunakan metode prototyping untuk pelayanan
administrasi pasien pada rumah sakit. Implementasi program aplikasi ini dibuat
berbasiskan web dengan menggunakan WML sebagai bahasa komputasinya untuk
membangun aplikasi WAP [1].
Penelitian kedua yaitu Aplikasi Sistem Informasi Rumah Sakit Berbasis Web
Pada Sub-Sistem Farmasi Menggunakan Framework Prado. Implementasi program
aplikasi ini dibuat berbasiskan web dengan menggunakan framework Prado
berbasiskan bahasa pemrograman PHP dan MySQL sebagai basis datanya. Dalam
pembuatannya, aplikasi ini disesuaikan dengan kebutuhan rumah sakit secara umum.
Tentu saja pada awalnya dilakukan analisis kebutuhan untuk suatu sistem informasi
rumah sakit agar penyediaan informasi dapat dilakukan dengan berbasiskan web.
Aplikasi Sistem Informasi Rumah Sakit ini dapat digunakan sebagai sarana penyedia
layanan dan informasi bagi penggunanya baik untuk dokter, staf dan karyawan,
maupun pasien suatu rumah sakit dimanapun dan kapanpun mereka berada [2].
Perbedaan kedua Sistem Informasi di atas dengan penelitian ini adalah pada
penggunaan teknologi CakePHP yang telah mendukung arsitektur Model View
Controller (MVC) yang dapat membangun sistem informasi berbasis web dan
mempermudah pengembangan aplikasi dengan validasi secara cepat menggunakan
empat user utama yaitu administrator, dokter, staf dan kasir sebagai penyedia
informasi layanan pasien rawat jalan yang senantiasa diperbaharui.
Sistem Informasi Kesehatan
Sistem informasi kesehatan merupakan suatu pengelolaan informasi di seluruh
tingkat pemerintah secara sistematis dalam rangka penyelengggaraan pelayanan
kepada masyarakat. Peraturan perundang-undangan yang menyebutkan sistem
informasi kesehatan adalah Kepmenkes Nomor 004/Menkes/SK/I/2003, tentang
kebijakan dan strategi desentralisasi bidang kesehatan dan Kepmenkes Nomor
932/Menkes/SK/VIII/2002, tentang petunjuk pelaksanaan pengembangan sistem
laporan informasi kesehatan kabupaten/kota. Hanya saja dari isi kedua Kepmenkes
mengandung kelemahan dimana keduanya hanya memandang sistem informasi
kesehatan dari sudut pandang manajemen kesehatan, tidak memanfaatkan state of the
art teknologi informasi serta tidak berkaitan dengan sistem informasi nasional.
Teknologi informasi dan komunikasi juga belum dijabarkan secara detail sehingga
data yang disajikan tidak tepat dan tidak tepat waktu. Perkembangan Sistem
Informasi Rumah Sakit yang berbasis komputer (Computer Based Hospital
Information System) di Indonesia telah dimulai pada akhir dekade 80’an. Salah satu
rumah sakit yang pada waktu itu telah memanfaatkan komputer untuk mendukung
operasionalnya adalah Rumah Sakit Husada. Departemen Kesehatan dengan proyek
bantuan dari luar negeri, juga berusaha mengembangkan Sistem dengan dibantu oleh
tenaga ahli dari UGM. Namun, tampaknya komputerisasi dalam bidang rumah sakit
kurang mendapatkan hasil yang cukup memuaskan semua pihak. Ketidakberhasilan
dalam pengembangan sistem informasi tersebut, lebih disebabkan dalam segi
4
perencanaan yang kurang baik, dimana identifikasi faktor-faktor penentu keberhasilan
(critical success factors) dalam implementasi sistem informasi tersebut kurang
lengkap dan menyeluruh. Perkembangan dan perubahan yang cepat dalam segala hal
juga terjadi di dunia pelayanan kesehatan. Hal ini semata-mata karena sektor
pelayanan kesehatan merupakan bagian dari sistem yang lebih luas dalam masyarakat
dan pemerintahan dalam suatu negara, bahkan lebih jauh lagi sistem yang lebih
global. Perubahan-perubahan di negara lain dalam berbagai sektor mempunyai
dampak terhadap sistem pelayanan kesehatan. Dalam era seperti saat ini, begitu
banyak sektor kehidupan yang tidak terlepas dari peran serta dan penggunaan
teknologi komputer, terkhusus pada bidang-bidang dan lingkup pekerjaan. Semakin
hari, kemajuan teknologi komputer, baik di bidang piranti lunak maupun perangkat
keras berkembang dengan sangat pesat, di sisi lain juga berkembang ke arah yang
sangat mudah dari segi pengaplikasian dan murah dalam biaya. Solusi untuk bidang
kerja apapun akan ada cara untuk dapat dilakukan melalui media komputer, dengan
catatan bahwa pengguna juga harus terus belajar untuk mengiringi kemajuan
teknologinya. Sehingga pada akhirnya, solusi apapun teknologi yang dipakai,
sangatlah ditentukan oleh sumber daya manusia yang menggunakannya. Rumah
Sakit, sebagai salah satu institusi pelayan kesehatan masyarakat akan melayani
transaksi pasien dalam kesehariannya. Pemberian layanan dan tindakan dalam banyak
hal akan mempengaruhi kondisi dan rasa nyaman bagi pasien. Semakin cepat akan
semakin baik karena menyangkut nyawa pasien. Semakin besar jasa layanan suatu
rumah sakit, akan semakin kompleks pula jenis tindakan dan layanan yang harus
diberikan yang ke semuanya harus tetap dalam satu koordinasi terpadu. Karena selain
memberikan layanan, rumah sakit juga harus mengelola dana untuk membiayai
operasionalnya. Melihat situasi tersebut, sudah sangatlah tepat jika rumah sakit
menggunakan sisi kemajuan komputer, baik piranti lunak maupun perangkat kerasnya
dalam upayanya membantu penanganan manajemen yang sebelumnya dilakukan
secara manual [3].
Rekam Medis
Dalam penjelasan Pasal 46 ayat (1) UU Praktik Kedokteran, yang dimaksud
dengan rekam medis adalah berkas yang berisi catatan dan dokumen tentang identitas
pasien, pemeriksaan, pengobatan, tindakan dan pelayanan lain yang telah diberikan
kepada pasien. Dalam Peraturan Menteri Kesehatan Nomor
749a/Menkes/Per/XII/1989 tentang Rekam Medis dijelaskan bahwa rekam medis
adalah berkas yang berisikan catatan dan dokumen tentang identitas pasien,
pemeriksaan, pengobatan, tindakan dan pelayanan lain kepada pasien pada sarana
pelayanan kesehatan. Kedua pengertian rekam medis diatas menunjukkan perbedaan
yaitu Permenkes hanya menekankan pada sarana pelayanan kesehatan, sedangkan
dalam UU Praktik Kedokteran tidak. Ini menunjukkan pengaturan rekam medis pada
UU Praktik Kedokteran lebih luas, berlaku baik untuk sarana kesehatan maupun di
luar sarana kesehatan [4].
5
Framework CakePHP
CakePHP merupakan framework PHP yang bersifat open source (gratis).
CakePHP merupakan struktur dasar bagi para programmer dalam membuat suatu
aplikasi web. Secara umum, tujuan dari adanya CakePHP adalah untuk
memungkinkan developer untuk berkerja dalam cara yang terstruktur dan cepat, tanpa
kehilangan fleksibilitas. Dengan adanya kemampuan RAD (Rapid Application
Development), dapat memungkinkan web digunakan dan dikembangkan menjadi
aplikasi lain yang lebih kompleks. Dapat dipastikan bahwa pada masa mendatang
pembuat web akan beralih kepada teknik pemrograman OOP dan meninggalkan PHP
klasik. CakePHP menjadi salah satu framework pilihan yang memungkinkan seorang
developer web untuk membuat sebuah aplikasi secara cepat tapi tetap dapat fleksibel,
powerful dan memungkinkan untuk dikembangkan kembali menjadi aplikasi yang
lebih kompleks. CakePHP lumayan lengkap untuk disebut sebagai sebuah framework
berbasis PHP. Selain sudah menggunakan ORM (Object Relational Mapping) yang
mempermudah dalam akses basis data. CakePHP juga mendukung
penggunaan AJAX, baik AJAX dengan library seperti Jquery maupun tidak. Selain
itu fitur lain yang sangat membantu adalah adanya komponen Auth dan ACL yang
menjadi senjata utama dalam proses autentifikasi. Beberapa keuntungan lain
menggunakan CakePHP adalah [5]: (1) CakePHP memiliki komunitas yang cukup
banyak, aktif dan friendly. Seperti di irc.CakePHP.org dan masih banyak lagi; (2)
Lisensi Free dan Open Source. Dalam website resminya CakePHP menggunakan
lisensi MIT; (3) Kompatibel dengan PHP 4 dan PHP 5. Paling tidak versi stable
sekarang ini (1.3.x) masih mendukung untuk PHP 4 dan PHP 5; (4)
Scaffolding. CakePHP mempunyai fitur yang mampu men-generate prototype
aplikasi, sebelum menyusun source code-nya secara lengkap. Cukup tambahkan
variabel $scaffold pada controller, atau jika ingin menggunakan scaffold secara
permanen dapat menggunakan Cake Bake melakukan code scaffold. Pada
implementasi aplikasi akan muncul operasi CRUD (Create, Read, Update, Delete)
secara otomatis tanpa harus memakai beberapa fungsi seperti pada operasi CRUD
standar; (5) Mendukung AJAX. CakePHP sudah mendukung AJAX, bahkan sedang
dikembangkan helper untuk AJAX dengan beberapa engine javascript seperti Jquery,
Prototype; (6) Sudah mendukung Localization dan Themes. Dua fitur ini akan
mempermudah ketika membuat sebuah aplikasi enterprise yang mendukung multi
bahasa dan multi themes.
Konsep MVC dalam CakePHP
MVC merupakan pola desain perangkat lunak yang memisahkan antara data
(Model) dari tampilan (View) dan bagaimana memprosesnya (Controller). MVC
memisahkan pengembangan aplikasi menjadi beberapa bagian yaitu manipulasi data,
tampilan user interface, dan kontrol untuk memanipulasi data tersebut. Dengan
menggunakan MVC, maka pengembangan aplikasi dapat dilakukan dengan proses
yang relatif lebih mudah karena sudah terdapat pemisahan yang jelas antara bagian-
6
bagian dari aplikasi. Pengembang juga dapat dengan leluasa untuk melakukan
perubahan pada sebuah bagian tanpa mempengaruhi bagian yang lainnya.
Pola desain MVC (Model View Controller) bekerja dengan memisalkan
aplikasi menjadi tiga bagian utama yaitu: (1) Model, yang akan merepresentasikan
data pada aplikasi; (2) View, yang akan menyajikan presentasi data dari model;
(3)Controller, yang akan mengontrol aplikasi secara keseluruhan.
Gambar 1. Model MVC [6]
Gambar 1 menunjukkan kerangka konsep MVC pada CakePHP. Pada saat
client melakukan request sebuah halaman kepada server, maka akan direspon oleh
dispatcher dengan mengecek request tersebut dan mengarahkannya ke controller
yang sesuai. Controller kemudian mengeksekusi logika aplikasi, kemudian akan
meminta view untuk melakukan render form yang sesuai. Setelah client merespon
form yang diberikan kepadanya, maka request kembali ditangani controller yang
akan mengecek apakah data yang dimasukkan valid atau tidak (controller meminta
model untuk melakukannya). Jika data valid maka controller akan meminta model
untuk menyimpan data ke database. Jika model memberikan respon berhasil, maka
controller akan menyuruh view untuk menampilkan success message dan redirect ke
halaman yang telah disediakan. Hampir setiap request pada CakePHP akan mengikuti
pola ini. Dengan pola ini aplikasi yang dibuat tersusun dengan rapi, terpisahkan
antara code javascript, PHP, html, sql, dan sebagainya[6].
Secara umum, proses pengembangan sebuah website menggunakan CakePHP
dapat dilakukan dengan beberapa langkah berikut: (1) Membuat basis data; (2)
Mengkonfigurasikan file database.php pada konfigurasi CakePHP agar dapat
mengakses basis data; (3) Membuat model class sesuai dengan tabel pada basis data;
(4) Membuat controller class yang akan berinteraksi dengan view file; dan (5)
Membuat view file yang merupakan file php dengan ekstensi .ctp.
Struktur Folder CakePHP
a. Folder app: tempat untuk menyimpan aplikasi yang dibangun/dikembangkan,
terdiri dari:
(1). Folder config: tempat untuk menyimpan semua file konfigurasi yang ada
dalam aplikasi web;
(2). Folder controllers: tempat menyimpan semua file controller;
(3). Folder models: berisi file-file model yang akan berperan sebagai representasi
data, baik itu validasi maupun relasi;
7
(4). Folder plugins: digunakan apabila developer ingin mengembangkan aplikasi
kecil sebagai pendukung aplikasi utama;
(5). Folder tmp: digunakan untuk fungsi caching;
(6). Folder vendors: digunakan apabila developer melibatkan aplikasi-aplikasi
tambahan yang dikembangkan oleh developer lain;
(7). Folder views: untuk mempresentasikan dari aplikasi yang dibuat. Folder ini
mempunyai beberapa sub-folder yang digunakan untuk halaman statis
(pages), halaman dasar aplikasi (layout), dan sebagainya;
(8). Folder webroot: sebagai document root dari aplikasi yang dibuat.
b. Folder cake: berisi class-class dan pustaka dasar CakePHP. Di tempat ini fungsi-
fungsi CakePHP ditempatkan.
c. Folder vendors: untuk menyimpan file-file tambahan dan aplikasi source lain yang
digunakan bersama CakePHP.
3. Metode dan Perancangan Sistem
Metode yang digunakan dalam perancangan sistem ini adalah model
Waterfall. Model ini merupakan model yang paling banyak dipakai di dalam Software
Engineering (SE). Disebut dengan waterfall karena tahap demi tahap yang dilalui
harus menunggu selesainya tahap sebelumnya dan berjalan berurutan. Pendekatan
model ini sistematis dan urut mulai dari level kebutuhan sistem lalu menuju ke tahap
analisis, desain, coding, testing/verification, dan maintenance. Secara umum tahapan
pada model waterfall ditunjukkan pada Gambar 2 [7].
Gambar 2. Metode Waterfall [7]
Analisis Kebutuhan
Analisis kebutuhan digunakan untuk mengetahui dan menterjemahkan semua
permasalahan serta kebutuhan perangkat lunak dan kebutuhan sistem yang dibangun.
Oleh karena itu, dalam tahap ini dilakukan proses pengumpulan data untuk
membangun sistem.
Analisis Kebutuhan Sistem
Setelah melakukan penelitian secara langsung dan wawancara dengan potential
interviewees (masing-masing unit), dalam tahap ini didapatkan data kebutuhan yang
diharapkan dari sistem yang dibangun sebagai berikut: (1) Administrator: Mengatur
Analisa
Kebutuhan
Desain
Sistem
Penulisan
Kode Program
Pengujian
Program
Perawatan
Program
8
hak akses bagi user yang lain. Administrator dapat melakukan aktivitas lihat daftar
pasien, lihat daftar administrasi, input admnistrasi baru, ubah administrasi, hapus
administrasi, lihat daftar kasir, input kasir baru, ubah kasir, hapus kasir, lihat daftar
poli, input poli baru, ubah poli, hapus poli, lihat daftar dokter, input dokter baru, dan
ubah data dokter; (2) Staf Administrasi: Dapat melakukan aktivitas lihat daftar
pasien, ubah pasien, hapus pasien, cari pasien, lihat rekam medis, input rekam medis,
cetak rekam medis, pendaftaran pasien dan input pasien baru; (3)Dokter: Dokter
berperan dalam aktivitas lihat daftar pasien, cari pasien, lihat rekam medis, hapus
rekam medis, ubah rekam medis dan input rekam medis; (4) Kasir: Kasir berperan
memberikan total biaya administrasi dan pengobatan pada saat pasien akan
meninggalkan rumah sakit. Aktivitas kasir antara lain adalah lihat daftar pasien, cari
pasien dan lihat rekam medis (untuk keperluan pembuatan kuitansi pembayaran, yang
tidak ditampilkan pada kuitansi pembayaran).
Proses Bisnis
Proses bisnis menggambarkan rangkaian tugas yang harus diselesaikan menurut
aturan-aturan tertentu untuk mendapatkan suatu hasil. Sistem pelayanan administrasi
pasien di Rumah Sakit Fatima Makale, Tana Toraja Sulawesi Selatan terdiri dari dua
proses yaitu rawat inap dan rawat jalan. Pada pelayanan pasien rawat jalan sistem
yang ada merupakan sistem patent, yaitu setiap pasien yang telah melakukan
registrasi akan dilayani pada bagian administrasi, dilanjutkan ke bagian poliklinik
yang dilayani oleh dokter, kemudian menerima pengobatan sesuai diagnosa penyakit
dan penyelesaian administrasi sebelum kemudian pulang ke rumah.
Kebutuhan Hardware dan Software
Dalam perancangan sistem informasi pelayanan administrasi pasien rawat jalan
berbasis web pada Rumah Sakit Fatima ini dibutuhkan perangkat keras dan perangkat
lunak. Berikut merupakan spesifikasi perangkat keras dan perangkat lunak yang
dibutuhkan dalam perancangan sistem informasi akademik sekolah berbasis web.
Spesifikasi perangkat keras yang dibutuhkan dalam perancangan menggunakan
laptop dengan processor Intel(R) Core(TM) i3. @ 2.13 GHz 2.13 GHz, memory 2.00
GB, 17” Monitor, 250 GB HDD, DVD-ROM. Untuk spesifikasi perangkat lunak
yang digunakan untuk merancang sistem berupa XAMPP Version 1.7.3, Mozilla
Firefox 3.6, Opera Browser, Internet Explorer, Google Chrome, CakePHP.
Perancangan Sistem
Pada tahap ini perancangan sistem informasi pelayanan administrasi pasien
rawat jalan menggunakan UML (Unified Modelling Language), struktur tabel dalam
database dan relasi antar tabel.
Use Case Diagram
Use case diagram menggambarkan fungsionalitas yang diharapkan dari sebuah
sistem yang menjelaskan keseluruhan kerja sistem secara garis besar dengan
9
merepresentasikan interaksi antara aktor yang dibuat, serta memberikan gambaran
fungsi-fungsi pada sistem tersebut.
Gambar 3. Use Case Diagram Sistem
Berdasarkan use case diagram pada Gambar 3, terdapat 4 (empat) user yaitu
administrator, staf administrasi, dokter dan kasir yang dijelaskan masing-masing
sebagai berikut. Administrator; Seorang administrator mengatur hak akses bagi user
yang lain. Administrator dapat melakukan aktivitas lihat daftar pasien, lihat daftar
administrasi, input administrasi baru, ubah administrasi, hapus administrasi, lihat
daftar kasir, input kasir baru, ubah kasir, hapus kasir, lihat daftar poli, input poli baru,
ubah poli, hapus poli, lihat daftar dokter, input dokter baru, dan ubah data dokter.
Staf Administrasi; Staf administrasi dapat melakukan aktivitas lihat daftar pasien,
ubah pasien, hapus pasien, cari pasien, lihat rekam medis, input rekam medis, cetak
rekam medis, pendaftaran pasien dan input pasien baru. Dokter; Dokter berperan
dalam aktivitas lihat daftar pasien, cari pasien, lihat rekam medis, hapus rekam medis,
ubah rekam medis dan input rekam medis. Kasir; Aktivitas kasir antara lain adalah
lihat daftar pasien, cari pasien dan lihat rekam medis (untuk keperluan pembuatan
kuitansi pembayaran, yang tidak ditampilkan pada kuitansi pembayaran).
Class Diagram
Class diagram menggambarkan struktur dan deskripsi, entity, boundry dan
controller serta hubungannya satu sama lain. Aplikasi yang dibuat memiliki class
diagram seperti yang terlihat pada Gambar 6.
Input Pasien Baru
Input Kasir Baru
Hapus Kasir Ubah KasirHapus Administrasi Ubah AdministrasiInput Administrasi Baru
Hapus Pasien
Cari PasienUbah Pasien
Input Rekam Medis
Ubah Dokter Input Dokter Baru
Hapus Dokter
Lihat Rekam Medis
<<include>>
Ubah Rekam Medis Hapus Rekam Medis
<<include>>
<<include>>
Cetak Kuitansi
Pendaftaran Pasien
<<include>>
Input Pembayaran
<<include>>
Cetak Rekam Medis
<<include>>
Aktor [Administrasi]
Aktor [Dokter]
Aktor [Kasir]
Input Poly Baru
Ubah Poly
Hapus Poly
Lihat Daftar Administrasi
<<extend>><<extend>><<extend>>
Lihat Daftar Kasir
<<extend>> <<extend>> <<extend>>
Lihat Daftar Pasien<<extend>>
<<extend>>
<<extend>>
<<extend>>
Aktor
[Administrator]
Lihat Daftar Poly
<<include>>
<<include>>
<<include>>
Lihat Daftar Dokter
<<extend>>
<<extend>>
<<extend>>
<<extend>>
10
Gambar 4. Class Diagram Aplikasi
Pada class diagram sistem terdapat 8 entity yaitu ruangans, polis, kasirs,
administrators, administrasis, rekammediss, pasiens dan dokters. Ruangans adalah
entity yang menampung field-field data nama ruangan, Polis untuk data nama poli,
Kasirs untuk data user kasir, Administrators untuk data user administrator,
Administrasis untuk data user staf administrasi, Rekammediss untuk data rekam
medis pasien dan Dokters untuk data user dokter, yang juga sekaligus menampung
fungsi-fungsi manipulasi database sesuai hak akses masing-masing user.
4. Hasil Pembahasan dan Implementasi
Implementasi Model View Controller (MVC)
Arsitektur MVC yang telah dibuat dapat dilihat pada Gambar 5.
11
Gambar 5. MVC pada Aplikasi
Cara kerja arsitektur MVC pada framework CakePHP yang telah dibuat dapat
dijelaskan menggunakan Gambar 6.
Gambar 6. Cara Kerja MVC
Gambar 6 menjelaskan tentang struktur kerja CakePHP. Pertama kali, user
akan melakukan request yang ditangani oleh controller. Pada controller, terdapat
beragam method yang akan menangani request dari user. Controller juga bertugas
untuk mengambil data dari basis data melalui model class. Model class akan
memberikan data yang relevan kepada controller dan kemudian memberikan data
tersebut kepada view file.
Konfigurasi Database
CakePHP menyediakan file konfigurasi database untuk menghubungkan
aplikasi web dengan database yang sudah tersedia dalam sub menu CakePHP. Dalam
12
folder C:\xampp\htdocs\rekam-medis.com\app\config terdapat file dengan nama
database.php.default. Konfigurasi yang dilakukan dapat dilihat pada Kode Program 1.
Kode Program 1. Konfigurasi Database
File tersebut disimpan dengan nama yang berbeda yaitu database.php. Pada
baris (3) digunakan mySQL sebagai database dan baris (5) menggunakan localhost
karena server menggunakan menggunakan server lokal. Untuk pengaturan login dan
password pada baris (6) dan baris (7) diisi dengan user karena ada 4 user yang telah
dibuat masing-masing dengan password setiap user. Database yang digunakan sesuai
dengan nama dari database yang telah dibuat sebelumnya.
Model
Dalam membangun web pada CakePHP, membuat model adalah langkah
pertama yang harus dilakukan karena berhubungan dengan database. Tabel yang
digunakan adalah kedelapan tabel pada database yang telah dibuat sebelumnya.
Penulisan dalam setiap pembuatan model bersifat singular (tunggal), sehingga
penulisan tabel misalnya tabel pasien menjadi pasien walaupun dalam tabel di
database bernama pasiens. Pada Kode Program 2 merupakan contoh script model
untuk tabel pasien yang disimpan sebagai Pasien.php ke dalam folder \app\model\.
Kode Program 2. Source Code Pasien.php
1. class DATABASE_CONFIG {
2. public $default = array(
3. 'datasource' => 'Database/Mysql',
4. 'persistent' => false,
5. 'host' => 'localhost',
6. 'login' => 'user',
7. 'password' => 'password',
8. 'database' => 'database_name',
9. 'prefix' => '',
10. //'encoding' => 'utf8',
11. );
12. public $test = array(
13. 'datasource' => 'Database/Mysql',
14. 'persistent' => false,
15. 'host' => 'localhost',
16. 'login' => 'user',
17. 'password' => 'password',
18. 'database' => 'test_database_name',
19. 'prefix' => '',
20. //'encoding' => 'utf8',
21. );
22. }
1. class Pasien extends AppModel{
2. //put your code here
3. public $name = 'Pasien';
4. public $primaryKey = 'idpasien';
5. var $validate = array(
6. 'kode' => array(
7. 'notEmpty' => array('rule'=>'notEmpty','message'=>'** masih kosong'),
8. 'isUnique' => array('rule'=>'isUnique','message'=>'** sudah pernah dientri')
9. ),
10. 'nama' => array('rule'=>'notEmpty','message'=>'** masih kosong'), 11. 'tgllahir' => array('rule'=>'notEmpty','message'=>'** masih kosong') 12. ); 13. function beforeSave($options = array()) { 14. if(!isset($this->data['Pasien']['idpasien'])){ 15. $field = $this-
>find('first',array('fields'=>'IFNULL(MAX(RIGHT(idpasien,3)),0)+1 AS id'));
16. $id = $field[0]['id']; 17. $l = strlen($id); 18. for($i=$l;$i<=2;$i++) 19. $id= '0'.$id;
13
Pada Kode Program 2 perintah baris (1) adalah script untuk menciptakan
kelas Pasien. Baris perintah (7) sampai perintah (10) merupakan message setelah
operasi. Untuk script pada baris (25) adalah untuk menentukan validasi input.
Selanjutnya pada baris berikutnya pada perintah (26) untuk melakukan cek apakah
diisi atau tidak. Untuk baris perintah (32) dan (34) memanggil seluruh data dari tabel
pasien sesuai primary key yang ditentukan.
Controller
Setelah model, langkah selanjutnya adalah membuat controller yang berfungsi
untuk mengatur proses keluar masuknya data ke dalam database atau pengolahan
data. Berbeda dengan model, penamaan pada controller bersifat plural (lebih dari satu
dalam bahasa Inggris) karena memuat banyak data yang diolah misalnya controller
untuk pasien menjadi PasiensController yang disimpan dengan
PasiensController.php ke dalam folder app\controller\. Kode Program 3
merupakan contoh script PasiensController.
Kode Program 3. Source Code PasiensController.php
1. class PasiensController extends AppController{
2. //put your code here
3. public $name = "Pasiens";
4. var $layout = "back_administrator";
5. var $curr =
array('a'=>'select','b'=>'select','c'=>'select','d'=>'select','e'=>'select','f'
=>'select','g'=>'select');
6. var $subcurr = array('a'=>'','b'=>'','c'=>'','d'=>'');
7. public function index(){}
8. public function daftar(){
9. $this->subcurr['a'] = 'class="sub_show"';
10. $this->set('subcurr',$this->subcurr); 11. $this->curr['f'] = 'current'; 12. $this->set('curr',$this->curr); 13. $data = $this->Pasien->find('all'); 14. $this->set('data',$data); 15. $this->set('title','Daftar Pasien'); 16. if($this->Session->read('as')=='dokter') 17. $this->render('daftar_dokter'); 18. elseif($this->Session->read('as')=='kasir') 19. $this->render('daftar_kasir'); 20. elseif($this->Session->read('as')=='administrasi') 21. $this->render('daftar_administrasi'); 22. elseif($this->Session->read('as')=='administrator') 23. $this->render('daftar_kasir'); 24. else 25. $this->redirect(array('controller'=>'halamans','action'=>'index')); 26. }
27. public function tambah(){ 28. $this->subcurr['b'] = 'class="sub_show"'; 29. $this->set('subcurr',$this->subcurr); 30. $this->curr['f'] = 'current'; 31. $this->set('curr',$this->curr); 32. $this->set('title','Tambah Pasien');
25. function beforeSave($options = array()) { 26. if(!isset($this->data['Pasien']['idpasien'])){ 27. $field = $this-
>find('first',array('fields'=>'IFNULL(MAX(RIGHT(idpasien,3)),0)+1 AS id'));
28. $id = $field[0]['id']; 29. $l = strlen($id); 30. for($i=$l;$i<=2;$i++) 31. $id= '0'.$id;
32. $this->data['Pasien']['idpasien']=$id; 33. $this->data['Pasien']['tglregistrasi'] = date('Ymd'); 34. } 35. }
36. }
14
Kode Program 3 merupakan Source Code PasiensController berfungsi
sebagai controller untuk mengatur aliran data ke dalam database sesuai hak akses
user yang mengakses web. Pada perintah (1) dimana sebuah class dibuat untuk
mengontrol pengolahan data web ke dalam tabel Pasien. Perintah pada baris (7)
merupakan script yang ditampilkan pertama kali pada saat membuka browser dimana
pada halaman index akan ditampilkan seluruh data yang terdapat pada tabel Pasiens.
Perintah (8) sampai perintah (23) adalah menentukan halaman yang akan ditampilkan
sesuai hak akses dari keempat user seperti pada baris (16) sampai (17), apabila user
yang melakukan login adalah dokter maka akan menampilkan halaman view
daftar_dokter. Pada baris (25) controller akan mengembalikan ke posisi index dimana
data ditampilkan kepada semua client.
27. public function tambah(){ 28. $this->subcurr['b'] = 'class="sub_show"'; 29. $this->set('subcurr',$this->subcurr); 30. $this->curr['f'] = 'current'; 31. $this->set('curr',$this->curr); 32. $this->set('title','Tambah Pasien'); 33. if($this->request->is('post')){ 34. if($this->Pasien->save($this->data)){ 35. $this->Session->setFlash('Data berhasil disimpan', 'flash_ok'); 36. $this->redirect($this->referer()); 37. } 38. else 39. $this->Session->setFlash('Data gagal disimpan', 'flash_er'); 40. } 41. $this->render('tambah'); 42. } 43. public function ubah($idpasien=""){ 44. $this->subcurr['c'] = 'class="sub_show"'; 45. $this->set('subcurr',$this->subcurr); 46. $this->curr['f'] = 'current'; 47. $this->set('curr',$this->curr); 48. $this->set('title','Ubah Pasien'); 49. if($this->request->is('put')){ 50. if($this->Pasien->save($this->data)){ 51. $this->Session->setFlash('Data berhasil disimpan', 'flash_ok'); 52. } 53. else 54. $this->Session->setFlash('Data gagal disimpan', 'flash_er'); 55. } 56. if(!empty($idpasien)){ 57. $data = $this->Pasien->findByIdpasien($idpasien); 58. $this->request->data = $data; 59. $this->set('idpasien',$idpasien); 60. } 61. else 62. $this->Session->setFlash('Anda belum memilih pasien, silahkan memilih didaftar
pasien', 'flash_er');
63. $this->render('ubah'); 64. } 65. public function hapus($idpasien){ 66. if($this->request->is('post')){ 67. $this->Pasien->delete($idpasien); 68. $this->Session->setFlash('Data berhasil dihapus','flash_ok'); 69. $this->redirect($this->referer()); 70. } 71. } 72. public function cari(){ 73. $this->subcurr['d'] = 'class="sub_show"'; 74. $this->set('subcurr',$this->subcurr); 75. $this->curr['f'] = 'current'; 76. $this->set('curr',$this->curr); 77. $cari = ""; 78. if($this->request->is('post')){ 79. $cari = $this->data['Pasien']['cari']; 80. $data = $this->Pasien->find('all',array('conditions'=>array('kode LIKE
'=>'%'.$cari.'%')));
43. public function ubah($idpasien=""){ 44. $this->subcurr['c'] = 'class="sub_show"'; 45. $this->set('subcurr',$this->subcurr); 46. $this->curr['f'] = 'current'; 47. $this->set('curr',$this->curr); 48. $this->set('title','Ubah Pasien'); 49. if($this->request->is('put')){ 50. if($this->Pasien->save($this->data)){ 51. $this->Session->setFlash('Data berhasil disimpan', 'flash_ok'); 52. } 53. else 54. $this->Session->setFlash('Data gagal disimpan', 'flash_er'); 55. } 56. if(!empty($idpasien)){ 57. $data = $this->Pasien->findByIdpasien($idpasien); 58. $this->request->data = $data; 59. $this->set('idpasien',$idpasien); 60. } 61. else 62. $this->Session->setFlash('Anda belum memilih pasien, silahkan memilih didaftar
pasien', 'flash_er');
63. $this->render('ubah'); 64. } 65. public function hapus($idpasien){ 66. if($this->request->is('post')){ 67. $this->Pasien->delete($idpasien); 68. $this->Session->setFlash('Data berhasil dihapus','flash_ok'); 69. $this->redirect($this->referer()); 70. } 71. } 72. public function cari(){ 73. $this->subcurr['d'] = 'class="sub_show"'; 74. $this->set('subcurr',$this->subcurr); 75. $this->curr['f'] = 'current'; 76. $this->set('curr',$this->curr); 77. $cari = ""; 78. if($this->request->is('post')){ 79. $cari = $this->data['Pasien']['cari'];
15
1.2.1.4 View
Pada baris (27) sampai (34) merupakan script untuk keperluan menambah
data. Selanjutnya pada baris (34) controller akan memeriksa apakah request yang
dilakukan adalah menambah data dan akan disimpan ke dalam tabel Pasien pada baris
(35). Kemudian akan ditampilkan pemberitahuan bahwa data berhasil disimpan atau
tidak pada baris perintah (35) sampai perintah (39) dan selanjutnya ditampilkan pada
halaman view tambah. Kasus serupa pada manipulasi database untuk ubah pasien,
hapus pasien dan pencarian pasien pada baris perintah (43) sampai baris perintah
(90). Pada perintah (92) sampai perintah (95) merupakan fungsi yang pertama kali
dieksekusi untuk menentukan hak akses user apabila belum melakukan login, maka
akan redirect ke halaman login pada perintah (94).
View
Setelah model dan controller selesai dibuat, langkah selanjutnya adalam
membuat view sebagai perantara untuk dapat berinteraksi dengan user. Sebagai
contoh terlebih dahulu folder dibuat pada path directory \app\view\Pasiens.
Dalam folder tersebut terdapat file untuk manipulasi database seperti tambah, ubah
dan pencarian pasien. Operasi hapus pasien telah terintegrasi secara otomatis melalui
pemanggilan controller global AppController pada folder Controller.
65. public function cari(){ 66. $this->subcurr['d'] = 'class="sub_show"'; 67. $this->set('subcurr',$this->subcurr); 68. $this->curr['f'] = 'current'; 69. $this->set('curr',$this->curr); 70. $cari = ""; 71. if($this->request->is('post')){ 72. $cari = $this->data['Pasien']['cari']; 73. $data = $this->Pasien->find('all',array('conditions'=>array('kode LIKE
'=>'%'.$cari.'%')));
74. $this->set('data',$data); 75. $this->set('title','Pencarian Pasien : "'.$cari.'"'); 76. if($this->Session->read('as')=='dokter') 77. $this->render('daftar_dokter'); 78. elseif($this->Session->read('as')=='kasir') 79. $this->render('daftar_kasir'); 80. elseif($this->Session->read('as')=='administrasi') 81. $this->render('daftar_kasir'); 82. elseif($this->Session->read('as')=='administrator') 83. $this->render('daftar_kasir'); 84. else 85. $this->redirect(array('controller'=>'halamans','action'=>'index')); 86. } 87. else{ 88. $this->set('title','Pencarian Pasien'); 89. $this->render('pencarian'); 90. } 91. } 92. public function beforeFilter(){ 93. if(!$this->Session->read('login')){ 94. $this->redirect(array('controller'=>'halamans','action'=>'login')); 95. } 96. }
97. }
16
- Operasi Create (Menambah Data)
Ekstensi file untuk file dalam folder view adalah .ctp yang berisi tag HTML
dan CSS untuk keperluan tampilan. Untuk tampilan dari tambah pasien pada URL
http://localhost/rekam-medis.com/pasiens/tambah/, akan tampil form tambah pasien
seperti pada Gambar 7.
Gambar 7. Tampilan Halaman Tambah dan Ubah Pasien
- Operasi Read (Membaca Data)
Gambar 8. Tampilan Halaman Daftar Pasien
- Operasi Update (Mengubah Data)
Untuk operasi update atau ubah pasien sepenuhnya sama dengan tambah
pasien yang ada pada Gambar 7. Hanya saja record yang telah ada sebelumnya
ditampilkan pada tampilan tersebut.
- Operasi Delete (Menghapus Data)
Untuk operasi hapus data telah terintegrasi secara otomatis melalu
pemanggilan pada controller global yaitu extends AppController dan akan muncul
pada kolom proses tampilan data.
17
5. Pengujian Program
Pengujian Pada Web Browser
Pengujian Aplikasi ini dilakukan dengan menggunakan empat browser yaitu
Mozilla Firefox, Google Chrome, Internet Explorer dan Opera Browser dengan
localhost menggunakan XAMPP for windows. Hasil pengujian aplikasi dapat dilihat
pada Tabel 1.
Tabel 1. Hasil Pengujian Pada Web Browser
Web Browser
Hasil
Mozilla
Firefox
Chrome
Internet
Explore
Opera
Browser
Page Login Ok Ok Ok Ok
Page Home User Ok Ok Ok Ok
Page Input, Ubah dan Delete untuk Administrator Ok Ok Ok Ok
Page Input, Ubah dan Delete untuk Dokter Ok Ok Ok Ok
Page Input, Ubah dan Delete untuk Adminsitrasi Ok Ok Ok Ok
Page Input, Ubah dan Delete untuk Kasir Ok Ok Ok Ok
Tabel 1 menunjukkan bahwa aplikasi berjalan normal pada semua jenis
aplikasi web browser, hal tersebut berarti bahwa dari keempat jenis web browser
yang diuji dapat menjalankan aplikasi sistem informasi yang mendukung framework
CakePHP.
Performance Analysis
Adapun pengujian performance analysis dilakukan dengan maksud untuk
mengetahui performa aplikasi web sebelum berjalan secara live pada jaringan
internetwork. Hasil pengujian performance analysis menggunakan software
Webserver Stress Tool 7 dengan simulasi 4 virtual user, terlihat dalam grafik pada
Gambar 9 dan Gambar 10.
Gambar 9. Grafik Protocol Times untuk Semua URLs
Protocol Times for all URLs
User Simulation: ramp test with up to 4 simultaneous users - 15 seconds between clicks (Random)
Test Ty pe: RAMP (run test f or 1 minutes)
Click Timegfedcb Time to First Bytegfedcb Time to Connectgfedcb Time for DNSgfedcb Time for local socketgfedcb
Time Since Start of Test [s]5550454035302520151050
Active Users0 1 1 2 2 3 3 3 4 4 4 4
Tim
e [
ms]
5,500
5,000
4,500
4,000
3,500
3,000
2,500
2,000
1,500
1,000
500
0
18
Pada uji waktu protocol untuk semua URL terdapat time to first byte dimana
user menggunakan waktu meminta request dan menerima byte pertama data dari
server. Pada Gambar 9 terlihat waktu tersebut tidak melewati 500 ms. Waktu terbesar
yang digunakan rata-rata 90 ms, begitu pula dengan time for local socket dan time to
connect.
Gambar 10. Grafik Click Time dan Errors
Pada uji Click Time Gambar 10 percobaan untuk empat user yang membuka
link web setiap 15 detik. Pada grafik tersebut terlihat bahwa aplikasi berjalan tanpa
adanya error yang terjadi dengan click time maksimum pada 5,500 ms. Hasil
pengujian sistem pada Gambar 9 dan Gambar 10 menunjukkan bahwa sistem yang
dibangun telah memenuhi uji performa dengan baik karena hasil pengujian
memperlihatkan hasil yang masih dalam batas toleransi sehingga web aplikasi
tersebut layak untuk digunakan dan diterapkan.
Pengujian Aplikasi pada User
Pengujian aplikasi pada user dilakukan untuk melihat sejauh mana aplikasi ini
dapat membantu user dalam menggunakan aplikasi pelayanan administrasi pasien
rawat jalan di Rumah Sakit Fatima, serta mengetahui tingkat kemudahan oleh user
dalam menjalankan aplikasi yang telah dibuat. Mengingat bahwa aplikasi ini lebih
difokuskan untuk menunjang kinerja staf Rumah Sakit Fatima Makale, maka
responden yang dipilih dalam pengujian aplikasi ini diambil dari pegawai Rumah
Sakit Fatima sebanyak 10 responden yaitu 3 dokter, 6 staf administrasi dan 1 kasir.
Tabel 2. Hasil Pengujian Aplikasi Pada User
User Aplikasi
Informasi Tampilan Kekurangan Kemudahan Kegunaan
1 1 2 Kurang informasi rumah sakit 1 1
2 2 2 Daftar rekam medis kurang teratur 1 2
3 2 1 Program harus disesuaikan dengan
kebijakan dengan rumah sakit lagi 2 2
4 2 1 Kurang informatif 1 1
5 2 2 - 1 1
6 1 1 Tidak ada informasi profil Rumah Sakit 1 1
Req-Times: gfedcbErrors: gfedcb
Click Times and Errors (per URL)
User Simulation: ramp test with up to 4 simultaneous users - 15 seconds between clicks (Random)
Test Ty pe: RAMP (run test f or 1 minutes)
Time Since Start of Test [s]5550454035302520151050
Active Users0 1 1 2 2 3 3 3 4 4 4 4
Avera
ge R
equest
Tim
e [
ms]
5,500
5,000
4,500
4,000
3,500
3,000
2,500
2,000
1,500
1,000
500
Erro
rs [%]
0
0
19
7 1 2 Nama pasien pada judul untuk daftar
rekam medis 2 1
8 1 1 Rumit untuk yang terbiasa dengan sistem
manual 2 1
9 2 2 - 2 2
10 2 2 Kurang familiar dengan sistem website 1 1
Keterangan Tabel 2 :
1. Kolom informasi, tampilan, kemudahan dan informasi aplikasi diisi dengan
menggunakan skala 1 – 2.
2. Kolom kekurangan diisi dengan komentar singkat tentang kelemahan/kekurangan
aplikasi ini.
3. Skala 1- 2 (1 = Baik, 2 = Cukup).
Tabel 2 memperlihatkan hasil pengujian pada beberapa user, berdasarkan hasil
pengujian tersebut, dilakukan perhitungan rata-rata dari setiap kolom yang telah diisi
user, maka hasil dari penerapan teknologi ini menunjukkan informasi aplikasi baik,
tampilan aplikasi menunjukkan hasil cukup, kemudahan aplikasi menunjukkan hasil
baik dan pada kegunaan untuk keseluruhan aplikasi ini menunjukkan hasil yang baik.
Sehingga dapat disimpulkan bahwa aplikasi ini temasuk dalam ketegori baik.
6. Simpulan
Aplikasi sistem informasi ini digunakan untuk mengelola data pasien rawat
jalan bagi pasien Rumah Sakit Fatima Makale Kabupaten Tana Toraja dengan
menggunakan teknologi CakePHP yang dalam pembangunan aplikasinya
menggunakan XAMPP dan web browser Mozilla Firefox sebagai media untuk
pengujian aplikasi web ini. Keuntungan pada sistem ini adalah dengan penggunaan
CakePHP maka sistem informasi pelayanan administrasi pasien rawat jalan berbasis
web yang telah dibangun dapat mendukung dan mempermudah pengembangan
aplikasi dengan validasi secara cepat, dimana rumah sakit adalah salah satu instansi
dengan keperluan pengerjaan administrasi yang cepat dan tepat. Adapun kekurangan
dari CakePHP adalah terlalu banyak aturan dan kurang fleksibel dalam pembangunan
aplikasi, misalnya saja case sensitive dimana penamaan file harus benar-benar sama.
Diharapkan dengan adanya aplikasi ini, dapat membantu pengguna yaitu Staf Rumah
Sakit Fatima Makale Tana Toraja dalam memudahkan proses pelayanan pasien rawat
jalan dalam hal menjalankan fungsi load data, rekam medis dan kegiatan untuk
menambah, edit dan menghapus data informasi pasien rawat jalan sesuai fungsi
masing-masing user. Sedangkan pasien rawat jalan yang menjalani perawatan
menerima output dari rumah sakit berupa informasi pelayanan kesehatan yang telah
diterima. Saran pengembangan aplikasi ke depan adalah dengan menggabungkan
semua kegiatan yang ada di rumah sakit ke dalam sistem informasi berbasis website.
Contohnya saja untuk pasien rawat inap yang membutuhkan record yang banyak. Di
20
samping itu masih banyak hal-hal yang bisa dimasukkan ke dalam website termasuk
diagnosa dari laboratorium yang membutuhkan waktu yang lama dan data yang
akurat.
6. Daftar Pustaka
[1] Tanggulungan, Y., 2010. Perancangan Aplikasi Sistem Informasi Pelayanan
Administrasi Pasien Berbasis Mobile (Studi Kasus: Rumah Sakit Umum
Sawerigading Palopo, Sulawesi Selatan. Salatiga: Perpustakaan Universitas
Kristen Satya Wacana.
[2] Syamhariyanto, F.N., 2008. Aplikasi Sistem Informasi Rumah Sakit Berbasis
Web Pada Sub-Sistem Farmasi Menggunakan Framework Prado. Semarang:
Teknologi Elektro (Vol.7 No. 1) Universitas Diponegoro.
[3] Sanjoyo, Raden., 2006. Sistem Informasi Kesehatan, http://www.scribd.com.
Diakses tanggal 20 Mei 2011.
[4] Sjamsuhidajat., 2006. Manual Rekam Medis. Jakarta. Konsil Kedokteran
Indonesia.
[5] Komunitas CakePHP Indonesia, http://idcakephp.org. Diakses tanggal 20 Mei
2012.
[6] Saputra, Agus., 2011. Teknik Cepat Membangun Aplikasi Web Dengan
Framework CakePHP, Yogyakarta: Lokomedia.
[7] Pressman, S.Roger., 2002. Rekayasa Perangkat Lunak: Pendekatan Praktis
(Buku Satu), Yogyakarta :ANDI.