TDD или разработка, управлявана от тестове, е подходяща за разработка на софтуер,di mana sebelum mulai mengimplementasikan fitur/fungsionalitas pada sebuah software, programermembuat тестyang akan memvalidasi apa yang akan dilakukan oleh codeyang akan dibuat. Тестови случаиuntuk setiap fungsionalitas dibuat terlebih dahulu dan dijalankan. Jika suatu testgagal, maka programmer menuliskan codeagar testtersebut lewat.

Permasalahan pada Традиционно тестване

Традиционно тестванеyang saya maksud kali ini adalah pembuatan testsetelah suatu fitur diimplementasikan. Pendekatan ini memunculkan suatu permasalahan, yaitu разработчикdituntut untuk membuat testagar seluruh codeuntuk fitur yang dia buat ter-test secara keseluruhan.

Hal ini akan menjadi semakin parah apabila разработчикtersebut ternyata over engineeringketika mengerjakan fiturnya. Над инженерствотоадалата е показана за внедряване на кодyang terlalu berlebihan dibanding specifikasi awalnya. Alhasil testyang perlu dibuat igra на думи semakin banyak dan kompleks.

Permasalahan ini seharusnya dapat dihindari apabila TDD diterapkan. Тестyang dibuat disesuaikan dengan specifikasi програма, kemudian tugas разработчикadalah menuliskan cukup codehanya untuk melewati test терсебут. Dengan demikian, codeyang ditulis hanyalah codeyang diperlukan, tanpa keluar dari test scope.

TDD срещу традиционното тестване

Selain mengatasi permasalahan pada традиционно тестванеyang sudah dibahas sebelumnya, TDD juga memiliki beberapa keunggulan dibanding традиционно тестване:

  • Dengan традиционно тестване, jika sebuah test sukses, belum tentu codeyang sudah ditulis bebas dari defect atau грешкаkarena bisa jadi ada baris кодyang belum dites. Pada TDD, jika suatu testgagal, artinya kita membuat progress dan perlu membuat implementasi agar testtersebut berhasil.
  • TDD memastikan codeyang ditulis sesuai dengan requirement yang ada. Hal ini dikarenakan testpad TDD didasarkan pada pada requirement.
  • Pada TDD, fokus utamanya adalah bagaimana membuat производствен кодyang dapat memverifikasi testyang dibuat. Sebaliknya, pada традиционно тестване fokusnya menjadi bagaimana mendesain test yang baik dan dapat meng-cover seluruh codeyang sudah dibuat .
  • Jika TDD dilakukan dengan benar, maka akan selalu didapatkan 100% тестово покритие. Hal ini mungkin karena codeyang ditulis hanya untuk membuat suatu test berhasil.

Bagaimana прози от TDD?

TDD merupakan sebuah siklus yang terdiri dari 3 tahap, yaitu:

  1. Тест за пембуатан
  2. Penulisan implementasi codeagar test berhasil
  3. Рефакторинг

Tiga tahapan tersebut juga sering dikenal sebagai RED, GREEN, REFACTOR. Mari bahas lebih lanjut masing-masing tahapannya.

ЧЕРВЕН

Ketika specifkasi untuk suatu fitur sudah didapatkan, hal pertama kali yang perlu dilakukan adalah membuat sebuah unit testyang merepresentasikan fungsionalitas dari sebagian fitur tersebut. Contohnya, terdapat fitur untuk membuat sebuah navbar. Тестpertama yang bisa dibuat adalah mengecek apakah menu-menu pada pada navbarsudah tampil. Ketika test tersebut dijalankan, dapat dipastikan testtersebut akan failed.

ЗЕЛЕНО

Установете тест, който е изготвен в червено, така че можете да използвате внедряване на коди да направите тестот друга страна. Artinya, разработчикза използване на компонент navbaryang berisi menu-menu pada pada test. Apabila testdijalankan kembali, seharusnya test tersebut berhasil.

РЕФАКТОР

Pada tahap refactor, codeyang sudah dibuat dapat diperbaiki/di-improve,tetapi tetap lolos testyang sudah dibuat. Pada kasus navbarmisalnya, proses refactordapat berupa perbaikan styling pada komponen. Tentunya mengubah warna tulisan pada navbartidak akan mengubah status testyang sudah ada.

Setelah satu siklus tersebut selesai, kita dapat lanjut ke siklus baru. Contohnya dalam kasus navbardi atas, kita dapat menambahkan test baru yang akan menguji fungsionalitas dari navbar(contoh: ketika suatu menu diklik maka url harus pindah ). Настройте тест, но не можете да разширите GREEN и REFACTOR. Siklus TDD tersebut akan terus diulang hingga keseluruhan fitur pada pada изискванияdibuat.

Contoh penerapan TDD

Pada contoh kali ini, fitur yang akan dibuat adalah бутон за навигацияyang akan mengubah isi konten dari suatu halaman. Фитурът е препоръчан от други проекти React Native. Тестdibuat menggunakan react собствена библиотека за тестване. Proyek ini disimpan dalam sebuah gitlab repositorydan terdapat CI/CDyang akan menjalankan testuntuk setiap commit >.

*Тамбахан менгенаи commit, biasanya nama commitdisertai dengan tahapan TDD-nya, misalnya [RED] Add test for navigation button

Тахап ЧЕРВЕН

Pada tahap ini, dibuat testyang akan mengecek dua hal: halaman dapat di-renderdan tombol navigasi bekerja sesuai fungsinya (mengubah konten halaman).

Apabila testdijalankan seharusnya masih belum lolos.

Тахап ЗЕЛЕН

Pada tahap ini, dibuat codeimplementasi yang membuat testsebelumnya lolos. Съответният код се внедрява като следното:

*OnramperScreen,SendScreen,и ReceiveScreenкомпоненти са включени в съдържанието на страницата.

Apabila testdijalankan kembali, seharusnya sudah lolos.

Tahap REFACTOR

Di tahap ini, yang saya lakukan hanyalah mengubah code stylingatau gaya penulisan code, tanpa mengubah fungsionalitas dari codeyang sudah ada. Pada tahap ini, testharus tetap lolos.

Бонус: Jenis-jenis te pada pengembangan sebuah software

Dilihat dari skala dan alurnya, tes dapat disusun dengan urutan berikut единичен тест, интеграционен тест, функционален тест, тест от край до край, тест за приемане и тест за ефективност.

Единичен тест

Това е bertujuan за menguji pada ниво метод или клас yang dibuat в sebuah модул/услуга. Unit test dapat dilakukan dengan sangat cepat dan tidak memerlukan banyak biaya.

Интеграционен тест

Pada sebuah aplikasi tidak jarang memiliki beberapa services/modules sekaligus. Tes ini bertujuan untuk memastikan antar services/modules dapat berjalan dan berintegrasi sesuai dengan tujuannya.

Функционален тест

Jika kedua tes sebelumnya masih berfokus pada isi dari program itu sendiri, функционален тест berfokus pada pengujian fungsionalitas dari suatu aplikasi dalam segi bisnis, contohnya menguji untuk mendaftarkan akun.

Тест от край до край

End to end test menguji fungsionalitas dari aplikasi secara keseluruhan. Jenis tes ini berusaha untuk mereplika perilaku pengguna di dunia nyata dalam menggunakan aplikasi.

Тест за представяне

Jenis tes ini tidak berfokus pada fungsionalitas dari suatu aplikasi tetapi performa yang dihasilkannya. Sebagai contoh, bagaimana aplikasi tersebut menangani beban request yang tinggi.

Референси