news

Senin, 15 Juni 2020

Belajar Teori Unit Testing dan Design Pattern Aplikasi Android


Belajar Teori Unit Testing dan Design Pattern dalam pengembangan Aplikasi Android ini sebuah Fundamental yang cocok untuk anda yang ingin jadi expert.

Testing Design Pattern

Kita sudah belajar tentang logging dan debugging.  Ada lagi yang perlu kalian pelajari yaitu unit testing. Tujuan utama dari unit testing adalah melakukan test pada logika kode di dalam aplikasi kita. Dengan menguji logika kode yang kita buat maka kita memverifikasi apakah kode berjalan lancar dan layak untuk digunakan dalam produksi.
Dengan menggunakan unit test kita dapat dengan mudah mengetahui kode mana yang tidak berjalan dan dapat dengan segera memperbaikinya. Sebabnya, pada saat pengembangan aplikasi tentunya akan ada update pada aplikasi. Hal ini dapat mengubah input output atau bahkan proses bisnis yang pada akhirnya dapat mempengaruhi kode kita.
Untuk menjalankan unit testing dengan baik kita perlu mengisolasi logika kode kita sehingga mudah untuk diuji. Pengisolasian kode di sini adalah memisahkan antara kode tampilan dan kode logika. Dengan pemisahan tersebut, ketika terjadi error kita dapat dengan mudah mengetahui bagian mana yang error.

Design Pattern

Tentunya kamu pernah mendengar istilah design pattern. Design pattern adalah bagaimana desain struktur kode dalam aplikasi kita. Ini sangat erat hubungannya dengan unit testing, karena untuk mencapai design pattern yang baik perlu dilakukan isolasi antara kode logika dan kode tampilan.
Ada banyak design pattern yang digunakan dalam pengembangan aplikasi, contohnya adalah MVP dan MVC.

Model-View-Controller (MVC)202002271417525f9566b70f9c2558cd5b469317e47467.png

Pattern ini membagi aplikasi menjadi 3 bagian yaitu modelview, dan controller.
  • Model : Berisi fungsi yang digunakan untuk memproses data.
  • View : Merepresentasikan komponen dari UI (User Interface).
  • Controller : Mengatur view mana yang akan ditampilkan dan juga mengatur ketika ada respon input masuk. Menerima inputan dari pengguna melewati view, yang kemudian memproses data dengan model dan kemudian dikembalikan lagi kepada view untuk ditampilkan kepada pengguna. Bergerak sebagai koordinator antara view dan model


Model-View-Presenter (MVP)202002271418153b8d9c4b5403cec14dd71775e99e769f.png

Komponen dari MVP terdiri dari sebuah model, view, dan presenter.
  • Model : Berisi fungsi yang digunakan untuk memproses data.
  • View : Mengatur tampilan.
  • Presenter : Mengatur ketika ada respon dari view. Menerima inputan dari pengguna melewati view, yang kemudian memproses data dengan model dan kemudian dikembalikan lagi kepada view untuk ditampilkan kepada pengguna.
Tidak seperti pada controller-viewpresenter-view menggunakan interface untuk berkomunikasi dengan yang lain. Presenter disini tidak mengatur respon dari pengguna sehingga berbeda dengan controller.
Pattern MVP lebih mudah untuk dilakukan testing karena antara komponen view-presenter menggunakan interface untuk saling berkomunikasi, dan juga model yang hanya dapat berkomunikasi dengan presenter. Secara sederhananya MVP sudah terisolasi antara satu dengan yang lain sehingga lebih mudah diuji jika dibandingkan dengan MVC.

Model-View-ViewModel (MVVM)

202002271419170300a5b4ebba8581d831a040d1069fef.pngKomponen dari MVVM terdiri dari sebuah model, view, dan viewmodel.
  • Model : Berisi fungsi yang digunakan untuk memproses data. Salah satu dari strategi implementasi model adalah membuat model terbuka via observables agar terpisah antara ViewModel atau observer / consumer.
  • View : Tugas dari View pada MVVM adalah untuk mengamati sebuah ViewModel observable guna mendapatkan data yang akan mengupdate UI/ tampilan. 
  • ViewModel : ViewModel berinteraksi dengan model dan juga menyiapkan observables yang akan diobservasi oleh View. ViewModel dapat menyediakan hooks untuk View dan pass events kepada model.
Salah satu implementasi strategi dari ViewModel adalah memisahkannya dengan View. Contohnya, ViewModel tidak seharusnya tahu dengan siapa View berinteraksi.

Tipe Testing

20200220145653ad76730cc584744fedf40a5390c244da.pngPembagian tipe testing dapat kita lihat pada gambar piramida testing di atas. Ditunjukkan bahwa yang paling bawah jumlahnya paling banyak, hal ini karena Unit Test bersifat kecil-kecil namun banyak. Sedangkan yang paling atas jumlahnya paling sedikit karena pengujiannya yang panjang dari awal sampai akhir.

Untuk selengkapnya, berikut ini adalah tiga tipe dari testing:
  1. Local unit tests
    Terletak pada direktori module-name/src/test/java/.
    Tes ini berjalan pada local JVM dan tidak mempunyai akses ke API Android Framework. Biasanya untuk menguji sebuah method / fungsi berjalan sesuai rencana. Caranya yaitu dengan memberikan input dan melihat hasilnya apakah sesuai dengan ekspektasi.
  2. Instrumented test 
    Terletak pada direktori module-name/src/androidTest/java/.
    Tes ini harus berjalan pada peranti Android atau emulator. Digunakan untuk memvalidasi proses interaksi pada User Interface (UI) berjalan dengan lancar. Berisi step-by-step aksi yang sering dilakukan, misalnya mengisi data, menekan tombol, menggeser layar, dll.
    20200220151635f04d10c7bf72b5b19550179ceb957eae.jpeg
  3. End-to-end test
    Tes ini seperti Instrumented test, hanya proses yang dilakukan lebih lengkap dari awal sampai akhir, misalnya proses pembelian barang di e-commerce, maka perlu dilakukan test mulai dari memilih barang, memasukkan ke keranjang, checkout, sampai pembayaran.