“Demi apa harus TDD…”

Tyagita Larasati
PPL cewe semua!
Published in
3 min readApr 3, 2019

Wah sejujurnya TDD di PPL adalah hal yang menyeramkan. Kenapa? selain karena kita memiliki kewajiban untuk mempunyai 100% untuk code coverage dan alasan yang paling utama TDD bukan hal yang mudah.

Test-Driven Development (TDD)

Image source: https://www.icemobile.com/uploads/inline/test.driven.development.cartoon_0.jpeg

Test-Driven Development (TDD) adalah metodologi saat kita mengembangkan suatu system dengan memastikan bahwa setiap komponen dalam sistem berjalan dengan semestinya. TDD dimulai dengan penulisan test diawal baru setelah semua test telah dibuat dapat ditulis implementasi kodenya agar semua test bisa passed. Secara tidak langsung TDD mengharuskan kita untuk memikirkan requirements apa saja yang kita perlukan.

Test-Driven Development (TDD) Circle of Life

Image source: https://3.bp.blogspot.com/-Wh4E-E-fLbg/WIMc5S50NHI/AAAAAAAAINk/10csazaVSsAlkqzeuowJrjrOGKCeLT6WgCLcB/s1600/image.png
  1. Red: Developer membuat test. Test dipastikan failed(RED) karena implementasi kode dari test belum dibuat.
  2. Green: Developer membuat implementasi kode yang benar sesuai dengan test yang telah dibuat. Pada tahap ini hanya perlu membuat kode yang dapat passed test.
  3. Refactor: Tahap ini developer memodifikasi kode yang telah diimplementasikan sebelumnya agar dapat memenuhi kaidah clean code dan meningkatkan keefektifitasan dari kode. Kode yang telah di-refactor harus tetap dijaga untuk tetep memenuhi test yang telah dibuat sebelumnya

Contoh penerapan TDD

Salah satu contoh penerapan TDD yang telah saya lakukan adalah membuat Instrumented TDD Android untuk fitur splash screen. Kelompok kami menggunakan instrumented test dengan memanfaatkan library espresso.

  • Membuat test <RED>

Disini saya membuat test untuk mencek apakah user sudah pernah meng-install applikasi sebelumnya atau belum pernah sama sekali.

@Test
public void onBoardingView() {
AppPreference.getInstance(context).removeKey("firstTime");
AppPreference.getInstance(context).setSplashScreen("firstTime", true);
assertTrue(AppPreference.getInstance(context).onSplashScreen());
onView(withId(R.layout.activity_logo));

Activity setHomepageOnboardScreen = getInstrumentation().waitForMonitor(monitorToOnboardScreen);
assertNotNull(setHomepageOnboardScreen);
AppPreference.getInstance(context).offSplashScreen();
setHomepageOnboardScreen.finish();

}

@Test
public void signInView() {
onView(withId(R.layout.activity_logo));

Activity setHomepageSignIn = getInstrumentation().waitForMonitor(monitorToSignIn);
assertNotNull(setHomepageSignIn);
AppPreference.getInstance(context).removeKey("firstTime");
setHomepageSignIn.finish();

}

Potongangan kode diatas men-cek apakah user sudah pernah meng-install applikasi sebelumnya atau belum pernah sama sekali. Jika user sudah pernah meng-install sebelumnya maka user akan diarah langsung ke halaman sign-in namun jika sebaliknya maka user akan diarakan ke halaman on-boarding screen.

  • Implementasi test <Green>

Disini saya membuat implementasi kode dari test yang telah dibuat sebelumnya.

Berikut kode yang saya implementasikan berdasarkan test yang telah dibuat sebelumnya.

  • Melakukan refactoring <REFACTOR>

Disini saya melakukan refactoring nama method, dikarenakan method yang saya telah buat sebelumnya ternyata dapat digunakan kembali untuk membuat fungsi lainnya, sehingga lebih baik untuk method tersebut penamaanya di ubah agar mudah dipahami dan memenuhi salah satu kaidah clean code.

Pengubahan nama method

Contoh lain refactornya adalah, men-simplify conditional statement:

setelah dilakukan refactor kembali:

Apa keuntungan dari TDD ?

  • Akan mempermudah proses debuggings saat terjadi error, sehingga ketika terjadi error kita mengetahui persis letak error tersebut berada.
  • TDD tidak hanya membantu mengidentifikasi masalah, tetapi juga membantu mencegah masalah.
  • Memperjelas requirement sehingga membuat developer lebih paham terhadap requirement, dan membuat kode lebih akurat.

--

--