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 modul- modul 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.
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
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)");
}
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:layout_width="wrap_content"
android:layout_height="wrap_content"
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:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingBottom="5dp"
android:paddingTop="5dp" >
<TextView
android:id="@+id/textView_alarm_time"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium" />
<TextView
android:id="@+id/textView_alarm_days"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceSmall"
/>
</LinearLayout>
Berikut kode untuk layout alarm_activity.xml.
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
<ListView
android:id="@android:id/list"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:longClickable="true"
android:background="@drawable/main_background">
</ListView>
<TextView
android:id="@android:id/empty"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="10dp"
android:text="No alarms have been set (Tidak ada alarm yang diatur)" />
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);
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:layout_weight="1"
android:drawSelectorOnTop="false"
android:background="@drawable/main_background" />
</LinearLayout>
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();
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.
<TableRow
android:id="@+id/tableRow0"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
<TextView
android:id="@+id/textView1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textSize="24dp"
android:textColor="#000ec8" />
</TableRow>
<TableRow
android:id="@+id/tableRow1"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_weight="1" >
<TextView
android:id="@+id/textView2"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textColor="@android:color/black"
android:textSize="24dp" />
</TableRow>
<TableRow
android:id="@+id/tableRow2"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_weight="1" >
<Button
android:id="@+id/Button1"
android:layout_width="0dp"
android:layout_height="fill_parent"
android:layout_weight="1"
android:tag="1"
android:text="@string/_1"
android:focusableInTouchMode="false"
android:textSize="24dp" />
<Button
android:id="@+id/Button2"
android:layout_width="0dp"
android:layout_height="fill_parent"
android:layout_weight="1"
android:tag="2"
android:text="@string/_2"
android:focusableInTouchMode="false"
android:textSize="24dp" />
<Button
android:id="@+id/Button3"
android:layout_width="0dp"
android:layout_height="fill_parent"
android:layout_weight="1"
android:tag="3"
android:text="@string/_3"
android:focusableInTouchMode="false"
android:textSize="24dp" />
</TableRow>
<TableRow
android:id="@+id/TableRow3"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_weight="1" >
<Button
android:id="@+id/Button4"
android:layout_width="0dp"
android:layout_height="fill_parent"
android:layout_weight="1"
android:tag="4"
android:text="@string/_4"
android:focusableInTouchMode="false"
android:textSize="24dp" />
<Button
android:id="@+id/Button5"
android:layout_width="0dp"
android:layout_height="fill_parent"
android:layout_weight="1"
android:tag="5"
android:text="@string/_5"
android:focusableInTouchMode="false"
android:textSize="24dp" />
<Button
android:id="@+id/Button6"
android:layout_width="0dp"
android:layout_height="fill_parent"
android:layout_weight="1"
android:tag="6"
android:text="@string/_6"
android:focusableInTouchMode="false"
android:textSize="24dp" />
</TableRow>
<TableRow
android:id="@+id/TableRow4"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_weight="1" >
<Button
android:id="@+id/Button7"
android:layout_width="0dp"
android:layout_height="fill_parent"
android:layout_weight="1"
android:tag="7"
android:text="@string/_7"
android:focusableInTouchMode="false"
android:textSize="24dp" />
<Button
android:id="@+id/Button8"
android:layout_width="0dp"
android:layout_height="fill_parent"
android:layout_weight="1"
android:tag="8"
android:text="@string/_8"
android:focusableInTouchMode="false"
android:textSize="24dp" />
<Button
android:id="@+id/Button9"
android:layout_width="0dp"
android:layout_height="fill_parent"
android:layout_weight="1"
android:tag="9"
android:text="@string/_9"
android:focusableInTouchMode="false"
android:textSize="24dp" />
</TableRow>
<TableRow
android:id="@+id/tableRow5"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_weight="1" >
<Button
android:id="@+id/Button_decimal"
android:layout_width="0dp"
android:layout_height="fill_parent"
android:layout_weight="1"
android:tag="."
android:text="@string/decimal_button_text"
android:focusableInTouchMode="false"
android:textSize="32dp" />
<Button
android:id="@+id/Button0"
android:layout_width="0dp"
android:layout_height="fill_parent"
android:layout_weight="1"
android:tag="0"
android:text="@string/_0"
android:focusableInTouchMode="false"
android:textSize="24dp" />
<Button
android:id="@+id/Button_minus"
android:layout_width="0dp"
android:layout_height="fill_parent"
android:layout_weight="1"
android:tag="-"
android:text="@string/minus_button_text"
android:focusableInTouchMode="false"
android:textSize="32dp" />
</TableRow>
<TableRow
android:id="@+id/tableRow6"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
<Button
android:id="@+id/Button_clear"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:tag="clear"
android:text="@string/clear_button_text"
android:focusableInTouchMode="false"
android:textSize="24dp" />
</TableRow>
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>
Berikut beberapa kode untuk kelas BaseActivity.java.
Gambar 4.4 : Follow Me
@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);
}
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 Hasil yang diharapkan
1.
Masuk halaman daftar jadwal alarm
Normal Menampilkan halaman daftar jadwal alarm
2. Memilih tambah
jadwal alarm Normal Menampilkan halaman tambah jadwal alarm
3.
Memilih hapus daftar jadwal alarm
Normal Menghapus daftar jadwal alarm
4.
Memilih edit daftar jadwal alarm
Normal
Menampilkan halaman tambah jadwal alarm dan meng-update daftar jadwal alarm
5. Alarm berbunyi Normal
Menampilkan halaman pertanyaan matematika yang sudah diacak (random)
6.
Menekan button angka 0 sampai 9, koma dan minus
Normal
Mencetak angka 0 sampai 9, koma dan minus di halaman jawab pertanyaan
7. Menekan button
clear Normal
Membersihkan karakter pada jawaban di halaman jawab pertanyaan
8.
Menjawab pertanyaan dengan jawaban yang salah
Normal
Menampilkan halaman pertanyaan matematika yang sudah diacak (random) disertai tanda merah pada baris jawaban
9.
Menjawab pertanyaan dengan jawaban yang benar
Normal Keluar aplikasi dan alarm berhenti berbunyi
10. Memilih follow
me Normal Menampilkan info
pembuat aplikasi ke halaman profil twitter
11. Kembali ke halaman
sebelumnya Normal Menampilkan halaman sebelumnya
12. Memilih keluar
aplikasi Normal 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 Normal
Menampilkan halaman daftar jadwal alarm
Sesuai
2. Memilih tambah
jadwal alarm Normal
Menampilkan halaman tambah jadwal alarm
Sesuai
3. Memilih hapus
daftar jadwal alarm Normal Menghapus daftar
jadwal alarm Sesuai
4. Memilih edit daftar
jadwal alarm Normal
Menampilkan halaman tambah jadwal alarm dan meng-update daftar jadwal alarm
Sesuai
5. Alarm berbunyi Normal
Menampilkan halaman pertanyaan matematika yang sudah diacak (random)
Sesuai
6.
Menekan button angka 0 sampai 9, koma dan minus
Normal
Mencetak angka 0 sampai 9, koma dan minus di halaman jawab pertanyaan
Sesuai
7. Menekan button
clear Normal
Membersihkan karakter pada jawaban di halaman jawab pertanyaan
Sesuai
8. Menjawab
pertanyaan dengan
jawaban yang salah Normal
Menampilkan halaman pertanyaan matematika yang sudah diacak (random) disertai tanda merah pada baris jawaban
Sesuai
9. Menjawab
pertanyaan dengan
jawaban yang benar Normal Keluar aplikasi dan alarm berhenti
berbunyi Sesuai
10. Memilih follow me Normal
Menampilkan info pembuat aplikasi ke halaman profil twitter
Sesuai
11. Kembali ke halaman
sebelumnya Normal Menampilkan halaman
sebelumnya Sesuai 12. Memilih keluar
aplikasi Normal Keluar aplikasi Sesuai
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.