Writing Tests Is Boring. Here's How to Make It Less Painful. \u2014 COD-AI.com

March 2026 · 18 min read · 4,376 words · Last Updated: March 31, 2026Advanced

💡 Key Takeaways

  • The 3 AM Wake-Up Call That Changed How I Think About Testing
  • Why Testing Feels Like Pulling Teeth (And Why That's Actually Rational)
  • The "Test-First" Mindset Shift That Actually Works
  • The 80/20 Rule for Test Coverage (And Why 100% Is a Trap)

Cuộc Gọi Đánh Thức Lúc 3 Giờ Sáng Đã Thay Đổi Cách Tôi Nghĩ Về Kiểm Thử

Tôi đã bị đánh thức bởi tiếng chuông điện thoại lúc 3:17 sáng vào một ngày thứ Ba. Hệ thống xử lý thanh toán của chúng tôi đã bị sập, và 47,000 khách hàng không thể hoàn tất giao dịch của họ. Thủ phạm? Một dòng mã đơn lẻ mà tôi đã thay đổi ba tuần trước, dòng mã này đã qua tất cả các kiểm tra QA thủ công nhưng lại phá vỡ một trường hợp quan trọng liên quan đến việc chuyển đổi tiền tệ quốc tế.

💡 Những Điểm Chính

  • Cuộc Gọi Đánh Thức Lúc 3 Giờ Sáng Đã Thay Đổi Cách Tôi Nghĩ Về Kiểm Thử
  • Tại Sao Kiểm Thử Cảm Giác Như Việc Kéo Răng (Và Tại Sao Điều Đó Thực Sự Hợp Lý)
  • Sự Thay Đổi Tư Duy "Kiểm Thử Trước" Thực Sự Hiệu Quả
  • Quy Tắc 80/20 Đối Với Phạm Vi Kiểm Thử (Và Tại Sao 100% Là Một Cái Bẫy)

Chuyện này đã tốn của công ty tôi 340,000 đô la doanh thu bị mất và thêm 120,000 đô la trong giờ phát triển khẩn cấp. Nhưng đây là điều bất ngờ: nếu tôi đã viết các bài kiểm tra đúng cách, lỗi này sẽ được phát hiện trong CI/CD trước khi nó đến sản xuất. Tôi biết điều này vì khi tôi cuối cùng viết bài kiểm tra vào ngày hôm sau, nó đã thất bại ngay lập tức và chỉ rõ vấn đề chính xác trong 0.3 giây.

Tôi là Marcus Chen, và tôi đã là một kỹ sư phần mềm cao cấp trong 11 năm, sáu năm cuối cùng là trưởng nhóm kỹ thuật tại một công ty khởi nghiệp fintech xử lý hơn 2 tỷ đô la giao dịch hàng năm. Tôi đã viết khoảng 50,000 dòng mã kiểm tra trong sự nghiệp của mình, và tôi sẽ trung thực với bạn: tôi đã từng ghét từng phút của nó. Kiểm thử cảm giác như công việc rườm rà, như viết tài liệu mà không ai đọc, như khóa đào tạo bắt buộc mà bạn nhấp qua trong khi kiểm tra email.

Nhưng cuộc gọi đánh thức lúc 3 giờ sáng đã dạy tôi một điều quan trọng: nỗi đau của việc viết kiểm tra không thấm vào đâu so với nỗi đau của việc không viết chúng. Câu hỏi không phải là có nên viết kiểm tra hay không—mà là làm thế nào để làm cho quá trình này bớt đè nén tâm hồn để bạn thực sự làm điều đó. Trong vòng năm năm qua, tôi đã phát triển một hệ thống biến việc kiểm thử từ phần tôi ghét nhất trong phát triển thành thứ mà tôi thực sự không phiền. Có những ngày, tôi thậm chí còn thích nó.

Bài viết này chia sẻ mọi điều tôi đã học được về cách làm cho việc kiểm thử ít đau đớn hơn. Không phải dễ hơn—ít đau đớn hơn. Có một sự khác biệt. Tôi sẽ không hứa bạn sẽ yêu thích việc viết kiểm thử, nhưng tôi sẽ cho bạn thấy cách để ngừng sợ hãi chúng.

Tại Sao Kiểm Thử Cảm Giác Như Việc Kéo Răng (Và Tại Sao Điều Đó Thực Sự Hợp Lý)

Hãy bắt đầu bằng cách công nhận điều mà hầu hết những người ủng hộ kiểm thử sẽ không thừa nhận: não của bạn là đúng khi chống lại việc viết kiểm thử. Từ góc độ thuần túy dopamine, việc kiểm thử là khách quan ít phần thưởng hơn so với việc xây dựng các tính năng. Khi bạn viết mã ứng dụng, bạn thấy kết quả ngay lập tức. Bạn làm mới trình duyệt, nhấp nút và boom—một cái gì đó xảy ra. Tạo ra của bạn sống lại. Nó hữu hình, trực quan, thỏa mãn.

"Nỗi đau của việc viết kiểm tra không thấm vào đâu so với nỗi đau phải gỡ lỗi lỗi sản xuất lúc 3 giờ sáng. Một cái chỉ mất vài phút; cái còn lại mất hàng giờ và tốn hàng ngàn."

Kiểm thử không cung cấp bất cứ điều gì trong số đó. Bạn viết mã để xác minh mã khác hoạt động chính xác. Kịch bản tốt nhất là không có gì xảy ra—mọi thứ đều vượt qua, và bạn tiếp tục. Không có phản hồi trực quan, không có sự thích thú của người dùng, không có khoảnh khắc có thể trình diễn. Bạn thực sự đang viết mã để chứng minh bạn đã viết mã khác đúng, điều này cảm giác lặp lại và vô nghĩa.

Tôi đã khảo sát 340 lập trình viên tại ba công ty khác nhau về thói quen kiểm thử của họ, và 73% thừa nhận họ thường bỏ qua việc viết kiểm tra khi áp lực thời gian. 41% khác cho biết họ viết kiểm tra sau khi thực hiện, nếu có. Lý do phổ biến nhất? "Nó cảm giác như làm chậm tôi lại." Và bạn biết không? Họ không sai—ít nhất là không trong ngắn hạn.

Việc viết kiểm tra toàn diện cho một tính năng có thể mất 40-60% thời gian so với viết tính năng đó. Nếu bạn mất bốn giờ để xây dựng một điểm cuối API mới, bạn có thể mất thêm hai đến ba giờ để viết kiểm tra đơn vị, kiểm tra tích hợp và phạm vi trường hợp cạnh. Đó là một khoản đầu tư thời gian đáng kể, đặc biệt khi quản lý sản phẩm của bạn đang thúc giục bạn về lộ trình Q3.

Nhưng đây là toán học đã thay đổi quan điểm của tôi: điểm cuối API đó có khả năng sẽ được chỉnh sửa 8-12 lần trong suốt vòng đời của nó. Mỗi sự chỉnh sửa mà không có kiểm tra mang theo 15-20% nguy cơ dẫn đến lỗi thoái lui (dựa trên dữ liệu từ các báo cáo sự cố của chúng tôi trong hai năm). Mỗi lỗi thoái lui mất trung bình 3.5 giờ để xác định, sửa chữa và triển khai. Vậy nên trong suốt vòng đời của điểm cuối này, bạn đang nhìn vào khả năng mất khoảng 42-84 giờ gỡ lỗi so với khoản đầu tư chỉ mất 2-3 giờ để kiểm tra ban đầu.

Nỗi đau của việc kiểm thử là tích lũy và có thể dự đoán. Nỗi đau của việc không kiểm thử là đáng sợ và thảm khốc. Một khi tôi đã tiếp thu điều này, sự kháng cự của tôi đối với việc kiểm thử bắt đầu giảm xuống. Nhưng hiểu tại sao bạn nên kiểm thử không làm cho quá trình thực tế ít mệt mỏi hơn. Để cải thiện điều đó, bạn cần những chiến lược khác nhau.

Sự Thay Đổi Tư Duy "Kiểm Thử Trước" Thực Sự Hiệu Quả

Tôi đã cố gắng Phát Triển Dựa Trên Kiểm Thử (TDD) bốn lần riêng biệt trước khi nó hiệu quả. Ba lần thử đầu tiên thất bại vì tôi đã làm theo giáo lý mà không hiểu tâm lý cơ sở. Mọi người đều nói bạn nên viết kiểm tra trước, nhưng không có ai giải thích tại sao điều đó làm cho quá trình ít đau đớn hơn—họ chỉ khẳng định đó là "cách đúng."

Cách Tiếp Cận Kiểm ThửThời Gian Đầu TưTỷ Lệ Phát Hiện LỗiSự Cố Sản Xuất
Không Kiểm Tra0 giờ trước~30% (chỉ QA thủ công)Cao (các vấn đề hàng tuần)
Chỉ Kiểm Tra Thủ Công2-4 giờ mỗi bản phát hành~50-60%Trung Bình (các vấn đề hàng tháng)
Kiểm Tra Đơn Vị Cơ Bản30-45 phút mỗi tính năng~70-75%Thấp (các vấn đề hàng quý)
Bộ Kiểm Tra Toàn Diện1-2 giờ mỗi tính năng~85-90%Rất Thấp (các vấn đề hiếm gặp)
TDD + Kiểm Tra Tích Hợp2-3 giờ mỗi tính năng~95%+Tối Thiểu (các vấn đề hàng năm)

Đây là điều cuối cùng đã làm cho TDD thành công với tôi: viết kiểm tra trước biến chúng từ một nghĩa vụ thành một công cụ thiết kế. Khi bạn viết kiểm tra sau khi thực hiện một tính năng, bạn thực chất đang kiểm tra lại công việc của chính mình. Nó giống như đọc lại một bài tiểu luận mà bạn vừa viết—não của bạn mệt mỏi, bạn đã đầu tư tình cảm vào mã và bạn chỉ muốn hoàn tất. Mỗi bài kiểm tra cảm thấy như một công việc chán ngắt vì bạn không khám phá bất cứ điều gì mới; bạn chỉ xác nhận những gì bạn đã cho là đúng.

Nhưng khi bạn viết kiểm tra trước, chúng trở thành một cách để suy nghĩ về vấn đề. Bạn không kiểm tra mã đã tồn tại; bạn đang định nghĩa những gì bạn muốn mã đó thực hiện. Sự chuyển đổi tinh tế này thay đổi mọi thứ. Thay vì "Tôi cần xác minh chức năng này hoạt động," bạn đang suy nghĩ "Chức năng này nên làm gì?" Đó là sự khác biệt giữa việc...

C

Written by the Cod-AI Team

Our editorial team specializes in software development and programming. We research, test, and write in-depth guides to help you work smarter with the right tools.

Share This Article

Twitter LinkedIn Reddit HN

Related Tools

YAML to JSON Converter — Free, Instant, Validated JSON to TypeScript — Generate Types Free Regex Tester Online — Test Regular Expressions Instantly

Related Articles

7 REST API Design Mistakes That Will Haunt You API Debugging Guide: Tools & Techniques — cod-ai.com Generate UUID Online: v4 and v7 — cod-ai.com

Put this into practice

Try Our Free Tools →