Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Ruby

Từ Zero Test đến TDD: Hướng dẫn thực hành Test-Driven Development

Bạn hào hứng với app vừa làm. Chỉ có một vấn đề – không có test. Bạn muốn viết dùng Test-Driven Development, nhưng không biết bắt đầu đâu. Vậy bị kẹt. Làm sao từ app không test, đến viết app bằng TDD?

Test code bạn đã có

Bạn có đống code không test. Nhưng không có nghĩa là không thể viết test bây giờ, cho code hiện có. Vậy hãy bắt đầu test code hiện có, để chắc chắn code chạy như bạn kỳ vọng.

Đây không phải TDD. Nhưng test code hiện có sẽ giúp bạn học TDD:

  • Luyện tập suy nghĩ edge case và error condition.

    Để viết test mà không mất năm năm test mọi input, bạn phải nghĩ nơi code dễ vỡ nhất. Method test nhận string, truyền symbol thì sao? Truyền nil thì sao? Test function chia số, phải test với 0. Nhưng không cần test cả 1 và 2.

    Sau khi viết đủ test, bạn bắt đầu dự đoán method nào dễ vỡ. Khi bắt đầu TDD, bạn dùng kỹ năng này viết test chắc chắn bắt code xử lý edge case tốt hơn.

  • Luyện tập viết test có cấu trúc tốt.

    Khi viết test sau fatto, bạn thử pattern cấu trúc test khác nhau. Code test đã có, nên bạn tập trung vào test, và cách viết nó. Khi nắm pattern tốt, bạn viết test tốt hơn khi không có code để dựa vào.

  • Khám phá điều khiến code khó test.

    Khi viết nhiều test, bạn bắt đầu cảm nhận khu vực nào trong hệ thống khó test nhất. Khi nhận ra, bạn highlight chúng như nơi cần refactor. Tốt hơn, bạn bắt đầu viết code dễ test từ lần đầu.

    Khi biết code dễ test trông như nào, bạn có thể TDD API dễ test với kiến thức đó. Giúp xây app nhanh hơn.

Dễ dàng vào TDD

Bạn có thể dùng test-after để xây kỹ năng giúp học TDD. Nhưng bạn vẫn muốn TDD từng phần app cuối cùng. Và có cách đơn giản để dễ dàng vào TDD, vẫn dựa vào code hiện có: viết regression test.

Regression test ngăn bạn vỡ code đã sửa. Ý tưởng đơn giản. Khi nghe về bug, thay vì click quanh trình duyệt để reproduce:

  • Viết test fail reproduce bug.
  • Chạy test, đảm bảo fail (vì bug còn đó).
  • Sửa bug cách đơn giản nhất.
  • Chạy test, đảm bảo pass.
  • Refactor fix, nếu cần.

Điều này dễ hơn TDD hệ thống mới từ con số 0, vì bạn chỉ test-drive thay đổi code đã có. Bạn xây thói quen "Red, Green, Refactor" – vòng lặp cốt lõi của TDD. Và từ đây, TDD chỉ cách một bước so với việc nhảy thẳng vào TDD từ zero test.

Từ không có đến TDD

App không test không phải nơi bắt đầu tệ. Khi test code hiện có, bạn học nhiều thứ cần thiết để viết test TDD tốt. Test-after dễ hơn TDD lúc đầu, vì không phải tưởng tượng API chưa biết design. Khi quyết định đưa TDD vào app, bạn dễ dàng vào bằng regression test.

Vậy, nếu không biết TDD hệ thống bạn đang tưởng tượng, hãy tiếp tục viết test. Dù phải viết code trước.