BAB IV IMPLEMENTASI DAN PENGUJIAN 4.1 Implementasi Setelah sistem dianalisis dan didesain secara rinci, tahap selanjutnya adalah implementasi. Implementasi sistem merupakan tahap meletakkan sistem sehingga siap untuk dioperasikan. Implementasi bertujuan untuk mengkonfirmasi modulmodul perancangan, sehingga pengguna dapat memberi masukan kepada pengembangan sistem. 4.1.1 Implementasi Basis Data Database terdapat pada perangkat berbasis Android, sistem operasi Android mempunyai library database sendiri yang bernama SQLite. Database yang bernama DB ini mempunyai 1 table, yaitu table alarm. Berikut beberapa pernyataan SQL yang terdapat pada kelas Database.java. public void oncreate(sqlitedatabase db) { // TODO Auto-generated method stub db.execsql("create TABLE IF NOT EXISTS " + ALARM_TABLE + " ( " + COLUMN_ALARM_ID + " INTEGER primary key autoincrement, " + COLUMN_ALARM_ACTIVE + " INTEGER NOT NULL, " + COLUMN_ALARM_TIME + " TEXT NOT NULL, " + COLUMN_ALARM_DAYS + " BLOB NOT NULL, " + COLUMN_ALARM_DIFFICULTY + " INTEGER NOT NULL, " + COLUMN_ALARM_TONE + " TEXT NOT NULL, " + COLUMN_ALARM_VIBRATE + " INTEGER NOT NULL, " + COLUMN_ALARM_NAME + " TEXT NOT NULL)"); } 4.1.2 Implementasi Penulisan Kode Penulisan kode atau biasa disebut dalam bahasa inggris source code/coding merupakan bagian utama dalam pembuatan aplikasi ini. Penulisan kode pada aplikasi ini menggunakan bahasa Java sebagai penggunaan bahasa utamanya dengan editor Android Studio dan di running dengan menggunakan smartphone android atau AVD Manager (Android 53
54 Virtual Device), sedangkan untuk database menggunakan SQLite acuannya adalah apakah aplikasi yang dibuat telah berjalan dengan baik yang sebagaimana mestinya. Bila belum maka kode atau source code akan diperbaiki sampai didapatkan aplikasi yang berjalan dan berfungsi dengan baik. Pada bagian ini akan dijabarkan penulisan kode dari aplikasi ini. 4.1.2.1 Penulisan Kode Pada Daftar Jadwal Alarm Kode pada halaman daftar jadwal alarm merupakan tampilan awal setelah user membuka aplikasi. Pada halaman ini terdapat gambar logo, nama aplikasi, menu tambah, menu follow me dan daftar (list) jadwal alarm. Berikut kode untuk layout alarm_list_element.xml. <CheckBox android:id="@+id/checkbox_alarm_active" android:focusable="false" android:padding="5dp" /> <View android:id="@+id/view1" android:layout_width="1dp" android:layout_height="match_parent" android:layout_marginright="10dp" android:background="#ff0099cc" android:paddingright="10dp" /> <LinearLayout android:orientation="vertical" android:paddingbottom="5dp" android:paddingtop="5dp" > <TextView android:id="@+id/textview_alarm_time" android:textappearance="?android:attr/textappearancemedium" /> <TextView android:id="@+id/textview_alarm_days" android:textappearance="?android:attr/textappearancesmall" /> </LinearLayout>
55 Berikut kode untuk layout alarm_activity.xml. <ListView android:id="@android:id/list" android:layout_width="match_parent" android:longclickable="true" android:background="@drawable/main_background"> </ListView> <TextView android:id="@android:id/empty" android:layout_width="match_parent" android:padding="10dp" android:text="no alarms have been set (Tidak ada alarm yang diatur)" /> Gambar 4.1 : Daftar Jadwal Alarm 4.1.2.2 Penulisan Kode Pada Tambah Jadwal Alarm Kode pada halaman tambah jadwal alarm merupakan tampilan sebuah button add, setelah user menekan tanda add pada daftar jadwal alarm. Pada halaman ini terdapat gambar logo, nama
56 aplikasi, button simpan, button hapus, dan menu follow me. Berikut beberapa kode untuk kelas AlarmPreferencesActivity.java. ImageButton deletebutton; TextView okbutton; TextView cancelbutton; ------------------------------------------------------------------ case BOOLEAN: CheckedTextView checkedtextview = (CheckedTextView) v; boolean checked =!checkedtextview.ischecked(); ((CheckedTextView) v).setchecked(checked); switch (alarmpreference.getkey()) { case ALARM_ACTIVE: alarm.setalarmactive(checked); break; case ALARM_VIBRATE: alarm.setvibrate(checked); if (checked) { Vibrator vibrator = (Vibrator) getsystemservice(vibrator_service); vibrator.vibrate(1000); } break; } alarmpreference.setvalue(checked); ------------------------------------------------------------------ public void onclick(dialoginterface dialog, int which) { switch (alarmpreference.getkey()) { case ALARM_DIFFICULTY: Alarm.Difficulty d = Alarm.Difficulty.values()[which]; alarm.setdifficulty(d); break; case ALARM_TONE: alarm.setalarmtonepath(alarmpreferencelistadapter.getalarmtonepath s()[which]); if (alarm.getalarmtonepath()!= null) { if (mediaplayer == null) { mediaplayer = new MediaPlayer(); } else { if (mediaplayer.isplaying()) mediaplayer.stop(); mediaplayer.reset();} ------------------------------------------------------------------ public void onclick(final DialogInterface dialog, int which, boolean ischecked) { Alarm.Day thisday = Alarm.Day.values()[which]; if (ischecked) { alarm.addday(thisday); } else { if (alarm.getdays().length > 1) { alarm.removeday(thisday); } else { ((AlertDialog) dialog).getlistview().setitemchecked(which, true);} }} ------------------------------------------------------------------ public void ontimeset(timepicker timepicker, int hours, int minutes) { Calendar newalarmtime = Calendar.getInstance(); newalarmtime.set(calendar.hour_of_day, hours); newalarmtime.set(calendar.minute, minutes); newalarmtime.set(calendar.second, 0);
57 alarm.setalarmtime(newalarmtime); alarmpreferencelistadapter.setmathalarm(getmathalarm()); alarmpreferencelistadapter.notifydatasetchanged(); } ------------------------------------------------------------------ public boolean onoptionsitemselected(menuitem item) { switch (item.getitemid()) { case R.id.menu_item_save: Database.init(getApplicationContext()); if (getmathalarm().getid() < 1) { Database.create(getMathAlarm()); } else { Database.update(getMathAlarm());} ------------------------------------------------------------------ break; case R.id.menu_item_delete: AlertDialog.Builder dialog = new AlertDialog.Builder(AlarmPreferencesActivity.this); dialog.settitle("delete"); dialog.setmessage("delete this alarm?"); dialog.setpositivebutton("ok", new OnClickListener() { public void onclick(dialoginterface dialog, int which) { Database.init(getApplicationContext()); if (getmathalarm().getid() < 1) { } else { Database.deleteEntry(alarm); callmathalarmscheduleservice();} finish();} }); dialog.setnegativebutton("cancel", new OnClickListener() { public void onclick(dialoginterface dialog, int which) { dialog.dismiss();} }); dialog.show(); Berikut kode untuk layout alarm_preferences.xml. <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <ListView android:id="@android:id/list" android:layout_width="match_parent" android:layout_height="0dp" android:drawselectorontop="false" android:background="@drawable/main_background" /> </LinearLayout>
58 Gambar 4.2 : Tambah Jadwal Alarm 4.1.2.3 Penulisan Kode Pada Jawab Pertanyaan Kode pada halaman jawab pertanyaan merupakan tampilan sebuah pertanyaan matematika yang diiringi bunyi alarm, setelah user menetapkan waktu dan hari yang telah ditentukan sebelumnya. Pada halaman ini terdapat textview1 untuk pertanyaan matematika, dan textview2 untuk menjawab pertanyaan tersebut, terdapat button angka 0 sampai angka 9, button tanda koma (,), button tanda minus (-), dan button untuk menghapus karakter dari jawaban pertanyaan. Berikut kode untuk layout alarm_alert.xml.
59 <TableRow android:id="@+id/tablerow0" > <TextView android:id="@+id/textview1" android:textappearance="?android:attr/textappearancelarge" android:textsize="24dp" android:textcolor="#000ec8" /> </TableRow> <TableRow android:id="@+id/tablerow1" android:layout_height="0dp" > <TextView android:id="@+id/textview2" android:textappearance="?android:attr/textappearancelarge" android:textcolor="@android:color/black" </TableRow> <TableRow android:id="@+id/tablerow2" android:layout_height="0dp" > android:id="@+id/button1" android:tag="1" android:text="@string/_1" android:id="@+id/button2" android:tag="2" android:text="@string/_2" android:id="@+id/button3" android:tag="3" android:text="@string/_3" </TableRow>
60 <TableRow android:id="@+id/tablerow3" android:layout_height="0dp" > android:id="@+id/button4" android:tag="4" android:text="@string/_4" android:id="@+id/button5" android:tag="5" android:text="@string/_5" android:id="@+id/button6" android:tag="6" android:text="@string/_6" </TableRow> <TableRow android:id="@+id/tablerow4" android:layout_height="0dp" > android:id="@+id/button7" android:tag="7" android:text="@string/_7" android:id="@+id/button8" android:tag="8" android:text="@string/_8"
61 android:id="@+id/button9" android:tag="9" android:text="@string/_9" </TableRow> <TableRow android:id="@+id/tablerow5" android:layout_height="0dp" > android:id="@+id/button_decimal" android:tag="." android:text="@string/decimal_button_text" android:textsize="32dp" /> android:id="@+id/button0" android:tag="0" android:text="@string/_0" android:id="@+id/button_minus" android:tag="-" android:text="@string/minus_button_text" android:textsize="32dp" /> </TableRow> <TableRow android:id="@+id/tablerow6" > android:id="@+id/button_clear" android:tag="clear" android:text="@string/clear_button_text" </TableRow>
62 Gambar 4.3 : Jawab Pertanyaan 4.1.2.4 Penulisan Kode Pada Follow Me Kode pada menu Follow Me merupakan tampilan info pembuat aplikasi yang menuju ke alamat profil twitter, setelah user menekan menu follow me. Berikut beberapa kode untuk menu.xml. <item android:id="@+id/menu_item_website" android:icon="@drawable/glyphicons_340_globe" android:title="follow Me"> </item>
63 Berikut beberapa kode untuk kelas BaseActivity.java. @Override public boolean onoptionsitemselected(menuitem item) { String url = null; Intent intent = null; switch (item.getitemid()) { case R.id.menu_item_new: Intent newalarmintent = new Intent(this, AlarmPreferencesActivity.class); startactivity(newalarmintent); break; case R.id.menu_item_website: url = "https://twitter.com/ihyabanyumanis"; intent = new Intent(Intent.ACTION_VIEW); intent.setdata(uri.parse(url)); try { startactivity(intent); } catch (ActivityNotFoundException e) { Toast.makeText(this, "Couldn't launch the website", Toast.LENGTH_LONG).show(); } break; } return super.onoptionsitemselected(item); } Gambar 4.4 : Follow Me
64 4.2 Pengujian Fungsionalitas Proses pengujian ini dilakukan dengan cara install aplikasi pada device. Dalam hal ini penulis akan menggunakan metode pengujian aplikasi black box. Untuk melihat apakah fungsi-fungsi pada aplikasi berjalan dengan baik atau tidak dan juga mengetahui dibagian mana saja terdapat kesalahan pada aplikasi ini untuk segera dapat diperbaiki oleh penulis. 4.2.1 Skenario Pengujian Pengujian aplikasi ini dilakukan menggunakan smartphone Xiaomi Redmi 2. Item yang diuji antara lain : Tabel 4.1 : Skenario Pengujian Aplikasi No. Nama Tes Sifat Kegiatan Masuk halaman 1. daftar jadwal alarm 2. Memilih tambah jadwal alarm Memilih hapus 3. daftar jadwal alarm Memilih edit 4. daftar jadwal alarm 5. Alarm berbunyi Menekan button 6. angka 0 sampai 9, koma dan minus Hasil yang diharapkan Menampilkan halaman daftar jadwal alarm Menampilkan halaman tambah jadwal alarm Menghapus daftar jadwal alarm Menampilkan halaman tambah jadwal alarm dan meng-update daftar jadwal alarm Menampilkan halaman pertanyaan matematika yang sudah diacak (random) Mencetak angka 0 sampai 9, koma dan minus di halaman jawab pertanyaan
65 7. Menekan button clear Membersihkan karakter pada jawaban di halaman jawab pertanyaan 8. Menjawab pertanyaan dengan jawaban yang salah Menampilkan halaman pertanyaan matematika yang sudah diacak (random) disertai tanda merah pada baris jawaban 9. Menjawab pertanyaan dengan jawaban yang benar Keluar aplikasi dan alarm berhenti berbunyi 10. Memilih follow me Menampilkan info pembuat aplikasi ke halaman profil twitter 11. Kembali ke halaman sebelumnya Menampilkan halaman sebelumnya 12. Memilih keluar aplikasi Keluar aplikasi 4.2.2 Hasil Pengujian Tabel 4.2 : Hasil Pengujian Aplikasi No. Nama Tes Sifat Kegiatan Hasil yang diharapkan Hasil Pengujian 1. Masuk halaman daftar jadwal alarm Menampilkan halaman daftar jadwal alarm 2. Memilih tambah jadwal alarm Menampilkan halaman tambah jadwal alarm 3. Memilih hapus daftar jadwal alarm Menghapus daftar jadwal alarm
66 4. Memilih edit daftar jadwal alarm 5. Alarm berbunyi 6. 7. 8. Menekan button angka 0 sampai 9, koma dan minus Menekan button clear Menjawab pertanyaan dengan jawaban yang salah Menampilkan halaman tambah jadwal alarm dan meng-update daftar jadwal alarm Menampilkan halaman pertanyaan matematika yang sudah diacak (random) Mencetak angka 0 sampai 9, koma dan minus di halaman jawab pertanyaan Membersihkan karakter pada jawaban di halaman jawab pertanyaan Menampilkan halaman pertanyaan matematika yang sudah diacak (random) disertai tanda merah pada baris jawaban 9. Menjawab pertanyaan dengan jawaban yang benar Keluar aplikasi dan alarm berhenti berbunyi
67 10. Memilih follow me Menampilkan info pembuat aplikasi ke halaman profil twitter 11. Kembali ke halaman sebelumnya Menampilkan halaman sebelumnya 12. Memilih keluar aplikasi Keluar aplikasi 4.3 Analisis Hasil Pengujian Setelah tahap pengujian black box diatas terhadap semua fungsi pada Aplikasi alarm weker dengan pertanyaan menggunakan algoritma Fisher Yates Shuffle berbasis android yang sudah dijalankan, maka dapat disimpulkan : 1. Pada saat pembuatan aplikasi penulis menggunakan smartphone android dan AVD Manager (Android Virtual Device) untuk mengetahui Error dan yang lainnya, sehingga aplikasi dapat berjalan dengan baik pada android. 2. Fungsi-fungsi pada aplikasi berjalan dengan baik seperti, pengacakan angka dan operator pada pertanyaan matematika, menampilkan pertanyaan matematika dengan tingkat kesulitan yang dipilih oleh pengguna, menampilkan pertanyaan matematika yang diiringi dengan bunyi alarm, dan menampilkan pertanyaan matematika yang diiringi dengan bunyi alarm secara terus-menerus apabila pengguna salah menjawab pertanyaan matematika. 3. Aplikasi membutuhkan koneksi internet untuk membuka info pembuat aplikasi.