Migration Code pada Backend Crimezone Dari PHP Ke Scala

  

BIODATA PENULIS

I. DATA PRIBADI

  Nama : Agus Suhendra NIM : 10111247 Tempat, Tanggal Lahir : Kelubi, 31 Oktober 1994 Jenis Kelamin : Laki-Laki Alamat : Dusun Kelubi RT/RW 002/001 Desa Kelubi Kecamatan Manggar, Belitung timur - 33572.

  No. Telp : 087823410808 E-Mail : agsuhendraa@gmail.com II.

RIWAYAT PENDIDIKAN

  1999-2005 : SDN 32 Kelubi 2005-2008 : SMPN 2 Manggar 2008-2011 : SMAN 1 Manggar 2011-2016 : Universitas Komputer Indonesia

  Demikian riwayat hidup ini saya buat dengan sebenar-benarnya dalam keadaan sadar dan tanpa paksaan.

  Bandung, Agustus 2016 Agus Suhendra

  

MIGRATION CODE

PADA BACKEND CRIMEZONE

DARI PHP KE SCALA

SKRIPSI

  Diajukan untuk Menempuh Ujian Akhir Sarjana

  

AGUS SUHENDRA

10111247

PROGRAM STUDI TEKNIK INFORMATIKA

FAKULTAS TEKNIK DAN ILMU KOMPUTER

UNIVERSITAS KOMPUTER INDONESIA

  

2016

  

KATA PENGANTAR

Assalamualaikum Wr.Wb.

  Puji dan syukur penulis panjatkan ke hadirat Allah SWT atas rahmat dan karunia-Nya sehingga penulis dapat menyelesaikan skripsi yang berjudul “Migration Code Pada Backend Crimezone Dari PHP Ke Scala” sebagai syarat untuk menyelesaikan program studi Strata I Jurusan Teknik Informatika Fakultas Teknik dan Ilmu Komputer pada Universitas Komputer Indonesia.

  Penyusunan skripsi ini tidak akan terwujud tanpa mendapat dukungan, bantuan dan masukan dari berbagai pihak. Untuk itu, penulis ingin menyampaikan terima kasih kepada: 1.

  Allah SWT atas petunjuk, pertolongan, karunia, hidayah, kekuatan, kesehatan, dan kesabaran selama menyelesaikan skripsi ini. Sholawat serta salam selalu terlimpahkan kepada baginda Nabi Muhammad SAW.

  2. Orang tua dan keluarga tercinta, yang senantiasa memberikan doa, semangat, motivasi, dan kasih sayangnya kepada penulis .

  3. Bapak Adam Mukharil Bactiar, S.Kom., M.T. selaku dosen pembimbing yang telah sabar membimbing, memotivasi, memberikan perhatian dan memberikan pengarahan selama penelitian tugas akhir ini sehingga tugas akhir ini bisa terselesaikan dengan sebaik-baiknya.

  4. Ibu Dian Dharmayati, S.T., M.Kom. selaku reviewer yang telah memberikan masukan dan arahan selama perbaikan perangkat lunak ini.

  5. Bapak Andri Heryandi, S.T., M.T. yang telah bersedia menjadi penguji 3 pada saat sidang dan memberikan masukan yang bermanfaat pada penelitian ini.

  6. Bapak Eko Budi Setiawan, S.Kom., M.T selaku dosen wali IF-6 angkatan 2011.

  7. Amelia Widiastuti selaku orang terdekat yang selalu menjadi penyemangat di setiap aktivitas, senyum di setiap kebahagian dan partner yang selalu mengingatkan, mendukung, dan memotivasi untuk menyelesaikan skripsi ini dengan sebaik-baiknya.

  8. Teman-teman seperjuangan bimbingan bapak Adam Mukharil Bachtiar yang telah berjuang bersama dalam menyelesaikan skripsi ini.

  9. Muhammad Rivki, Handika, Bisma AT, Nio Somalo, Faisal Ishak, dan Nizar yang secara personal telah banyak membantu penulis.

  Sangat disadari bahwa dalam pelaksanaan dan penyusunan skripsi ini masih banyak kekurangan dan jauh dari kesempurnaan. Oleh karena itu, saran dan kritik yang membangun sangat diharapkan untuk pengembangan ke arah yang lebih baik.

  Bandung, Agustus 2016 Penulis

  

DAFTAR ISI

  ABSTRAK ............................................................................................................... i

  ABSTRACT

  .............................................................................................................. ii KATA PENGANTAR ........................................................................................... iii DAFTAR ISI ........................................................................................................... v DAFTAR GAMBAR ........................................................................................... viii DAFTAR TABEL .................................................................................................. xi DAFTAR SIMBOL .............................................................................................. xvi DAFTAR LAMPIRAN ...................................................................................... xviii

  BAB I PENDAHULUAN .................................................................................... 1 I.1 Latar Belakang Masalah ........................................................................... 1 I.2 Perumusan Masalah .................................................................................. 2 I.3 Maksud dan Tujuan .................................................................................. 2 I.4 Batasan Masalah ....................................................................................... 3 I.5 Metodologi Penelitian .............................................................................. 3 I.5.1 Metode Pengumpulan Data ............................................................... 3 I.5.2 Metode Migrasi Perangkat Lunak ..................................................... 4 I.6 Sistematika Penulisan ............................................................................... 6 BAB II LANDASAN TEORI ............................................................................ 7 II.1 Sekilas Crimezone .................................................................................... 7 II.2 Software Maintenance .............................................................................. 8 II.3 Software Migration ................................................................................... 9 II.4 Scala ....................................................................................................... 12 II.5 Functional Programming ........................................................................ 13 II.6 Padanan PHP, Scala dan Java ................................................................. 14 II.7 Play Framework ..................................................................................... 15 II.8 Concurrency dan Parallelism .................................................................. 15 II.9 Asynchronous dan Synchronous ............................................................ 16 II.10 Slick (Scala Language-Integrated Connection Kit) ............................ 17 II.11 Cloud Computing ................................................................................ 18

  II.12 Heroku Cloud ...................................................................................... 19

  II.13 Structure Analysis and Design ............................................................ 19

  II.14 Object Oriented Analysis and Design ................................................. 20

  II.15 Pengujian Unit (Unit Testing)............................................................. 25

  II.16 Pengujian Integrasi (Integration Testing) ........................................... 26

  II.17 Pengujian Performa (Performance Testing) ....................................... 26

  II.18 Blazemeter .......................................................................................... 27

  II.19 Web Service ........................................................................................ 28

  II.20 RESTful Web Services ....................................................................... 28

  II.21 JSON (JavaScript Object Notation) .................................................... 29

  BAB III ANALISIS DAN PERANCANGAN ................................................. 31 III.1 Analisis Sistem ....................................................................................... 31 III.1.1 Analisis Masalah ............................................................................. 31 III.1.2 Analisis Arsitektur Sistem .............................................................. 32 III.1.3 Analisis Migrasi Data ...................................................................... 34 III.1.4 Analisis Migrasi Code ..................................................................... 36 III.1.5 Analisis Spesifikasi Kebutuhan Perangkat Lunak .......................... 38 III.1.6 Analisis Kebutuhan Non Fungsional .............................................. 40 III.1.7 Analisis Kebutuhan Fungsional Legacy System ............................. 44 III.1.8 Analisis Kebutuhan Kelas Sistem Baru .......................................... 77 III.1.9 Analisis Concurrency dan Asynchronous ....................................... 92 III.1.10 Analisis Data ............................................................................... 95 III.2 Perancangan Sistem ................................................................................ 96 III.2.1 Perancangan Class .......................................................................... 96 III.2.2 Perancangan Sequence Diagram ..................................................... 98 III.2.3 Perancangan Data .......................................................................... 124 III.2.4 Perancangan Arsitektur Menu ....................................................... 127 III.2.5 Perancangan Antarmuka ............................................................... 130 II.2.6 Perancangan Pesan ........................................................................ 150 II.2.7 Jaringan Semantik ......................................................................... 153 BAB IV IMPLEMENTASI DAN PENGUJIAN ............................................ 155

  IV.1 Implementasi Sistem ............................................................................ 155

  IV.1.1 Lingkungan Implementasi ............................................................. 155

  IV.1.2 Implementasi Data ........................................................................ 157

  IV.1.3 Implementasi Kelas ....................................................................... 161

  IV.1.4 Hasil Perbedaan Kode PHP dan Scala .......................................... 204

  IV.1.5 Implementasi Antarmuka .............................................................. 208

  IV.2 Pengujian Sistem .................................................................................. 209

  IV.2.1 Rencana Pengujian ........................................................................ 209

  IV.2.2 Skenario Pengujian........................................................................ 214

  IV.2.3 Hasil Pengujian ............................................................................. 222

  IV.2.4 Evaluasi Pengujian ........................................................................ 231

  BAB V KESIMPULAN DAN SARAN ........................................................ 233 V.1 Kesimpulan ........................................................................................... 233 V.2 Saran ..................................................................................................... 233 DAFTAR PUSTAKA ......................................................................................... 234

DAFTAR PUSTAKA

  [1] M. Odersky, L. Spoon and B. Venners, Programming in Scala, California: Artima Press is an imprint of Artima, Inc., 2010. [2] Dwarampudi, Venkatreddy ; Dhillon, Shahbaz Singh ; Shah, Jivitesh;

  Sebastian, Nikhil Joseph ; Kanigicharla, Nitin Satyanarayan;, "Comparative study of the Pros and Cons of Programming languages Java, Scala, C++, Haskell, VB .NET, AspectJ, Perl, Ruby, PHP & Scheme," 2010. [3] thomas, "thomasknierim," [Online]. Available: http://www.thomasknierim.com/119/java/performance-java-vs-php-vs- scala/. [Accessed Monday August 2015]. [4] N. Raychaudhuri, Scala in Action, Shelter Island: Manning, 2013. [5] E. Ackerman, J. Ebert and A. Winter, "Ein Referenz-Prozessmodell zur Software-Migration," 2005.

  [6] E. Ackermann, A. Winter and R. Gimnich, "Ein Referenz-Prozess der Software-Migration," Softwaretechnik-Trends, vol. 25, no. 4, pp. 20-22, 2005.

  [7] H. M. Sneed, E. Wolf and H. Heilmann, Softwaremigration in der Praxis: Übertragung alter Softwaresysteme in eine moderne Umgebung, Dpunkt Verlag, 2009.

  [8] R. J. Martin and W. M. Osborne, "Guidance on Software Maintenance,"

  National Bureau of Standards, 1983.

  [9] H. M. Sneed, M. Hasitschka and M. T. Teichman, Software- Produktmanagement: Wartung undWeiterentwicklung bestehender Anwendungssysteme, dpunkt.verlag, 2005.

  [10] P. Chiusano and R. Bjarnason, Functional Programming in Scala, Manning, 2013. [11] PHP, "PHP Manual," The PHP Group, [Online]. Available: https://secure.php.net/manual/en/. [Accessed 26 December 2015]. [12] B. Hariyanto, Esensi-Esensi Bahasa Pemrograman Java, Bandung: Informatika Bandung, 2010. [13] P. Hilton, E. Bakker and F. Canedo, Play for Scala, United States: Manning Publications Co., 2014.

  [14] Akka, "Akka," Typesafe, [Online]. Available: http://doc.akka.io/docs/akka/2.4.1/general/terminology.html. [Accessed Thursday December 2015]. [15] Scala, "API DOCS," Typesafe, [Online]. Available: http://www.scala- lang.org/api/current. [Accessed Wednesday January 2016].

  [16] Slick, "Slick," Typesafe, [Online]. Available: http://slick.typesafe.com/doc/3.1.0/. [Accessed Saturday December 2015]. [17] M. Brockey and S. Buxton, "Cloud data storage". United States Patent US20130036135 A1, 7 Feb 2013. [18] A. Hanjura, Heroku Cloud Application Development, Birmingham: Packt Publishing, 2014. [19] H. J. R. Gary Shelly, Systems Analysis and Design, Boston: Course technology cengange learning, 2010. [20] H. Fatta, Rekayasa Sistem Pengenalan Wajah, Yogyakarta: Andi, 2009. [21] T. H. P. H. Marimin, Sistem Infromasi Manajemen : Sumber Daya Manusia, Bogor: Grasindo, 2006. [22] H. Divayana, Konsep OOAD, Jakarta: STMIK Eresha, 2010. [23] J. Hermawan, Analisa Desain & Pemrograman Berorientasi Objek dengan UML dan Visual Basic.NET, Yogyakarta: Andi, 2010. [24] K. Hamilton and R. Miles, Learning UML 2.0, United States of America: O'Reilly, 2006. [25] R. Osherove, The Art of Unit Testing Second Edition, Shelter Island: Manning Publications Co, 2014. [26] J. Meier, C. Farre, P. Bansode, S. Barber and D. Rea, Performance Testing

  Guidance for Web Applications, United States: Microsoft Corporation, 2007. [27] Blazemeter, "Blazemeter Docs," [Online]. Available: https://guide.blazemeter.com/hc/en-us/articles/207421515-Aggregate-

  Report-Aggregate-Report. [Accessed Tuesday May 2016]. [28] LoadFocus.com, "loadfocus," [Online]. Available: https://loadfocus.com/blog/2013/11/24/performance-testing-metrics- explained/. [Accessed Tuesday May 2016].

  [29] IBM, "Introduction to Web Services Architecture," vol. 41, p. 170, 2002. [30] J. Webber, S. Parastatidis and I. Robinson, REST in Practice, United States: O’Reilly Media, Inc., 2010.

  [31] R. T. Fielding, "Architectural Styles and the Design of Network-based Software Architectures," [Online]. Available: http://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm#sec _5_1. [Accessed Sunday July 2016].

  [32] j. org, "json org," [Online]. Available: http://json.org/json-id. [Accessed 23 Desember 2014].

BAB I PENDAHULUAN I.1 Latar Belakang Masalah Selama beberapa dekade ini teknologi web berkembang dengan cepat. Perkembangan ini mengakibatkan banyak bahasa pemrograman baru bermunculan

  yang sering dikenal dengan “language war”. Bahasa pemrograman baru ini hadir dengan kualitas yang lebih baik sehingga menjadikan dunia web development berkembang cepat. Persaingan ini hadir dalam hal performa, keamanan, kesederhanaan sintaks, optimalisasi, dan kemampuan untuk berkembang di masa datang, sehingga banyak developer yang memigrasikan kode dari bahasa satu ke bahasa lain demi menjadikan program yang lebih baik dan cepat. Hal ini juga berlaku untuk aplikasi Crimezone.

  Crimezone merupakan aplikasi citizen journalism pada mobile untuk melaporkan bentuk kriminalitas. Aplikasi ini tersedia dalam platform android dan

  

windows phone . Berdasarkan wawancara yang telah dilakukan diperoleh informasi

  bahwa aplikasi ini sudah berjalan dengan baik, namun memiliki beberapa kekurangan dari segi sistem backend. Pertama, sistem backend saat ini belum bekerja dengan baik, dalam melayani akses pengguna. Hal ini dibuktikan dengan masih terjadinya kegagalan dalam mengirimkan data yang berupa image stream dengan kapasitas yang cukup besar. Kegagalan ini terjadi apabila proses uploadnya memakan waktu yang terlalu lama akan menyebabkan request time out. Kedua, sistem backend belum bekerja dengan cepat dan optimal yang dibuktikan dengan kinerja dari web service yang lambat dalam melayani request dan response data dari pengguna. Ketiga, sintaksis PHP yang digunakan belum mengikuti standar update terbaru. Salah satu contohnya yaitu, ketika ingin menghubungkan PHP ke database MySQL masih menggunakan method mysql. Padahal method mysql itu sendiri masih rentan terhadap berbagai jenis serangan web seperti misalnya SQL Injection.

  Secara umum, untuk membangun sistem backend yang baik dan bagus ditentukan oleh bahasa pemrograman yang digunakan. Pemilihan bahasa pemrograman yang tepat akan menentukan tingkat kualitas sistem yang dibangun. Ada beberapa kriteria yang menentukan bahasa pemrograman baik dan bagus. Pertama, bisa menghasilkan kode yang lebih baik, dengan kode yang lebih baik akan menghasilkan performa yang cepat ketika dijalankan. Kedua, bisa mengatasi masalah concurrency dan mendukung parallelism sehingga menjadikan program

  

scalable [1]. Ketiga, kode yang di tulis secara default memiliki keamanan yang

tinggi dalam melindung terhadap berbagai jenis serangan web [2].

  Oleh karena itu, berdasarkan permasalahan yang telah dijelaskan dan berdasarkan studi literatur, didapatkan solusi yaitu dengan memigrasikan kode pada

  

backend Crimezone dari PHP ke Scala. Pemilihan Scala sebagai bahasa

  pemrograman akan meningkatkan performa sistem backend [3], memudahkan dalam menggunakan pemrograman asynchronous, concurrency, dan parallelism serta meningkatkan keamanan pada sistem [4]. Selain itu, masih banyak keuntungan lain yang akan diperoleh dengan menggunakan Scala dibandingkan menggunakan PHP.

  I.2 Perumusan Masalah

  Berdasarkan latar belakang yang telah dijelaskan, maka dirumuskan suatu masalah yaitu bagaimana memigrasikan kode pada backend Crimezone dari PHP ke Scala.

  I.3 Maksud dan Tujuan

  Maksud dari penelitian ini adalah memigrasikan kode pada backend Crimezone dari PHP ke Scala dengan tujuan sebagai berikut: 1.

  Meningkatkan performa sistem backend dalam melayani akses pengguna.

  2. Memudahkan dalam menggunakan pemrograman yang mendukung

  asynchrnous , concurrency, dan parallelism.

  3. Meningkatkan keamanan sistem backend sehingga tidak rentan terhadap berbagai serangan web.

I.4 Batasan Masalah

  Adapun batasan masalah yang digunakan dalam penelitian ini adalah sebagai berikut:

  1. Pengembangan perangkat lunak hanya difokuskan untuk sistem backend.

  2. Perangkat lunak menggunakan basis data yang telah tersedia pada pembangunan perangkat lunak sebelumnya.

  3. Pendekatan analisis yang digunakan dalam migrasi perangkat lunak ini menggunakan Structure Analysis and Design (SAD) dan Object Oriented

  Analysis and Design (OOAD).

  4. Perangkat lunak menggunakan JSON (Javascript Object Nation) sebagai media pertukaran data dengan server.

  5. Pada penelitian ini, keamanan sistem yang di-handle yaitu pada server. Di sistem baru, sistem backend dan frontend akan dipasang Cloudflare yang berguna meningkatkan keamanan sistem dari berbagai jenis serangan web.

  I.5 Metodologi Penelitian

  Metodologi penelitian yang digunakan dalam penelitian ini adalah metode penelitian komparatif. Metode ini bertujuan untuk membandingkan persamaan dan perbedaan dua atau fakta-fakta dan sifat-sifat objek yang di teliti, sehingga dapat menentukan mana yang lebih baik atau mana yang sebaiknya dipilih. Dalam pelaksanaannya, metodologi penelitian ini terdiri dari metode pengumpulan data dan metode pembangunan perangkat lunak itu sendiri.

  I.5.1 Metode Pengumpulan Data

  Metode pengumpulan data yang digunakan adalah sebagai berikut: 1. Studi Literatur

  Pengumpulan data yang dilakukan dengan cara mempelajari dan memahami berbagai literatur ilmiah yang bersumber dari jurnal, buku, proceedings, thesis, dan bacaan lainnya yang dapat dijadikan acuan dalam penelitian ini seperti konsep

  software migration

  , software maintenance, metode reverse enginnering, scala,

concurrency , paralleism, asynchronous, non-blocking, teknologi cloud, dan JSON.

2. Wawancara

  Pengumpulan data yang dilakukan dengan cara bertanya langsung yang ada kaitannya dengan topik yang diambil. Wawancara ini dilakukan kepada beberapa

  

backend developer aplikasi Crimezone. Wawancara yang dilakukan lebih mengarah

kepada performa dan kekurangan apa saja yang dimiliki aplikasi saat ini.

I.5.2 Metode Migrasi Perangkat Lunak

  Dalam memigrasikan kode pada backend perangkat lunak ini akan menggunakan pendekatan Reference Migration Processes (ReMiP). ReMiP merupakan model proses umum yang menggambarkan aktivitas yang dibutuhkan sebagai tahapan dalam proses migrasi. Proses-proses yang terjadi di dalamnya adalah [6]: 1.

  Requirement Analysis Tahap requirement analysis merupakan tahapan pertama di ReMiP. Pada tahap ini hanya dilakukan analisis kebutuhan non-fungsional karena memiliki dampak langsung terhadap pemilihan teknologi. Sedangkan analisis fungsional tidak perlu dilakukan karena fungsionalitas sistem tidak mengalami perubahan.

  Selain itu, kebutuhan peralatan migrasi diperiksa dan semua kebutuhan dikelola untuk mengatasi perubahan.

  2. Legacy Analysis Pada tahap ini dimulai dengan menganalisa legacy system kasar. Legacy system dinilai kualitas teknis dan nilai bisnisnya.

  3. Target Design Pada tahap ini, arsitektur, struktur data, dan antarmuka pengguna dari sistem baru didefinisikan. Pada tahap ini juga disertakan artifact sementara yang mungkin disertakan selama perubahan. Selain itu, legacy artifact dipetakan ke target artifact yang sesuai.

  4. Strategy Selection Pada tahap ini dilakukan pemilihan strategi migrasi yang akan digunakan. Strategi migrasi menjelaskan bagaimana legacy system akan dikonversi ke dalam sistem yang dimigrasikan. Strategi yang dipilih yaitu strategi re-implementation dengan alasan sistem baru di kembangkan ulang berdasarkan ide-ide yang disediakan oleh legacy software tanpa mengubah fungsionalitas sistem yang ada.

  Re-Implementation

  dimulai dengan menganalisis legacy system, kebutuhan fungsional dan non-fungsional diambil.

  5. Implementation Pada tahap ini dilakukan implementasi desain sistem yang telah didefinisikan. Selain itu, legacy system dimigrasikan sesuai dengan strategi migrasi yang dipilih pada tahapan strategy selection.

  6. Test Salah satu tujuan utama dari migrasi perangkat lunak yaitu untuk membuat salinan fungsional one-to-one dari system legacy. Pada tahap ini, sistem baru akan diuji, apakah mendukung fungsi yang sama dengan sistem lama. Untuk melakukannya bisa menggunakan unit test.

  7. Deployment Tahap deployment merupakan tahap terakhir dalam tahapan migrasi perangkat lunak. Tahap ini berbicara bagaimana memperkenalkan sistem baru yang sudah dihasilkan dengan menggunakan strategi yang ada. Salah satu strategi yang bisa digunakan yaitu big-bang strategy. Strategi ini dilakukan dengan cara sistem baru di-deploy secara lengkap dan sekaligus menutup legacy system pada waktu yang bersamaan. Keuntungan menggunakan strategi ini yaitu cepat dan mengurangi biaya migrasi. Dari berbagai tahapan-tahapan tersebut, untuk lebih jelasnya dapat dilihat pada

  

Gambar I.1 Tahapan ReMiP [6]

I.6 Sistematika Penulisan

  Sistematika penulisan penelitian ini disusun untuk memberikan gambaran umum mengenai penelitian yang dikerjakan. Sistematika penulisan dalam penelitian ini adalah:

  BAB 1 PENDAHULUAN Bab ini menguraikan latar belakang permasalahan, merumuskan inti

  permasalahan, mencari solusi atas masalah tersebut, mengidentifikasi masalah tersebut, menentukan maksud dan tujuan, kegunaan penelitian, pembatasan masalah, metode penelitian, dan sistematika penulisan.

  BAB 2 LANDASAN TEORI Bab ini menguraikan bahan-bahan kajian, konsep dasar, dan teori dari para

  ahli yang berkaitan dengan penelitian. Meninjau permasalahan dan hal-hal yang berguna dari penelitian-penelitian dan sintesis serupa yang pernah dikerjakan sebelumnya dan menggunakannya sebagai acuan pemecahan masalah pada penelitian ini.

  BAB 3 ANALISIS DAN PERANCANGAN SISTEM Bab 3 berisi tentang analisis sistem yang terdiri dari analisis masalah, analisis

  spesifikasi kebutuhan perangkat lunak, analisis kebutuhan non fungsional, analisis kebutuhan fungsional legacy system, analisis kebutuhan class new system, analisis

  concurrency

  dan asynchronous, dan analisis data. Perancangan sistem terdiri dari perancangan class, perancangan data, perancangan arsitektur menu, dan perancangan antarmuka.

  BAB 4 IMPLEMENTASI DAN PENGUJIAN SISTEM Bab ini berisi tentang implementasi hasil dari analisis dan perancangan

  sistem, perancangan sistem ke dalam bentuk bahasa pemrograman, kebutuhan perangkat keras dan perangkat lunak yang diperlukan dalam membangun sistem serta pengujiannya.

  BAB 5 KESIMPULAN DAN SARAN Bab ini akan berisikan kesimpulan-kesimpulan dari penelitian, dan terdapat

  pula saran yang diberikan agar dapat digunakan di masa mendatang untuk perbaikan perangkat lunak menjadi lebih baik.

BAB II LANDASAN TEORI II.1 Sekilas Crimezone Crimezone merupakan aplikasi citizen journalism pada mobile untuk

  melaporkan bentuk kriminalitas. Bentuk kriminalitas yang bisa dilaporkan berupa perampokan, penganiayaan, penculikan, pemerkosaan, pembunuhan, dan pembakaran. Aplikasi ini tersedia dalam platform mobile android dan windows

  

phone . Secara umum, aplikasi ini memudahkan pengguna dalam memperoleh

  informasi mengenai area lokasi yang rawan kriminalitas, sehingga dengan informasi tersebut masyarakat dapat menghindarinya. Selain itu, pengguna juga dapat mem-posting tindakan kriminal dengan cara mengambil foto suatu kejadian beserta informasi tambahan seperti nama lokasi, jenis kejahatan, tanggal kejadian, dan lain sebagainya.

  Crimezone terdiri dari dua subsistem yaitu subsistem mobile yang digunakan oleh masyarakat sebagai media untuk melaporkan kejahatan dan mengetahui informasi tindak kejahatan yang berasal dari pihak kepolisian atau masyarakat itu sendiri, serta subsistem web yang digunakan oleh pihak kepolisian untuk mengolah data kejahatan. Berikut gambaran implementasi sistem Crimezone: 1.

  Pengguna akan memberikan informasi posisi keberadaannya melalui GPS, kemudian GPS akan memberikan titik koordinat keberadaannya. Koordinat yang didapat akan berpengaruh terhadap map yang akan ditampilkan di smartphone pengguna.

  2. Pengguna yang menggunakan sistem berbasis mobile dapat melakukan posting data dengan mengirimkan post data ke web service, kemudian web service tersebut meneruskan pengiriman data ke database. Selain itu, pengguna juga bisa melakukan binding data yang dilakukan melalui web service, kemudian

  web service akan melakukan request ke dalam database.

  3. Untuk sistem yang berbasis web dapat melakukan posting data dengan mengirimkan post data ke web service, kemudian dilakukan pengiriman data ke basis data yang mana akan berlaku sama dengan pengiriman data yang Berikut adalah screen-shoot dari aplikasi Crimezone.

II.2 Software Maintenance

  Di dunia IT, sangat sedikit proyek pengembangan perangkat lunak yang dirancang dari awal. Biasanya, customer sudah memiliki sistem IT yang sudah di-

  

deploy dan berjalan. Sistem tersebut dinamakan legacy system. Sistem tersebut

  memiliki nilai yang besar untuk pelanggan karena terbukti sudah berjalan dalam waktu yang lama. Di lain sisi, untuk menjaga sistem tersebut sangat mahal, sehingga dibutuhkan metode untuk mengurangi biaya pemeliharaan yang

  Berikut ada beberapa pendekatan tentang bagaimana menangani legacy

  

system yang termasuk ke dalam satu genus yaitu software maintenance. Software

maintenance

  merupakan aktivitas yang dibutuhkan untuk menjaga sistem perangkat lunak operasional dan responsif setelah diterima dan diproduksi. Ini adalah serangkaian kegiatan yang mengakibatkan perubahan pada accepted

  • baseline

  product

  yang aslinya. Perubahan ini terdiri dari modifikasi yang dibuat dengan mengoreksi, memasukan, menghapus, memperluas, dan meningkatkan sistem dasar [8]. Berikut ini yang termasuk dalam metode software maintenance [7]: a.

  Software Re-Development yaitu mengembangkan sistem baru dengan fungsionalitas baru dengan menggunakan ide-ide dari legacy system.

  b.

  Software Evolution yaitu meningkatkan legacy system tetapi fungsionalitasnya tidak terlalu banyak yang berubah.

  c.

  Software Re-Engineering yaitu merenovasi sistem dan meningkatkan kemampuan maintenance tanpa mengganti teknologi sistem.

  d.

  Software Migration yaitu memindahkan sistem ke dalam lingkungan baru atau teknologi baru tanpa mengganti fungsionalitas.

II.3 Software Migration

  Seperti yang telah dijelaskan bahwa software migration merupakan metode dari software maintenance dengan definisi memindahkan sistem ke dalam lingkungan baru atau teknologi baru tanpa mengganti fungsionalitas yang ada pada sistem. Metode ini merupakan salah satu yang paling cocok untuk mengurangi biaya pemeliharaan karena meningkatkan maintainability dengan memigrasikan perangkat lunak ke dalam teknologi baru. Berikut ini yang termasuk dalam proyek

  software migration meliputi [9]: a.

  Migration of data b. Migration of user interface c. Migration of code Memigrasikan legacy system membutuhkan pemahaman dari legacy code dan mengubahnya menjadi teknologi baru. Dengan melihat aplikasi perusahaan besar yang terus berkembang biak dalam waktu yang lama, tugas ini menjadi tugas yang kompleks. Oleh karena itu, diperlukannya metode struktur dalam merencanakan dan melaksanakan migrasi.

  Ackerman telah menganalisis beberapa metode software migration dan mengidentifikasi sekumpulan disiplin inti dari software migration. Hasilnya yaitu berupa pendekatan umum tentang cara memigrasikan perangkat lunak yang dinamai referensi migrasi proses (ReMiP). ReMiP dibagi menjadi yaitu supporting

  disciplines

  dan migration disciplines. Supporting disciplines menangani kegiatan pendukung seperti manajemen proyek, manajemen konfigurasi atau lingkungan pengembangan. Sedangkan migration disciplines menangani perencanaan, pelaksanaan, dan memvalidasi migrasi itu sendiri. Migration disciplines terdiri dari [5]: 1.

  Requirement Analysis Tahapan pertama dalam ReMiP yaitu requirement analysis. Dalam

  memigrasikan

  perangkat lunak, fungsionalitas tidak di ubah sehingga analisis kebutuhan fungsional tidak diperlukan. Melainkan, berfokus pada pengumpulan kebutuhan non-fungsional karena memiliki dampak langsung pada pemilihan target teknologi. Selain itu, kebutuhan peralatan migrasi diperiksa dan semua kebutuhan dikelola untuk mengatasi perubahan.

  2. Legacy Analysis

  Legacy

  analysis dimulai dengan menganalisa legacy system kasar. Legacy

  

system dinilai kualitas teknis dan nilai bisnis. Sistem kemudian dianalisis lebih rinci

  menggunakan metode reverse-engineering. Dengan begitu, legacy system sekarang bisa kembali direkayasa untuk meningkatkan kualitas sistem demi mendapatkan hasil yang lebih baik setelah transformasi.

  3. Target Design Selama target design, arsitektur, struktur data, dan antarmuka pengguna dari sistem baru didefinisikan. Di sini juga disertakan artifact sementara yang mungkin digunakan selama perubahan. Selain itu, legacy artifact dipetakan ke target artifact yang sesuai.

  4. Strategi Selection

  c.

  5. Implementation Selama tahap implementasi, legacy system dimigrasikan sesuai dengan strategi migrasi yang dipilih.

  legacy function melalui wrapper.

  antarmuka untuk sistem yang baru sehingga sistem yang baru bisa mengakses

  system . Wrapper yang ditulis mengakses legacy function dan menyediakan

  tidak mengubah legacy system. Legacy function tetap dalam legacy

  wrapping

  Wraping tidak mengubah legacy system tetapi menyediakan antarmuka baru untuk memberikan akses pada legacy function ke sistem yang baru. Strategi

  software akan menghasilkan salinan one-to-one dari sistem.

  Strategy selection merupakan tahapan memilih strategi migrasi. Strategi

  atau legacy data ke dalam teknologi yang baru. Strategi ini hanya bisa dilaksanakan dengan menggunakan alat transformasi. Biasanya, alat ini harus dirancang dan diimplementasikan sebelum migrasi. Dengan asumsi bahwa alat migrasi tidak punya kegagalan, transformasi otomatis legacy

  legacy application

  Transformation yaitu mengkonversi sistem secara otomatis menjadi target sistem. Strategy transformation mencoba untuk secara otomatis mengkonversi

  b.

  diambil.

  implementation , legacy system dianalisis dan kebutuhan fungsional dan non- fungsional

  Re-Implementation merupakan re-development sistem baru berdasarkan ide-ide yang diberikan oleh legacy software. Jika menggunakan strategi re-

  migrasi menjelaskan bagaimana legacy system akan dikonversi ke dalam sistem yang dimigrasikan. Terdapat tiga strategi migrasi yaitu: a.

  6. Test Salah satu tujuan utama dari migrasi perangkat lunak yaitu untuk membuat salinan one-to-one functional dari legacy system, Selam dalam tahapan test, sistem yang baru akan diuji, apakah mendukung fungsi yang sama dengan sistem yang lama dengan menggunakan integration test dan unit test.

7. Deployment

  Di akhir proses migrasi yaitu bagaimana cara memperkenalkan sistem yang baru muncul. Seringkali, legacy system masih produktif dan tidak bisa ditutup dengan sederhana. Sehingga diperlukan strategi bagaimana cara menggunakan sistem yang baru dan menutup sistem yang lama. Strategi yang bisa digunakan antara lain: a.

  Big-Bang Startegy

  Deployment menggunakan strategi big-bang dengan cara sistem yang baru di- deploy secara lengkap dan sekaligus menutup legacy system pada waktu yang

  bersamaan. Hal ini sangat beresiko karena seluruh pekerjaan yang dilakukan sistem baru belum terbukti. Sebaliknya, dengan strategi ini bisa menurunkan biaya migrasi.

  b.

  Continuous Strategy Strategi ini hanya memigrasikan bagian-bagian tertentu dari legacy system yang sudah direkayasa ulang. Komponen lainnya tidak berubah sampai direkayasa ulang, Kelemahan dari strategi ini yaitu dapat menyebabkan waktu proyek menjadi sangat panjang.

II.4 Scala

  Scala adalah singkatan dari scalable language. Dinamakan scalable karena Scala dirancang untuk tumbuh dengan penggunanya. Scala bisa digunakan untuk menulis kode program yang sederhana sampai dengan membangun sistem yang besar dan kompleks. Selain itu, Scala adalah perpaduan antara paradigma Object

Oriented Programming (OOP) dan paradigma Functional Programming (FP).

  Kedua paradigma inilah yang menjadi alasan kenapa Scala menjadi bahasa yang scalable .

  Paradigma OOP menjadikan mudah dalam menyusun struktur sistem yang besar dan mengadaptasinya terhadap permintaan yang baru. Paradigma FP menjadikan mudah dalam membangun hal yang menarik secara cepat dari bagian yang sederhana. Kelebihan dari Scala yaitu pertama, Scala kompatibel. Itu dikarenakan Scala berjalan di atas Java Virtual Machine (JVM) dan berbagi dengan kode java serta dapat ditambahkan ke dalam kode yang sudah ada. Kedua, Scala sederhana, program yang ditulis dalam bahasa Scala selalu singkat dan ringkas. Ketiga, Scala memiliki abstraction tingkat tinggi yang berguna dalam mengatur dan mengelola kompleksitas program. Inilah yang menjadikan Scala menjadi salah satu Bahasa pemrograman yang mulai banyak penggunanya saat ini [1].

II.5 Functional Programming

  Paradigma pemrograman yang memperlakukan proses komputasi sebagai evaluasi fungsi-fungsi matematika. Pemrograman fungsional didasarkan pada premis sederhana bahwa program-program yang dibangun menggunakan fungsi murni. Dalam pengertian yang terbatas, pemrograman fungsional berarti pemrograman tanpa menggunakan variabel mutable, assignment, loops, struktur kontrol imperative lainnya. Sedangkan dalam arti yang luas, pemrograman fungsional berarti berfokus pada fungsi. Pemrograman fungsional sangat berbeda dengan pemrograman konvensional. Dengan mempelajari pemrograman fungsional akan meningkatkan kualitas kode, baik dari sisi penulisan maupun perancangan [10]. Berikut adalah fitur-fitur dari pemrograman fungsional antara lain yaitu: 1.

  First-Class Functions artinya fungsi bisa disimpan ke dalam suatu variabel.

  2. High-Order Function artinya fungsi bisa mengembalikan fungsi atau menerima fungsi lainnya sebagai parameter.

  3. Pure Function artinya fungsi tidak mengubah nilai apapun, fungsi hanya menerima dan mengeluarkan data.

  4. Closures artinya data bisa disimpan di dalam fungsi yang hanya bisa diakses untuk mengembalikan fungsi tertentu.

  5. Immutable State artinya state yang telah diinisialisasikan tidak bisa di ubah.

II.6 Padanan PHP, Scala dan Java

  Scala keyword untuk mendefinisikan kelas class Java class Object Scala object keyword untuk mendefinisikan object.

  Map mendefinisikan array dengan format immutable key-value store, atau istilah lainnya yaitu associative array

  Set mendefinisikan array dengan tipe immutable dan unordered collection, yang kerjanya mirip dengan List

  Digunakan untuk mengenkapsulasi method dan pendefinisian field Collection Scala List mendefinisikan array dengan tipe immutable singly linked list

  Digunakan untuk mengenkapsulasi method dan pendefinisian field Trait Java trait keyword untuk mendefinisikan trait.

  Java package Interface Scala interface keyword untuk mendefinisikan interface.

  Namespace PHP 5 namespace keyword untuk mendefinisikan namespace Package Scala package keyword untuk mendefinisikan package

  Untuk memberikan gambaran tentang PHP, Scala, dan Java, berikut ini akan ditampilkan tabel yang menggambarkan keyword untuk mendefinisikan variable, fungsi, dan seterusnya yang dapat dilihat pada1] [11] [12].

  

Tabel II.1 Padanan PHP, Scala, dan Java

Pendefinisian Bahasa Keyword Keterangan

  Scala abstract keyword untuk mendefinisikan kelas abstrak

  Java type[] var- name type var- name[] Abstract

  Scala keyword untuk mendefinisikan fungsi def Java def Array PHP 5 array keyword untuk mendefinisikan array Scala Array

  Java println Fungsi PHP 5 function

  Output Data PHP 5 echo keyword untuk output data ke layar print Scala println

  Variabel PHP 5 $namaVar keyword untuk mendefinisikan variabel define keyword untuk mendefinisikan constanta Scala var keyword untuk mendefinisikan variabel yang nilainya mutable val keyword untuk mendefinisikan value yang nilainya immutable Java type namaVar keyword untuk mendefinisikan variabel

  Java abstract Class PHP 5 class

  II.7 Play Framework Play adalah full stack web framework berkecepatan tinggi untuk Java dan

  Scala yang memungkinkan alur kerja yang sangat produktif tanpa mengorbankan skalabilitas. Play menerapkan arsitektur MVC dengan rute file yang memetakan HTTP request ke controller, kemudian mengambil permintaan informasi dan menghasilkan sebuah hasil representasi. Play dibangun untuk web modern dengan konsep non-blocking, RESTful secara default, dan memiliki built-in asset compiler untuk teknologi client-side seperti CoffeeScript dan LESS [13].

  II.8 Concurrency dan Parallelism Concurrency dan paralelisme adalah konsep yang saling berkaitan, tetapi ada

  perbedaan yang kecil. Concurrency artinya dua atau lebih tugas yang membuat

  progress

  (kemajuan) tetapi tidak di eksekusi secara bersamaan. Hal ini dapat dicapai dengan mengiris waktu (time slicing) ketika bagian dari tugas di eksekusi secara berurutan dan mencampur dengan tugas-tugas yang lain. Paralelisme, dari sisi lain muncul ketika eksekusinya dilakukan benar-benar simultan. Untuk lebih memahami kedua konsep ini dapat dilihat pada14].

  

Gambar II.1 Concurrency

Parallelism

  Gambar II.2

II.9 Asynchronous dan Synchronous

  Suatu pemanggilan method dianggap (considered) synchronous jika pemanggil (caller) tidak bisa membuat kemajuan (progress) sampai method mengembalikan nilai atau throw exception. Di lain sisi, panggilan secara

  

asynchronous , memungkinkan pemanggil (caller) membuat kemajuan setelah

  beberapa langkah, dan penyelesaian metode dapat ditandai dengan beberapa mekanisme tambahan seperti callback, future, atau message. Untuk lebih memahami kedua konsep ini dapat dilihat pada14].

  

Gambar II.3 Synchronous

Gambar II.4 Asynchronous

  Di Scala, untuk menerapkan konsep concurrent dan asynchronous dilakukan dengan cara menambahkan library berikut: Setelah itu, menambahkan keyword Future atau Action.async di setiap

  

method kelas Scala yang menerapkan konsep ini yang akan dicontohkan di bawah

  ini: