Book, Design Pattern, TDD

Book Review: xUnit Test Patterns: Refactoring Test Code: Gerard Meszaros

Khi đối diện với những điều không (chưa) biết, kẻ bi quan sẽ tỏ ra lo sợ và trốn chạy, người lạc quan thì không như vậy, họ luôn biết cách đối mặt với nó.

Vào những năm cuối thập niên 90, khi phong trào eXtreme Programming mới bắt đầu được khai nén, đã có những nhóm, những nhà tiên phong đi đầu trong việc áp dụng các kỹ thuật của nó như pair programming, collective ownership và test driven development. Tuy nhiên, họ đã gặp phải rất nhiều vấn đề trong đó, ví dụ như là làm thế nào để apply TDD, viết và quản lý test code cho real-world project. Khi production code lẫn test code bắt đầu phình ra cũng là lúc họ nhận ra rằng ngày càng tốn nhiều effort chỉ để làm những công việc lặp đi lặp lại. Đã có lúc, đến 90% effort bỏ ra chỉ cho việc maintenance những unit test cases đã có chỉ để đáp ứng một thay đổi cực kỳ minor. Một con số thật sự làm nản lòng và gây hoang mang dù là những người lạc quan nhất. Và họ biết, họ cần phải làm gì đó để thay đổi điều đó.

3394674118_28fd307467

TDD, kẻ thì khen, người thì chê. Kẻ khen thì trầm trồ về sự ưu việt của nó, kẻ chê thì nói TDD thực sự chỉ là 1 thứ rối rắm, tốn nhiều công lắm của mà không thực sự giải quyết được bài toán mà họ gặp phải. Nhưng có mấy kẻ hiểu được làm TDD như thế nào cho effective. Khi đối diện với một dự án phức tạp, vấn đề gây đau đầu nhất trong mỗi lần thay đổi source code chính là degradation, làm sao để analyze và thực hiện regression test để bảo đảm code change là “vô hại” đến những phần khác. Những lúc như vậy, ai cũng mong có một bộ automated test để phòng thân, nhưng cái giá của nó không phải là free, hoặc có thể là vô giá.

Prorgramming is hard, hay nói cách khác, tạo ra những đoạn code trong sáng, dễ maintain và extend là không dễ. Trừ khi ta nắm được các bí quyết để làm chuyện đó. Bằng cách nhận biết đâu là những đoạn code tệ (code smell), hay mở rộng ra là project smell, architecture smell, environment smell, ta sẽ biết cách để sửa chữa chúng. Refactoring những chỗ không tốt thành tốt hơn đòi hỏi những kỹ thuật cao hơn như nắm vững các coding, design principle, patterns. Khi đó, code sẽ trở nên sáng sủa và vững vàng hơn nhiều, programming is now easy and much more exciting, like a joy!! ^^

Testing is extremely hard, vì trường học không (kịp) dạy ta các kỹ năng về kiểm thử. Programmer thích lập trình, sợ bugs, ghét tester… nên đâm ra ghét testing. Đặc biệt không có anh nào code dở mà có thể test (unit, at least) giỏi, mấy người như vậy qua làm tester hết rồi. Còn lại những anh code dở và test cũng dở, và những anh code vốn giỏi mà test dở. (Chỗ này hại não =)) Với những anh code giỏi thì khả năng để improve kỹ thuật testing là tương đối dễ dàng, những anh khác, vui lòng quay lên phần “Programming is hard”.

Để make (Unit) Testing more fun and do-able, việc đầu tiên chính là phải code giỏi cái đã. “Code that hard to test is the bad code”. Vậy làm sao để nhận diện đâu là code tệ? Đa phần đã nghe đến code smell, vậy còn test smell. Sử dụng test smell để nhận diện các vấn đề gây khó khăn cho việc viết test là bước đầu tiên. Test smell có thể bao hàm rất nhiều thứ kể cả code smell. Bên cạnh đó, cũng giống như programming, testing cũng có principle và pattern của nó. Nói chung, mọi thứ đều có nguyên tắc, tuân thủ theo luật lệ sẽ cho ra các sản phẩm unit-test chất lượng.

Nếu ai đủ kiên nhẫn đọc đến đây thì sẽ thắc mắc, viết dông dài vậy làm gì. Ah, tất nhiên là mình giới thiệu sách rồi (thực ra là khoe cuốn sách mới mua, mới đọc được có cái (hard)cover và cái preface đã bay lên chém gió như thần).

Tên cuốn sách
xUnit Test Patterns: Refactoring Test Code: Gerard Meszaros

Mục đích cuốn sách:
– Giải tỏa nỗi sợ về (automated) (unit) testing. Là nguồn cảm hứng và chỗ dựa (kỹ thuật) vô cùng bổ ích cho những ai đã, đang và sẽ có dự định improve productivity throuhg testing. Cuốn sách đề cập đến các kỹ thuật develop automated unit test case, các test smell để giúp programmer tránh các lỗi thường gặp lúc viết production code và test code + các cách refactoring chúng. Test principle là kim chỉ nam cho việc viết test, test design patterns là các practices áp dụng cho từng trường hợp cụ thể.
– Nếu xem GoF là kinh thánh cho dân Production Code thì xUnit Test Patterns này là dành cho Test Code.

For fun:
– (Khoe) Sách gốc hardcover $79.99. Dày 900 trang, nặng gãy tay :)))
– Người review trên tinh thần chém gió là chính chứ mới đọc được cái cover thôi =))
– Chỉ có cuốn sách trong hình là thật
– Link ebook cho dân không đủ điều kiện: google nhé 😉

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s