BAB II LANDASAN TEORI 2.1 Metodologi Rekayasa Perangkat Lunak Metodologi rekayasa perangkat lunak pada dasarnya berfungsi untuk membantu menghasilkan perangkat lunak yang berkualitas. Metodologi pengembangan perangkat lunak memberikan panduan dalam membangun sebuah perangkat lunak sehingga diperoleh hasil yang sesuai dengan konsep awal yang telah direncanakan. Membanguan perangkat lunak dibutuhkan beberapa serangkaian aktifitas yaitu menyangkut analisis kebutuhan, kontruksi program, desain dan pengujian. The traditional waterfall model is a sequential model. It separates system development into distinct phases that are supposed to be completed in sequence, i.e., one phase should not be started before the preceding phase is completed. The phases typically are analysis, design, programming, and testing. Depending on the type of system, one might also need to consider integration with other systems. Waterfall-based development models are widely used (Moløkken-Østvold, Kjetil, 2005). Pada dasarnya model air terjun adalah model klasik yang bersifat sistematis, berurutan dalam membangun perangkat lunak. Model ini termasuk model yang umum digunakan yang diperkenalkan oleh Winston Royce sekitar tahun 1970. Disebut metode air terjun karena tahap demi tahap yang dilalui harus menunggu selesainya tahap sebelumnya dan berjalan berurutan. Beberapa tahapan yang harus dilakukan pada model ini antara lain sebagai berikut . - Analisa Tahapan ini adalah mencari kebutuhan yang difokuskan pada domain informasi dari perangkat lunak semisal fungsi-fungsi yang dibutuhkan, antar muka yang akan dibuat. Proses pencarian kebutuhan yang berhubungan dalam pembutan perangkat lunak sangat penting ketika perangkat lunak harus berhubungan dengan perangkat keras, manusia, dan basis data. Analisa memungkinkan desainer untuk mendapatkan sifat-sifat sistem dan menentukan kompleksitas untuk memverifikasi apakah sistem yang dimodelkan memiliki sifat seperti itu (Hororwitz, Lung-chun liu, 1989). - Perancangan Proses mengubah kebutuhan-kebutuhan diatas menjadi sebuah blueprint kerangka perangkat lunak. Dalam hal ini terdapat empat atribut yaitu : Bagaimana membentuk struktur data, arsitektur perangkat lunak, proses detil dan karakteristik antar muka. - Pemrograman Proses menterjemahkan hasil dari perancangan kedalam bahasa pemrograman yang dimengerti oleh komputer. Proses ini biasa disebut dengan proses coding, dan biasanya menggunakan bahasa pemrograman tertentu. - Pengujian Proses pencocokan fungsi-fungsi perangkat lunak dengan blueprint yang sudah dibuat pada tahap analisa dan perancangan. Dalam tahapan ini harus dipastikan bahwa perangkat lunak bekerja sesuai dengan hasil yang diharapkan. - Perawatan Proses pengembangan perangkat lunak lanjutan. Pada tahap ini ada kemungkinan terjadinya error pada perangkat lunak yang tidak ditemukan pada tahapan pengujian dan harus diperbaiki. Atau bisa saja terjadinya penambahan fitur-fitur seiring dengan pertambahan usia perangkat lunak dan juga kemajuan teknologi. Berikut adalah gambaran bagaimana tahapan yang berjalan pada metode air terjun. Gambar 2.1 Model WaterFall (Roger S. Pressman, 2010) Alasan kenapa model air terjun ini banyak digunakan karena beberapa hal sebagai berikut (Moløkken-Østvold, Kjetil, 2005). - Mudah dalam penerapannya. - Kualitas dari sistem yang dihasilkan akan baik. Hal ini karena dalam pelaksanaannya secara bertahap. - Kebutuhan sistem dapat didefinisikan secara utuh dan dapat terukur. - Dokumentasi pengembangan sistem sangat terorganisir. - Jika terjadi masalah saat kebutuhan sistem di awal maka hal ini dapat segera diidentifikasi. Adapun kelemahan dari metode ini antara lain sebagai berikut. - Kesalahan kecil akan menjadi masalah besar jika tidak diketahui sejak awal pengembangan yang berakibat pada tahapan selanjutnya. - Diperlukan manajeman yang baik. - Pada kenyataanya, jarang mengikuti urutan sekuensial seperti pada teori. 2.1.1 Analisa Berorientasi Objek (OOAD) Object-oriented analysis and design (OOAD) is an alternative approach to solving problems in systems development. Unlike both the classical and structured approaches which focus on the development process, the object-oriented analysis and design methods emphasize the definition, structure, and use of data (Garceau, Linda R; Jancura, Elise G; Kneiss, John, 1993). Analisis berorientasi objek dan desain (OOAD) didefinisikan sebagai sebuah pendekatan alternatif untuk memecahkan masalah dalam pengembangan sistem. Hal ini tidak seperti pada pendekatan klasik dan terstruktur yang berfokus pada proses pembangunan, analisis dan desain. Tujuan dari analisis berorientasi objek adalah mempelajari permasalahan dengan menspesifikasikanya atau mengobservasi permasalahan tersebut dengan berorientasi objek. Keuntungan dari analisa berorientasi objek antara lain: - Terjadinya komunikasi yang baik antar user/analis sehingga pemodelan akan menjadi lebih mudah. - Penggunaan ulang code program, meningkatkan fleksibilitas. - Peningkatan produktifitas dan keandalan yang lebih baik. 2.1.2 Desain Berorientasi Objek (OOD) Desain berorientasi objek kini semakin banyak digunakan oleh para pengembang perangkat lunak. Object-oriented (OO) technology offers the prospective user a number of new choices in programming languages, tools, databases, and analysis/design methodologies (Reid, 1994). Model desain ini mengubah model konseptual yang dihasilkan dalam analisis berorientasi objek memperhitungkan kendala yang dipaksakan oleh arsitektur yang dipilih dan setiap non fungsional seperti throughput, response time, run, waktu platform lingkungan pengembangan atau bahasa pemrograman. Karakteristik dari metodologi objek antara lain dipaparkan sebagai berikut ini. - Enkapsulasi (Encapsulation) Data dan prosedur atau fungsi dikemas bersama-sama dalam suatu objek sehingga prosedur atau fungsi dari luar tidak dapat mengaksesnya. Data terlindung dari prosedur atau objek lain kecuali prosedur yang ada pada objek itu sendiri. - Pewarisan (Inheritance) Pewarisan bisa diartikan bahwa atribut atau metode dari objek induk diturunkan kepada anak objek, demikian seterusnya. Dengan adanya pewarisan suatu kelas dapat ditentukan menjadi sub kelas sehingga sub kelas memiliki sifat yang dimiliki oleh induknya. - Polimorfise (polymorphisme) Polimorfisme diartikan bahwa operasi yang sama dimungkinkan mempunyai perbedaan dalam kelas yang berbeda. 2.1.3 System development life cycle (SDLC) SDLC (Daur Hidup Pengembangan Sistem) adalah proses yang digunakan oleh analis sistem untuk mengembangkan sistem informasi, mulai dari perencanaan, penentuan kebutuhan, perancangan, validasi sampai pelatihan dan penyerahan pada konsumen. Tidak hanya penting untuk proses pengembangan perangkat lunak saja tetapi juga untuk proses pemeliharaan perangkat lunak itu sendiri. The general framework for any models of the SDLC passes through the common phases of software development such as: initiation, planning, designing, implementing, and testing (Obeidat, Jasour A; Nasereddin, 2013). - Initiation Proses ini adalah tahapan untuk menentukan masalah yang ada dan mendefiniskannya, serta melakuakan studi kelayakan. Diperlukan pengetahuan ruang lingkup terhadap suatu sistem yang telah ada saat ini, tujuan dan manfaat pembuatan sistem baru atau pengembangan dari sistem yang telah ada sebelumnya. - Planning Membuat perencanaan terhadap proyek dan dokumentasi untuk sistem baru. Pada tahap ini diperhatikan juga bagaimana menetapkan mekanisme yang dibutuhkan guna membangun sistem yang baru. - Designing Mendesain sistem baru atau melakukan pengembangan terhadap sistem yang sudah ada guna menyelesaikan masalah masalah yang dihadapi. - Implementating Tujuan dari implementasi adalah melakukan spesifikasi rancangan logika kedalam kegiatan yang sebenarnya dari sistem informsai yang akan dibangunnya atau dikembangkan. Mengimplementasikan sistem yang baru dan juga memastikan sistem yang baru dapat berjalan secara optimal. - Testing Pengujian yang dilakukan adalah secara menyeluruh bukan hanya pada desain yang digunakan tetapi menguji semua sistem yang telah ditetapkan. Hal ini dilakukan guna menghindari kesalahan seperti kesalahan penyimpanan, image yang salah ataupun inputan dari user. 2.2 Unified modeling language (UML) Unified Modeling Language (UML) has emerged as the software industry's dominant modeling language. It is the de facto modeling language standard for specifying, visualizing, constructing, and documenting the components of software systems (Siau, Keng; Cao, 2001). UML adalah sebuah bahasa yang telah menjadi standar dalam industri untuk menentukan, menggambarkan (visualisasi), membangun dan mendokumentasikan komponen sistem perangkat lunak. Bahasa pemodelan UML lebih cocok untuk pembuatan perangkat lunak dalam bahasa pemrograman berorientasi objek (C#, C++, Java, VBNET), namun demikian bisa juga digunakan pada bahasa pemrograman prosedural. Tujuan dari pemodelan sistem ini adalah untuk memodelkan proses bisnis yang terjadi pada rancangan sistem yang dibuat dan mendokumentasikan perangkat lunak yang akan dibuat, sehingga akan memudahkan dalam pengembangan sebuah rancangan sistem. UML adalah bahasa pemodelan visual untuk kebutuhan pemodelan sistem, menggambarkan desain, dan menggambarkan rincian pelaksanaan. Grady Booch, Jim Rumbaugh, dan Jacobson Ivars, dikenal secara kolektif sebagai "tiga Amigos" pada Rational Software Corp, mempelopori pengembangan UML pada pertengahan 1990-an. Unified Modeling Language (UML) meminjam konsep dari sejumlah besar metode yang berbeda, dan dirancang khusus untuk pengembangan sistem berorientasi objek. Segera setelah awal, UML muncul sebagai bahasa pemodelan yang dominan dalam pngembangan perangkat lunak. Oleh Object Management Group (OMG) UML diterima sebagai bahasa standar untuk analisis berorientasi objek dan desain. Selain itu, UML telah diusulkan untuk standardisasi oleh Standards Organization (ISO) dan disetujui sekitar tahun 2001. Terdapat 9 diagram di UML yang digolongkan dalam 2 kategori statik dan dinamik yang antara lain Class Diagram, Object Diagram, Component Diagram, Deployment Diagram, Use Case Diagram, Sequence Diagram, Collaboration Diagram, StateChart Diagram dan Activity Digaram. Adapun dalam bab ini akan dibahas tentang Use Case Diagram, Class Diagram dan Sequence Diagram. 2.2.1 Use case Diagram Use case Diagram menggambarkan fungsionalitas yang diharapkan dari sebuah sistem. Pada use case diagram lebih menitik beratkan pada apa yang diperbuat oleh sistem bukan bagaimana. Dengan adanya use case diagram maka hal ini bisa menggambarkan kebutuhan sistem dari sudut pandang user dan hubungan antara use case dan actor. Sebuah use case diagram dapat di-include oleh lebih dari satu use case diagram lain, sehingga duplikasi fungsionalitas dapat dihindari dengan cara menarik keluar fungsionalitas yang umum. Sebuiah use case diagram juga dapat meng-extend use case diagram lain dengan aktivitasnya sendiri. Notasi notasi yang digunakan dalam pemodelan diagram use case dapat dilihat pada tabel berikut. Tabel 2.1 Simbol UseCase Diagram NO GAMBAR NAMA KETERANGAN Menspesifikasikan himpuan peran 1 Actor yang pengguna mainkan ketika berinteraksi dengan use case. Hubungan dimana perubahan yang terjadi pada suatu elemen mandiri 2 Dependency (independent) akan mempengaruhi elemen yang bergantung padanya elemen yang tidak mandiri (independent). Hubungan dimana objek anak 3 Generalization (descendent) berbagi perilaku dan struktur data dari objek yang ada di atasnya objek induk (ancestor). 4 Include Menspesifikasikan bahwa use case sumber secara eksplisit. Menspesifikasikan bahwa use case 5 Extend target memperluas perilaku dari use case sumber pada suatu titik yang diberikan. 6 Association 7 System Apa yang menghubungkan antara objek satu dengan objek lainnya. Menspesifikasikan menampilkan terbatas. paket sistem yang secara Tabel 2.1 Simbol UseCase Diagram (Lanjutan) Deskripsi dari urutan aksi-aksi 8 Use Case yang ditampilkan sistem yang menghasilkan suatu hasil yang terukur bagi suatu actor Interaksi aturan-aturan dan elemen lain yang bekerja sama untuk 9 Collaboration menyediakan prilaku yang lebih besar dari jumlah dan elemenelemennya (sinergi). Elemen fisik yang eksis saat 10 Note aplikasi dijalankan dan mencerminkan suatu sumber daya komputasi 2.2.2 Class diagram Class Diagram adalah diagram yang paling sering ditemui pada pemodelan berbasis UML. Diagram kelas merupakan spesifikasi yang jika diinstansiasi akan menghasilkan sebuah objek dan merupakan inti dari pengembangan dan desain berorientasi objek. Didalam sebuah diagram kelas terdapat kelas dan antar muka beserta atribut dan operasinya. Relasi yang terjadi antar objek, batasan terhadap objek objek yang saling berhubungan serta inheritance untuk organisasi kelas yang lebih baik semua digambarkan dalam diagram kelas. Dalam diagram kelas terdapat dua komponen penting yaitu structural dan behavioral. Ciri structural adalah adanya pembeda antar objek sedangkan behavioral merupakan tingkah laku yang mampu dilakukan oleh objek. Diagram kelas digambarkan seperti pada gambar berikut ini. Tabel 2.2 Class Diagram Nama Atribut Metoda Atribut dan metode dapat memiliki salah satu sifat sebagai berikut. 1. Private Adalah sifat dimana atribut ataupun metode tidak dapat dipanggil selain dari dalam kelas itu sendiri. 2. Protected Hanya dapat dipanggil oleh kelas yang bersangkutan dan anak-anak yang mewarisinnya. 3. Public Sifat ini bisa dipanggil oleh siapa saja. Dalam prakteknya interface tidak dapat langsung di instansiasikan, tetapi harus diimplementasikan terlebih dahulu mejadi sebuah kelas. Dengan begitu interface mendukung resolusi metode pada saat dirunning. Untuk simbol digram kelas sendiri direpresentasikan pada table berikut ini. Tabel 2.3 Simbol Class Diagram NO GAMBAR NAMA KETERANGAN Hubungan dimana objek anak (descendent) berbagi perilaku 1 Generalization dan struktur data dari objek yang ada di atasnya objek induk (ancestor). Tabel 2.3 Simbol Class Diagram(Lanjutan) Upaya 2 Nary Association untuk asosiasi dengan lebih dari 2 objek. Himpunan 3 Class menghindari yang dari berbagi objek-objek atribut serta operasi yang sama. Deskripsi dari urutan aksi-aksi 4 Collaboration yang ditampilkan sistem yang menghasilkan suatu hasil yang terukur bagi suatu actor 5 Realization Operasi yang benar-benar dilakukan oleh suatu objek. Hubungan dimana perubahan yang terjadi pada suatu elemen 6 Dependency mandiri (independent) mempegaruhi bergantung akan elemen padanya yang elemen yang tidak mandiri Apa 7 Association yang menghubungkan antara objek satu dengan objek lainnya Hubungan antar kelas 1. Asosiasi, yaitu hubungan statis antar kelas. Umumnya menggambarkan kelas yang memiliki atribut berupa kelas lain, atau kelas yang harus mengetahui eksistensi kelas lain. Panah navigability menunjukkan arah query antar class. 2. Agregasi, yaitu hubungan yang menyatakan bagian (“terdiri atas..”). 3. Pewarisan, yaitu hubungan hirarkis antar class. Kelas dapat diturunkan dari kelas lain dan mewarisi semua atribut dan metoda kelas asalnya dan menambahkan fungsionalitas baru, sehingga disebut sebagai anak dari kelas yang diwarisinya. Kebalikan dari pewarisan adalah generalisasi. 4. Hubungan dinamis, yaitu rangkaian pesan (message) yang di-passing dari satu kelas kepada kelas lain. Hubungan dinamis dapat digambarkan dengan menggunakan sequence diagram yang akan dijelaskan kemudian. 2.2.3 Activity diagram Activity diagram menggambarkan proses bisnis, urutan aktivitas dalam sebuah proses, dan bagaimana tahapan-tahapan aktivitas dalam sebuah sistem berjalan. Activity diagram sangat membantu dalam mengenalkan proses bisnis yang akan dibangun kepada customer sekalipun mereka tidak mengerti dengan rekayasa perangkat lunak. Hal ini sangat bermanfaat apabila kita membuat diagram ini terlebih dahulu dalam memodelkan sebuah proses untuk membantu memahami proses secara keseluruhan. Adapun notasi atau simbol dalam activity diagram dapat dilihat pada table sebagai berikut. Tabel 2.4 Simbol activity diagram NO GAMBAR NAMA KETERANGAN Memperlihatkan 1 Activities bagaimana masing-masing kelas antarmuka saling berinteraksi satu sama lain State 2 Action dari mencerminkan sistem eksekusi yang dari suatu aksi 3 4 Initial Node Activity Final Node Bagaimana objek dibentuk atau diawali. Bagaimana objek dibentuk dan dihancurkan Tabel 2.4 Simbol activity diagram (Lanjutan) Menggambarkan Fork 5 satu aliran menyebabkan beberapa (dua atau lebih) aktifitas dikerjakan secara bersamaan. Menggambarkan beberapa (dua Fork 6 atau lebih) aliran menyatu untuk melanjutkan ke sebuah aktifitas. Sebuah activity hanya bisa mempunyai satu alur masuk dan satu 7 Decision / split merge alur keluar. pemisahan Sehingga alur(split) dan penggabungan (merge) digambarkan dengan memanfaatkan simbol yang sama yaitu 2.3 Bahasa Pemrograman Java Dalam pengembangan rekayasa perangkat lunak bahasa pemrograman adalah komponen penting yang akan menerjemahkan bahasa mesin dengan bahasa yang dapat dimengerti oleh manusia. Dalam hal ini bahasa pemrograman adalah yang mengkomunikasikan perangkat lunak dengan beberapa perangkat keras sehingga dapat terjalin kesinambungan suatu sistem. Bahasa pemrograman sendiri dibagi menjadi dua macam yaitu bahasa pemrograman tingkat tinggi dan bahasa pemrograman tingkat rendah. Bahasa pemrogramn tingkat tinggi adalah bahasa pemrograman yang bisa dimengerti oleh manusia. Sedangkan bahasa pemrograman tingkat rendah adalah bahasa pemrograman yang hanya dimengerti oleh mesin. Java adalah tergolong dalam satu jenis bahasa pemrograman tingkat tinggi yang dibuat oleh sun microsystem dan dirilis pada tahun 1995. Java berjalan pada berbagai sistem operasi seperti windows, mac os berbagai macam sistem dari UNIX, upgrade dan fitur baru yang terdapat pada java mengubah wajah lingkungan pemrograman dan memberinya definisi baru tentang OOP. Dengan sifatnya yang platform independent membuat java dengan mudah dipindahkan antar berbagai jenis sistem operasi dan berbagai jenis arsitektur komputer. Berbeda dengan bahasa C dan C++, semua tipe data dalam bahasa java mempunyai ukuran yang konsisten di semua jenis platform. Source code program Java sendiri tidak perlu dirubah sama sekali jika anda ingin mengkompile ulang di platform lain. Hasil dari mengkompile source code Java bukanlah kode mesin atau instruksi prosesor yang spesifik terhadap mesin tertentu, melainkan berupa bytecode yang berupa file berekstensi (*.class). Bytecode tersebut dapat langsung dieksekusi di tiap platform yang dengan menggunakan Java Virtual Machine (JVM) sebagai interpreter terhadap bytecode tersebut. JVM sendiri adalah sebuah aplikasi yang berjalan di atas sebuah sistem operasi dan menerjemahkan bytecode program java dan mengeksekusinya, sehingga secara konsep bisa dianggap sebagai sebuah interpreter. Ciri dari bahasa pemrograman java yaitu: 1. Sederhana. Bahasa pemrograman Java menggunakan sintaks mirip dengan C++ namun sintaks pada Java telah banyak diperbaiki terutama menghilangkan penggunaan pointer yang rumit dan multiple inheritance. Java juga menggunakan automatic memory allocation dan memory garbage collection. 2. Berorientasi objek (Object Oriented Program/OOP). Java mengunakan pemrograman berorientasi objek yang membuat program dapat dibuat secara modular dan dapat dipergunakan kembali. Pemrograman berorientasi objek memodelkan dunia nyata kedalam objek dan melakukan interaksi antar objek-objek tersebut. 3. Terdistribusi. Java dirancang sebagai aplikasi terdisitribusi dan jaringan dan dibuat untuk membuat aplikasi terdistribusi secara mudah dengan adanya libraries networking yang terintegrasi pada Java. 4. Interpreter. Program Java dijalankan menggunakan interpreter yaitu Java Virtual Machine (JVM). Hal ini menyebabkan source code Java yang telah dikompilasi menjadi Java bytecodes dapat dijalankan pada platform yang berbeda-beda. 5. Robust. Java mempuyai reliabilitas yang tinggi. Compiler pada Java mempunyai kemampuan mendeteksi error secara lebih teliti dibandingkan bahasa pemrograman lain. Java mempunyai runtime-Exception handling untuk membantu mengatasi error pada pemrograman. 6. Aman. Sebagai bahasa pemrograman untuk aplikasi internet dan terdistribusi, Java memiliki beberapa mekanisme keamanan untuk menjaga aplikasi tidak digunakan untuk merusak sistem komputer yang menjalankan aplikasi tersebut. Java menerapkan beberapa mekanisme keamanan untuk melindungi terhadap kode berbahaya yang mungkin mencoba untuk menaklukkan sistem file. Misalnya, Java tidak memiliki pointer. Contoh lain adalah bahwa java memiliki Class Loader kelas yang mendefinisikan bagaimana kelas java yang diambil melalui jaringan. 7. Architecture Netral. Program Java merupakan platform independent. Program cukup mempunyai satu buah versi yang dapat dijalankan pada platform yang berbeda dengan Java Virtual Machine. 8. Portabel. Source code maupun program Java dapat dengan mudah dibawa ke platform yang berbeda-beda tanpa harus dikompilasi ulang. 9. Keandalan Tinggi. Keandalan (performance) pada Java sering dikatakan kurang tinggi. Namun performance Java dapat ditingkatkan menggunakan kompilasi Java lain seperti buatan Inprise, Microsoft ataupun Symantec yang menggunakan Just In Time Compilers (JIT) 10. Multithreaded. Java mempunyai kemampuan untuk membuat suatu program yang dapat melakukan beberapa pekerjaan secara sekaligus dan simultan. 11. Dinamis Java didesain untuk dapat dijalankan pada lingkungan yang dinamis. Perubahan pada suatu kelas dengan menambahkan properties ataupun method dapat dilakukan tanpa menggangu program yang menggunakan kelas tersebut. Sun membagi arsitektur java menjadi tiga bagian yaitu: - J2EE ( Java2 Enterprise Edition) J2EE digunakan pada aplikasi berbasis web, aplikasi client server dengan sistem tersebar dan ragam kompleksitas yang tinggi. - J2SE (Java2 Second Edition) Digunakan untuk membuat aplikasi di komputer desktop. - J2ME (Java2 Micro Edition) Digunakan untuk membuat aplikasi yang berjalan pada pada perangkat mobile atau pun wireless device. 2.4. Sejarah Android Android, Inc. berdiri di kota Palo Alto, salah satu kota terkenal di California (USA), tepatnya pada bulan Oktober tahun 2003. Pendirinya terdiri dari tiga orang yang ahli dalam bidang pengembangan aplikasi mereka adalah Andy Rubin, Rich Miner dan Chris White. Pada mulanya mereka mengembangkan android untuk perangkat elektronik sejenis kamera digital. Karena permintaan konsumen terhadap perangkat itu tidak terlalu banyak akhirnya mereka mengalihkannya ke perangkat mobile smartphone yang sudah diketahui besarnya peluang jika dapat diterapkan pada perangkat ini. Tidak seperti sistem operasi lainnya. OS ini dikembangkan secara diam-diam meskipun dibuat oleh orang-orang yang ahli dalam pengembangan aplikasi. Tanggal 17 Agustus 2005 android diakuisisi google dengan membelinya secara penuh dan menjadikan salah satu produk unggulanya. Salah satu faktor keberhasilan android sebagai sistem operasi adalah terbukanya google terhadap perangkat lunak yang diperbolehkan masuk (Open Source). Android juga telah memiliki komunitas developer aplikasi tersendiri yang dapat menigkatkan fungsi perangkat seperti game android misalnya dan mungkin saat ini sudah lebih dari sejuta aplikasi yang bisa dioperasikan melalui Android, dan Google Play menjadi aplikasi market utamanya. Pada November 2007 Google mulai mengembangkan ponsel Google dengan operasi sistem mobile terbaru yang dinamai dengan android. Sistem operasi android ini sebenarnya didasarkan pada kernel Linux dan dirancang oleh Open Handset Alliance yang terdiri dari sekelompok puluhan pembuat hardware, carrier dan perusahaan terkait perangkat mobile lainnya, diantaranya Google, HTC, Intel, Motorola, Qualcomm, TMobile, Nvidia dan yang lainya (Garfinkel, 2008). Open Handset Alliance dibentuk untuk mengembangkan android yang bersifat open source yang source-nya diberikan secara gratis bagi para pengembang (developer). Adapun untuk hak paten, google telah membayar $2500000000 untuk mengakuisisi Motorola mobility dan portfolio sekitar 24.500 hak paten. (Reed, 2011). 2.5 Pengembangan android Android dibuat dengan menggunakan dasar kernel linux 2.6 yang dipilih oleh para developer dengan beberapa alasan sebagai berikut. - Security Security atau keamanan adalah suatu service yang terdapat di kernel linux yang dapat mengatur keamanan antara sistem dan aplikasi. - Manajemen memori Kernel linux dapat mengatur managemen memori sehingga lebih hemat ketika melakukan develop aplikasi. - Manajemen proses Dengan manajemen proses , kernel linux ini dapat mengatur proses lebih baik, mengatur resource yang diperlukan sesuai dengan kebutuhan untuk menjalankan aplikasi. - Network stack Dengan service ini kernel linux dapat mengatur komunikasi jaringan. - Driver Kernel linux menjamin sesuatu dapat berjalan dengan baik, berbagai manufaktur hardware akan dapat bekerja dengan kernel ini. Layaknya sebuah sistem operasi linux dengan beberapa varian distro, android juga mengalami perkembangan versi yang signifikan. Adapun beberapa versi yang telah dirilis oleh android antara lain adalah sebagai berikut (Kasman, 2013b). a. Versi 1.0 (Apple pie) Android versi 1.0 dirilis pada tanggal 23 September 2008 yang memiliki kode nama Apple pie serta ukuran layar 320x480 HVGA. b. Versi 1.1 (Banana bread) Sebagai hasil pengembangan versi perdana, versi ini dirilis pada 9 Maret 2009. Android versi ini dilengkapi dengan pembaruan estetis pada aplikasi, jam alarm, voice search (pencarian suara), pengiriman pesan dengan Gmail, dan pemberitahuan email. c. Versi 1.5 (Cupcake) Android 1.5 dirilis pada tanggal 30 April 2009 yang memiliki kode nama Cupcake. Terdapat beberapa pembaruan, termasuk juga penambahan beberapa fitur, yakni kemampuan merekam dan menonton video, mengunggah video ke Youtube dan gambar ke picasa langsung dari telephone seluler, dukungan Bluetooth, animasi layar, dan keyboard pada layar yang dapat menyesuaikan dengan sistem. d. Versi 1.6 (Donut) Android versi 1.6 dirilis pada tanggal 15 September 2009 yang memiliki kode nama Donut. Versi ini merupakan perbaikan dari android Cupcake dengan menampilkan proses pencarian yang lebih baik dibanding sebelumnya, penggunaan baterai indikator dan kontrol applet VPN. Fitur lainnya adalah galeri yang memungkinkan pengguna untuk memilih foto yang akan dihapus, kemampuan dial kontak, teknologi text to change speech (tidak tersedia pada semua ponsel), pengadaan resolusi VWGA. e. Versi 2.0/2.1 (Eclair) Android versi ini dirilis pada tanggal 3 Desember 2009 dilengkapi dengan Google Maps 3.1.2 browser baru dan dukungan flash untuk kamera 3,2 MP, digital zoom dan Bluetooth 2.1. f. Versi 2.2 (Froyo) Android versi ini dengan sebutan Froyo, singkatan dari Frozeb Yogurt dirilis pada 20 Mei 2010. Pada versi ini kecepatan kerja dan aplikasi naik 2 sampai 5 kali lebih cepat. Dan pada versi ini, ponsel android memiliki kemampuan untuk menjadi hotspot Wifi. g. Versi 2.3 (Gingerbread) Dirilis pada 6 Desember 2010 Gingerbread makin memanjakan para penggemar game. Format video, peningkatan kualitas suara menjadi kelebihan Gingerbread dibanding versi sebelumnya. h. Versi 3.0 (Honeycomb) Dirilis pada tahun 2011 ini mendukung multi prosesor dan juga peningkatan kemampuan hardware untuk grafis. i. Versi 4.0 (ICS: Ice Cream Sandwitch) Versi ini dirilis pada tanggal 19 oktober 2011, membawa fitur honey comb untuk smart phone dan menambahkan fitur baru termasuk membuka kunci dengan pengenalan wajah, jaringan data pemantauan penggunaan dan control, terpadu kontak jaringan social, perangkat tambahan fotografi, mencari email secara offline, dan berbagi informasi dengan menggunakan FNC. j. Versi 4.4 (Kitkat) Awal mula dinamakan KitKat untuk versi 4.4 pada sistem operasi android adalah dikarenakan pada waktu itu KitKat merupakan permen yang menjadi favorit pada masanya. "KitKat has been a favorite candy on the team for some time, so for the 'K' release, we asked if they'd be willing to lend their iconic candy bar to its name," a post on the Android Google+ page explained.(Moscaritolo, 2013). Versi ini dirilis pada tanggal 3 september 2013, KitKat memulai debutnya pada Nexus Google 5 pada tanggal 31 Oktober 2013, dan dioptimalkan untuk beroperasi pada rentang yang lebih besar dari versi perangkat android sebelumnya, memiliki 512 MB RAM sebagai minimum yang disarankan. Kitkat menyediakan API level 19 dan API level 20 untuk pengembangan perangkat lunak. k. Versi 5.0 (Lollypop) Android 5.0 (Lollipop) diresmikan di bawah codename "Android L" pada tanggal 25 Juni 2014. Pada tanggal 12 November 2014. Versi ini support untuk aplikasi yang berjalan pada CPU dengan 64 bit. Dengan Project Volta perangkat handset dengan sistem operasi lollypop menjadikan peningkatan unjuk kerja battery yang tahan lama.