Test-Driven Development có khó thực hiện?
Theo mô hình phát triển phần mềm hiện đại, để khắc phục tình trạng chương trình đã viết xong, nhưng khi chạy trên môi trường sản phẩm thì lỗi tùm lùm, hệ thống không thực sự ổn định, thì các master dev đã đưa ra mô hình TDD (Test-Driven Development) – hiểu nôm na là: viết test trước rồi viết code để ‘pass test’ sau. Người truyền cảm hứng để TDD phát triển và được ứng dụng rộng như ngày hôm nay có thể nhắc đến Kent Beck, với tư tưởng về mô hình thiết kế sản phẩm đơn giản.
Vậy TDD dùng làm gì? và viết nó như thế nào?
Thử nghiệm viết TDD (viết TestCase), bạn có thể dễ dàng thấy nó giống như một loại documentation cho các class, method trong dự án. Thông qua TestCase, những người khác có thể hiểu được tiến trình xử lý, chức năng đoạn mã của bạn cần hiện thực mà không phải vất vả đọc lại những đoạn mã khô khan và đôi khi chứa những giải thuật đọc mãi cũng đích ra.
Quy trình viết TDD:
1. Viết TestCase cho tính năng, hàm xử lý mà bạn chuẩn bị viết code. Nghĩ về Input và Output, tự biến mình thành thằng đần độn ^^. Xong. Chạy TestCase -> chắc chắn phải fail, chưa ra fail thì quay lại kiểm tra TestCase viết có đúng chính tả không, ra pass thì bạn quả là vãi…(chưa có code mà pass được case là sao?)
2. Viết code ở mức tối giản nhất để vừa đủ pass TestCase trên. Xong thì sang bước 3, TestCase mà vẫn fail thì ngắm nghĩa code, nếu nhận ra TestCase mình viết như thằng điên thì quay lại sửa TestCase. Sai thì sửa có gì đâu mà ngại :))
3. Lặp lại bước 1, 2 cho những Case mới cần hiện thực.
Nhìn qua quy trình thì có vẻ chúng ta phải chiến đấu như 1 cái máy. Oh, không hẳn vậy, nó như viết văn, thơ ấy mà. Vừa code vừa sáng tác, đời developer sẽ vui hơn rất nhiều mà không nhàm chán.
Ví dụ: cần viết 1 case về quy trình đăng nhập trên website
TestCase: [Login]
– “Anh đến địa chỉ nhà em” -> http://abc.xyz
– “Anh mở cửa nhưng hình như cửa khóa” -> redirect auto login.html
– “Nhìn kĩ anh thấy có tin nhắn em viết trên cửa với hàng chữ anhcuvaodi và ****** nhớ ENTER” -> input data và submit button login
– “Cửa mở và…” -> redirect home.html
(Tùy theo loại ngôn ngữ, framework mà bạn sử dụng để hiện thực cái TestCase trên nhé)
Trên đây chỉ là chút cảm hứng cá nhân mình khi áp dụng Test-Driven Development vào dự án ở công ty. Để hiểu rõ hơn và sâu hơn về cách triển khai TDD, mời bạn ghé thăm bác Gulờ. Goodbye! See You Again.
À quên kết luận: TDD dễ hay khó tùy thuộc vào chính bạn ^^