2
BAB II
LANDASAN TEORI 2.1
Komunikasi Menurut Kamus Besar Bahasa Indonesia, pengertian dari komunikasi adalah
pengiriman dan penerimaan pesan atau berita antara dua orang atau lebih sehingga pesan yang dimaksud dapat dipahami. Cara manusia berkomunikasi satu sama lain yang kita temui saat ini, dimana manusia memiliki bermacam cara untuk terhubung satu sama lain; karena ketersediaan alat-alat komunikasi yang memungkinkan mereka untuk mempunyai berbagai alternatif menurut kebutuhan maupun keinginan yang paling sesuai dengan situasi dan kondisi yang ada, bukanlah melalui proses satu atau dua tahun atau bahkan sepuluh tahun saja, tetapi cara manusia mengatasi kebutuhan dalam berkomunikasi tersebut telah melalui masa evolusi yang begitu panjang. Perkembangan teknologi kian hari kian berkembang, hal ini terbukti dengan banyak bermunculannya perangkat-perangkat kerja maupun sehari-hari yang disebut perangkat berteknologi tinggi. Perkembangan teknologi ini pun tidak disia-siakan oleh para produsen perangkat telekomunikasi mobile phone, yang menambahkan teknologiteknologi terbaru dalam perangkat buatan mereka. Perkembangan teknologi informasi telah mengalami evolusi, yaitu dimulai dari era komputerisasi, era teknologi informasi, era sistem informasi hingga era globalisasi informasi.
2.2
Kolaborasi Istilah kolaborasi biasanya digunakan untuk menjelaskan praktik dua pihak atau
lebih untuk mencapai tujuan bersama dan melibatkan proses kerja masing - masing maupun kerja bersama dalam mencapai tujuan bersama tersebut. Motivasi utamanya biasanya adalah memperoleh hasil-hasil kolektif yang tidak mungkin dicapai jika masing-masing pihak bekerja sendiri-sendiri. Selain seperti dalam kerjasama, para pihak berkolaborasi dengan harapan mendapatkan hasil-hasil yang inovatif, terobosan, dan/atau istimewa/luar biasa, serta prestasi kolektif yang memuaskan. Kolaborasi biasanya dilakukan agar memungkinkan muncul/berkembangnya saling pengertian dan realisasi visi bersama dalam lingkungan dan sistem yang kompleks. Kolaborasi pada dasarnya adalah bentuk kerjasama, interaksi, kompromi beberapa elemen yang terkait baik individu maupun lembaga dan atau pihak-pihak yang terlibat secara langsung dan tidak langsung yang menerima akibat dan manfaat. Nilai-nilai yang
6
7
mendasari sebuah kolaborasi adalah tujuan yang sama, kesamaan persepsi, kemauan untuk berproses, saling memberikan manfaat, kejujuran, kasih sayang serta berbasis masyarakat. Konsep kolaborasi didefinisikan juga digunakan untuk menggambarkan suatu hubungan kerja sama yang dilakukan pihak tertentu. Sekian banyak pengertian dikemukakan dengan sudut pandang beragam namun didasari prinsip yang sama yaitu mengenai kebersamaan, kerja sama, berbagi tugas, kesetaraan, dan tanggung jawab. Praktik kolaborasi mengganti pendekatan pengelompokan hirarkis dengan pendekatan yang mendorong interaksi antara sesama anggota. Model hirarkis menekankan komunikasi satu arah, terdapat tokoh yang dominan. Model praktik kolaboratif menekankan komunikasi dua arah, tetapi tetap menempatkan salah satu tokoh pada posisi utama. Model melingkar menekankan kontinuitas, kondisi timbal balik satu dengan yang lain dan tak ada satu anggota stakeholder yang melakukan kolaborasi mendominasi terus menerus.
2.3
Interaksi Manusia dan Komputer (IMK) Berdasarkan Shneiderman dan Plaisant (2010), Interaksi Manusia dan Komputer
(IMK) adalah ilmu yang mempelajari bagaimana cara merancang interface yang baik agar efisien pada saat digunakan oleh user. Ada dua aturan yang dipakai yaitu delapan aturan emas yang biasa dikenal dengan 8 golden rules dan juga lima faktor manusia terukur.
2.3.1
Delapan Aturan Emas Shneiderman dan Plaisant (2010) mengemukakan 8 (delapan) aturan yang dapat digunakan sebagai pedoman dasar yang baik dalam merancang sebuah user interface. Delapan aturan tersebut, yaitu: 1. Konsistensi Konsistensi sangat dibutuhkan pada situasi yang sama, seperti pada penggunaan warna pada menu, font hingga urutan tindakan. 2. Melayani kebutuhan secara universal Dengan menyadari kebutuhan user yang beragam, rancangan interface yang dibuat harus bisa memfasilitasi perubahan konten sesuai kebutuhan user. Perbedaan tingkatan user, perbedaan umur, keterbatasan penggunaan indera user dan ragam teknologi yang ada membuat requirement yang dibutuhkan semakin bertambah.
8
3. Memberi feedback yang informatif Setiap tindakan yang dilakukan user perlu diberi feedback dari sistem tentang akibat dari aksi yang telah dilakukan. 4. Merancang dialog untuk hasil akhir Urutan dari aksi harus dikelompokkan menjadi bagian awal, tengah dan akhir. Feedback yang informatif pada hasil akhir akan membuat user merasa puas dan lega dari aksi yang telah dilakukannya. 5. Memberikan penanganan dan pencegahan yang sederhana Rancangan sistem yang telah dibuat tidak memperbolehkan user melakukan kesalahan. Seperti contoh, tidak memperbolehkan melakukan input data alfabet ke dalam data untuk numerik. Jika terjadi kesalahan, interface harus mendeteksi dan memberikan instruksi yang sederhana, konstruktif dan spesifik untuk pemulihan. 6. Memperbolehkan pengembalian aksi Aksi yang sudah dilakukan harus dapat dikembalikan. Hal ini dapat mengurangi rasa cemas karena mengetahui situasi error dapat dikembalikan pada situasi sebelum terjadi error. 7. Mendukung pengendalian internal locus User mengendalikan sistem dan sistem merespons terhadap aksi yang dilakukan user. Rancangan dari sistem lebih condong kepada user sebagai inisiator dibanding menjadi responden. 8. Mengurangi beban ingatan jangka pendek Sistem yang diberikan harus sederhana, hal ini disebabkan oleh ingatan manusia yang terbatas. Cara mengatasinya seperti membuat interface yang lebih sederhana dan memberikan pelatihan yang cukup untuk kode, daya ingat serta urutan aksi.
2.3.2
Lima Faktor Manusia Terukur Shneiderman dan Plaisant (2010) menyatakan bahwa dalam merancang sebuah sistem yang ramah (friendly) untuk user maka harus memperhatikan 5 (lima) faktor sebagai berikut: 1. Waktu belajar Merancang tampilan yang dapat dipelajari dengan cepat supaya user dapat mempelajari dengan cepat. 2. Kecepatan kinerja
9
Merancang aplikasi dengan kecepatan yang tinggi sehingga user bisa menggunakan aplikasi tersebut dengan lancar. 3. Tingkat kesalahan Seberapa banyak kesalahan yang dilakukan oleh user dan kesalahankesalahan seperti apa yang bisa terjadi saat user menggunakan aplikasi tersebut. 4. Daya ingat Kemampuan user mempertahankan pengetahuannya setelah jangka waktu tertentu. 5. Kepuasan subjektif Kepuasan user terhadap berbagai aspek sistem yang dicapai dengan melakukan survei kepada beberapa user untuk mendapatkan tingkat kepuasan.
2.4
Unified Modelling Language (UML) Menurut Whitten et al. (2007: 408) ada suatu konvensi pemodelan yang digunakan
untuk menentukan atau menggambarkan sebuah sistem piranti lunak yang terkait dengan objek. UML terdiri dari beberapa tipe diagram antara lain :
2.4.1
Use Case Diagram Menurut Whitten et al. (2007: 271), use case diagram adalah diagram yang menggambarkan interaksi antara sistem, eksternal sistem, dan pengguna. Diagram ini menjelaskan siapa saja yang akan menggunakan sistem tersebut dan bagaimana cara pengguna berinteraksi dengan sistem.
System Use Case 1
Actor 1
Actor 2 Use Case 2
Use Case 3
Actor 3
Gambar 2.1 Use Case Diagram (Sumber : Whitten et al, 2007: 246)
a. Use Case
10
Pemodelan use case mengidentifikasi dan menggambarkan fungsifungsi sistem dengan menggunakan alat yang disebut use case. Use case menggambarkan fungsi-fungsi sistem dari sudut pandang pengguna eksternal dan dalam sebuah cara dan terminologi yang mereka pahami. Use case disajikan secara grafis dengan elips horizontal dengan nama use case muncul di atas bawah, bawah, atau di dalam elips tersebut. Sebuah use case merepresentasikan satu tujuan tunggal dari sistem dan menggambarkan satu rangkaian kegiatan dan interaksi pengguna untuk mencapai tujuan.
Use Case Symbol
Gambar 2.2 Use Case Symbol (Sumber Whitten et.al, 2007: 246)
b. Aktor Use case diawali atau dipicu oleh pengguna eksternal yang dinamakan actor/pelaku. Actor menginisialisasi kegiatan sistem, yakni sebuah use case, dengan maksud menyelesaikan beberapa proses bisnis yang menghasilkan sesuatu yang dapat diukur. Seorang actor ditampilkan secara grafis menyerupai manusia dengan nama peran yang dimainkan oleh actor tersebut pada bagian bawah. Ada tiga macam tipe aktor yang digunakan dalam perancangan sistem ini: 1. Primary business actor (Pelaku bisnis utama), stakeholder yang terutama mendapatkan keuntungan dari pelaksanaan use case dengan menerima nilai yang terukur atau terobservasi. 2. Primary system actor (Pelaku sistem utama), stakeholder yang secara langsung berhadapan dengan sistem untuk menginisialisasi atau memicu kegiatan atau sistem. Pelaku sistem utama dapat berinteraksi dengan para pelaku bisnis utama untuk menggunakan sistem aktual. 3. External receiving actor (Pelaku penerima eksternal), stakeholder yang bukan pelaku utama, tetapi menerima nilai yang terukur atau output dari use case.
11
Actor
Gambar 2.3 Aktor (Sumber Whitten et.al, 2007: 247)
c. Hubungan (Relationship) Pada diagram use case, hubungan digambarkan sebagai sebuah garis antara dua simbol. Pemaknaan hubungan berbeda-beda tergantung bagaimana garis tersebut digambar dan tipe simbol apa yang digunakan untuk menghubungkan garis tersebut. Berikut ini merupakan hubungan yang ada pada sebuah diagram use case: 1. Gabungan (Association) Association adalah hubungan antara pelaku/aktor dengan use case dimana
terjadi
interaksi
di
antara
mereka.
Association
digambarkan sebagai satu garis lurus yang menghubungkan pelaku dan use case. Association dapat berbentuk dua arah atau satu arah. 2. Use Case Narrative Menurut Whitten, Bentley (2007, hal 256), sangatlah baik untuk mendokumentasikan narratives secara high-level agar cepat mendapatkan pengertian dari suatu event dari sistem.
Place New Member Order
Club Member
Distribution Center
Gambar 2.4 Association (Sumber Whitten et.al, 2007: 248)
2.4.2
Class Diagram Menurut Whitten et al. (2007: 441), class diagram menggambarkan struktur objek yang terdapat pada sebuah sistem. Diagram ini menunjukkan objek– objek yang terdapat pada suatu sistem serta relasi antar objek-objek tersebut.
12
Gambar 2.5 Class Diagram
Class diagram menggambarkan struktur dan deskripsi class, package, dan objek beserta hubungan satu sama lain seperti pewarisan, asosiasi, dan lain-lain. Class memiliki tiga area pokok yaitu: 1. Nama (stereotype), merupakan nama dari sebuah class. 2. Atribut, merupakan properti dari sebuah class. Atribut melambangkan batas nilai yang mungkin ada pada objek dari class. 3. Method, merupakan sesuatu yang dapat dilakukan oleh sebuah class, atau yang dapat dilakukan oleh class lain terhadap sebuah class. Atribut dan method memiliki salah satu sifat berikut: 1. Private, tidak dapat dipanggil dari luar class yang bersangkutan dan ditampilkan dalam bentuk (-) dalam Class Diagram. 2. Protected, hanya dapat dipanggil oleh class yang bersangkutan dan anakanak yang mewarisinya. Sifat protected ditampilkan dalam bentuk (#) dalam Class Diagram. 3. Public, dapat dipanggil oleh siapa saja dan ditampilkan dalam bentuk (+) dalam Class Diagram.
13
4. Package, hanya dapat dipanggil oleh instance sebuah class pada paket yang sama dan ditampilkan dalam bentuk (~) dalam Class Diagram. Berikut merupakan notasi dari class diagram: a. Class Class adalah blok-blok pembangun pada pemrograman berorientasi objek. Sebuah class digambarkan pada sebuah kotak yang terbagi atas tiga bagian, yaitu: nama class, definisi atribut dan definisi fungsi. b. Association Sebuah asosiasi merupakan sebuah hubungan paling umum antara dua class. Garis ini dapat melambangkan tipe-tipe hubungan dan juga hukumhukum multiplicity pada sebuah hubungan seperti one to one, one to many, many to many. c. Composition Jika sebuah class tidak dapat berdiri sendiri dan merupakan bagian dari class yang lain, maka class tersebut memiliki relasi "composition" terhadap class tempat class tersebut bergantung. Sebuah hubungan "composition" digambarkan sebagai garis dengan ujung berbentuk jajaran genjang berisi atau solid. d. Aggregation Agregasi mengindikasikan keseluruhan bagian relationship dan biasanya disebut sebagai relasi "mempunyai sebuah" atau "bagian dari". Sebuah agregasi dilambangkan sebagai sebuah garis dengan sebuah jajaran genjang tidak berisi atau tidak solid. e. Generalization Sebuah relasi generalisasi sepadan dengan sebuah relasi inheritance pada konsep pemrograman berorientasi objek. Generalisasi dilambangkan dengan sebuah panah dengan kepala panah yang tidak solid yang mengarah ke kelas induk.
Class diagram digunakan untuk menggambarkan objek dan hubungan diantaranya. Pada diagram akan terdapat hubungan sebagai berikut, yaitu hubungan multiplicity, hubungan generalisasi/spesialisasi, dan hubungan agregasi dan komposisi.
14
Berikut langkah yang dilakukan dalam membuat class diagram : 1. Mengidentifikasi hubungan (asosiasi) dan multiplicity : pada langkah ini, dilakukan identifikasi hubungan yang ada di antara objek dan kelompok serta ditambahkan multiplicity untuk memperjelas hubungan antar objek tersebut. 2. Mengidentifikasi
hubungan
generalisasi/spesialisasi
:
setelah
mengidentifikasi hubungan (asosiasi) dan multiplicity, harus ditentukan hubungan generalisasi/spesialisasi-nya. Hubungan generalisasi/spesialisasi adalah sebuah hubungan yang terdiri dari supertype class (abstrak atau induk) dan subtype class (anak atau konkret). Supertype class biasanya umum karena di dalamnya terdiri dari atribut umum dan behavior. Subtype class biasanya khusus, di dalamnya berisi atribut dan behavior unik dari sebuah objek tetapi dia mewarisi atribut dan behavior dari supertype class. 3. Mengidentifikasi hubungan agregasi dan komposisi: pada langkah ini ditentukan apakah ada hubungan agregasi atau komposisi dasar. Agregasi adalah hubungan unik dimana satu objek adalah bagian dari objek lain. Misalnya ada dua objek A dan B, objek B terdapat di dalam A, tetapi jika objek A hilang, objek B tetap ada. Hubungan ini tidak mengimplikasikan pewarisan, dalam hal ini objek B tidak mewarisi behavior atau atribut objek A. Contohnya seperti objek ruang kelas yang di dalamnya terdapat objek meja dan kursi, tetapi meja dan kursi tetap ada bila tidak ada ruang kelas. Sedangkan hubungan komposisi sebaliknya, objek B akan hilang bila objek A hilang, misalnya pada objek kampus terdapat objek mata kuliah, mata kuliah akan hilang apabila kampus tersebut tidak ada. 4. Menyiapkan class diagram : model ini merefleksikan hubungan objek/kelas dan multiplicity yang diidentifikasi pada langkah 1, hubungan generalisasi/spesialisasi yang ditemukan pada langkah 2, dan hubungan agregasi dan komposisi yang ditemukan pada langkah 3.
2.4.3
Activity Diagram Menurut Whitten et al. (2007: 443), activity diagram digunakan untuk menggambarkan jalannya suatu aktivitas dari sebuah proses atau sebuah use case secara berurutan. Tidak hanya itu, diagram ini juga digunakan untuk
15
menggambarkan tindakan (action) yang akan dijalankan ketika suatu proses sedang berjalan beserta hasil dari proses yang dijalankan tersebut.
Gambar 2.6 Contoh Activity Diagram (Sumber Whitten et.al, 2007: 392)
Berikut adalah simbol-simbol yang digunakan pada activity diagram : 1. Initial Node Berbentuk lingkaran penuh yang melambangkan awal proses
Gambar 2.7 Notasi Initial Pada Activity Diagram (Sumber Whitten, 2007: 392)
2. Actions Berbentuk rounded-rectangle yang melambangkan langkah-langkah individual dari proses.
16
Gambar 2.8 Notasi Action Pada Activity Diagram (Sumber Whitten, 2007: 392)
3. Flow Berbentuk tanda panah yang menujukkan perkembangan dari action. Flow juga tidak perlu ditambahkan kata-kata pada tanda panahnya untuk menjelaskan alurnya kecuali flow tersebut berasal dari decision.
Gambar 2.9 Notasi Flow Pada Activity Diagram (Sumber Whitten, 2007: 392)
4. Decision Berbentuk diamond dengan satu flow masuk dan dua/lebih flow keluar. Flow yang keluar dari decision menunjukkan suatu kondisi tertentu.
Gambar 2.10 Notasi Decision Pada Activity Diagram (Sumber Whitten, 2007: 392)
5. Merge Berbentuk diamond dengan dua/lebih flow masuk dan satu flow keluar. Merge bertujuan untuk menggabungkan flow yang terpisah oleh decision.
Gambar 2.11 Notasi Merge Pada Activity Diagram (Sumber Whitten, 2007: 392)
17
6. Fork Berbentuk batangan hitam dengan satu flow masuk dan dua/lebih flow keluar. Action yang ada secara paralel dibawah fork menandakan action tersebut bisa terjadi pada saat yang bersamaan.
Gambar 2.12 Notasi Fork Pada Activity Diagram (Sumber Whitten, 2007: 392)
7. Join Berbentuk batangan hitam dengan dua/lebih flow masuk dan satu flow keluar. Semua action yang masuk ke dalam join harus selesai terlebih dahulu sebelum memulai action berikutnya.
Gambar 2.13 Notasi Join Pada Activity Diagram (Sumber Whitten, 2007: 392)
8. Activity Final Berbentuk lingkaran penuh yang berada dalam lingkaran lagi di bagian luar yang melambangkan akhir proses.
Gambar 2.14 Notasi Final Pada Activity Diagram (Sumber Whitten, 2007: 392)
2.4.4
Sequence Diagram Menurut Whitten et. al (2007: 442), sequence diagram merupakan sebuah gambaran yang menjelaskan bagaimana objek berinteraksi satu sama lain melalui pesan dalam eksekusi dari sebuah use case atau sebuah operasi. Diagram ini menggambarkan bagaimana pesan dikirim dan diterima antar objek dan urutannya.
18
Gambar 2.15 Contoh Sequence Diagram (Sumber Whitten et.al, 2007: 659)
Gambar 2.15 mengilustrasikan contoh sequence diagram beserta beberapa catatan, yaitu: 1. Actor : actor berinteraksi dengan user interface ditunjukan dengan simbol actor. 2. Interface class : kotak yang menunjukan kode class dari user interface. Tanda titik dua (:) merupakan notasi standar sequence diagram untuk menunjukan "instance" dari class. Untuk menghindari kebingungan tentang jenis class apakah ini, maka diberikan catatan berupa <
> 3. Controller class : setiap use-case akan memiliki satu atau lebih controller class yang digambarkan dengan notasi yang sama sesuai dengan interface class dan dicatat dengan <> 4. Entity class : tambahkan kotak untuk setiap entitas yang perlu berkolaborasi di setiap rangkaian langkah. Tanda titik dua (:) menandakan sebuah object instance. 5. Messages : tanda panah mendatar menunjukan pesan yang dikirim ke class. Setiap pesan memanggil behavior dari class yang ditunjuk. Ketentuan penulisan dari pesan dimulai dengan huruf pertama menggunakan lowercase dan kata selanjutnya dimulai dengan uppercase serta tanpa menggunakan spasi. 6. Activation bars : bar yang ditetapkan atas lifeline menunjukan periode waktu dimana setiap object instance ada, dan mengindikasikan lifetime objek pada RAM.
19
7. Return message : tanda panah mendatar dan putus-putus, setiap behavior harus mengembalikan sesuatu, paling tidak pesan true/false yang menunjukan apakah behavior tersebut berhasil. 8. Self-call : sebuah objek yang dapat memanggil methodnya sendiri. 9. Frame : berupa kotak yang dapat digunakan untuk menyertakan satu atau lebih pesan untuk membagi sequence.
2.5
Aplikasi Mobile Menurut Romdoni (2010), aplikasi merupakan program yang digunakan untuk
melakukan sesuatu pada sistem computer. Mobile dapat diartikan sebagai perpindahan dengan kemudahan berpindah-pindah dari suatu tempat ke tempat lain tanpa pemutusan atau terputusnya komunikasi. Sistem aplikasi mobile adalah aplikasi yang dapat digunakan dengan mudah oleh pengguna saat berpindah-pindah tempat dari suatu tempat ke tempat lain tanpa pemutusan atau terputusnya komunikasi. Sedangkan akses informasi dari aplikasi mobile biasanya hanya berupa teks sederhana, jika berupa gambar sekalipun, gambar dengan ukuran yang tidak terlalu besar. Perangkat mobile yang digunakan masa kini seperti smartphone, tablet PC, PDA, dll. Beberapa karakteristik perangkat mobile: 1. Ukuran yang kecil Perangkat mobile memiliki ukuran yang kecil. Konsumen menginginkan perangkat yang terkecil untuk kenyamanan dan mobilitas mereka. 2. Memory yang terbatas Perangkat mobile juga memiliki memory yang kecil, yaitu primary (RAM) dan secondary (disk). 3. Daya proses yang terbatas Daya proses perangkat mobile lebih terbatas dibandingkan desktop. 4. Mengkonsumsi daya yang rendah Perangkat mobile menghabiskan sedikit daya dibandingkan dengan mesin desktop. 5. Kuat dan dapat diandalkan Karena perangkat mobile selalu dibawa ke mana saja, perangkat mobile harus cukup kuat untuk menghadapi benturan-benturan, gerakan, dan sesekali tetesan-tetesan air. 6. Konektivitas yang terbatas
20
Perangkat mobile memiliki bandwidth rendah, beberapa dari perangkat mobile bahkan tidak memiliki layanan data.
2.6
Metode Agile Development dan Extreme Programming Dalam Agile Software Development interaksi dan personel lebih penting dari pada
proses dan alat, software yang berfungsi lebih penting daripada dokumentasi yang lengkap, kolaborasi dengan klien lebih penting dari pada negosiasi kontrak, dan sikap tanggap terhadap perubahan lebih penting daripada mengikuti rencana. Namun demikian, sama seperti model proses yang lain, Agile Software Development memiliki kelebihan dan tidak cocok untuk semua jenis proyek, produk, orang dan situasi. Agile Software Development memungkinkan model proses yang toleransi terhadap perubahan kebutuhan sehingga perubahan dapat cepat ditanggapi. Namun di sisi lain menyebabkan produktivitas menurun.
2.6.1
Prinsip Agile Software Development Salah satu ciri dari Agile Software Development adalah tim yang tanggap terhadap perubahan. Karena perubahan adalah hal yang utama dalam pembangunan software: perubahan kebutuhan software, perubahan anggota tim, perubahan teknologi dll. Selain itu Agile Software Development juga melihat pentingnya komunikasi antara anggota tim, antara orang-orang teknis dan businessmen, antara developer dan managernya. Ciri lain adalah klien menjadi bagian dari tim pembangun software. Ciri-ciri ini didukung oleh 12 prinsip yang ditetapkan oleh Agile Alliance. Menurut Agile Alliance, 12 prinsip ini adalah bagi mereka yang ingin berhasil dalam penerapan Agile Software Development: 1. Kepuasan klien adalah prioritas utama dengan menghasilkan produk lebih awal dan terus menerus 2. Menerima perubahan kebutuhan, sekalipun diakhir pengembangan. 3. Penyerahan hasil/ software dalam hitungan waktu dua minggu sampai dua bulan. 4. Bagian bisnis dan pembangun kerja sama tiap hari selama proyek berlangsung 5. Membangun proyek di lingkungan orang- orang yang bermotivasi tinggi yang bekerja dalam lingkungan yang mendukung dan yang dipercaya untuk dapat menyelesaikan proyek.
21
6. Komunikasi dengan berhadapan langsung adalah komunikasi yang efektif dan efisien 7. Software yang berfungsi adalah ukuran utama dari kemajuan proyek 8. Dukungan yang stabil dari sponsor, pembangun, dan pengguna diperlukan untuk menjaga perkembangan yang berkesinambungan 9. Perhatian kepada kehebatan teknis dan desain yang bagus meningkatkan sifat agile 10. Kesederhanaan penting 11. Arsitektur, kebutuhan dan desain yang bagus muncul dari tim yang mengatur dirinya sendiri 12. Secara periodik tim evaluasi diri dan mencari cara untuk lebih efektif dan segera melakukannya. Kedua belas prinsip tersebut menjadi suatu dasar bagi model-model proses yang punya sifat agile. Dengan prinsip-prinsip tersebut Agile Process Model berusaha untuk menyiasati 3 asumsi penting tentang proyek software pada umumnya: 1. Kebutuhan software sulit diprediksi dari awal dan selalu akan berubah. Selain itu, prioritas klien juga sering berubah seiring berjalannya proyek. 2. Desain dan pembangunan sering tumpang tindih. Sulit diperkirakan seberapa jauh desain yang diperlukan sebelum pembangunan. 3. Analisis, desain, pembangunan dan testing tidak dapat diperkirakan seperti yang diinginkan.
2.6.2
Faktor Manusia Pada Agile Process Model Kunci faktor manusia pada model ini adalah proses didasari pada kebutuhan orang dan tim bukan sebaliknya, Untuk dapat sukses menerapkan model proses ini, pada faktor manusia ada beberapa kunci penting: 1. Kompetensi: ketrampilan dalam membangun dan pengetahuan tentang proses membangun 2. Fokus: memiliki fokus yang sama sekalipun peran dalam tim berbeda 3. Kolaborasi: kerja sama dengan klien, anggota tim dan manajer. 4. Kemampuan ambil keputusan: tim pembangun memiliki otonomi dalam pengambilan keputusan terkait teknis dan proyek
22
5. Kemampuan fuzzy problem-solving: mampu memilah masalah yang penting untuk dipecahkan segera atau nanti. 6. Saling percaya dan hormat: kekompakan tim yang didukung oleh rasa percaya dan saling menghargai satu sama lain. 7. Manajemen diri: tim mengatur diri untuk selesaikan proyek, mengatur proses untuk disesuaikan dengan lingkungannya, tim menjadwal dirinya untuk menyerahkan hasil. Berdasarkan pada semua metode ADA ini, perhatian tertuju pada keluaran atau hasil dari proses pengembangan software, pengerjaan software, dan memaksimalkan nilai untuk klien. Metode ADA ini dapat didefiniskan sebagai aturan yang berorientasi pada penggunaan manusia dan komunikasi dalam hubungannya dengan aturan prosedur proyek dan sifatnya yang ringan namun sesuai. Keempat aturan tersebut adalah: 1. Individu dan interaksi manusia daripada proses dan peralatan 2. Pengerjaan software daripada dokumentasi umum 3. Kolaborasi konsumen daripada negosiasi kontrak 4. Respon kepada perubahan daripada mengikuti sebuah rencana (Agile Manifesto, 2003) Perhatian pada komunikasi dan moral dari para programmer merupakan hal yang biasa dalam semua metode ADA. Menurut Conrad (2000), metode ADA berfokus pada orang sebagai pengendali utama pada kesuksesan perkembangan. Kemudian berikutnya, fokus dari prinsip kunci dari salah satu metode ADA, Extreme Programming, yang pertama kali diperkenalkan Kent Beck (1999). Menurut Beck (1999, p.15), “XP adalah sebuah metodologi yang ringan untuk team pengembangan software yang berukuran kecil sampai sedang yang berhadapan dengan kebutuhan yang berubah-ubah dengan sangat cepat dan kurang jelas” dan “XP merupakan sebuah cara yang menyenangkan, ringan, efisien, beresiko rendah, fleksibel, terprediksi, scientific untuk mengembangkan software” XP mengalamatkan resiko dan nilai dari software dalam segala tingkat dari proses pengembangan. Menurut Beck, konsumen (atau manager) dapat memilih tiga dari empat variabel pengendali (Biaya, waktu, kualitas dan jangkauan) dan team pengembang yang menentukan variabel keempat. Orang teknik akan
23
bertanggungjawab pada perkiraan kerja, konsekuensi teknis dari keputusan bisnis, proses pengembangan dan detil jadwal rilis. Dalam XP, biaya, waktu dan kualitas dari sebuah komponen berdasarkan pada variabel kendali tetap yang ditetapkan oleh kostumer dan manager. Dalam batasan ini, team pengembang berfokus pada jangkauan variabel perkembangan yaitu pada bagian fungsionalitas. Strategi programming XP adalah untuk menjaga agar kode mudah dimodifikasi (Beck, 1999). 12 Prinsip atau aturan dari metodologi XP adalah planning, small release, metaphor, simple design, testing, refactoring, pair programming, kepemilikan collective, integrasi berkesinambungan, standar coding, berhubungan dengan konsumen, dan 40 jam kerja seminggu (Beck, 1999).
Gambar 2.16 Diagram Proses Extreme Programming
Aktifitas Perencanaan : pengumpulan user stories dari klien yang klien tetapkan prioritasnya. Setiap story ditetapkan harga dan lama pembangunan, jika terlalu besar, story dapat dipecah menjadi beberapa story yang lebih kecil. Periksa dan pertimbangkan resiko Aktifitas Desain: berprinsip: sederhana. Memanfaatkan kartu CRC (ClassResponsibility-Collaborator) untuk identifikasi dan mengatur class-class di konsep OO. Jika temui kesulitan, prototype dibangun (spike solution). Lakukan refactoring, yaitu mengembangkan desain dari program setelah ditulis
24
Aktifitas Pengkodean: siapkan unit test sebelum pengkodean dipakai sebagai focus pemrogram untuk membuat program. Pair programming dilakukan untuk real time program solving dan real time quality assurance Aktifitas Pengujian: menggunakan unit test yang dipersiapkan sebelum pengkodean.
2.6.3
Perbandingan Dengan Metode Lainnya Metode-metode agile terkadang dicirikan sebagai sesuatu yang bertentangan dari metode-metode yang sudah tertata atau teratur. Perbedaan ini membawa kepada suatu kesimpulan bahwa metode-metode agile tidak teratur. Perbedaan lebih jelasnya bahwa metode-metode tersebut terdiri dari sebuah rangkaian kesatuan dari ”adaptive” menuju ”predictive”. Metode-metode agile berada pada sisi ”adaptive” dari rangkaian kesatuan ini. Metode Adaptive berfokus pada adaptasi yang secara cepat mengikuti perubahan keadaan yang terjadi. Ketika kebutuhan akan sebuah proyek berubah, sebuah kelompok yang beradaptasi juga harus berubah. Kelompok yang beradaptasi akan mendapat kesulitan menggambarkan dengan tepat apa yang akan terjadi di masa yang akan datang. Semakin jauh tanggal yang ditetapkan, semakin semu sebuah metode adaptive akan hal-hal yang akan terjadi di masa yang akan datang. Sebuah kelompok adaptive dapat melaporkan dengan tepat tugas-tugas yang dapat diselesaikan minggu berikutnya, tetapi hanya fitur-fitur yang sudah direncanakan untuk bulan berikutnya. Sebaliknya, metode-metode predictive, berfokus pada perencanaan detil di masa yang akan dating. Sebuah kelompok predictive dapat melaporkan dengan pasti fitur-fitur dan tugas-tugas yang direncanakan untuk keseluruhan waktu proses pengembangan. Kelompok-kelompok predictive mempunyai kesulitan dalam mengubah arah. Sebuah rencana secara khusus dioptimasi untuk tujuan awal dan perubahan arah dapat menyebabkan pekerjaan yang sudah diselesaikan dapat terbuang sia-sia dan selesai berbeda dari yang diharapkan. Kelompok predictive akan sering mengadakan sebuah kendali perubahan untuk memastikan bahwa hanya perubahan yang paling bernilai yang akan dipertimbangkan. Pengembangan agile mempunyai sedikit kesamaan dengan model waterfall. Pada saat sekarang ini, model waterfall masih tetap menjadi kesukaan untuk digunakan pengembang. Model waterfall merupakan metode paling
25
terstruktur, dengan langkah-langkah seperti pengumpulan kebutuhan, analisis, desain, pengkodean dan testing dalam sebuah rangkaian yang terencana dengan seksama. Masalah utama dari model waterfall adalah ketidakleluasaan memecah sebuah proyek ke dalam tahap-tahap yang terpisah, sehingga komitmen dibuat pada awalnya, dan membuatnya menjadi sulit untuk bereaksi terhadap perubahan kebutuhan. Pengulangan-pengulangan berarti biaya yang mahal. Hal ini berarti model waterfall tidak sesuai jika kebutuhan-kebutuhan tidak dapat dimengerti atau jika ingin ada perubahan di saat pengembangan proyek. Sebaliknya, metode agile menghasilkan fitur-fitur yang dikembangkan dan teruji setiap beberapa minggu (untuk subset yang kecil). Tekanannya yaitu untuk mendapatkan potongan terkecil yang berfungsi untuk mengantarkan bisnis yang lebih baik, dan terus mengembangkannya dan menambahkan fungsionalitas lebih jauh ke dalam sebuah proyek.
2.7
Android Android adalah sistem operasi yang berbasis kernel linux dengan rancangan
khusus oleh Google dan bersifat open source. Google memberikan akses yang luas kepada pada developer untuk menggunakan tools dan library dalam pengembangan aplikasiaplikasi Android. Pada awalnya, Android dikembangkan oleh perusahaan Android Inc. namun perusahaan tersebut dibeli oleh Google pada tahun 2005 (Conder & Darcey, 2011). Perkembangan Android ditentukan oleh sebuah konsorsium yang bernama Open Handset Alliance (OHA) pada bulan November 2009. OHA adalah Aliansi perusahaanperusahaan software, hardware dan telekomunikasi seperti Intel, Nvidia, Google, Samsung, Sprint, T-Mobile, Motorola, serta beberapa anggota lainnya. Aliansi tersebut bertujuan untuk memberikan kontribusi yang lebih besar sehingga Android dapat berkembang lebih baik (Conder & Darcey, 2011).
2.7.1
Komponen Aplikasi Beberapa komponen aplikasi pada Android yang dibutuhkan oleh developer ketika mengembangkan aplikasi Android (Conder & Darcey, 2011): 1. Activities Activities merupakan layar-layar yang memiliki tugas masing- masing sehingga membentuk sebuah aplikasi Android. Sistem operasi
26
Android akan melacak semua objek Activity yang berjalan dengan menempatkan semua Acitivity pada sebuah tumpukan. Ketika Activity baru dijalankan, Activity di atas tumpukan akan berhenti dan Activity yang baru akan berpindah ke atas tumpukan. Ketika Activity selesai, Activity akan dihapus dari tumpukan dan Acitivity akan dijalankan kembali dalam tumpukan tersebut.
Gambar 2.17 Susunan Activity Dalam Android
2. Intents Intents merupakan mekanisme pesan asynchronous yang digunakan oleh sistem operasi Android untuk mencocokkan task requests dengan Activity atau Services yang sesuai dengan mengirimkan event broadcast Intents untuk sistem. 3. Content Providers Content providers mengatur data pada aplikasi supaya data aplikasi internal dapat diekspos untuk aplikasi lain. 4. Broadcast Recievers Broadcast Recievers merupakan komponen yang menerima request dari sebuah event dan meneruskan request tersebut kepada sistem.
2.7.2
Versi Android Berikut versi-versi Android yang telah dikembangkan hingga saat ini: 1. Android versi 1.1 Android versi 1.1 dirilis pada bulan Februari 2009 yang merupakan versi pertama 2. Android versi 1.5 (Cupcake)
27
Android versi 1.5 dirilis pada bulan April 2009 dengan penambahan fitur berikut: -
Fitur untuk merekam dan menonton video dengan modus kamera.
-
Fitur untuk menggunggah video ke Youtube dan gambar Pisaca langsung dari telepon.
-
Kemampuan terhubung secara otomatis ke headset Bluetooth dalam jarak tertentu.
-
Widgets dan folder yang baru yang dapat ditambahkan ke dalam layar utama.
3. Android versi 1.6 (Donut) Android versi 1.6 dirilis pada bulan September 2009 dengan pembaharuan berikut: -
Pembaharuan Voice search.
-
Teknologi yang mendukung Code Division Multiple Access/ Evolution Data Only (CDMA/ EVDO), 802.1x, Virtual Private Network (VPN), text-to-speech engine serta kemampuan dial contact.
-
Dukungan resolusi layar wide video Graphics Array.
4. Android versi 2.0/2.1 (Eclair) Android versi 2.0 dirilis pada bulan Oktober 2009 dengan pembaharuan berikut: -
Pengoptimalan kecepatan perangkat keras.
-
Perubahan interface dengan browser baru dan dukungan HTML5.
-
Dukungan flash untuk kamera.
-
Peningkatan Google Maps 3.1.2.
5. Android versi 2.2 (Froyo) Android versi 2.2 dirilis pada bulan Mei 2010 dengan pembaharuan berikut: -
Pembaharuan kecepatan aplikasi tambahan dalam implementasi Just In Time.
-
Peningkatan dukungan Microsoft Exchange seperti keamanan, auto discovery, dan sinkronisasi kalender.
-
Pembaharuan USB tehtering dan product hotspot.
-
Pengungguhan file pada aplikasi browser.
6. Android versi 2.3 (Gingerbread)
28
Android versi 2.3 dirilis pada Bulan Desember 2010 dengan pembaharuan berikut: -
Dukungan tingkat resolusi yang lebih besar.
-
Perubahan tampilan antarmuka.
-
Pembatasan spefisikasi minimum agar bisa di-upgrade ke versi 2.3.
7. Android versi 3.0/3.1 (Honeycomb) Pembaharuan yang dilakukan pada Android versi 3.0 adalah sebagai berikut: -
Pembaharuan desain yang disesuaikan dengan tablet.
-
Mendukung multi prosesor.
8. Android versi 4.0 (Ice Cream Sandwich) Android versi 4.0 dirilis pada Bulan Oktober 2011 dengan pembaharuan berikut: -
Penambahan perangkat fotografi.
-
Penambahan fitur pengenalan wajah untuk membuka kunci.
-
Berbagi informasi dengan NFC.
9. Android versi 4.1 (Jelly Bean) Google mengumumkan Android 4.1 (Jelly Bean) dalam konferensi Google I/O pada tanggal 27 Juni 2012. Berdasarkan kernel Linux 3.0.31, Jelly Bean adalah pembaruan penting yang bertujuan untuk meningkatkan fungsi dan kinerja antarmuka pengguna (UI). Pembaruan ini diwujudkan dalam "Proyek Butter", perbaikan ini termasuk antisipasi sentuh, triple buffering, perpanjangan waktu vsync, dan peningkatan frame rate hingga 60 fps untuk menciptakan UI yang lebih halus. Android 4.1 Jelly Bean dirilis untuk Android Open Source Project pada tanggal 9 Juli 2012. 10. Android 4.4 (KitKat) Google mengumumkan Android 4.4 KitKat (dinamai dengan izin dari Nestlé dan Hershey) pada 3 September 2013, dengan tanggal rilis 31 Oktober 2013. Sebelumnya, rilis berikutnya setelah Jelly Bean diperkirakan akan diberi nomor 5.0 dan dinamai 'Key Lime Pie'. 11. Android 5.0 (Lollypop)
29
Android Lollipop adalah versi terakhir dari sistem operasi Android yang dikembangkan oleh Google. Versi ini diumumkan pada 25 Juni 2014 dalam acara Google I/O. Android Lollipop mulai didistibusikan secara Over The Air (OTA) pada 12 November 2014 kepada perangkat perangkat tertentu. Fitur fitur yang ditambahkan dalam versi ini antara lain : Desain antarmuka (tampilan) yang dinamakan "Material Design". 64-bit ART compiler Project volta, yang berguna untuk meningkatkan daya hidup baterai 30% lebih tahan lama. “Factory Reset Protection”. Fitur ini berguna ketika smartphone hilang, ia tidak bisa direset ulang tanpa memasukkan id google dan kata sandi (password). Dari berbagai versi android yang telah dirilis, berikut distribusi versi populasi android yang beredar
Gambar 2.18 Distribusi Versi Android Yang Beredar Sumber: http://developer.android.com/about/dashboards/ Diakses pada 25 April 2015
2.8
Web API ASP.NET Web API adalah salah satu bentuk dari API yang berbentuk framework
yang mempermudah untuk membuat layanan HTTP agar dapat digunakan oleh client dari berbagai platform baik oleh web browser dan mobile. Web API dapat mengembalikan data
30
secara dinamis berdasarkan permintaan dari berbagai platform tersebut. Data yang disajikan sendiri dapat berupa data dengan format JSON maupun XML. Web API adalah platform yang ideal untuk membangun layanan HTTP murni, dimana permintaan dan respon yang terjadi melalui protokol HTTP. Web API dapat menerima berbagai jenis request dari client mencakup GET, PUT, POST, dan DELETE.
2.8.1
Artitektur Web API Arsitektur WebAPI sendiri dapat dijalankan diatas ASP.NET maupun sebagai Windows Service
Gambar 2.19 Arsitektur Web API
Konfigurasi Routing di WebAPI sedikit berbeda dari Routing di ASP.NET MVC. WebAPI menggunakan HttpRouteCollection dan Route. Satu-satunya faktor yang menjadi pembeda adalah ketergantungan WebAPI dari Routing di ASP.NET. WebAPI dirancang sedemikian rupa sehingga tidak akan memiliki ketergantungan pada ASP.NET sehingga dapat dipublikasikan melalui console ataupun Windows Service.
2.9
JSON Menurut Vijay Joshi (2010:103) JSON merupakan fungsi teks bahasa
pemrograman yang independen dan merupakan bentuk data asli dari JavaScript. Hal ini yang membuat lebih ringan dan lebih cepat daripada XML karena JSON memerlukan lebih sedikit markup dibandingkan dengan XML. Dikarenakan JSON adalah bentuk data asli dari
31
JavaScript, maka dapat digunakan pada sisi klien dalam aplikasi AJAX yang lebih mudah daripada XML. Sebuah objek JSON dimulai dengan { dan diakhiri dengan }. Menurut Vijay Joshi (2010:103), hanya jenis berikut yang diperbolehkan dalam JSON: 1. Objek Sebuah objek adalah kumpulan pasangan kata keys value yang ditutup dengan { dan }. Dan dipisahkan dengan koma. Keys dan value sendiri dipisahkan menggunakan titik dua (:). Objek dinilai sebagai array asosiatif atau hash table. Keys merupakan string sederhana dan values dapat berupa array, string, angka, Boolean, atau null. 2. Array Seperti bahasa lain, array adalah pasangan-pasangan data yang dapat diakses dengan index. Untuk mewakili array, nilai-nilai dipisahkan dengan koma dan diapit [ dan ]. 3. String Sebuah string harus diapit tanda kutip ganda. 4. Jenis terakhir adalah sebuah angka.
2.10 Basis Data Menurut Connolly (2010: 65), basis data adalah sebuah kumpulan data yang saling berhubungan satu dengan yang lain secara logikal, dan suatu deskprisi data yang dirancang untuk memenuhi kebutuhan informasi dalam suatu organisasi. Keuntungan basis data yaitu: a. Data yang sama dapat digunakan oleh banyak aplikasi dan sistem. b. Data disimpan dalam format yang fleksibel, karena basis data didefinisikan secara terpisah dari sistem informasi dan program-program aplikasi yang akan menggunakan data. c. Teknologi basis data menyediakan skalabilitas superior, dalam arti basis data dan sistem yang menggunakannya dapat ditingkatkan atau dikembangkan untuk memenuhi kebutuhan-kebutuhan perubahan pada sebuah organisasi. d. Kemajuan independensi data yang sangat mengurangi redudansi data telah meningkatkan fleksibilitas.
32
2.10.1 SQL Server Microsoft SQL Server adalah sebuah sistem manajemen basis data relasional (RDBMS) yang dikembangkan oleh Microsoft. Bahasa query utamanya adalah Transact-SQL yang merupakan implementasi dari SQL standar ANSI/ISO yang digunakan oleh Microsoft dan Sybase. Umumnya SQL Server digunakan di dunia bisnis yang memiliki basis data berskala kecil sampai dengan menengah, tetapi kemudian berkembang dengan digunakannya SQL Server pada basis data besar.
Basis data pada SQL Server dibagi menjadi dua bagian, yaitu user database dan system database. User database adalah basis data yang dibuat dan dikelola sendiri oleh user, basis data ini dapat dirancang sedemikian rupa untuk memenuhi kebutuhan pengguna. System database adalah basis data yang secara otomatis terbuat saat proses instalasi SQL Server. System database ini sendiri meliputi : a. Master Database master menyimpan informasi semua level sistem dari SQL Server. b. Model Merupakan database yang menyimpan template dari semua basis data yang dibuat. c. MSDB Digunakan oleh SQL Server Agent untuk menjadwal aktivitasaktivitas yang ada. d. TempDB Merupakan basis data yang berfungsi menyimpan dan menangani tabel-tabel dan stored procedure sementara dari semua pengguna yang terhubung dengan sistem.
2.10.2 SQLite SQLite merupakan sebuah sistem manajemen basisdata relasional yang bersifat ACID-compliant dan memiliki ukuran pustaka kode yang relatif kecil,
33
ditulis dalam bahasa C. SQLite merupakan proyek yang bersifat public domain yang dikerjakan oleh D. Richard Hipp. Tidak seperti pada paradigma client-server umumnya, inti SQLite bukanlah sebuah sistem yang mandiri yang berkomunikasi dengan sebuah program, melainkan sebagai bagian integral dari sebuah program secara keseluruhan. Sehingga protokol komunikasi utama yang digunakan adalah melalui pemanggilan API secara langsung melalui bahasa pemrograman. Mekanisme seperti ini tentunya membawa keuntungan karena dapat mereduksi overhead, latency times, dan secara keseluruhan lebih sederhana. Seluruh elemen basis data (definisi data, tabel, indeks, dan data) disimpan sebagai sebuah file. Kesederhanaan dari sisi disain tersebut bisa diraih dengan cara mengunci keseluruhan file basis data pada saat sebuah transaksi dimulai. Pustaka SQLite mengimplementasikan hampir seluruh elemen-elemen standar yang berlaku pada SQL-92, termasuk transaksi yang bersifat atomic, konsistensi basisdata, isolasi, dan durabilitas (dalam bahasa inggris lebih sering disebut ACID), trigger, dan kueri-kueri yang kompleks. Tidak ada pengecekan tipe sehingga data bisa dientrikan dalam bentuk string untuk sebuah kolom bertipe integer. Beberapa kalangan melihat hal ini sebagai sebuah inovasi yang menambah nilai guna dari sebuah basis data, utamanya ketika digunakan dalam bahasa pemrograman berbasis script (PHP, Perl), sementara kalangan lain melihat hal tersebut sebagai sebuah kekurangan. Beberapa proses ataupun thread dapat berjalan secara bersamaan dan mengakses basis data yang sama tanpa mengalami masalah. Hal ini disebabkan karena akes baca data dilakukan secara paralel. Sementara itu akses tulis data hanya bisa dilakukan jika tidak ada proses tulis lain yang sedang dilakukan. Jika tidak, proses tulis tersebut akan gagal dan mengembalikan kode kesalahan.
2.11 MQTT MQTT (Message Queuing Telemetry Transport) adalah protokol konektivitas machine-to-machine (M2M)/ Internet of Things (IoT) yang berbasis open source (Eclipse) dengan standar terbuka (OASIS) yang sangat sederhana dan ringan, yang dirancang untuk perangkat terbatas dan bandwidth rendah, dengan latency tinggi atau berjalan pada jaringan yang tidak dapat diandalkan.
34
Ini
adalah
prinsip-prinsip
desain
untuk memenuhi
persyaratan
dalam
meminimalkan bandwidth jaringan dan sumber daya perangkat, namun di lain pihak juga berusaha untuk memastikan keandalan dan jaminan pengiriman data. MQTT sangat ideal untuk perangkat yang terhubung dan aplikasi mobile di era M2M/IoT dimana bandwith dan daya baterai menjadi pertimbangan utama. MQTT diciptakan oleh Dr Andy Stanford-Clark dari IBM, dan Arlen Nipper dari Arcom (sekarang Eurotech) pada tahun 1999. MQTT telah banyak diterapkan di berbagai industri sejak tahun 1999.