Bagian 2. Efek Samping

Dibagian 1 saya telah sebutkan TDD memiliki 6 langkah dalam satu siklus. Dari 6 langkah tersebut kita bisa simpulkan menjadi 3 langkah pokok:

  1. Tulis test. Inti sebenarnya adalah membuat cerita. Kita bercerita mengenai sebuah operasi seharusnya berjalan. Cerita yang sudah berputar diotak itu kemudian kita tuliskan dalam bentuk code. Namun perlu saya tekankan, karena kita berada di ranah test, cerita itu bukan implementasi operasi sebenarnya. Lantas apa? Seperti telah saya sebutkan di bagian sebelumnya, membuat test berarti membuat test terhadap sebuah API. Jadi dalam benak kita yang ada adalah interface dari API. Kita penuhi semua yang dibutuhkan API. Kita panggil operasi dari API. Kemudian kita test hasilnya.

  2. Buat test berjalan. Membuat test berjalan secepatnya adalah segalanya disini. Jika solusinya jelas, ya tulis saja. Tetapi jika solusi yang jelas itu membutuhkan waktu bermenit-menit untuk menyelesaikannya, maka tinggalkan saja, sebab tujuan kita adalah membuat test berjalan dalam hitungan detik. Cara cepat ini, menghalalkan segala cara yang bisa jadi haram dari sisi software engineering. Walaupun, seperti yang anda lihat dibagian sebelumnya, penghalalan ini pun tidak lama kemudian diperbaiki.

  3. Buat menjadi benar. Setelah sistem bisa berjalan, kini saatnya membuat segala yang menyalahi aturan software engineering kita betulkan. Hapus semua duplikasi, baik data maupun code. Dan ingat semua harus dalam hitungan detik. Note: hitungan detik adalah relatif sama dengan kata secepatnya, jadi anda bisa menentukan kecepatan anda sendiri.

$5 + Rp 10=Rp 9.010 jika $1=Rp 9000Rp 10 * 2 = Rp 20

Efek perkalian terhadap object?

Amount harus private?

Pembulatan uang?

Kembali ke persoalan sebelumnya. Seperti keberatan yang telah diungkapan, dalam test ada sedikit keanehan, seharusnya nilai rupiah tidak berubah tetapi berabah setelah terjadi perkalian. Coba perhatikan apa yang akan terjadi dengan test berikut ini:

[Test]
public void Multiplication(){
	Rupiah sepuluhRupiah=new Rupiah(10);
	sepuluhRupiah.Times(2);
	Assert.AreEqual(20,sepuluhRupiah.Amount);
	sepulihRupiah.Times(3);
	Assert.AreEqual(30,sepuluhRupiah.Amount);
	sepulihRupiah.Times(5);
	Assert.AreEqual(50,sepuluhRupiah.Amount);
}

Test ini tidak akan pernah jalan, karena setelah dikali 2, sepuluhRupiah menjadi 20. Kemudian ketika dikali dengan 3 ia akan menjadi 60. Dan setelah dikali dengan 5 akan menjadi 300. Kita mengharapkan sepuluhRupiah seharusnya tetap tidak berubah, sehingga test diatas masuk akal.

Cara termudah dan cepat adalah dengan mereturn hasil perkalian dengan object baru bukan dengan mengubah data dalam object. Sehingga test kita berubah menjadi:

[Test]
public void Multiplication(){
	Rupiah sepuluhRupiah=new Rupiah(10);
	Rupiah hasil=sepuluhRupiah.Times(2);
	Assert.AreEqual(20,hasil.Amount);
	hasil=sepulihRupiah.Times(3);
	Assert.AreEqual(30,hasil.Amount);
	hasil=sepulihRupiah.Times(5);
	Assert.AreEqual(50,hasil.Amount);
}

Dengan cara ini sepuluhRupiah tidak akan berubah nilainya. Untuk itu implementasi method Times() harus kita ubah menjadi:

public class Rupiah{
	...
	public Rupiah Times(int multiplier){
		this.m_amount *=multiplier;
		return null;
	}
	...
}

Test kembali saya jalankan. Program dan test berhasil saya kompile, sayang test tidak berjalan. Ingat kesalahan seperti ini juga bagian dari progess. Jadi tetaplah tersenyum.

Untuk membuat test berjalan kita cukup mengubah sedikit method Times()

public class Rupiah{
	...
	public Rupiah Times(int multiplier){
		return new Rupiah(this.m_amount *multiplier);
	}
	...
}

yaitu cukup dengan mengubah return value dari yang tadinya null menjadi hasil perkalian yang langsung dimasukkan ke dalam konstruktor.

$5 + Rp 10=Rp 9.010 jika $1=Rp 9000

Rp 10 * 2 = Rp 20

Efek perkalian terhadap object?

Amount harus private?

Pembulatan uang?

Pada bagian pertama langkah yang kita lakukan adalah dengan membuat implementasi dengan banyak kesalahan lalu sedikit-demi sedikit kita perbaiki. Sementara disini kita berfikir apa implementasi yang benar, menuliskannya. Dan horee…implementasi kita benar. Lalu kita coret task dari todo-list.

Kent memperkenalkan dua teknik agar test segera bisa berjalan:

  1. Implementasi bohong-bohongan, beri kembalian berupa konstanta lalu sedikit demi sedikit ganti dengan variabel sampai kita mendapatkan code yang sesungguhnya.

  2. Implementasikan yang sudah jelas, tuliskan code sesungguhnya.

Pada prakteknya kita secara bergantian menggunakan kedua metode ini. Ketika kita menjumpai implementasi yang sudah jelas, kita langsung tuliskan code itu. Ketika kita mendapati hal sebaliknya kita kembali menggunakan metode pertama. Atau ketika tiba-tiba test kita tidak berjalan, kita kembali menggunakan metode pertama. Kemudian ketika rasa percaya diri meningkat kita kembali ke metode kedua.

Iklan

There are no comments on this post.

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s

%d blogger menyukai ini: